diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 60cd8da5..00000000 --- a/.eslintrc.js +++ /dev/null @@ -1,24 +0,0 @@ -module.exports = { - env: { - browser: true, - es2021: true, - }, - extends: "eslint:recommended", - overrides: [ - { - env: { - node: true, - }, - files: [".eslintrc.{js,cjs,html}"], - parserOptions: { - sourceType: "script", - }, - }, - ], - parserOptions: { - ecmaVersion: "latest", - }, - rules: { - "no-inner-declarations": "off", - }, -}; diff --git a/.gitignore b/.gitignore index 402e57d6..ba2c0383 100644 --- a/.gitignore +++ b/.gitignore @@ -1,121 +1,30 @@ +# Logs +logs *.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + node_modules -*/web-ext-artifacts/ +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# custom +.translation/* +.eslintcache .env -# Created by https://www.toptal.com/developers/gitignore/api/webstorm -# Edit at https://www.toptal.com/developers/gitignore?templates=webstorm - -### WebStorm ### -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider -# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 - -# User-specific stuff -.idea/**/workspace.xml -.idea/**/tasks.xml -.idea/**/usage.statistics.xml -.idea/**/dictionaries -.idea/**/shelf - -# AWS User-specific -.idea/**/aws.xml - -# Generated files -.idea/**/contentModel.xml - -# Sensitive or high-churn files -.idea/**/dataSources/ -.idea/**/dataSources.ids -.idea/**/dataSources.local.xml -.idea/**/sqlDataSources.xml -.idea/**/dynamic.xml -.idea/**/uiDesigner.xml -.idea/**/dbnavigator.xml - -# Gradle -.idea/**/gradle.xml -.idea/**/libraries - -# Gradle and Maven with auto-import -# When using Gradle or Maven with auto-import, you should exclude module files, -# since they will be recreated, and may cause churn. Uncomment if using -# auto-import. -# .idea/artifacts -# .idea/compiler.xml -# .idea/jarRepositories.xml -# .idea/modules.xml -# .idea/*.iml -# .idea/modules -# *.iml -# *.ipr - -# CMake -cmake-build-*/ - -# Mongo Explorer plugin -.idea/**/mongoSettings.xml - -# File-based project format -*.iws - -# IntelliJ -out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Cursive Clojure plugin -.idea/replstate.xml - -# SonarLint plugin -.idea/sonarlint/ - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -fabric.properties - -# Editor-based Rest Client -.idea/httpRequests - -# Android studio 3.1+ serialized cache file -.idea/caches/build_file_checksums.ser - -### WebStorm Patch ### -# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 - -# *.iml -# modules.xml -# .idea/misc.xml -# *.ipr - -# Sonarlint plugin -# https://plugins.jetbrains.com/plugin/7973-sonarlint -.idea/**/sonarlint/ - -# SonarQube Plugin -# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin -.idea/**/sonarIssues.xml - -# Markdown Navigator plugin -# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced -.idea/**/markdown-navigator.xml -.idea/**/markdown-navigator-enh.xml -.idea/**/markdown-navigator/ - -# Cache file creation bug -# See https://youtrack.jetbrains.com/issue/JBR-2257 -.idea/$CACHE_FILE$ - -# CodeStream plugin -# https://plugins.jetbrains.com/plugin/12206-codestream -.idea/codestream.xml - -# Azure Toolkit for IntelliJ plugin -# https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij -.idea/**/azureSettings.xml - -# End of https://www.toptal.com/developers/gitignore/api/webstorm \ No newline at end of file +test/* \ No newline at end of file diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index e4635395..00000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "Chrome-extension-review-fetcher"] - path = Chrome-extension-review-fetcher - url = https://github.com/Dreamlinerm/Chrome-extension-review-fetcher diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index b58b603f..00000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ diff --git a/.idea/Netflix-Prime-Auto-Skip.iml b/.idea/Netflix-Prime-Auto-Skip.iml deleted file mode 100644 index 24643cc3..00000000 --- a/.idea/Netflix-Prime-Auto-Skip.iml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml deleted file mode 100644 index 3a0fa15b..00000000 --- a/.idea/codeStyles/Project.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml deleted file mode 100644 index 79ee123c..00000000 --- a/.idea/codeStyles/codeStyleConfig.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100644 index 03d9549e..00000000 --- a/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 86d1d40c..00000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1ddf..00000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.npmrc b/.npmrc new file mode 100644 index 00000000..cf040424 --- /dev/null +++ b/.npmrc @@ -0,0 +1,2 @@ +shamefully-hoist=true +strict-peer-dependencies=false diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..224b5fd2 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,5 @@ +auto-imports.d.ts +components.d.ts +pnpm-lock.yaml +yarn.lock +node_modules/ diff --git a/.prettierrc b/.prettierrc index 6bf4e757..855882ff 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,5 +1,10 @@ { - "tabWidth": 2, - "printWidth": 150, - "useTabs": false + "htmlWhitespaceSensitivity": "ignore", + "quoteProps": "as-needed", + "semi": false, + "singleAttributePerLine": true, + "tabWidth": 2, + "trailingComma": "all", + "useTabs": true, + "printWidth": 120 } diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 00000000..d682cd49 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": [] +} diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 16de83d1..00000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - // Verwendet IntelliSense zum Ermitteln möglicher Attribute. - // Zeigen Sie auf vorhandene Attribute, um die zugehörigen Beschreibungen anzuzeigen. - // Weitere Informationen finden Sie unter https://go.microsoft.com/fwlink/?linkid=830387 - - "version": "0.2.0", - "configurations": [ - { - "type": "firefox", - "request": "launch", - "reAttach": true, - "name": "skipper.js", - "file": "${workspaceFolder}/firefox/skipper.js" - }, - { - - "type": "firefox", - "request": "launch", - "reAttach": true, - "name": "settings.html", - "file": "${workspaceFolder}/firefox/popup/settings.html" - } - ] - -} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index abadf9bb..00000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "cSpell.words": [ - "adtimeindicator", - "andor", - "atvwebplayersdk", - "auml", - "Blcy", - "boxart", - "crunchyroll", - "datetime", - "disney", - "disneyplus", - "ekwadg", - "elementkey", - "FDJH", - "fgbpje", - "fhxjtbc", - "fiqc", - "firefox", - "fkpovp", - "flatrate", - "fqye", - "freevee", - "Freevee", - "Glfcm", - "Gobackbutton", - "grimm", - "Gytde", - "homepremiere", - "hotstar", - "Hotstar", - "hspre", - "hulu", - "Ijoxf", - "infobar", - "itemprop", - "justwatch", - "Mehr", - "merch", - "minheight", - "misclicks", - "Mjgx", - "mmvz", - "mozilla", - "netflix", - "nextupcard", - "nextupcardhide", - "Nzdh", - "OCIs", - "preplay", - "primeskip", - "primevideo", - "sidenav", - "simulcastcalendar", - "skipelement", - "speedslider", - "speedsliders", - "Speedsliders", - "subkey", - "suwnu", - "svnh", - "testid", - "themoviedb", - "tmdb", - "uteees", - "videospeed", - "WURL", - "xrlb", - "ydgy" - ], - "editor.stickyScroll.enabled": true, - "task.allowAutomaticTasks": "on", - "[python]": { - "editor.defaultFormatter": "ms-python.black-formatter" - }, - "python.formatting.provider": "none", - "workbench.editor.wrapTabs": true, - "svg.preview.background": "dark-transparent" -} diff --git a/.vscode/tasks.json b/.vscode/tasks.json deleted file mode 100644 index 4ff38807..00000000 --- a/.vscode/tasks.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "label": "Launch firefox addon", // Name of task - "type": "shell", - "command": "npm start", // Enter your command here - "group": "none", - "presentation": { - "reveal": "always", - "panel": "new" - }, - "runOptions": { - "runOn": "folderOpen" - } - } - ] -} diff --git a/AuthorHours.json b/AuthorHours.json deleted file mode 100644 index e2b0746f..00000000 --- a/AuthorHours.json +++ /dev/null @@ -1 +0,0 @@ -{"time":"514h55m0s"} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..d8c49136 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,652 @@ +# Changelog + +## 1.1.55 + +- Fixed Crunchyroll big picture, auto pick profile, because of change website +- Fixed Disney auto play on fullscreen +- Mayor Migration to VUE3 instead of native js, verified all functions working on pc. + +## 1.1.54 + +- Added release year optionally. + +## 1.1.53 + +- Prime wont load Ratings for Live tv +- Prime fixed TMDB title card on chrome. +- TMDB ratings added media_type to query, like movie e.g., because shows with same name but different type + +## 1.1.52 + +- Disney improved ad skip +- Disney fixed Bug first ad is not skipped +- TMDB refresh new movie ratings every day +- Netflix wrong TMDB ratings for movies with dash + +## 1.1.51 + +- implemented GarbageCollection for DBcache, which deletes ratings older than 30 days + +## 1.1.48 + +- Removed section Extras from TMDB ratings on Disney+ + +## 1.1.47 + +- TMDB show low votes ratings in grey +- Improved TMDB correct lang +- Fixed, Disney TMDB rating postions and more accurate title extraction +- Better prime TMDB title extraction +- Removed Search, Suggested Page from Ratings + +## 1.1.46 + +- Linked TMDB website when click on rating + +## 1.1.45 + +- Fix Disney bug: Remove "Continue watching after ad" text when ad is not running. + +## 1.1.44 + +- On Amazon.com fixed: Speedslider not showing up on dv-player-fullscreen +- On Amazon.com fixed: Not skipping ads longer than 150 seconds + +## 1.1.43 + +- Netflix Toolbar gets higher bug fixed + +## 1.1.42 + +- BUG: Popup not working on edge and chrome + +## 1.1.41 + +- Block Disney Ads + +## 1.1.40 + +- Netflix pause ad not getting removed when no video on screen +- Change the volume if you scroll on the volume icon + +## 1.1.39 + +- fixed Netflix Ads + +## 1.1.38 + +- Better mobile Popup layout +- Ratings: do not include ratings with vote count lower than 80 +- Crunchyroll: Do not filter premiers not in queue on calendar +- Crunchyroll: Filter Japanese Audio in Dub also on calendar +- Amazon: Remove background hue on pause again + +## 1.1.37 + +- Removed subtitle styling, since unnecessary + +## 1.1.36 + +- Added double Click to hotstar +- Disney fix: Watch Credits + +## 1.1.35 +## Added Translations for: + +- French +- Spanish +- Portuguese +- Italian +- Japanese +- Polish +- Swedish +- Chinese +- Korean +- Turkish + +## 1.1.34 + +- Amazon close Fullscreen on original close buttons + +## 1.1.33 + +- Separated the Speedslider from the subtitle setting on user request. +- Fixed Amazon double click to Fullscreen. + +## 1.1.32 + +- Added Crunchyroll big video player mod. +- Disable the numpad on Crunchyroll. +- Added maximize on doubleclick +- Popup UI changed + +## 1.1.29 + +- Fixed Prime filter paid movies. +- Fixed Prime Continue Watching position. + +## 1.1.28 + +- Fixed hotstar crash/skip intro bug. + +## 1.1.27 + +- Amazon changed video position and broke hole extension on prime video. + +## 1.1.26 + +- Fixed ratings error + +## 1.1.25 + +- Better ratings title recognition and more card types on Disney, Netflix, Prime Video + +## 1.1.24 + +- Better ratings title recognition and more card types on Disney, Netflix, Prime Video + +## 1.1.23 + +- Added Disney Self ad skip +- Added button translations + +## 1.1.22 + +- Fixed settings error + +## 1.1.18-19 + +- Profile Pick not working the same in deployed version + +## 1.1.17 + +- Forgot to add Crunchyroll Profile Auto pick to settings + +## 1.1.16 + +- Added Crunchyroll Profile Auto pick +- fixed Settings bug +- improved DBCache storage access + +## 1.1.15 + +- Added three color Scale to ratings. + +## 1.1.13 + +- HBO fixed watch credits on HBO movies. + +## 1.1.12 + +- Removes Netflix pause ads + +## 1.1.11 + +- Fixed Disney TMDB rating +- Filter duplicates removed, since now unnecessary on Disney + +## 1.1.10 + +- Fixed Prime video skip intro loop bug +- Fixed Prime video watch intro button + +## 1.1.9 + +- Disney new zealand skip credits bug + +## 1.1.8 + +- Fix hotstar skip Credits bug + +## 1.1.7 + +- Crunchyroll ReleaseCalendar if no show yet fixed + +## 1.1.6 + +- Crunchyroll: now put release schedule in current weeks release calendar(queued no dub only) + +## 1.1.4 + +- PT_BR better Translation +- Changed donation link + +## 1.1.3 + +- Added HBO max streaming service +- TBMD ratings show N/A if no rating available and ? if not found. And if you inspect the ratings label you can see the found movie title +- minor function improvements + +## 1.1.2 + +- Filter duplicate shows on disney (optional) +- fixed Crunchyroll dub bug +- fixed Extension context invalidated error. +- code optimization (closest function) + +## 1.1.1 + +- added optional tabs permission because of misleading permission text on chrome + +## 1.1.0 + +- Fixed default page on install + +## 1.0.99 + +- Fixed Intro skipped to fast on Crunchyroll, if the audio is dubbed + +## 1.0.98 + +- Improved Popup UI +- Improved Shared Settings on Extended Settings + +## 1.0.97 + +- Fixed Continue postion on amazon prime +- Changed Speed indicator position + +## 1.0.96 + +- Fixed new Amazon Ad-indicator + +## 1.0.95 + +- Fixed Netflix ad skip, since adTime css class changed + +## 1.0.94 + +- Forgot to add starplus permission + +## 1.0.93 + +- Remove Xray over amazon prime videos +- Fix bug zoom in on settings on about:addons +- Prime video hover now transparent + +## 1.0.92 + +- Disney go to home button bug on Chrome + +## 1.0.91 + +- Added Disney go to Home button +- Disney changed skip Credits button. Issue fixed +- Starplus mobile site now working + +## 1.0.90 + +- Fix Disney video player redesign, video functions wont work + +## 1.0.89 + +- Added disney Starplus compatibility + +## 1.0.88 + +- Fixed bug in navigation buttons in extended settings +- Fixed html in settings + +## 1.0.87 + +- Improved Settings style +- Fixed settings bug with scrollbar + +## 1.0.86 + +- Disney when going to next episode remain in full screen +- Fix bug Amazon Continue Watching position + +## 1.0.85 + +- Disney original intro skipped + +## 1.0.83 + +- Better TMDB accuracy +- Prime Video Ad UI change: Skip ad fixed + +## 1.0.82 + +- Prime Video Ad UI change: Skip ad fixed + +## 1.0.81 + +- Fixed paused AD on Netflix +- Open current Weekday on Cr Release Calendar + +## 1.0.80 + +- Added TMDB ratings to Prime Video +- Better title filter for TMDB +- On extension update no more Error Context invalidated errors + +## 1.0.79 + +- Fixed Prime Video Credits skip will crash page + +## 1.0.78 + +- Mute Netflix Ad skip +- Add Feature to Prime: move continue watching to the top + +## 1.0.77 + +- Automatically use desktop mode on firefox/chrome mobile +- Various mobile improvements + +## 1.0.74 + +- Released for Firefox on Android + +## 1.0.73 + +- Fixed umlauts for Netflix auto profile pick + +## 1.0.72 + +- Added epilepsy option +- fixed disney intro/recap bug + +## 1.0.70 + +- added Crunchyroll Gobackbutton from Intro +- fix Crunchyroll Release calendar BUG when switch off function +- less API calls to TMDB only refresh unknown daily +- better remove old settings + +## 1.0.69 + +- Improved subtitles of Amazon and Disney + +## 1.0.67 + +- added Crunchyroll startPlayOnFullScreen +- fixed bug Crunchyroll ReleaseCalendar removedDub on load +- Changed 1x to 1.0x on Sliders +- Some language changes on pt_br + +## 1.0.66 + +- added Streaming Service Crunchyroll +- fixed Netflix SpeedSlider was conflicting with netflix ad Skip +- added Portuguese (BR) as a Language +- simplified Code substantially(min. 600 LOC less) + +## 1.0.65 + +- fixed Netflix SpeedSlider was conflicting with netflix ad Skip +- added Portuguese (BR) as a Language +- simplified Code substantially(600 LOC less) + +## 1.0.64 + +- added TMDB to Hotstar + +## 1.0.63 + +- less TMDB calls on disney: bugfix for each works different on chrome + +## 1.0.62 + +- fixed Netflix ad skip: skips too far +- added IMDB rating to Disney +- replaced justWatch APi to themoviedb API since justWatch api no longer working +- removed addStreamingLinks since justWatch api no longer working + +## 1.0.59 + +- Added IMDB rating on Amazon Prime and Netflix + +## 1.0.56,57 + +- Improved Freevee Ad skip + +## 1.0.56 + +- Improved shared settings +- Made Watch Credits inverse of Skip Credits +- Fixed UI + +## 1.0.55 + +- added Always Watch Credits feature +- fixed Shared Features Switches + +## 1.0.53 + +- Fixed chrome pop-up wrong width + +## 1.0.52 + +- Fixed Amazon Prime skip Credits + +## 1.0.51 + +- Fixed Netflix Ad skip due to changed css classes of Netflix + +## 1.0.50 + +- Fixed amazon speedslider due to changed layout of amazon +- Fixed Amazon Freevee ad skip bug if ad length divisible by 20 + +## 1.0.49 + +- Added Speedslider min,max,step options +- Added Language: Macedonian +- Edge: Netflix Ad bug fixed +- Hotstar: Skip Ad,Recap,Credits fixed + +## 1.0.48 + +- Changed name to Streaming enhanced +- Added German Locale +- Refreshed descriptions + +## 1.0.47 + +- Added Disney Plus Hotstar +- Fixed Netflix and Disney Speedsliders + +## 1.0.46 + +- Added Disney Plus +- Changed speed slider design on Amazon +- Changed skip Recap definition since it is also skipped on amazon and disney +- Added Netflix SpeedSlider + +## 1.0.45 + +- Added Addon Install Page +- Changed some UI + +## 1.0.44 + +- Improved Freevee Ad skip by stopping 0.1s before ad is over instead of 1s + +## 1.0.43 + +- Changed speed slider to 2X max + +## 1.0.42 + +- Added Icons to Settings and changed Design +- Added Statistics description + +## 1.0.41 + +- Added back Individual options for shared options on the Settings page + +## 1.0.40 + +- displayed shared skip ads incorrectly + +## 1.0.38 + +- Confirm reset addon +- Added title to Settings page +- Changed button designs + +## 1.0.37 + +- Fixed Chrome scroll bug in settings +- Fixed floating settings button bug in popup + +## 1.0.36 + +- Now starts playing the video automatically if Fullscreen is opened +- Combined shared Settings from Amazon prime and Netflix +- Mayor settings layout overhaul + +## 1.0.35 + +- Faster automatic profile pick on Netflix +- Bugfix: did not filter paid films on Category pages on Amazon +- Won't filter paid films in shop, since it doesn't make sense there (Amazon) + +## 1.0.34 + +- does not open settings on update anymore + +## 1.0.33 + +- Fixed infinite loading issue with higher delay of 150 ms + +## 1.0.32 + +- Fixed blank page bug on amazon prime with remove paid content feature +- Show netflix profile picture in settings since name may be similar + +## 1.0.31 + +- fixed auto click on profile on the profile manage page + +## 1.0.30 + +- Automatically choosing last used Netflix Profile +- Fixed arrow direction on settings page +- Fixed various console errors + +## 1.0.29 + +- proper Netflix Ad skip + +## 1.0.28 + +- Fast Forwarding Ads on Netflix by 2X +- automatic opening of the settings when the extension is updated/installed + +## 1.0.27 + +- fixed Amazon enable/disable all button (speed slider and filter paid content were forgotten) + +## 1.0.26 + +- filter Paid Content on Amazon, like Films and series + +## 1.0.25 + +- changed the Amazon credit auto skip: It will now only skip if it is the same season in the same series. +- changed Freevee Ad skip: Changed it to Interval, which fixes these bugs: +- parts of the actual video were also skipped +- sometimes Freevee ad was not skipped + +## 1.0.24 + +- fixed issue of infinite loading on Freevee ad skip if it is longer than 90s + +## 1.0.22 + +- fixed opened setting popups bug +- fixed vw warning on slider +- fixed warning if slider cannot be removed + +## 1.0.21 + +- remove annoying background hue from amazon when mouse over on video + +## 1.0.20 + +- added button to hide speed slider + +## 1.0.19 + +- added a video speed slider to amazon prime video + +## 1.0.18 + +- fixed bug not skipping ad between episodes + +## 1.0.17 + +- fixed bug of forwarding into an ad won't skip it anymore + +## 1.0.16 + +- implemented a go back button for Amazon, if the user wants to watch the intro +- fixed the infinite loading on freevee on first launch of a film + +## 1.0.15 + +- fixed: self ad skips disabling subtitles +- fixed: self ad skips infinite loading on initial watching of series + +## 1.0.14 + +- Fixed: not showing subtitles when self ad skipped + +## 1.0.12 + +- Bugfix: if Amazon self ad is skipped, subtitles disappear +- improved performance since function gets returned if found button. + +## 1.0.11 + +- fixed bug when badge is not reset properly when pressing reset button + +## 1.0.10 + +- added Segments skipped statistic +- added Add-on Badges that show on the icon when something is skipped. +- fixed bug where the statistics are overridden if you have multiple instances of the add-on running +- improved self ad skipping logic +- removed unnecessary URL permission which use primevideo.com + +## 1.0.9 + +- improved Amazon Intro skipping +- Added Addon Statistics: Ad , Intro, Recap time skipped +- added Importing and Exporting of Settings in the Settings page + +## 1.0.8 + +- the Individual settings are now opened automatically in the settings page +- bug fixed: if there is an version update with a new setting, it wont show that the new setting is activated, although it is. +- removed unnecessary , function () {} and {settings:settings} + +## 1.0.7 + +- improved addon Settings page to include disable all amazon/netflix button and dropdown to decrease menu size +- fixed bug: freevee ad skipping may crash the site on first opening, now doesn't skip too often + +## 1.0.6 + +- Added Amazon Freevee ad skipping +- better mutation observing => less computation + +## 1.0.5 + +- synchronize the settings across accounts +- bug fixed where ad is skipped when the infobar is not shown yet(misclicks) + +## 1.0.4 + +- Updated the check if it is a video on Amazon to check the title and the url +- Updated the skip Recap to also check for skip-preplay, which is a different button +- removed error in console.logs + +## 1.0.0 + +- Initial Release + + \ No newline at end of file diff --git a/NetflixPrime@Autoskip.io.xpi b/NetflixPrime@Autoskip.io.xpi deleted file mode 100644 index 60036483..00000000 Binary files a/NetflixPrime@Autoskip.io.xpi and /dev/null differ diff --git a/Publish/.gitignore b/Publish/.gitignore deleted file mode 100644 index 94a2dd14..00000000 --- a/Publish/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.json \ No newline at end of file diff --git a/Publish/Chrome Links/Chrome de.lnk b/Publish/Chrome Links/Chrome de.lnk deleted file mode 100644 index bfd4f8c7..00000000 Binary files a/Publish/Chrome Links/Chrome de.lnk and /dev/null differ diff --git a/Publish/Chrome Links/Chrome en.lnk b/Publish/Chrome Links/Chrome en.lnk deleted file mode 100644 index b9f2fe0b..00000000 Binary files a/Publish/Chrome Links/Chrome en.lnk and /dev/null differ diff --git a/Publish/Chrome Links/Chrome es.lnk b/Publish/Chrome Links/Chrome es.lnk deleted file mode 100644 index c1a85c7b..00000000 Binary files a/Publish/Chrome Links/Chrome es.lnk and /dev/null differ diff --git a/Publish/Chrome Links/Chrome fr.lnk b/Publish/Chrome Links/Chrome fr.lnk deleted file mode 100644 index 288d88c8..00000000 Binary files a/Publish/Chrome Links/Chrome fr.lnk and /dev/null differ diff --git a/Publish/Chrome Links/Chrome it.lnk b/Publish/Chrome Links/Chrome it.lnk deleted file mode 100644 index c3b5e7f2..00000000 Binary files a/Publish/Chrome Links/Chrome it.lnk and /dev/null differ diff --git a/Publish/Chrome Links/Chrome ja.lnk b/Publish/Chrome Links/Chrome ja.lnk deleted file mode 100644 index f950a722..00000000 Binary files a/Publish/Chrome Links/Chrome ja.lnk and /dev/null differ diff --git a/Publish/Chrome Links/Chrome ko.lnk b/Publish/Chrome Links/Chrome ko.lnk deleted file mode 100644 index 72d3e9e5..00000000 Binary files a/Publish/Chrome Links/Chrome ko.lnk and /dev/null differ diff --git a/Publish/Chrome Links/Chrome mk.lnk b/Publish/Chrome Links/Chrome mk.lnk deleted file mode 100644 index a32cbf81..00000000 Binary files a/Publish/Chrome Links/Chrome mk.lnk and /dev/null differ diff --git a/Publish/Chrome Links/Chrome pl.lnk b/Publish/Chrome Links/Chrome pl.lnk deleted file mode 100644 index 0059b2b1..00000000 Binary files a/Publish/Chrome Links/Chrome pl.lnk and /dev/null differ diff --git a/Publish/Chrome Links/Chrome pt.lnk b/Publish/Chrome Links/Chrome pt.lnk deleted file mode 100644 index 450f6d98..00000000 Binary files a/Publish/Chrome Links/Chrome pt.lnk and /dev/null differ diff --git a/Publish/Chrome Links/Chrome pt_BR.lnk b/Publish/Chrome Links/Chrome pt_BR.lnk deleted file mode 100644 index b1c98bc4..00000000 Binary files a/Publish/Chrome Links/Chrome pt_BR.lnk and /dev/null differ diff --git a/Publish/Chrome Links/Chrome sv.lnk b/Publish/Chrome Links/Chrome sv.lnk deleted file mode 100644 index 777a9c6c..00000000 Binary files a/Publish/Chrome Links/Chrome sv.lnk and /dev/null differ diff --git a/Publish/Chrome Links/Chrome tr.lnk b/Publish/Chrome Links/Chrome tr.lnk deleted file mode 100644 index c990570c..00000000 Binary files a/Publish/Chrome Links/Chrome tr.lnk and /dev/null differ diff --git a/Publish/Chrome Links/Chrome zh.lnk b/Publish/Chrome Links/Chrome zh.lnk deleted file mode 100644 index 81cff170..00000000 Binary files a/Publish/Chrome Links/Chrome zh.lnk and /dev/null differ diff --git a/README.md b/README.md index c4d8687e..24bbc6aa 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@
- + # Streaming enhanced ![Project Version](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fraw.githubusercontent.com%2FDreamlinerm%2FNetflix-Prime-Auto-Skip%2Fmain%2Fpackage.json&query=version&label=Version) @@ -245,66 +245,42 @@ The freevee ad text contains the ad length which is matched by and then skipped by forwarding by the ad length -0.1 seconds which will fix a lot of issues it turns out. -## Run the Extension +## Develop the Extension -## Chrome - -To run the extension in chrome you can just load the ``chrome`` folder as an unpacked extension. But every time you modify the code you have to reload the extension on the extension page manually. -I primarily just develop in firefox and then copy the code into chrome and replace ``browser`` with ``chrome`` in the code. - -## Firefox - -Just like chrome you can temporarily load the extension by going to ``about:addons``, clicking on the gear icon and then ``Install Add-ons From File``. Then you can load the ``firefox`` folder as a temporary extension. - -### Install web-ext and Firefox for a better development experience +### Setup -```npm install --global web-ext``` to install web-ext globally +- ```npm install -g pnpm``` install pnpm +- ```pnpm install``` install all required packages +- ```pnpm build``` build the extension +- ```pnpm web-ext``` run the extension in firefox +- ```pnpm chrome``` run the extension in chrome -```npm start``` to start in firefox +### Commands -### debug +```pnpm build``` build firefox and chrome zip files in dist folder -```npm start``` start the firefox development with a dev profile +```pnpm web-ext``` run web-ext firefox ```npm run start-android``` start on firefox android -```npm run start-chrome``` start on chrome - -```npm run lint``` lint all the js files - -```npm run esLint``` lint all the manifest files +```npm run lint``` lint all files -```npm run build``` copy files from firefox to chrome and build the zips files to upload +```lint:manifest``` lint all the manifest files -```npm run copy``` copy files from firefox to chrome +## Open the Extension without web-ext -```npm run zip``` build the zips files to upload - -```npm test``` test with python Selenium __testsOutdated__ - -## Test the Extension with Selenium python - -### Setup - -- insert your own firefox profile filepath to be logged into every platform in the ``test.py`` file. -- install Python -- install selenium ``pip install -U selenium`` - -### Run +## Chrome -```npm test``` +To run the extension in chrome you can just load the ``dist/chrome`` folder as an unpacked extension. But every time you modify the code you have to reload the extension on the extension page manually. +I primarily just develop in firefox and then copy the code into chrome and replace ``browser`` with ``chrome`` in the code. -Cli ARGS: -- none : all tests -- 'n': Netflix tests -- 'p': Prime Video tests -- 'd': Disney tests +## Firefox -```npm test n p d``` +Just like chrome you can temporarily load the extension by going to ``about:addons``, clicking on the gear icon and then ``Install Add-ons From File``. Then you can load the ``dist/firefox`` folder as a temporary extension. ## Changelog -You can see the Changelog in the addon or in the published versions. +You can see the [Changelog](./CHANGELOG.md) here or the extension settings. ## Disclaimer diff --git a/READMETemplate.md b/READMETemplate.md new file mode 100644 index 00000000..84383ab9 --- /dev/null +++ b/READMETemplate.md @@ -0,0 +1,239 @@ +# vite-vue3-browser-extension-v3 + +[![build](https://github.com/mubaidr/vite-vue3-browser-extension-v3/actions/workflows/build.yml/badge.svg)](https://github.com/mubaidr/vite-vue3-browser-extension-v3/actions/workflows/build.yml) + +A [Vite](https://vitejs.dev/) powered WebExtension ([Chrome](https://developer.chrome.com/docs/extensions/reference/), [FireFox](https://addons.mozilla.org/en-US/developers/), etc.) starter template based on `manifest 3`, `vue3` and `vite` and alot more preconfigured. + +## Please take a moment to fill out a 3 question [Feedback Form](https://forms.gle/2nzS2AQkVGmqHTLV6) and let us know if you would be interested in purchasing a feature rich template, along with any features (auth, payment integration and more) you would like to see. + +**Note:** Your responses will help shape the future of this project and ensure we meet your needs better. + +--- + +## Screenshots + +

+ Options + Options + Options (Dark Mode) +

+ +

+ Update Screen + Update Screen +

+ +## Features + +- Boiler plate Pages for + - Background + - Action Popup + - Options + - Content Script + - Devtools panel + - Browser Side Panel + - Setup pages for Install and Update events + - Offscreen pages for audio, screen recording etc + - Sample pages for Contact, About, Pricing etc +- Dynamic/ Directory based routing. Just add a file in `src/pages` or relevant ui directory and it will be automatically registered as a route +- State & UI Components + - Header + - Footer + - Locale Switch (i18n) + - Theme Switch (dark/light) + - Loading Spinner + - Error Boundary + - Empty State + - Notifications using `notivue` +- Store for options preconfigured etc +- Composables for + - i18n + - Theme + - Notifications + - Loading + - Error handling + - `useBrowserStorage` for extension settings and user options management +- Preconfigured Pinia Store (optional perisitent and non-persistent) + - System wide + - Easily extendable + - Type safe + +_Please create an issue if you feel some feature is missing or could be improved._ + +## Directory Structure + +```bash +. +├── dist # Built extension files +│ ├── chrome # Chrome-specific build +│ └── firefox # Firefox-specific build +├── public # Static assets +│ └── icons # Extension icons +├── scripts # Build/dev scripts +├── src # Source code +│ ├── assets # Global assets (images, styles) +│ ├── background # Extension background script +│ ├── components # Shared Vue components +│ ├── composables # Vue composables/hooks +│ ├── content-script # Content scripts injected into pages +│ ├── devtools # Chrome devtools panel +│ ├── locales # i18n translation files +│ ├── offscreen # Offscreen pages (audio, recording) +│ ├── stores # Pinia stores +│ ├── types # TypeScript type definitions +│ ├── ui # UI pages +│ │ ├── action-popup # Browser toolbar popup +│ │ ├── common # Shared pages +│ │ ├── content-script-iframe # Content script app injected into pages by content script +│ │ ├── devtools-panel # Devtools panel UI +│ │ ├── options-page # Extension options +│ │ ├── setup # Install/update pages +│ │ └── side-panel # Browser side panel +│ └── utils # Shared utilities +├── manifest.config.ts # Base manifest configuration +├── vite.config.ts # Base Vite configuration +├── tailwind.config.cjs # Tailwind CSS configuration +└── package.json # Project dependencies and scripts +``` + +## Development tools + +### Vite Plugins + +- [`unplugin-vue-router`](https://github.com/posva/unplugin-vue-router) - File system based route generator for Vite +- [`unplugin-auto-import`](https://github.com/antfu/unplugin-auto-import) - Directly use `browser` and Vue Composition API without importing +- [`unplugin-vue-components`](https://github.com/antfu/vite-plugin-components) - components auto import +- [`unplugin-icons`](https://github.com/antfu/unplugin-icons) - icons as components +- [`unplugin-turbo-console`](https://github.com/unplugin/unplugin-turbo-console) - Improve the Developer Experience of console +- [`@intlify/unplugin-vue-i18n`](https://github.com/intlify/bundle-tools/tree/main/packages/unplugin-vue-i18n) - unplugin for Vue I18n + +### Vue Plugins + +- [Pinia](https://pinia.vuejs.org/) - Intuitive, type safe, light and flexible Store for Vue +- [VueUse](https://github.com/antfu/vueuse) - collection of useful composition APIs +- [Notivue]( +- [Vue-i18n](https://kazupon.github.io/vue-i18n/) - Internationalization plugin for Vue.js + +### Plugins + +- [Marked](https://github.com/markedjs/marked) - A markdown parser and compiler. Used for CHANGELOG.md to show in Update page + +### UI Frameworks + +- [tailwindcss](https://tailwindcss.com) - A utility-first CSS framework +- [daisyUI](https://daisyui.com/) - The most popular component library for Tailwind CSS + +_Tailwind css `forms` and `typography` plugins are enabled for default styling of form controls._ + +### WebExtension Libraries + +- [`webext-bridge`](https://github.com/zikaari/webext-bridge) - effortlessly communication between contexts +- [`webextension-polyfill`](https://github.com/mozilla/webextension-polyfill) - A lightweight polyfill library for Promise-based WebExtension APIs in Chrome + +### Coding Style + +- [TypeScript](https://www.typescriptlang.org/) - Typed JavaScript at Any Scale +- [ESLint](https://eslint.org/) - Linting utility for JavaScript and JSX +- [Prettier](https://prettier.io/) - Code formatter +- Use Composition API with [` - - Popup - - - -
-
-
-
- -
-

pageTitle

-

v.1.1.54

-
-
- -

rateNow

- rating -
- - - - - - - - - -
- -
-
- - - - - - -
-
- - -
-
- - - - - - - -
- - - \ No newline at end of file diff --git a/chrome/popup/settings.css b/chrome/popup/settings.css deleted file mode 100644 index 2c3e89fc..00000000 --- a/chrome/popup/settings.css +++ /dev/null @@ -1,393 +0,0 @@ -/* - * Streaming enhanced - * Copyright (c) 2022 Marvin Krebber - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License v3.0. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License v3.0 for more details. - */ - -body, -h1, -h2, -p, -span, -a, -h3, -h4, -h5, -h6 { - font-family: "Lato", sans-serif; -} -html, -body, -.content { - min-width: 500px; - min-height: 450px; - background-color: #212121; -} -body { - margin: unset; -} -.page { - padding: 80px 0 0 3%; - width: 97%; -} -div { - color: white; -} -.hidden { - display: none; -} -/* buttons */ -.button { - font-size: 1.5em; - cursor: pointer; - transition-duration: 0.4s; - - margin: 5px; - border-radius: 15px; - padding: 5px 10px; - text-align: center; - background-color: #0082fc; - color: white; - text-decoration: none; - flex-grow: 1; - - -webkit-user-select: none; /* Safari */ - -ms-user-select: none; /* IE 10 and IE 11 */ - user-select: none; /* Standard syntax */ -} -.button:hover { - opacity: 0.8; -} - -.reset { - margin-top: 50px; -} - -.flex { - display: flex; -} -.flex-center { - display: flex; - justify-content: center; - align-items: center; -} -.flex-justify { - display: flex; - justify-content: center; -} -.flex-align { - display: flex; - align-items: center; -} -.flex-col { - flex-direction: column; -} -.flex-between { - display: flex; - justify-content: space-between; -} -.flex-end { - display: flex; - justify-content: flex-end; -} -.flex-start { - display: flex; - justify-content: flex-start; -} -.flex-wrap { - flex-wrap: wrap; -} -.line, -h1, -h2, -h3, -p { - padding: 5px 5px; - margin: unset; -} -p { - color: white; - font-size: 1.4em; - padding-right: 10px; -} -.Logo { - height: 3em; -} -.title { - padding-top: unset; - padding-bottom: unset; -} -/* Switch styling */ -label { - margin-left: auto; -} -/* The switch - the box around the slider */ -.switch { - position: relative; - display: inline-block; - width: 60px; - height: 34px; -} - -/* Hide default HTML checkbox */ -.switch input { - opacity: 0; - width: 0; - height: 0; -} - -/* The slider */ -.slider { - position: absolute; - cursor: pointer; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: #ccc; - -webkit-transition: 0.4s; - transition: 0.4s; -} - -.slider:before { - position: absolute; - content: ""; - height: 26px; - width: 26px; - left: 4px; - bottom: 4px; - background-color: white; -} - -input:checked + .slider { - background-color: #00a205; -} -/* change color on hover */ -input:checked + .slider:hover { - background-color: #006303; -} - -input:checked + .slider:before { - -webkit-transform: translateX(26px); - -ms-transform: translateX(26px); - transform: translateX(26px); -} - -/* Rounded sliders */ -.slider.round { - border-radius: 34px; -} - -.slider.round:before { - border-radius: 50%; -} -/* WebKit and Chromiums */ -::-webkit-scrollbar { - width: 8px; - height: 8px; - background-color: #212121; -} - -::-webkit-scrollbar-thumb { - background: grey; - border-radius: 5px; -} - -/* The side navigation menu */ -.sidenav { - height: 100%; - background-color: #111; - padding: 0 10px; - gap: 20px; -} - -/* The navigation menu links */ -.menuButton { - border-radius: 15px; - margin: 5px 15px; - padding: 13px 20px; - max-width: 400px; - background-color: #242424; - text-decoration: none; - white-space: __MSG_noWrap__; - cursor: pointer; - color: white; - font-size: 1.5em; - user-select: none; - align-items: center; -} - -.popupMenuButton { - flex: 1 0 calc(25% - 30px); - border-radius: 15px; - padding: 20px; - margin: 10px; - background-color: #242424; - cursor: pointer; - color: white; - align-items: center; - user-select: none; -} -.popupMenuButton .icon { - margin: 0; - width: 100%; - height: fit-content; -} -/* When you mouse over the navigation links, change their color */ -.menuButton:hover, -.popupMenuButton:hover { - background-color: #4d0000; -} - -.description { - font-size: 17px; - padding: 10px 80px 20px 20px; - color: #cccccc; -} -hr { - margin: 0 5px; -} -.IconBox { - padding: 20px 20px; -} -.settingsIcon:hover { - -webkit-animation: spin 4s linear infinite; - -moz-animation: spin 4s linear infinite; - animation: spin 4s linear infinite; -} -@-moz-keyframes spin { - 100% { - -moz-transform: rotate(360deg); - } -} -@-webkit-keyframes spin { - 100% { - -webkit-transform: rotate(360deg); - } -} -@keyframes spin { - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} - -@media only screen and (max-height: 800px), only screen and (max-width: 1000px) { - .MenuButtons { - flex-direction: row; - justify-content: center; - } - .menuButton { - margin: 5px; - padding: 5px 10px; - } - .blueButtons { - margin: 0 5px !important; - font-size: 1em; - } - body { - flex-direction: column; - } - .page { - padding: 0px; - margin: 0 15px 0 15px; - width: calc(100% - 30px); - } - .IconBox { - padding: 10px 0px 0px 0px; - flex-direction: row; - } - .sidenav { - height: auto; - display: block; - } -} -@media only screen and (max-width: 800px), only screen and (max-height: 600px) { - .menuButton i-18n, - .menuButton div, - .IconBox { - display: none; - } - .MenuButtons { - padding-top: 5px; - } -} -.icon { - width: 1.4em; - height: 1.4em; - background-color: transparent; - fill: white; - color: white; - display: flex; - justify-content: center; - align-items: center; - cursor: pointer; - margin: 0 5px; -} - -.featureTable tr *:nth-of-type(2) { - border-right: 1px solid white; -} -.featureTable tr td:nth-of-type(2) label { - margin-right: 20px; -} -.featureTable { - border-collapse: collapse; -} -/* .featureTable, -th, -td { - border-right: 1px solid white; - border-left: 1px solid white; -} */ - -.tooltip { - position: relative; - display: inline-block; - border-bottom: 1px dotted white; - /* color: #346991; - font-weight: bold; */ -} - -.tooltip .tooltiptext { - visibility: hidden; - width: 300px; - background-color: #fff; - color: #000; - text-align: center; - border-radius: 6px; - padding: 5px 0; - position: absolute; - z-index: 1; - bottom: 100%; - left: 0%; -} - -.tooltip .tooltiptext::after { - content: ""; - position: absolute; - top: 100%; - left: 50%; - margin-left: -5px; - border-width: 5px; - border-style: solid; - border-color: #fff transparent transparent transparent; -} - -.tooltip:hover .tooltiptext { - visibility: visible; -} - -#backButton { - cursor: pointer; -} -td { - text-align: center; -} diff --git a/chrome/popup/settings.html b/chrome/popup/settings.html deleted file mode 100644 index 606a5b67..00000000 --- a/chrome/popup/settings.html +++ /dev/null @@ -1,1677 +0,0 @@ - - - - - - - - - - - settingsTitle - - - - -
-
-
- -
-

pageTitle

-

v.1.1.54

-
-
- -

rateNow

- rating -
-
- -
- -
-
-
-
- -
-
-

SharedPageTitle

- -
-

SharedPageDescription

-
-
-
-

UserAgentSwitch

- -
-

UserAgentSwitchDescription

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FeatureSharedNetflixPrimeDisney+CrunchyrollHBO
-

IntroSwitch

- SharedIntroDescription -
- - - - - - - - - - - -
-

CreditsSwitch

- CreditsSwitchDescription -
- - - - - - - - - -
-

WatchCreditsSwitch

- WatchCreditsSwitchDescription -
- - - - - - - - - -
-

AdsSwitch

- AdsSwitchDescription -
- - - - - - - -
-

RatingSwitch

- RatingSwitchDescription -
- - - - - - - - - -
-

SliderSwitch

- SliderSwitchDescription -
- - - - - - - - - - - -
-
-
-

FullscreenSwitch

- -
-

FullscreenSwitchDescription

-
-
-

DoubleClickSwitch

- -
-

DoubleClickSwitchDescription

-
-
-

scrollVolumeSwitch

- -
-

scrollVolumeDescription

-
-
-

EpilepsySwitch

- -
-

EpilepsySwitchDescription

-
-
-

ShowYearSwitch

- -
-

ShowYearSwitchDescription

-
- -
-

SliderSwitch

-
-

SliderSwitchDescription

-

SliderOptions

- - - - - - - - - - - - - - - - - -
-

SliderStepSize

-
-

SliderMin

-
- -
-

SliderMax

-
- -
-

SliderPreview

-
-
- -

1.0x

-
-
-
-
- - - - - - - - -
- -
- - - \ No newline at end of file diff --git a/chrome/popup/settings.js b/chrome/popup/settings.js deleted file mode 100644 index fa9187c7..00000000 --- a/chrome/popup/settings.js +++ /dev/null @@ -1,543 +0,0 @@ -/* - * Streaming enhanced - * Copyright (c) 2022 Marvin Krebber - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License v3.0. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License v3.0 for more details. - */ -/* global chrome */ - -// find out if on settings page or on popup page -const isPopup = document.title === "Popup"; -/** - * Localize by replacing __MSG_***__ meta tags - * @returns {void} - */ -async function localizeHtmlPage() { - // https://stackoverflow.com/questions/25467009/internationalization-of-html-pages-for-my-google-chrome-extension - // innerHTML triggers warnings so changed functions - // i18n tag - let translations = document.getElementsByTagName("i-18n"); - for (let trans of translations) { - trans.textContent = chrome.i18n.getMessage.apply(null, trans.textContent.split(";")); - } - // i18n attribute - translations = document.querySelectorAll("[data-i18n]"); - for (let trans of translations) { - trans.textContent = chrome.i18n.getMessage.apply(null, trans.textContent.split(";")); - } -} -localizeHtmlPage(); -// firefox inline settings change minheight; -if (window.name == "addon-inline-options") { - document.querySelector("body").style.minHeight = "700px"; -} - -let backButtonHistory = ["Popup"]; -// remove everything before # in window.location -let url = window.location.href; -if (url.includes("#")) Menu(url.split("#")[1]); - -// if on streaming page open settings for page -const query = { active: true, currentWindow: true }; -function callback(tabs) { - const currentUrl = tabs[0].url; - const isPrimeVideo = /.amazon.|.primevideo./i.test(currentUrl); - const isNetflix = /.netflix./i.test(currentUrl); - const isDisney = /.disneyplus.|.starplus.|.hotstar./i.test(currentUrl); - const isCrunchyroll = /.crunchyroll./i.test(currentUrl); - // const isHBO = /max/i.test(currentUrl); - if (isPrimeVideo) Menu("Amazon"); - else if (isNetflix) Menu("Netflix"); - else if (isDisney) Menu("Disney"); - else if (isCrunchyroll) Menu("Crunchyroll"); - // else if (isHBO) Menu("HBO"); -} -chrome.tabs.query(query, callback); - -// global variables in localStorage -const defaultSettings = { - settings: { - Amazon: { - skipIntro: true, - skipCredits: true, - watchCredits: false, - skipAd: true, - blockFreevee: true, - speedSlider: true, - filterPaid: false, - continuePosition: true, - showRating: true, - xray: true, - }, - Netflix: { - skipIntro: true, - skipRecap: true, - skipCredits: true, - watchCredits: false, - skipBlocked: true, - skipAd: true, - speedSlider: true, - profile: true, - showRating: true, - }, - Disney: { skipIntro: true, skipCredits: true, watchCredits: false, skipAd: true, speedSlider: true, showRating: true, selfAd: true }, - Crunchyroll: { - skipIntro: true, - speedSlider: true, - releaseCalendar: true, - dubLanguage: null, - profile: true, - bigPlayer: true, - disableNumpad: true, - }, - HBO: { skipIntro: true, skipCredits: true, watchCredits: false, speedSlider: true, showRating: true }, - Video: { playOnFullScreen: true, epilepsy: false, userAgent: true, doubleClick: true, scrollVolume: true, showYear: false }, - Statistics: { - AmazonAdTimeSkipped: 0, - NetflixAdTimeSkipped: 0, - DisneyAdTimeSkipped: 0, - IntroTimeSkipped: 0, - RecapTimeSkipped: 0, - SegmentsSkipped: 0, - }, - General: { - Crunchyroll_profilePicture: null, - profileName: null, - profilePicture: null, - sliderSteps: 1, - sliderMin: 5, - sliderMax: 20, - filterDub: true, - filterQueued: true, - savedCrunchyList: [], - GCdate: "2024-01-01", - }, - }, -}; -const isMobile = /mobile|streamingEnhanced/i.test(navigator.userAgent); -console.log("isMobile", isMobile, navigator.userAgent); -let settings = { ...defaultSettings.settings }; -chrome.storage.sync.get("settings", function (result) { - // overwrite default settings with user settings - // List of keys to merge individually - settings.Amazon = { ...defaultSettings.settings.Amazon, ...result?.settings?.Amazon }; - settings.Netflix = { ...defaultSettings.settings.Netflix, ...result?.settings?.Netflix }; - settings.Disney = { ...defaultSettings.settings.Disney, ...result?.settings?.Disney }; - settings.Crunchyroll = { ...defaultSettings.settings.Crunchyroll, ...result?.settings?.Crunchyroll }; - settings.HBO = { ...defaultSettings.settings.HBO, ...result?.settings?.HBO }; - settings.Video = { ...defaultSettings.settings.Video, ...result?.settings?.Video }; - settings.Statistics = { ...defaultSettings.settings.Statistics, ...result?.settings?.Statistics }; - settings.General = { ...defaultSettings.settings.General, ...result?.settings?.General }; - // delete every setting that is not in defaultSettings - let changedSettings; - for (const key in settings) { - for (const subkey in settings[key]) { - if (typeof defaultSettings.settings[key][subkey] === "undefined") { - console.log("delete Setting:", key, subkey); - changedSettings = true; - delete settings[key][subkey]; - } - } - } - setCheckboxesToSettings(); - if (changedSettings) { - chrome.storage.sync.set({ settings }); - } -}); -chrome.storage.sync.onChanged.addListener(function (changes) { - if (changes?.settings) { - const { oldValue, newValue } = changes.settings; - settings = newValue; - console.log("settings", "Old value:", oldValue, ", new value:", newValue); - setCheckboxesToSettings(); - } -}); -//global variables -let sliderValue = settings.General.sliderMax; -// ------------------- functions -------------------- -function getTimeFormatted(sec = 0) { - if (typeof sec !== "number") return "0s"; - let days = Math.floor(sec / 86400); - let hours = Math.floor((sec % 86400) / 3600); - let minutes = Math.floor(((sec % 86400) % 3600) / 60); - let seconds = Math.floor(((sec % 86400) % 3600) % 60); - let text; - if (days > 0) text = `${days}d ${hours}h ${minutes}m`; - else if (hours > 0) text = `${hours}h ${minutes}m ${seconds}s`; - else if (minutes > 0) text = `${minutes}m ${seconds}s`; - else text = `${seconds}s`; - return text; -} -// for all services get the shared boolean of the category -function getBooleanOfCategory(category) { - let bool = true; - if (settings?.Amazon?.[category] !== undefined) bool &= settings?.Amazon[category]; - if (settings?.Netflix?.[category] !== undefined) bool &= settings?.Netflix[category]; - if (settings?.Disney?.[category] !== undefined) bool &= settings?.Disney[category]; - if (settings?.Crunchyroll?.[category] !== undefined) bool &= settings?.Crunchyroll[category]; - if (settings?.HBO?.[category] !== undefined) bool &= settings?.HBO[category]; - return bool; -} -function setCategoryToBoolean(category, bool) { - if (settings?.Amazon?.[category] !== undefined) settings.Amazon[category] = bool; - if (settings?.Netflix?.[category] !== undefined) settings.Netflix[category] = bool; - if (settings?.Disney?.[category] !== undefined) settings.Disney[category] = bool; - if (settings?.Crunchyroll?.[category] !== undefined) settings.Crunchyroll[category] = bool; - if (settings?.HBO?.[category] !== undefined) settings.HBO[category] = bool; -} -function capitalizeFirstLetter(str) { - return str.charAt(0).toUpperCase() + str.slice(1); -} -function lowerCaseFirstLetter(str) { - return str.charAt(0).toLowerCase() + str.slice(1); -} -async function setCheckboxesOfService(service) { - Object.keys(settings[service]).forEach((key) => { - const buttons = document.querySelectorAll("#" + service + capitalizeFirstLetter(key)); - buttons.forEach((button) => { - if (service === "Statistics") { - if (key != "SegmentsSkipped") button.textContent = getTimeFormatted(settings[service][key]); - else button.textContent = settings[service][key]; - } else button.checked = settings[service][key]; - }); - }); -} -async function setButtonChecked(id, condition) { - const buttons = document.querySelectorAll(`#${id}`); - buttons.forEach((button) => { - button.checked = condition; - }); -} -async function setCheckboxesToSettings() { - let button; - button = document.querySelector("#VideoSkips"); - if (button) - button.checked = - getBooleanOfCategory("skipIntro") && - getBooleanOfCategory("skipCredits") && - // Ads - settings?.Amazon.blockFreevee && - settings?.Netflix.skipAd && - settings?.Disney.skipAd && - getBooleanOfCategory("showRating") && - getBooleanOfCategory("speedSlider") && - // playOnFullScreen - settings?.Video.playOnFullScreen && - settings?.Video.doubleClick && - settings?.Video.scrollVolume; - let VideoCheckboxes = ["skipIntro", "skipCredits", "watchCredits", "showRating", "speedSlider"]; - VideoCheckboxes.forEach((key) => { - setButtonChecked("Video" + capitalizeFirstLetter(key), getBooleanOfCategory(key)); - }); - setButtonChecked("VideoShowYear", settings?.Video.showYear); - setButtonChecked("VideoAds", settings?.Amazon.blockFreevee && settings?.Netflix.skipAd && settings?.Disney.skipAd); - setButtonChecked("VideoFullScreen", settings?.Video.playOnFullScreen); - setButtonChecked("VideoDoubleClick", settings?.Video.doubleClick); - setButtonChecked("VideoScrollVolume", settings?.Video.scrollVolume); - setButtonChecked("VideoEpilepsy", settings?.Video.epilepsy); - setButtonChecked("VideoUserAgent", settings?.Video.userAgent); - button = document.querySelector(".categoryMobile"); - if (button) button.style.display = isMobile ? "block" : "none"; - // ------------- Default --------------------------------------- - setButtonChecked("DefaultSkips", settings?.Amazon.filterPaid); - // ------------- global buttons --------------------------------------- - setButtonChecked( - "AmazonSkips", - settings?.Amazon.skipAd && settings?.Amazon.filterPaid && settings?.Amazon.continuePosition && settings?.Amazon.xray - ); - setButtonChecked("NetflixSkips", settings?.Netflix.skipRecap && settings?.Netflix.skipBlocked && settings?.Netflix.profile); - setButtonChecked("DisneySkips", settings?.Disney.selfAd); - setButtonChecked( - "CrunchyrollSkips", - settings?.Crunchyroll.skipIntro && - settings?.Crunchyroll.releaseCalendar && - settings?.Crunchyroll.profile && - settings?.Crunchyroll.bigPlayer && - settings?.Crunchyroll.disableNumpad - ); - setButtonChecked("HBOSkips", true); - // ------------- Individual Checkboxes --------------------------------------- - setCheckboxesOfService("Amazon"); - setCheckboxesOfService("Netflix"); - setCheckboxesOfService("Disney"); - setCheckboxesOfService("Statistics"); - setCheckboxesOfService("Crunchyroll"); - setCheckboxesOfService("HBO"); - // ------------- Netflix other --------------------------------------- - button = document.querySelector("#profileName"); - if (button) button.textContent = settings?.General.profileName; - button = document.querySelector("#profilePicture"); - if (button && settings.General.profilePicture) { - button.setAttribute("src", settings?.General.profilePicture); - button.style.display = "block"; - } - // ------------- Slider Options --------------------------------------- - button = document.querySelector("#SliderSteps"); - if (button) button.value = settings?.General.sliderSteps; - button = document.querySelector("#SliderMin"); - if (button) button.value = settings?.General.sliderMin; - button = document.querySelector("#SliderMax"); - if (button) button.value = settings?.General.sliderMax; - button = document.querySelector("#SliderPreview"); - if (button) { - button.step = settings?.General.sliderSteps; - button.min = settings?.General.sliderMin; - button.max = settings?.General.sliderMax; - } - button = document.querySelector("#SliderValue"); - if (button) button.textContent = (sliderValue / 10).toFixed(1) + "x"; - const optionalPermissions = ["tabs"]; - optionalPermissions.forEach((permission) => { - showPermissionRequest(permission); - }); - - // import/export buttons - button = document.querySelector("#save"); - if (button) { - let file = new Blob([JSON.stringify(settings)], { type: "text/json" }); - button.href = URL.createObjectURL(file); - button.download = "settings.json"; - } -} -async function showPermissionRequest(permission) { - const PermissionButtons = document.querySelectorAll("#Permission" + permission + "Div"); - const permissionStatus = await chrome.permissions.contains({ permissions: [permission] }); - if (!permissionStatus) { - PermissionButtons.forEach((button) => { - button.style.display = "block"; - }); - } -} - -function Menu(setting, isBackButton = false) { - if (!isBackButton) backButtonHistory.push(setting); - console.log(backButtonHistory); - const Pages = isPopup - ? ["Video", "Amazon", "Netflix", "Disney", "Crunchyroll", "Statistics", "Popup"] - : ["Video", "Amazon", "Netflix", "Disney", "Crunchyroll", "Statistics", "Other", "Changelog", "Default"]; - const noButton = ["Default", "Popup"]; - for (const page of Pages) { - document.getElementById(page + "Settings").style.display = "none"; - if (!noButton.includes(page)) document.getElementById("Menu" + page).style.setProperty("background-color", ""); - } - document.getElementById(setting + "Settings").style.display = setting != "Video" && setting != "Statistics" && isPopup ? "flex" : "block"; - if (!noButton.includes(setting)) document.getElementById("Menu" + setting).style.setProperty("background-color", "#e60010"); -} -/** - * Listen for clicks on the buttons, and send the appropriate message to - * the content script in the page. - */ -function setSettings(log) { - console.log(log, settings); - chrome.storage.sync.set({ settings }); -} -/** - * for inverse Settings - * @param {*} setting the setting that should be set - * @param {*} target the setting that should be unset if setting is set - */ -function toggleSetting(service, target, setting) { - settings[service][setting] = !settings[service]?.[setting]; - if (settings[service][setting]) settings[service][target] = false; -} -function toggleCategoryBoolean(target, setting) { - const value = getBooleanOfCategory(setting); - setCategoryToBoolean(setting, !value); - if (!value) setCategoryToBoolean(target, false); -} -function listenForClicks() { - document.addEventListener("click", (e) => { - if (e.target.classList.contains("reset")) { - if (confirm("Are you sure to reset every Setting including Statistics?")) { - console.log("settings resetted to default"); - chrome.storage.sync.set(defaultSettings); - } - } - // ------------- Statistics --------------------------------------- - else if (e.target.id === "upload") { - // get the file from #file and console.log it - const file = document.getElementById("file").files[0]; - if (file !== undefined && "application/json" === file.type) { - if (confirm(file.name + " will replace the Settings.\n\nAre you sure you want to do this?")) { - // read contents of file - const reader = new FileReader(); - // reader.onload = (e) => { - reader.addEventListener("load", (e) => { - try { - // parse the JSON - const data = JSON.parse(e.target.result); - // set the settings to the parsed JSON - settings = data; - // save the settings to the storage - chrome.storage.sync.set({ settings }); - // reload the page - location.reload(); - // }; - } catch (e) { - alert("The file you uploaded is not a valid JSON file."); - return; - } - }); - reader.readAsText(file); - } - } else { - alert("The file you uploaded is not a valid JSON file."); - return; - } - } - // ------------- Menu --------------------------------------- - else if (e.target.id.startsWith("Menu")) Menu(e.target.id.replace("Menu", "")); - else if (e.target.id === "backButton") { - if (backButtonHistory.length > 0) { - backButtonHistory.pop(); - Menu(backButtonHistory[backButtonHistory.length - 1], true); - } else Menu("Popup", true); - } else if (e.target.id.startsWith("Permission")) { - chrome.permissions.request({ permissions: [e.target.id.replace("Permission", "")] }); - } - // all buttons changing settings - else { - // ------------- Video --------------------------------------- - const currentSettings = { ...settings }; - if (e.target.id === "VideoSkips") { - const VideoSkips = !( - getBooleanOfCategory("skipIntro") && - getBooleanOfCategory("skipCredits") && - // Ads - settings?.Amazon.blockFreevee && - settings?.Netflix.skipAd && - settings?.Disney.skipAd && - getBooleanOfCategory("showRating") && - getBooleanOfCategory("speedSlider") && - // playOnFullScreen - settings?.Video.playOnFullScreen && - settings?.Video.doubleClick && - settings?.Video.scrollVolume - ); - let VideoSkipTypes = ["skipIntro", "skipCredits", "showRating", "speedSlider"]; - VideoSkipTypes.forEach((key) => { - setCategoryToBoolean(key, VideoSkips); - }); - settings.Amazon.blockFreevee = - settings.Netflix.skipAd = - settings.Disney.skipAd = - settings.Video.playOnFullScreen = - settings.Video.doubleClick = - settings.Video.scrollVolume = - VideoSkips; - if (VideoSkips) setCategoryToBoolean("watchCredits", false); - } else if (e.target.id === "VideoShowYear") settings.Video.showYear = !settings.Video.showYear; - else if (e.target.id === "VideoAds") - settings.Amazon.blockFreevee = - settings.Netflix.skipAd = - settings.Disney.skipAd = - !(settings?.Amazon.blockFreevee && settings?.Netflix.skipAd && settings?.Disney.skipAd); - else if (e.target.id === "VideoFullScreen") settings.Video.playOnFullScreen = !settings.Video.playOnFullScreen; - else if (e.target.id === "VideoDoubleClick") settings.Video.doubleClick = !settings.Video.doubleClick; - else if (e.target.id === "VideoScrollVolume") settings.Video.scrollVolume = !settings.Video.scrollVolume; - else if (e.target.id === "VideoEpilepsy") settings.Video.epilepsy = !settings.Video.epilepsy; - else if (e.target.id === "VideoUserAgent") settings.Video.userAgent = !settings.Video.userAgent; - else if (e.target.id.startsWith("Video")) { - let key = lowerCaseFirstLetter(e.target.id.replace("Video", "")); - if (key === "skipCredits" || key === "watchCredits") { - toggleCategoryBoolean(key === "skipCredits" ? "watchCredits" : "skipCredits", key); - } else { - setCategoryToBoolean(key, !getBooleanOfCategory(key)); - } - } - // ------------- Default --------------------------------------- - else if (e.target.id === "DefaultSkips") settings.Amazon.filterPaid = !settings?.Amazon.filterPaid; - // ------------- Amazon --------------------------------------- - else if (e.target.id === "AmazonSkips") - settings.Amazon.skipAd = - settings.Amazon.filterPaid = - settings.Amazon.continuePosition = - settings.Amazon.xray = - !(settings.Amazon.skipAd && settings.Amazon.filterPaid && settings.Amazon.continuePosition && settings?.Amazon.xray); - else if (e.target.id === "NetflixSkips") - settings.Netflix.skipRecap = - settings.Netflix.skipBlocked = - settings.Netflix.profile = - !(settings?.Netflix.skipRecap && settings?.Netflix.skipBlocked && settings?.Netflix.profile); - else if (e.target.id === "DisneySkips") settings.Disney.selfAd = !settings?.Disney.selfAd; - else if (e.target.id === "CrunchyrollSkips") - settings.Crunchyroll.skipIntro = - settings.Crunchyroll.releaseCalendar = - settings.Crunchyroll.profile = - settings.Crunchyroll.bigPlayer = - settings.Crunchyroll.disableNumpad = - !( - settings?.Crunchyroll.skipIntro && - settings?.Crunchyroll.releaseCalendar && - settings.Crunchyroll.profile && - settings.Crunchyroll.bigPlayer && - settings.Crunchyroll.disableNumpad - ); - // else if (e.target.id === "HBOSkips") - else { - const services = ["Amazon", "Netflix", "Disney", "Crunchyroll", "HBO"]; - for (const service of services) { - if (e.target.id.startsWith(service)) { - let key = lowerCaseFirstLetter(e.target.id.replace(service, "")); - if (key === "skipCredits" || key === "watchCredits") { - toggleSetting(service, key === "skipCredits" ? "watchCredits" : "skipCredits", key); - } else { - settings[service][key] = !settings[service]?.[key]; - } - } - } - } - // check if settings changed - if (JSON.stringify(settings) !== JSON.stringify(currentSettings)) { - setSettings(e.target.id); - } - } - }); -} - -function listenForInput() { - document.addEventListener("input", (e) => { - if (e.target.id === "SliderPreview") { - sliderValue = Number(e.target.value); - setCheckboxesToSettings(); - } else { - if (e.target.id === "SliderSteps") settings.General.sliderSteps = Number(e.target.value); - else if (e.target.id === "SliderMin") { - settings.General.sliderMin = Number(e.target.value); - sliderValue = settings.General.sliderMin; - } else if (e.target.id === "SliderMax") { - settings.General.sliderMax = Number(e.target.value); - sliderValue = settings.General.sliderMax; - } - setCheckboxesToSettings(); - setSettings(e.target.id); - } - }); -} - -/** - * There was an error executing the script. - * Display the popup's error message, and hide the normal UI. - */ -function reportExecuteScriptError(error) { - document.querySelector("#popup-content").classList.add("hidden"); - document.querySelector("#error-content").classList.remove("hidden"); - console.error(`Failed to execute primeskip content script: ${error.message}`); -} - -/** - * When the popup loads, add a click handler. - * If we couldn't inject the script, handle the error. - */ -try { - listenForClicks(); - listenForInput(); -} catch (e) { - reportExecuteScriptError(e); -} diff --git a/chrome/skipper.js b/chrome/skipper.js deleted file mode 100644 index 9ce07b63..00000000 --- a/chrome/skipper.js +++ /dev/null @@ -1,1658 +0,0 @@ -/* - * Streaming enhanced - * Copyright (c) 2022 Marvin Krebber - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License v3.0. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License v3.0 for more details. - */ -/* global chrome */ -// matches all amazon urls under https://en.wikipedia.org/wiki/Amazon_(company)#Website -const hostname = window.location.hostname; -const title = document.title; -let url = window.location.href; -const ua = navigator.userAgent; -// only on prime video pages -const isPrimeVideo = /amazon|primevideo/i.test(hostname) && (/video/i.test(title) || /video/i.test(url)); -const isNetflix = /netflix/i.test(hostname); -const isDisney = /disneyplus|starplus/i.test(hostname); -const isHotstar = /hotstar/i.test(hostname); -const isCrunchyroll = /crunchyroll/i.test(hostname); -const isStarPlus = /starplus/i.test(hostname); -const isHBO = /max.com/i.test(hostname); - -const isMobile = /mobile|streamingEnhanced/i.test(ua); -const isEdge = /edg/i.test(ua); -// const isFirefox = /firefox/i.test(ua); -// const isChrome = /chrome/i.test(ua); -const htmlLang = document.documentElement.lang; -const date = new Date(); -const today = date.toISOString().split("T")[0]; -const version = "1.1.54"; -if (isPrimeVideo || isNetflix || isDisney || isHotstar || isCrunchyroll || isHBO) { - /* eslint-env root:true */ - // global variables in localStorage - const defaultSettings = { - settings: { - Amazon: { - skipIntro: true, - skipCredits: true, - watchCredits: false, - skipAd: true, - blockFreevee: true, - speedSlider: true, - filterPaid: false, - continuePosition: true, - showRating: true, - xray: true, - }, - Netflix: { - skipIntro: true, - skipRecap: true, - skipCredits: true, - watchCredits: false, - skipBlocked: true, - skipAd: true, - speedSlider: true, - profile: true, - showRating: true, - }, - Disney: { skipIntro: true, skipCredits: true, watchCredits: false, skipAd: true, speedSlider: true, showRating: true, selfAd: true }, - Crunchyroll: { - skipIntro: true, - speedSlider: true, - releaseCalendar: true, - dubLanguage: null, - profile: true, - bigPlayer: true, - disableNumpad: true, - }, - HBO: { skipIntro: true, skipCredits: true, watchCredits: false, speedSlider: true, showRating: true }, - Video: { playOnFullScreen: true, epilepsy: false, userAgent: true, doubleClick: true, scrollVolume: true, showYear: false }, - Statistics: { - AmazonAdTimeSkipped: 0, - NetflixAdTimeSkipped: 0, - DisneyAdTimeSkipped: 0, - IntroTimeSkipped: 0, - RecapTimeSkipped: 0, - SegmentsSkipped: 0, - }, - General: { - Crunchyroll_profilePicture: null, - profileName: null, - profilePicture: null, - sliderSteps: 1, - sliderMin: 5, - sliderMax: 20, - filterDub: true, - filterQueued: true, - savedCrunchyList: [], - GCdate: "2024-01-01", - }, - }, - }; - let settings = { ...defaultSettings.settings }; - let DBCache = {}; - let lastAdTimeText = 0; - let videoSpeed = 1; - async function setVideoSpeed(speed) { - videoSpeed = speed; - } - resetBadge(); - // how long a record should be kept in the cache - const GCdiff = 30; - async function garbageCollection() { - // clear every rating older than 30 days - // clear every rating where db != tmdb - log("garbageCollection started, deleting old ratings:"); - const keys = Object.keys(DBCache); - for (let key of keys) { - if (getDiffInDays(DBCache[key].date, date) >= GCdiff || DBCache[key].db != "tmdb") { - console.log(DBCache[key].date, key); - delete DBCache[key]; - } - } - settings.General.GCdate = today; - setStorage(); - setDBCache(); - } - async function getDBCache() { - chrome.storage.local.get("DBCache", function (result) { - DBCache = result?.DBCache; - if (typeof DBCache !== "object") { - log("DBCache not found, creating new one", DBCache); - try { - chrome.storage.local.set({ DBCache: {} }); - } catch (error) { - log(error); - } - DBCache = {}; - } - if (isNetflix && settings.Netflix?.showRating) startShowRatingInterval(); - else if (isDisney || isHotstar) { - if (settings.Disney?.showRating) startShowRatingInterval(); - } else if (isPrimeVideo && settings.Amazon?.showRating) startShowRatingInterval(); - else if (isHBO && settings.HBO?.showRating) startShowRatingInterval(); - if (getDiffInDays(settings.General.GCdate, date) >= GCdiff) garbageCollection(); - }); - } - function logStartOfAddon() { - console.log("%cStreaming enhanced", "color: #00aeef;font-size: 2em;"); - console.log("version:", version); - console.log("Settings", settings); - if (isNetflix) console.log("Page %cNetflix", "color: #e60010;"); - else if (isPrimeVideo) console.log("Page %cAmazon", "color: #00aeef;"); - else if (isStarPlus) console.log("Page %cStarPlus", "color: #fe541c;"); - else if (isDisney) console.log("Page %cDisney", "color: #0682f0;"); - else if (isHotstar) console.log("Page %cHotstar", "color: #0682f0;"); - else if (isCrunchyroll) console.log("Page %cCrunchyroll", "color: #e67a35;"); - else if (isHBO) console.log("Page %cHBO", "color: #0836f1;"); - } - function startNetflix(Netflix) { - if (Netflix?.profile) AutoPickProfile(); - if (Netflix?.skipAd) Netflix_SkipAdInterval(); - NetflixObserver.observe(document, config); - } - function startAmazon(Amazon) { - AmazonSkipIntroObserver.observe(document, AmazonSkipIntroConfig); - if (settings?.Video?.doubleClick) Amazon_doubleClick(); - AmazonObserver.observe(document, config); - if (Amazon?.skipAd) Amazon_AdTimeout(); - if (Amazon?.blockFreevee) { - // timeout of 100 ms because the ad is not loaded fast enough and the video will crash - setTimeout(function () { - Amazon_FreeveeTimeout(); - }, 1000); - } - if (Amazon?.continuePosition) setTimeout(() => Amazon_continuePosition(), 500); - if (settings.Video?.userAgent && isMobile) Amazon_customizeMobileView(); - } - function startCrunchyroll(Crunchyroll) { - if (Crunchyroll?.releaseCalendar) Crunchyroll_ReleaseCalendar(); - if (Crunchyroll?.profile) { - let pickInterval = setInterval(function () { - Crunchyroll_AutoPickProfile(); - }, 100); - setTimeout(function () { - if (settings.Crunchyroll?.bigPlayer) Crunchyroll_bigPlayerStyle(); - }, 1000); - // only click on profile on page load not when switching profiles - setTimeout(function () { - clearInterval(pickInterval); - }, 2000); - CrunchyrollObserver.observe(document, config); - } - } - chrome.storage.sync.get("settings", function (result) { - // overwrite default settings with user settings - // List of keys to merge individually - settings.Amazon = { ...defaultSettings.settings.Amazon, ...result?.settings?.Amazon }; - settings.Netflix = { ...defaultSettings.settings.Netflix, ...result?.settings?.Netflix }; - settings.Disney = { ...defaultSettings.settings.Disney, ...result?.settings?.Disney }; - settings.Crunchyroll = { ...defaultSettings.settings.Crunchyroll, ...result?.settings?.Crunchyroll }; - settings.HBO = { ...defaultSettings.settings.HBO, ...result?.settings?.HBO }; - settings.Video = { ...defaultSettings.settings.Video, ...result?.settings?.Video }; - settings.Statistics = { ...defaultSettings.settings.Statistics, ...result?.settings?.Statistics }; - settings.General = { ...defaultSettings.settings.General, ...result?.settings?.General }; - - logStartOfAddon(); - if (isNetflix) startNetflix(settings.Netflix); - else if (isPrimeVideo) startAmazon(settings.Amazon); - else if (isDisney || isHotstar) { - if (isHotstar) Hotstar_doubleClick(); - DisneyObserver.observe(document, config); - setInterval(function () { - let video = Array.from(document.querySelectorAll("video")).find((v) => v.checkVisibility()); - if (settings.Disney?.skipAd) Disney_skipAd(video); - }, 300); - } else if (isCrunchyroll) startCrunchyroll(settings.Crunchyroll); - else if (isHBO) HBOObserver.observe(document, config); - if (settings?.Video?.playOnFullScreen) startPlayOnFullScreen(); - getDBCache(); - }); - chrome.storage.local.onChanged.addListener(function (changes) { - if (changes?.DBCache) DBCache = changes.DBCache.newValue; - }); - chrome.storage.sync.onChanged.addListener(function (changes) { - if (changes?.settings) { - const { oldValue, newValue } = changes.settings; - settings = newValue; - log("settings", "Old value:", oldValue, ", new value:", newValue); - if (isNetflix) NetflixSettingsChanged(oldValue?.Netflix, newValue?.Netflix); - else if (isPrimeVideo) AmazonSettingsChanged(oldValue?.Amazon, newValue?.Amazon); - else if (isDisney || isHotstar) DisneySettingsChanged(oldValue?.Disney, newValue?.Disney); - else if (isHBO) HBOSettingsChanged(oldValue?.HBO, newValue?.HBO); - - if (!oldValue || newValue.Video.playOnFullScreen !== oldValue?.Video?.playOnFullScreen) startPlayOnFullScreen(); - if (!oldValue || newValue.Video.doubleClick !== oldValue?.Video?.doubleClick) Amazon_doubleClick(); - if (oldValue?.Video?.userAgent != undefined && newValue.Video.userAgent !== oldValue?.Video?.userAgent) location.reload(); - } - }); - function NetflixSettingsChanged(oldValue, newValue) { - if (!oldValue?.skipAd && newValue.skipAd) Netflix_SkipAdInterval(); - if (!oldValue?.showRating && newValue.showRating) startShowRatingInterval(); - } - function AmazonSettingsChanged(oldValue, newValue) { - if (!oldValue?.skipAd && newValue.skipAd) Amazon_AdTimeout(); - if (!oldValue?.blockFreevee && newValue.blockFreevee) Amazon_FreeveeTimeout(); - if (!oldValue?.continuePosition && newValue.continuePosition) Amazon_continuePosition(); - if (!oldValue?.showRating && newValue.showRating) startShowRatingInterval(); - } - function DisneySettingsChanged(oldValue, newValue) { - if (!oldValue?.showRating && newValue.showRating) startShowRatingInterval(); - } - function HBOSettingsChanged(oldValue, newValue) { - if (!oldValue?.showRating && newValue.showRating) startShowRatingInterval(); - } - async function addSkippedTime(startTime, endTime, key) { - if (typeof startTime === "number" && typeof endTime === "number" && endTime > startTime) { - log(key, endTime - startTime); - settings.Statistics[key] += endTime - startTime; - increaseBadge(); - } - } - // ...args - function log(...args) { - console.log(date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds(), ...args); - } - // set DB Cache if cache size under 2MB - async function setDBCache() { - const size = new TextEncoder().encode(JSON.stringify(DBCache)).length; - const kiloBytes = size / 1024; - const megaBytes = kiloBytes / 1024; - if (megaBytes < 5) { - log("updateDBCache size:", megaBytes.toFixed(4) + " MB"); - chrome.storage.local.set({ DBCache }); - } else { - log("DBCache cleared", megaBytes); - DBCache = {}; - chrome.storage.local.set({ DBCache }); - } - } - async function getMovieInfo(title, card, media_type = null, year = null) { - // justwatch api - // const url = `https://apis.justwatch.com/content/titles/${locale}/popular?language=en&body={"page_size":1,"page":1,"query":"${title}","content_types":["show","movie"]}`; - let locale = htmlLang || navigator?.language || "en-US"; - const queryType = media_type || "multi"; - let url = `https://api.themoviedb.org/3/search/${queryType}?query=${encodeURI(title)}&include_adult=false&language=${locale}&page=1`; - if (year) url += `&year=${year}`; - // const response = await fetch(encodeURI(url)); - // const data = await response.json(); - try { - chrome.runtime.sendMessage({ url }, function (data) { - if (data != undefined && data != "") { - // themoviedb - let compiledData = {}; - const movie = data?.results?.[0]; - compiledData = { - id: movie?.id, - media_type: queryType == "multi" ? movie?.media_type : queryType, - score: movie?.vote_average, - vote_count: movie?.vote_count, - release_date: movie?.release_date || movie?.first_air_date, - title: movie?.title || movie?.original_title || movie?.name || movie?.original_name, - date: today, - db: "tmdb", - }; - // if ( - // compiledData?.title && - // !compiledData.title - // .toLowerCase() - // .replace(":", "") - // .replace("-", "") - // .replace(",", "") - // .includes(title.toLowerCase().replace(":", "").replace("-", "").replace(",", "")) - // ) { - // console.log( - // "Title mismatch", - // title.replace(":", "").replace("-", "").replace(",", "") + "><" + compiledData.title.replace(":", "").replace("-", "").replace(",", "") - // ); - // } - DBCache[title] = compiledData; - setRatingOnCard(card, compiledData, title); - } - }); - } catch (error) { - log(error); - if (error.toString().includes("Extension context invalidated")) { - location.reload(); - } - } - } - - // ----------------------- functions --------------------------------- - // default Options for the observer (which mutations to observe) - const config = { attributes: true, childList: true, subtree: true }; - // #region Shared funcs - // shared functions - // show rating depending on page - const uuidRegex = /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/g; - function showRating() { - if (isDisney) { - url = window.location.href; - // disable search and suggested movies - if (url.includes("search")) return false; - if (url.includes("entity")) { - const SelectedTab = document.querySelector('[aria-selected="true"]'); - return uuidRegex.test(SelectedTab?.id.split("_control")[0]) && SelectedTab?.getAttribute("aria-label") != "EXTRAS"; - } - return true; - } else if (isPrimeVideo) { - // suggested movies - if (window.location.href.includes("detail")) { - return document.querySelector('[data-testid="btf-related-tab"]')?.tabIndex == 0; - } - return true; - } else return true; - } - async function startShowRatingInterval() { - if (showRating()) addRating(); - let RatingInterval = setInterval(function () { - if ( - (isNetflix && !settings.Netflix?.showRating) || - (isPrimeVideo && !settings.Amazon?.showRating) || - ((isDisney || isHotstar) && !settings.Disney?.showRating) || - (isHBO && !settings.HBO?.showRating) - ) { - log("stopped adding Rating"); - clearInterval(RatingInterval); - return; - } - if (showRating()) addRating(); - }, 1000); - } - function getDiffInDays(firstDate, secondDate) { - if (!firstDate || !secondDate) return 31; - return Math.round(Math.abs(new Date(secondDate).getTime() - new Date(firstDate).getTime()) / (1000 * 60 * 60 * 24)); - } - function useDBCache(title, card, media_type) { - if (!DBCache[title]?.date) DBCache[title].date = today; - const vote_count = DBCache[title]?.vote_count || 100; - const diffInReleaseDate = - // vote count is under 80 inaccurate rating - vote_count < 100 && - // did not refresh rating in the last 0 days - getDiffInDays(DBCache[title].date, date) > 0 && - // release date is in the last 50 days after not many people will - getDiffInDays(DBCache[title]?.release_date, date) <= 50; - - // refresh rating if older than 30 days or release date is in last month and vote count is under 100 - if (getDiffInDays(DBCache[title].date, date) >= GCdiff || diffInReleaseDate) { - if (diffInReleaseDate) - log("update recent movie:", title, ",Age:", getDiffInDays(DBCache[title]?.release_date, date), "Vote count:", vote_count); - else log("update old rating:", title, ",Age:", getDiffInDays(DBCache[title].date, date)); - getMovieInfo(title, card, media_type); - // log("no info today", title); - } else { - setRatingOnCard(card, DBCache[title], title); - } - } - function getMediaType(type) { - if (!type) return null; - if (type.toLowerCase().includes("tv")) return "tv"; - if (type.toLowerCase().includes("movie")) return "movie"; - return null; - } - async function addRating() { - url = window.location.href; - let AllTitleCardsTypes; - if (isNetflix) AllTitleCardsTypes = [document.querySelectorAll(".title-card .boxart-container:not(.imdb)")]; - else if (isDisney) AllTitleCardsTypes = [document.querySelectorAll("a[data-testid='set-item']:not(.imdb)")]; - else if (isHotstar) AllTitleCardsTypes = [document.querySelectorAll(".swiper-slide img:not(.imdb)")]; - else if (isHBO) AllTitleCardsTypes = [document.querySelectorAll("a[class*='StyledTileLinkNormal-Beam-Web-Ent']:not(.imdb)")]; - else if (isPrimeVideo) - AllTitleCardsTypes = [ - document.querySelectorAll("li:not(.imdb) article[data-card-title]:not([data-card-entity-type='EVENT']):not([data-card-title='Live-TV'])"), - document.querySelectorAll("article[data-testid*='-card']:not(.imdb):not(:has(a#rating))"), - ]; - // on disney there are multiple images for the same title so only use the first one - let lastTitle = ""; - // for each is not going in order on chrome - let updateDBCache = false; - for (let type = 0; type < AllTitleCardsTypes.length; type++) { - const titleCards = AllTitleCardsTypes[type]; - let media_type = null; - for (let i = 0; i < titleCards.length; i++) { - let card = titleCards[i]; - // add seen class - if (isNetflix || isDisney || isHotstar || isHBO) card.classList.add("imdb"); - else if (isPrimeVideo) { - if (type == 0) card?.closest("li")?.classList.add("imdb"); - else if (type == 1) card?.classList.add("imdb"); - } - let title; - if (isNetflix) { - title = card?.parentElement?.getAttribute("aria-label")?.split(" (")[0]; - if (url.includes("genre/83")) media_type = "tv"; - else if (url.includes("genre/34399")) media_type = "movie"; - } else if (isDisney) { - title = card?.getAttribute("aria-label")?.replace(" Disney+ Original", "")?.replace(" STAR Original", ""); - // no section Extras on disney shows - if (url.includes("entity")) { - const SelectedTabId = document.querySelector('[aria-selected="true"]')?.id.split("_control")[0]; - if (SelectedTabId != card.closest('div[role="tabpanel"]')?.id) title = ""; - } - if (url.includes("browse/series")) media_type = "tv"; - else if (url.includes("browse/movies")) media_type = "movie"; - else if (/(Staffel)|(Nummer)|(Season)|(Episod)|(Number)/g.test(title)) media_type = "tv"; - // german translation - if (htmlLang == "de") { - title = title - ?.replace(/Nummer \d* /, "") - .split(" Für Details")[0] - .split(" Staffel")[0] - .split("Staffel")[0] - .split(" Neue")[0] - .split(" Alle")[0] - .split(" Demnächst")[0] - .split(" Altersfreigabe")[0] - .split(" Mach dich bereit")[0] // deadpool - //did not find translation - .split(" Jeden")[0] - .split(" Noch")[0] - .split(" Premiere")[0]; - } else if (htmlLang == "en") { - title = title - ?.replace(/Number \d* /, "") - .replace(" Select for details on this title.", "") - .split(" Season")[0] - .split("Season")[0] - .split(" New ")[0] - .split(" All Episodes")[0] - .split(" Coming")[0] - .split(" Two-Episode")[0] - .split(" Rated")[0] - .split(" Prepare for")[0] // deadpool - //did not find translation - .split(" Streaming ")[0] - //did not find translation - .replace(/ \d+ minutes remaining/g, ""); - } - } else if (isHotstar) title = card?.getAttribute("alt")?.replace(/(S\d+\sE\d+)/g, ""); - else if (isPrimeVideo) { - function fixTitle(title) { - return ( - title - ?.split(" - ")[0] - ?.split(" – ")[0] - ?.replace(/(S\d+)/g, "") - ?.replace(/ \[.*\]/g, "") - ?.replace(/\s\(.*\)/g, "") - ?.replace(/:?\sStaffel-?\s\d+/g, "") - ?.replace(/:?\sSeason-?\s\d+/g, "") - ?.replace(/ \/ \d/g, "") - ?.split(": Die komplette")[0] - // nicht sicher - ?.split(": The complete")[0] - ); - } - // detail means not live shows - if (card.querySelector("a").href.includes("detail")) { - if (type == 0) title = fixTitle(card.getAttribute("data-card-title")); - else if (type == 1) title = fixTitle(card.querySelector("a")?.getAttribute("aria-label")); - } - if (url.includes("video/tv")) media_type = "tv"; - else if (url.includes("video/movie")) media_type = "movie"; - else media_type = getMediaType(card.getAttribute("data-card-entity-type")); - } else if (isHBO) title = card.querySelector("p[class*='md_strong-Beam-Web-Ent']")?.textContent; - // for the static Pixar Disney, Starplus etc. cards - if (!isDisney || !card?.classList.contains("_1p76x1y4")) { - // sometimes more than one image is loaded for the same title - if (title && lastTitle != title && !title.includes("Netflix") && !title.includes("Prime Video")) { - lastTitle = title; - console.log("Title:", title, media_type); - if ( - (DBCache[title]?.score || getDiffInDays(DBCache[title]?.date, date) <= 7) && - (!media_type || DBCache[title]?.media_type == media_type) - ) { - useDBCache(title, card, media_type); - } else { - getMovieInfo(title, card, media_type); - updateDBCache = true; - } - } - } - } - } - if (updateDBCache) { - setTimeout(function () { - setDBCache(); - }, 5000); - } - } - function getColorForRating(rating, lowVoteCount) { - // I want a color gradient from red to green with yellow in the middle - // the ratings are between 0 and 10 - // the average rating is 6.5 - // https://distributionofthings.com/imdb-movie-ratings/ - if (!rating || lowVoteCount) return "grey"; - if (rating <= 5.5) return "red"; - if (rating <= 7) return "rgb(245, 197, 24)"; //#f5c518 - return "rgb(0, 166, 0)"; - } - function getTMDBUrl(id, media_type) { - return `https://www.themoviedb.org/${media_type}/${id}`; - } - - async function setRatingOnCard(card, data, title) { - let div = document.createElement(data?.id ? "a" : "div"); - if (data?.id) { - div.href = getTMDBUrl(data.id, data.media_type); - div.target = "_blank"; - } - const vote_count = data?.vote_count || 100; - // right: 1.5vw; - div.id = "rating"; - div.style = - "position: absolute;bottom: 0;color: black;text-decoration: none;background:" + - getColorForRating(data?.score, vote_count < 50) + - ";border-radius: 5px;padding: 0 2px 0 2px;" + - (isNetflix ? "right:0.2vw;" : "right:0;") + - (isDisney ? "" : "z-index: 9999;") + - (isMobile ? "font-size: 4vw;" : "font-size: 1vw;"); - - // div.id = "imdb"; - if (data?.score >= 0) { - let releaseDate = ""; - if (settings.Video?.showYear && data?.release_date) { - releaseDate = new Date(data?.release_date)?.getFullYear() + "-"; - // const year = new Date(data?.release_date)?.getYear(); - // releaseDate = year >= 100 ? (year + " ").substring(1) : year + " "; - } - div.textContent = releaseDate + data.score?.toFixed(1); - div.setAttribute("alt", data?.title + ", OG title: " + title + ", Vote count: " + vote_count); - } else { - div.textContent = "?"; - div.setAttribute("alt", title); - log("no score found:", title, data); - } - if (isNetflix) { - card.closest(".title-card-container")?.appendChild(div); - } else if (isHBO) card.appendChild(div); - else if (isDisney) { - const parentDiv = card?.closest("div"); - if (parentDiv) { - if (card.nextElementSibling) { - div.style.top = card.offsetHeight + "px"; - div.style.bottom = ""; - } - parentDiv.style.position = "relative"; - parentDiv.appendChild(div); - } - } else if (isHotstar) card.parentElement.appendChild(div); - else if (isPrimeVideo) { - if (card.getAttribute("data-card-title")) card.firstChild.firstChild.appendChild(div); - else if (card.querySelector('div[data-testid="title-metadata-main"]')) { - card.querySelector('div[data-testid="title-metadata-main"]').appendChild(div); - } else card.appendChild(div); - } - } - function OnFullScreenChange() { - let video; - if (isNetflix || isDisney || isHotstar || isHBO) video = document.querySelector("video"); - else video = document.querySelector(AmazonVideoClass); - if (window.fullScreen && video) { - video.play(); - log("auto-played on fullscreen"); - increaseBadge(); - } - } - async function startPlayOnFullScreen() { - if (settings.Video?.playOnFullScreen) { - addEventListener("fullscreenchange", OnFullScreenChange); - } else { - removeEventListener("fullscreenchange", OnFullScreenChange); - } - } - // #endregion - // #region Disney - // Disney Observers - const DisneyObserver = new MutationObserver(Disney); - function Disney() { - // first ad not first video - let video = Array.from(document.querySelectorAll("video")).find((v) => v.checkVisibility()); - const time = video?.currentTime; - if (settings.Disney?.skipIntro) Disney_Intro(video, time); - Disney_skipCredits(time); - if (settings.Disney?.watchCredits) Disney_Watch_Credits(); - if (settings.Disney?.speedSlider) Disney_SpeedSlider(video); - if (isDisney) { - Disney_addHomeButton(); - if (settings.Disney?.selfAd) Disney_selfAd(video, time); - } - if (settings.Video?.scrollVolume) Disney_scrollVolume(video); - } - async function Disney_skipAd(video) { - if (video) { - const adTimeText = document.querySelector("div.overlay_interstitials__content_time_display"); - if (adTimeText) { - const adTime = parseAdTime(adTimeText.textContent); - if (adTime >= 1 && lastAdTimeText != video.currentTime) { - if (lastAdTimeText == 0) { - log("Disney Ad skipped, length:", adTime, "s"); - settings.Statistics.DisneyAdTimeSkipped += adTime; - increaseBadge(); - } - lastAdTimeText = video.currentTime; - video.currentTime += adTime; - } - } else lastAdTimeText = 0; - // remove das video wird nach der pause fortgesetzt text after skipping ad - const continueText = document.querySelector("p.toast-notification__text[aria-hidden='true']"); - if (continueText?.checkVisibility()) { - continueText.remove(); - increaseBadge(); - } - } - } - async function Disney_scrollVolume(video) { - const volumeControl = document.querySelector("div.audio-control:not(.enhanced)"); - if (volumeControl) { - volumeControl.classList.add("enhanced"); - volumeControl?.addEventListener("wheel", (event) => { - let volume = video.volume; - if (event.deltaY < 0) volume = Math.min(1, volume + 0.1); - else volume = Math.max(0, volume - 0.1); - video.volume = volume; - const sliderContainer = volumeControl.querySelector(".slider-container"); - sliderContainer.firstChild.children[1].style.strokeDashoffset = 100 - volume * 100 + "px"; - sliderContainer.children[1].style.height = volume * 100 + "%"; - sliderContainer.children[2].style.height = volume * 100 + "%"; - }); - } - } - - async function Disney_Intro(video, time) { - // intro star wars andor Season 1 episode 2 - // Recap Criminal Minds Season 1 Episode 2 - let button; - if (isDisney) { - const skipCreditsButton = isStarPlus - ? document.querySelector('[data-gv2elementkey="playNext"]') - : document.querySelector('[data-testid="playback-action-button"]'); - if (!skipCreditsButton) button = document.querySelector(".skip__button"); - } else button = document.evaluate("//span[contains(., 'Skip Intro')]", document, null, XPathResult.ANY_TYPE, null)?.iterateNext()?.parentElement; - if (button) { - button.click(); - log("Intro/Recap skipped", button); - setTimeout(function () { - addSkippedTime(time, video?.currentTime, "Intro/RecapTimeSkipped"); - }, 600); - } - // // if intro/recap time starts at 0 there is no skip button so always rewind to 0 - // if (isDisney && video?.play && SetTimeToZeroOnce != video.src) { - // if (video.currentTime > 0.2 && video.currentTime < 5) { - // log("reset time to", video.currentTime); - // video.currentTime = 0; - // SetTimeToZeroOnce = video.src; - // } - // } - } - async function Disney_skipCredits(currentTime) { - let button; - if (isStarPlus) button = document.querySelector('[data-gv2elementkey="playNext"]'); - else if (isDisney && !document.querySelector('[data-testid="playback-action-button"]')) - button = document.querySelector('[data-testid="icon-restart"]')?.parentElement; - else button = document.evaluate("//span[contains(., 'Next Episode')]", document, null, XPathResult.ANY_TYPE, null)?.iterateNext()?.parentElement; - if (button) { - // time is to avoid clicking too fast - const time = parseInt(currentTime); - if (time && lastAdTimeText != time) { - const videoFullscreen = document.fullscreenElement !== null; - lastAdTimeText = time; - if (settings.Disney?.skipCredits) { - button.click(); - log("Credits skipped", button); - increaseBadge(); - resetLastATimeText(); - } - if (!isHotstar) { - // keep video fullscreen - setTimeout(function () { - if (videoFullscreen && document.fullscreenElement == null) { - chrome.runtime.sendMessage({ type: "fullscreen" }); - function resetFullscreen() { - chrome.runtime.sendMessage({ type: "exitFullscreen" }); - log("exitFullscreen"); - removeEventListener("fullscreenchange", resetFullscreen); - } - addEventListener("fullscreenchange", resetFullscreen); - document.onkeydown = function (evt) { - if ("key" in evt && (evt.key === "Escape" || evt.key === "Esc")) { - chrome.runtime.sendMessage({ type: "exitFullscreen" }); - } - }; - log("fullscreen"); - } - }, 1000); - } - } - } - } - async function Disney_addHomeButton() { - // add home button to the end of the credits - const buttonDiv = document.querySelector('[data-testid="browser-action-button"]')?.parentElement; - if (buttonDiv && !document.querySelector("#homeButton")) { - const homeButton = document.createElement("button"); - homeButton.textContent = chrome.i18n.getMessage("HomeButton"); - homeButton.id = "homeButton"; - homeButton.style = - 'color: white;background-color: #40424A;border: rgb(64, 66, 74);border-radius: 5px;padding: 0 2px 0 2px;height: 56px;padding-left: 24px;padding-right: 24px;letter-spacing: 1.76px;font-size: 15px; text-transform: uppercase;cursor: pointer;font-family:"Avenir-World-for-Disney-Demi", sans-serif;'; - // add hover effect - homeButton.onmouseover = function () { - homeButton.style.backgroundColor = "#474a53"; - }; - homeButton.onmouseout = function () { - homeButton.style.backgroundColor = "#40424A"; - }; - homeButton.onclick = function () { - window.location.href = "/"; - }; - buttonDiv.appendChild(homeButton); - } - } - async function Disney_Watch_Credits() { - let button; - if (isStarPlus) button = document.querySelector('[data-gv2elementkey="playNext"]'); - else if (isDisney && !document.querySelector('[data-testid="playback-action-button"]')) - button = document.querySelector('[data-testid="icon-restart"]')?.parentElement; - else button = document.evaluate("//span[contains(., 'Next Episode')]", document, null, XPathResult.ANY_TYPE, null)?.iterateNext()?.parentElement; - if (button) { - // only skip if the next video is the next episode of a series (there is a timer) - let time; - if (isDisney) time = /\d+/.exec(button.textContent)?.[0]; - if ( - (isHotstar && !document.evaluate("//span[contains(., 'My Space')]", document, null, XPathResult.ANY_TYPE, null)?.iterateNext()) || - (time && lastAdTimeText != time) - ) { - let video = document.querySelector("video"); - if (video) { - video.click(); - lastAdTimeText = time; - log("Credits Watched", button); - increaseBadge(); - resetLastATimeText(); - } - } - } - } - function createSlider(video, position, sliderStyle, speedStyle, divStyle = "") { - videoSpeed = videoSpeed || video.playbackRate; - - let slider = document.createElement("input"); - slider.id = "videoSpeedSlider"; - slider.type = "range"; - slider.min = settings.General.sliderMin; - slider.max = settings.General.sliderMax; - slider.value = videoSpeed * 10; - slider.step = settings.General.sliderSteps; - slider.style = sliderStyle; - - let speed = document.createElement("p"); - speed.id = "videoSpeed"; - speed.textContent = videoSpeed ? videoSpeed.toFixed(1) + "x" : "1.0x"; - speed.style = speedStyle; - if (divStyle) { - let div = document.createElement("div"); - div.style = divStyle; - div.appendChild(slider); - div.appendChild(speed); - position.prepend(div); - } else position.prepend(slider, speed); - - if (videoSpeed) video.playbackRate = videoSpeed; - speed.onclick = function () { - slider.style.display = slider.style.display === "block" ? "none" : "block"; - }; - slider.oninput = function () { - speed.textContent = (this.value / 10).toFixed(1) + "x"; - video.playbackRate = this.value / 10; - setVideoSpeed(this.value / 10); - }; - - return { slider, speed }; - } - - const DisneySliderStyle = "pointer-events: auto;background: rgb(221, 221, 221);display: none;width:200px;"; - const DisneySpeedStyle = "height:10px;min-width:40px;color:#f9f9f9;pointer-events: auto;position: relative;bottom: 8px;padding: 0 5px;"; - async function Disney_SpeedSlider(video) { - if (video) { - let alreadySlider = document.querySelector("#videoSpeedSlider"); - if (!alreadySlider) { - // infobar position for the slider to be added - let position; - if (isDisney) position = document.querySelector(".controls__right"); - else position = document.querySelector(".icon-player-landscape")?.parentElement?.parentElement?.parentElement?.parentElement; - if (position) createSlider(video, position, DisneySliderStyle, DisneySpeedStyle); - } else { - // need to resync the slider with the video sometimes - let speed = document.querySelector("#videoSpeed"); - if (video.playbackRate != alreadySlider.value / 10) { - video.playbackRate = alreadySlider.value / 10; - } - alreadySlider.oninput = function () { - speed.textContent = (this.value / 10).toFixed(1) + "x"; - video.playbackRate = this.value / 10; - setVideoSpeed(this.value / 10); - }; - } - } - } - - async function Disney_selfAd(video, time) { - if (isDisney) { - let button = document.querySelector(".overlay_interstitials__promo_skip_button"); - if (button) { - button.click(); - log("SelfAd skipped", button); - setTimeout(function () { - addSkippedTime(time, video?.currentTime, "selfAdkipped"); - }, 600); - } - } - } - - async function Hotstar_doubleClick() { - if (settings.Video?.doubleClick) { - // event listener for double click - document.ondblclick = function () { - document.querySelector(".icon-player-landscape")?.closest("button")?.click(); - document.querySelector(".icon-player-portrait")?.closest("button")?.click(); - }; - } else { - document.ondblclick = null; - } - } - // #endregion - // #region Netflix - // Netflix Observer - const NetflixObserver = new MutationObserver(Netflix); - function Netflix() { - const video = document.querySelector("video"); - const time = video?.currentTime; - const NSettings = settings.Netflix; - if (NSettings?.profile) Netflix_profile(); - if (NSettings?.skipIntro) { - if (Netflix_General('[data-uia="player-skip-intro"]', "Intro skipped", false)) { - setTimeout(function () { - addSkippedTime(time, video?.currentTime, "IntroTimeSkipped"); - }, 600); - } - } - if (NSettings?.skipRecap) { - if ( - Netflix_General('[data-uia="player-skip-recap"]', "Recap skipped", false) || - Netflix_General('[data-uia="player-skip-preplay"]', "Recap skipped", false) - ) { - setTimeout(function () { - addSkippedTime(time, video?.currentTime, "RecapTimeSkipped"); - }, 600); - } - } - if (NSettings?.skipCredits) Netflix_General('[data-uia="next-episode-seamless-button"]', "Credits skipped"); - if (NSettings?.watchCredits) Netflix_General('[data-uia="watch-credits-seamless-button"]', "Credits watched"); - if (NSettings?.skipBlocked) Netflix_General('[data-uia="interrupt-autoplay-continue"]', "Blocked skipped"); - if (NSettings?.speedSlider) Netflix_SpeedSlider(video); - if (settings.Video?.scrollVolume) Netflix_scrollVolume(video); - } - async function Netflix_scrollVolume(video) { - const volumeControl = document.querySelector('[data-uia*="control-volume"]:not(.enhanced)'); - if (volumeControl) { - volumeControl.classList.add("enhanced"); - const handleVolumeControl = (event) => { - let volume = video.volume; - if (event.deltaY < 0) volume = Math.min(1, volume + 0.05); - else volume = Math.max(0, volume - 0.05); - video.volume = volume; - }; - removeEventListener("wheel", handleVolumeControl); - volumeControl?.addEventListener("wheel", handleVolumeControl); - } - } - // to parse html umlaut symbols like ä to ä - function decodeHtmlEntities(str) { - return new DOMParser().parseFromString("" + str, "text/html").body.textContent; - } - function Netflix_profile() { - // AutoPickProfile(); - let currentProfile = document.querySelector("[href*='/YourAccount']"); - if (currentProfile) { - // there is a space before the - thats why slice -1 - const currentProfileName = decodeHtmlEntities(currentProfile?.getAttribute("aria-label")?.split("–")?.[0].split("-")?.[0].slice(0, -1)); - if (currentProfileName && currentProfileName !== settings.General.profileName) { - // small profile picture - settings.General.profilePicture = currentProfile?.firstChild?.firstChild?.src; - settings.General.profileName = currentProfileName; - setStorage(); - log("Profile switched to", currentProfileName); - } - } - } - function AutoPickProfile() { - if (!window.location.pathname.includes("Profile") && !window.location.pathname.includes("profile")) { - let profileButtons = document.querySelectorAll(".profile-name"); - profileButtons.forEach((button) => { - if (button.textContent === settings.General.profileName) { - // big profile picture - // slice(4, -1) to remove the url(" ") from the string - settings.General.profilePicture = button?.parentElement?.firstChild?.firstChild?.style?.backgroundImage?.slice(5, -2); - button?.parentElement.click(); - log("Profile automatically chosen:", settings.General.profileName); - increaseBadge(); - } - }); - } - } - function Netflix_General(selector, name, incBadge = true) { - const button = document.querySelector(selector); - if (button) { - log(name, button); - button.click(); - if (incBadge) increaseBadge(); - return true; - } - return false; - } - function Netflix_SkipAdInterval() { - let AdInterval = setInterval(() => { - if (!settings.Netflix?.skipAd) { - log("stopped observing| Ad"); - clearInterval(AdInterval); - return; - } - const video = document.querySelector("video"); - // .default-ltr-cache-mmvz9h or ltr-mmvz9h - const adLength = Number(document.querySelector('span[class*="mmvz9h"]')?.textContent); - // 16 max but too fast - if (video) { - let playBackRate = 8; - if (isEdge) playBackRate = 3; - if ((adLength || lastAdTimeText) && video.paused) { - video.play(); - } - if (adLength > 8 && video.playbackRate != playBackRate) { - log("Ad skipped, length:", adLength, "s"); - settings.Statistics.NetflixAdTimeSkipped += adLength; - increaseBadge(); - if (settings.Video.epilepsy) video.style.opacity = 0; - video.muted = true; - video.playbackRate = playBackRate; - lastAdTimeText = adLength; - } else if (adLength > 2 && video.playbackRate < 2) { - video.playbackRate = adLength / 2; - lastAdTimeText = adLength; - } // added lastAdTimeText because other speedsliders are not working anymore - else if (adLength <= 2 || (!adLength && lastAdTimeText)) { - // videospeed is speedSlider value - video.muted = false; - video.playbackRate = videoSpeed; - lastAdTimeText = 0; - if (settings.Video.epilepsy) video.style.opacity = 1; - } - } - // pause video shows ad - // sherlock show comes alot. - const div = document.querySelector('div[data-uia="pause-ad-title-display"]'); - const button = document.querySelector('button[data-uia="pause-ad-expand-button"]'); - if ( - button && - div.checkVisibility({ opacityProperty: true }) && - (!video || (video.paused && lastAdTimeText != parseInt(video.currentTime / 10))) - ) { - lastAdTimeText = parseInt(video.currentTime / 10); - resetLastATimeText(); - button.click(); - log("Remove Video Paused ad", button); - increaseBadge(); - setTimeout(() => { - // not always a video is showing on next episode apparently - (video || document.querySelector("video")).pause(); - }, 100); - } - }, 100); - } - const NetflixSliderStyle = "display: none;width:200px;"; - const NetflixSpeedStyle = "font-size: 3em;padding: 0 5px;margin: unset;align-content: center;"; - function Netflix_SpeedSlider(video) { - // only add speed slider on lowest subscription tier - // && !document.querySelector('[data-uia="control-speed"]') - if (video) { - let alreadySlider = document.querySelector("#videoSpeedSlider"); - if (!alreadySlider) { - let p = document.querySelector('[data-uia="controls-standard"]')?.firstChild?.children; - if (p) { - // infobar position for the slider to be added - let position = p[p.length - 2]?.firstChild?.lastChild; - if (position) createSlider(video, position, NetflixSliderStyle, NetflixSpeedStyle); - } - } - } - } - // #endregion - // #region Amazon - // Amazon Observers - const AmazonVideoClass = ".dv-player-fullscreen video"; - const AmazonObserver = new MutationObserver(Amazon); - - function Amazon() { - if (settings.Amazon?.filterPaid) Amazon_FilterPaid(); - const video = document.querySelector(AmazonVideoClass); - if (settings.Amazon?.skipCredits) Amazon_Credits(); - if (settings.Amazon?.watchCredits) Amazon_Watch_Credits(); - if (settings.Amazon?.speedSlider) Amazon_SpeedSlider(video); - if (settings.Amazon?.xray) Amazon_xray(); - if (settings.Video?.scrollVolume) Amazon_scrollVolume(); - } - const AmazonSkipIntroConfig = { attributes: true, attributeFilter: [".skipelement"], subtree: true, childList: true, attributeOldValue: false }; - // const AmazonSkipIntro = new RegExp("skipelement", "i"); - const AmazonSkipIntroObserver = new MutationObserver(Amazon_Intro); - - async function Amazon_scrollVolume() { - const volumeControl = document.querySelector('[aria-label="Volume"]:not(.enhanced)'); - if (volumeControl) { - volumeControl.classList.add("enhanced"); - volumeControl?.addEventListener("wheel", (event) => { - const video = document.querySelector(AmazonVideoClass); - let volume = video.volume; - if (event.deltaY < 0) volume = Math.min(1, volume + 0.1); - else volume = Math.max(0, volume - 0.1); - video.volume = volume; - }); - } - } - let lastIntroTime = -1; - function resetLastIntroTime() { - setTimeout(() => { - lastIntroTime = -1; - }, 5000); - } - function Amazon_Intro() { - if (settings.Amazon?.skipIntro) { - // skips intro and recap - // recap on lucifer season 3 episode 3 - // intro lucifer season 3 episode 4 - let button = document.querySelector("[class*=skipelement]"); - if (button) { - let video = document.querySelector(AmazonVideoClass); - const time = video?.currentTime; - if (typeof time === "number" && lastIntroTime != parseInt(time)) { - lastIntroTime = parseInt(time); - resetLastIntroTime(); - button.click(); - log("Intro skipped", button); - //delay where the video is loaded - setTimeout(function () { - AmazonGobackbutton(video, time, video.currentTime); - addSkippedTime(time, video.currentTime, "IntroTimeSkipped"); - }, 50); - } - } - } - } - let reverseButton = false; - async function AmazonGobackbutton(video, startTime, endTime) { - if (!reverseButton) { - reverseButton = true; - // go back button - const button = document.createElement("button"); - button.style = "padding: 0px 22px; line-height: normal; min-width: 0px;z-index:999;pointer-events:all;"; - button.setAttribute("class", "fqye4e3 f1ly7q5u fk9c3ap fz9ydgy f1xrlb00 f1hy0e6n fgbpje3 f1uteees f1h2a8xb f1cg7427 fiqc9rt fg426ew f1ekwadg"); - button.setAttribute("data-uia", "reverse-button"); - button.textContent = chrome.i18n.getMessage("WatchSkippedButton"); - document.querySelector(".atvwebplayersdk-action-buttons").appendChild(button); - let buttonInHTML = document.querySelector('[data-uia="reverse-button"]'); - function goBack() { - video.currentTime = startTime; - buttonInHTML.remove(); - log("stopped observing| Intro"); - AmazonSkipIntroObserver.disconnect(); - const waitTime = endTime - startTime + 2; - //log("waiting for:", waitTime); - setTimeout(function () { - log("restarted observing| Intro"); - AmazonSkipIntroObserver.observe(document, AmazonSkipIntroConfig); - }, waitTime * 1000); - } - buttonInHTML.addEventListener("click", goBack); - setTimeout(() => { - buttonInHTML.remove(); - reverseButton = false; - }, 5000); - } - } - async function Amazon_Credits() { - const button = document.querySelector("[class*=nextupcard-button]"); - if (button) { - // only skipping to next episode not an entirely new series - const newEpNumber = document.querySelector("[class*=nextupcard-episode]"); - if (newEpNumber && !/(? { - deletePaidCategory(a); - }); - } - } - async function deletePaidCategory(a) { - // if the section is mostly paid content delete it - // -2 because sometimes there are title banners - if ( - a.children.length - a.querySelectorAll('[data-hidden="true"]').length - 2 <= - a.querySelectorAll("[data-testid='card-overlay'] svg.NbhXwl").length - ) { - const section = a.closest('[class="+OSZzQ"]'); - log("Filtered paid category", section); - section?.remove(); - increaseBadge(); - } - // remove individual paid elements - else { - a.querySelectorAll("li:has(svg.NbhXwl)").forEach((b) => { - log("Filtered paid Element", b); - b.remove(); - increaseBadge(); - }); - } - } - function Amazon_FreeveeTimeout() { - // set loop every 1 sec and check if ad is there - let AdInterval = setInterval(function () { - if (!settings.Amazon.blockFreevee) { - log("stopped observing| FreeVee Ad"); - clearInterval(AdInterval); - return; - } - let video = document.querySelector(AmazonVideoClass); - if (video && !video.paused && video.currentTime > 0) { - // && !video.paused - skipAd(video); - } - }, 100); - } - function parseAdTime(adTimeText) { - const adTime = parseInt(/:\d+/.exec(adTimeText)?.[0].substring(1)) + parseInt(/\d+/.exec(adTimeText)?.[0]) * 60; - if (isNaN(adTime)) return false; - return adTime; - } - async function skipAd(video) { - // Series grimm - // there area multiple adtime texts, the dv-player-fullscreen is the correct one - const adTimeText = document.querySelector(".dv-player-fullscreen .atvwebplayersdk-ad-timer-text"); - if (adTimeText?.checkVisibility()) { - let adTime; - adTime = parseAdTime(adTimeText?.childNodes?.[0]?.textContent); - if (!adTime) adTime = parseAdTime(adTimeText?.childNodes?.[1]?.textContent); - // !document.querySelector(".fu4rd6c.f1cw2swo") so it doesn't try to skip when the self ad is playing - if (!document.querySelector(".fu4rd6c.f1cw2swo") && adTime > 1 && !lastAdTimeText) { - lastAdTimeText = adTime; - // biggest skiptime before crashing on amazon.com, can be little higher than 90 but 90 to be safe - const bigTime = 90; - resetLastATimeText(adTime > bigTime ? 3000 : 1000); - const skipTime = adTime > bigTime ? bigTime : adTime - 1; - video.currentTime += skipTime; - log("FreeVee Ad skipped, length:", skipTime, "s"); - settings.Statistics.AmazonAdTimeSkipped += skipTime; - increaseBadge(); - } - } - } - async function resetLastATimeText(time = 1000) { - // timeout of 1 second to make sure the button is not pressed too fast, it will crash or slow the website otherwise - setTimeout(() => { - lastAdTimeText = 0; - }, time); - } - async function Amazon_AdTimeout() { - // set loop every 1 sec and check if ad is there - let AdInterval = setInterval(function () { - if (!settings.Amazon.skipAd) { - log("stopped observing| Self Ad"); - clearInterval(AdInterval); - return; - } - let video = document.querySelector(AmazonVideoClass); - if (video) { - video.onplay = function () { - // if video is playing - if (getComputedStyle(document.querySelector("#dv-web-player")).display != "none") { - let button = document.querySelector(".fu4rd6c.f1cw2swo"); - if (button) { - // only getting the time after :08 - let adTime = parseInt(/:\d+/.exec(document.querySelector(".atvwebplayersdk-adtimeindicator-text").innerHTML)?.[0].substring(1)); - // wait for 100ms before skipping to make sure the button is not pressed too fast, or there will be infinite loading - setTimeout(() => { - button.click(); - if (typeof adTime === "number") settings.Statistics.AmazonAdTimeSkipped += adTime; - increaseBadge(); - log("Self Ad skipped, length:", adTime, button); - }, 150); - } - } - }; - } - }, 100); - } - - async function Amazon_customizeMobileView() { - log("customizeMobileView"); - // customize mobile view for desktop website - // /gp/video/detail/ is the film description page otherwise looks weird - if (!url.includes("/gp/video/detail/")) { - // add to head - let meta = document.createElement("meta"); - meta.name = "viewport"; - meta.content = "width=device-width, initial-scale=1"; - document.head.appendChild(meta); - - // make amazon more mobile friendly - let navBelt = document.querySelector("#nav-belt"); - if (navBelt) { - navBelt.style.width = "100vw"; - navBelt.style.display = "flex"; - navBelt.style.flexDirection = "column"; - navBelt.style.height = "fit-content"; - } - let navMain = document.querySelector("#nav-main"); - if (navMain) navMain.style.display = "none"; - } - } - async function Amazon_xray() { - document.querySelector(".xrayQuickViewList")?.remove(); - // remove bad background hue which is annoying - let b = document.querySelector(".fkpovp9.f8hspre:not(.enhanced)"); - if (b) { - b.classList.add("enhanced"); - b.style.backgroundColor = "transparent"; - b.style.background = "transparent"; - } - } - - async function Amazon_doubleClick() { - if (settings.Video?.doubleClick) { - // event listener for double click - document.ondblclick = function () { - document.querySelector(".dv-player-fullscreen button[class*=fullscreen-button]")?.click(); - }; - } else { - document.ondblclick = null; - } - } - // #endregion - // #region Crunchyroll - // Crunchyroll functions - function filterQueued(display) { - document.querySelectorAll("div.queue-flag:not(.queued)").forEach((element) => { - // if not on premiere - element.parentElement.parentElement.parentElement.style.display = element.parentElement.parentElement - .querySelector(".premiere-flag") - ?.checkVisibility() - ? "block" - : display; - }); - if (display == "block" && settings.General.filterDub) filterDub("none"); - } - function filterDub(display) { - let list = document.querySelectorAll("cite[itemprop='name']"); - list.forEach((element) => { - if (element.textContent.includes("Dub") || element.textContent.includes("Audio")) - element.parentElement.parentElement.parentElement.parentElement.parentElement.style.display = display; - }); - if (display == "block" && settings.General.filterQueued) filterQueued("none"); - } - function createFilterElement(filterType, filterText, settingsValue, filterFunction) { - const label = document.createElement("label"); - const span = document.createElement("span"); - span.style = "display: flex;align-items: center;"; - const input = document.createElement("input"); - input.type = "checkbox"; - input.checked = settingsValue; - input.id = filterType; - input.onclick = function () { - settings.General[filterType] = this.checked; - filterFunction(this.checked ? "none" : "block"); - setStorage(); - }; - const p = document.createElement("p"); - p.style = "width: 100px;"; - p.textContent = filterText; - label.appendChild(span); - span.appendChild(input); - span.appendChild(p); - return label; - } - function addButtons() { - const toggleForm = document.querySelector("#filter_toggle_form"); - toggleForm.style.display = "flex"; - toggleForm.firstElementChild.appendChild(createFilterElement("filterQueued", "Show Playlist only", settings.General.filterQueued, filterQueued)); - toggleForm.firstElementChild.appendChild(createFilterElement("filterDub", "Filter Dub", settings.General.filterDub, filterDub)); - } - // start of add CrunchyList to Crunchyroll - function addShowsToList(position, list) { - list.forEach((element) => { - const article = document.createElement("article"); - article.className = "release js-release"; - - let time = document.createElement("time"); - time.className = "available-time"; - time.textContent = new Date(element.time).toLocaleString([], { hour: "2-digit", minute: "2-digit" }); - - let div1 = document.createElement("div"); - let div2 = document.createElement("div"); - div2.className = "queue-flag queued enhanced"; - - let svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); - svg.setAttribute("viewBox", "0 0 48 48"); - - let use = document.createElementNS("http://www.w3.org/2000/svg", "use"); - use.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:href", "/i/svg/simulcastcalendar/calendar_icons.svg#cr_bookmark"); - - svg.appendChild(use); - div2.appendChild(svg); - - let h1 = document.createElement("h1"); - h1.className = "season-name"; - - let a = document.createElement("a"); - a.className = "js-season-name-link"; - a.href = element.href; - a.setAttribute("itemprop", "url"); - - let cite = document.createElement("cite"); - cite.setAttribute("itemprop", "name"); - cite.textContent = element.name; - - a.appendChild(cite); - h1.appendChild(a); - - div1.appendChild(div2); - div1.appendChild(h1); - - article.appendChild(time); - article.appendChild(div1); - position.appendChild(article); - }); - } - function clickOnCurrentDay() { - let days = document.querySelectorAll(".specific-date [datetime]"); - for (const day of days) { - const dateOnPage = new Date(day.getAttribute("datetime")); - // if the day of the week is the same as today click on it, like if its Monday click on Monday - if (date.getDay() == dateOnPage.getDay()) { - // need timeout because the page is not fully loaded - setTimeout(() => { - day.click(); - }, 100); - // isCurrentWeek - return date.toLocaleDateString() == dateOnPage.toLocaleDateString(); - } - } - return false; - } - function createLocalList() { - let localList = []; - document.querySelectorAll("div.queue-flag.queued:not(.enhanced)").forEach((element) => { - const h1 = element.nextElementSibling?.firstChild?.nextSibling; - const name = h1.firstChild.nextSibling.textContent; - if (!name.includes("Dub")) { - const href = h1?.href; - const time = element.parentElement?.parentElement?.firstElementChild?.getAttribute("datetime"); - localList.push({ href, name, time }); - } - }); - return localList; - } - function filterOldList(isCurrentWeek, localList) { - let oldList = settings.General.savedCrunchyList || []; - const lastElement = localList[localList.length - 1]; - const lastTime = new Date(lastElement.time); - const [lastDay, lastHr, lastMin] = [lastTime.getDay(), lastTime.getHours(), lastTime.getMinutes()]; - // delete all previous weekdays from oldList - if (!isCurrentWeek) { - oldList = []; - } else { - oldList = oldList - .filter((item) => { - return shiftSunday(date.getDay()) - shiftSunday(new Date(item.time).getDay()) <= 0; - }) - // delete all items from same weekday before lastElement time - .filter((item) => { - const itemTime = new Date(item.time); - const itemHr = itemTime.getHours(); - // no shows today yet - const itemDay = itemTime.getDay(); - return lastDay != itemDay || itemDay != date.getDay() || itemHr > lastHr || (itemHr == lastHr && itemTime.getMinutes() > lastMin); - }); - } - return oldList; - } - const shiftSunday = (a) => (a + 6) % 7; - function addSavedCrunchyList() { - let localList = createLocalList(); - const isCurrentWeek = clickOnCurrentDay(); - const oldList = localList.length > 0 ? filterOldList(isCurrentWeek, localList) : settings.General.savedCrunchyList || []; - settings.General.savedCrunchyList = localList.concat(oldList); - setStorage(); - if (isCurrentWeek && !document.querySelector("div.queue-flag.queued.enhanced")) { - // now add the old list to the website list - document.querySelectorAll("section.calendar-day").forEach((element) => { - const weekday = new Date(element.querySelector("time")?.getAttribute("datetime")).getDay(); - // remove Schedule Coming Soon text - if (shiftSunday(date.getDay()) - shiftSunday(weekday) < 0) element?.children?.[1]?.firstChild?.nextSibling?.remove(); - addShowsToList( - element.children[1], - oldList.filter((item) => new Date(item.time).getDay() == weekday) - ); - }); - } - } - async function Crunchyroll_ReleaseCalendar() { - if (url.includes("simulcastcalendar")) { - // Show playlist only - filterQueued(settings.General.filterQueued ? "none" : "block"); - filterDub(settings.General.filterDub ? "none" : "block"); - if (!document.querySelector("#filterQueued")) addButtons(); - // add saved CrunchyList and click on current day - addSavedCrunchyList(); - } - } - const CrunchyrollObserver = new MutationObserver(Crunchyroll); - async function Crunchyroll() { - if (settings.Crunchyroll?.profile) Crunchyroll_profile(); - } - async function Crunchyroll_profile() { - // save profile - let img = document.querySelector(".erc-authenticated-user-menu img"); - if (img && img.src !== settings.General.Crunchyroll_profilePicture) { - settings.General.Crunchyroll_profilePicture = img.src; - setStorage(); - log("Profile switched to", img.src); - } - } - async function Crunchyroll_AutoPickProfile() { - // click on profile picture - if (document.querySelector(".profile-item-name")) { - document.querySelectorAll(".erc-profile-item img")?.forEach((img) => { - if (img.src === settings.General.Crunchyroll_profilePicture) { - img.click(); - log("Profile automatically chosen:", img.src); - increaseBadge(); - } - }); - } - } - async function Crunchyroll_bigPlayerStyle() { - if (document.querySelector(".video-player-wrapper")) { - // show header on hover - let style = document.createElement("style"); - style.innerHTML = ` - .video-player-wrapper{ - max-Height: calc(100vw / 1.7777); - height: 100vh; - } - .erc-large-header { - position: absolute; - top: 0; - width: 100%; - height: 3.75rem; - z-index: 999; - } - .erc-large-header .header-content { - position: absolute; - top: -3.75rem; - transition: top 0.4s, top 0.4s; - } - .erc-large-header:hover .header-content { - top: 0; - } - `; - document.head.appendChild(style); - } - } - // #endregion - // #region HBO - // HBO functions - const HBOObserver = new MutationObserver(HBO); - async function HBO() { - const video = document.querySelector("video"); - const time = video?.currentTime; - if (settings.HBO?.skipIntro) HBO_Intro(video, time); - if (settings.HBO?.skipCredits) HBO_Credits(time); - if (settings.HBO?.watchCredits) HBO_Watch_Credits(video); - if (settings.HBO?.speedSlider) HBO_SpeedSlider(video); - } - function HBO_Intro(video, time) { - let button = document.querySelector('[class*="SkipButton-Beam-Web-Ent"]'); - if (button?.checkVisibility({ visibilityProperty: true })) { - button.click(); - log("Intro skipped", button); - setTimeout(function () { - addSkippedTime(time, video?.currentTime, "IntroTimeSkipped"); - }, 600); - } - } - let lastSkip = 0; - function HBO_Credits(time) { - let button = document.querySelector('[class*="UpNextButton-Beam-Web-Ent"]'); - if (button && lastSkip < time - 1) { - lastSkip = parseInt(time); - button.click(); - increaseBadge(); - log("Credits skipped", button); - } - } - function HBO_Watch_Credits(video) { - let button = document.querySelector('[class*="DismissButton-Beam-Web-Ent"]'); - if (button) { - button.click(); - increaseBadge(); - log("Watched Credits", button); - } - // is movie - button = document.querySelector(".player-shrink-transition-enter-done"); - if (video && button) { - video.click(); - increaseBadge(); - log("Watched Credits", button); - } - } - const HBOSliderStyle = "height: 1em;background: rgb(221, 221, 221);display: none;width:200px;"; - const HBOSpeedStyle = "font-size: 1.5em;color:#b2b2b2;"; - const HBODivStyle = "height:48px;display: flex;align-items: center;"; - async function HBO_SpeedSlider(video) { - let alreadySlider = document.querySelector("#videoSpeedSlider"); - if (!alreadySlider) { - // infobar position for the slider to be added - let position = document.querySelector('[class*="ControlsFooterBottomRight-Beam-Web-Ent"]'); - if (position) createSlider(video, position, HBOSliderStyle, HBOSpeedStyle, HBODivStyle); - } - } - // #endregion - // Badge functions - // eslint-disable-next-line no-unused-vars - async function setBadgeText(text) { - try { - chrome.runtime.sendMessage({ - type: "setBadgeText", - content: text, - }); - } catch (error) { - log(error); - } - } - async function increaseBadge() { - settings.Statistics.SegmentsSkipped++; - try { - chrome.storage.sync.set({ settings }); - chrome.runtime.sendMessage({ - type: "increaseBadge", - }); - } catch (error) { - log(error); - } - } - async function resetBadge() { - try { - chrome.runtime.sendMessage({ - type: "resetBadge", - }); - } catch (error) { - log(error); - } - } - async function setStorage() { - try { - chrome.storage.sync.set({ settings }); - } catch (error) { - log(error); - } - } -} diff --git a/chrome/src/types/auto-imports.d.ts b/chrome/src/types/auto-imports.d.ts new file mode 100644 index 00000000..ba5d5760 --- /dev/null +++ b/chrome/src/types/auto-imports.d.ts @@ -0,0 +1,629 @@ +/* eslint-disable */ +/* prettier-ignore */ +// @ts-nocheck +// noinspection JSUnusedGlobalSymbols +// Generated by unplugin-auto-import +// biome-ignore lint: disable +export {} +declare global { + const EffectScope: typeof import('vue')['EffectScope'] + const Notification: typeof import('notivue')['Notification'] + const Notivue: typeof import('notivue')['Notivue'] + const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate'] + const asyncComputed: typeof import('@vueuse/core')['asyncComputed'] + const autoResetRef: typeof import('@vueuse/core')['autoResetRef'] + const browser: typeof import('webextension-polyfill') + const computed: typeof import('vue')['computed'] + const computedAsync: typeof import('@vueuse/core')['computedAsync'] + const computedEager: typeof import('@vueuse/core')['computedEager'] + const computedInject: typeof import('@vueuse/core')['computedInject'] + const computedWithControl: typeof import('@vueuse/core')['computedWithControl'] + const controlledComputed: typeof import('@vueuse/core')['controlledComputed'] + const controlledRef: typeof import('@vueuse/core')['controlledRef'] + const createApp: typeof import('vue')['createApp'] + const createEventHook: typeof import('@vueuse/core')['createEventHook'] + const createGlobalState: typeof import('@vueuse/core')['createGlobalState'] + const createInjectionState: typeof import('@vueuse/core')['createInjectionState'] + const createPinia: typeof import('pinia')['createPinia'] + const createReactiveFn: typeof import('@vueuse/core')['createReactiveFn'] + const createReusableTemplate: typeof import('@vueuse/core')['createReusableTemplate'] + const createSharedComposable: typeof import('@vueuse/core')['createSharedComposable'] + const createTemplatePromise: typeof import('@vueuse/core')['createTemplatePromise'] + const createUnrefFn: typeof import('@vueuse/core')['createUnrefFn'] + const customRef: typeof import('vue')['customRef'] + const debouncedRef: typeof import('@vueuse/core')['debouncedRef'] + const debouncedWatch: typeof import('@vueuse/core')['debouncedWatch'] + const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'] + const defineComponent: typeof import('vue')['defineComponent'] + const definePage: typeof import('vue-router/auto')['definePage'] + const defineStore: typeof import('pinia')['defineStore'] + const eagerComputed: typeof import('@vueuse/core')['eagerComputed'] + const effectScope: typeof import('vue')['effectScope'] + const extendRef: typeof import('@vueuse/core')['extendRef'] + const getActivePinia: typeof import('pinia')['getActivePinia'] + const getCurrentInstance: typeof import('vue')['getCurrentInstance'] + const getCurrentScope: typeof import('vue')['getCurrentScope'] + const h: typeof import('vue')['h'] + const ignorableWatch: typeof import('@vueuse/core')['ignorableWatch'] + const inject: typeof import('vue')['inject'] + const injectLocal: typeof import('@vueuse/core')['injectLocal'] + const isDefined: typeof import('@vueuse/core')['isDefined'] + const isProxy: typeof import('vue')['isProxy'] + const isReactive: typeof import('vue')['isReactive'] + const isReadonly: typeof import('vue')['isReadonly'] + const isRef: typeof import('vue')['isRef'] + const makeDestructurable: typeof import('@vueuse/core')['makeDestructurable'] + const mapActions: typeof import('pinia')['mapActions'] + const mapGetters: typeof import('pinia')['mapGetters'] + const mapState: typeof import('pinia')['mapState'] + const mapStores: typeof import('pinia')['mapStores'] + const mapWritableState: typeof import('pinia')['mapWritableState'] + const markRaw: typeof import('vue')['markRaw'] + const nextTick: typeof import('vue')['nextTick'] + const onActivated: typeof import('vue')['onActivated'] + const onBeforeMount: typeof import('vue')['onBeforeMount'] + const onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave'] + const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate'] + const onBeforeUnmount: typeof import('vue')['onBeforeUnmount'] + const onBeforeUpdate: typeof import('vue')['onBeforeUpdate'] + const onClickOutside: typeof import('@vueuse/core')['onClickOutside'] + const onDeactivated: typeof import('vue')['onDeactivated'] + const onErrorCaptured: typeof import('vue')['onErrorCaptured'] + const onKeyStroke: typeof import('@vueuse/core')['onKeyStroke'] + const onLongPress: typeof import('@vueuse/core')['onLongPress'] + const onMounted: typeof import('vue')['onMounted'] + const onRenderTracked: typeof import('vue')['onRenderTracked'] + const onRenderTriggered: typeof import('vue')['onRenderTriggered'] + const onScopeDispose: typeof import('vue')['onScopeDispose'] + const onServerPrefetch: typeof import('vue')['onServerPrefetch'] + const onStartTyping: typeof import('@vueuse/core')['onStartTyping'] + const onUnmounted: typeof import('vue')['onUnmounted'] + const onUpdated: typeof import('vue')['onUpdated'] + const onWatcherCleanup: typeof import('vue')['onWatcherCleanup'] + const pausableWatch: typeof import('@vueuse/core')['pausableWatch'] + const provide: typeof import('vue')['provide'] + const provideLocal: typeof import('@vueuse/core')['provideLocal'] + const pushNotification: typeof import('notivue')['push'] + const reactify: typeof import('@vueuse/core')['reactify'] + const reactifyObject: typeof import('@vueuse/core')['reactifyObject'] + const reactive: typeof import('vue')['reactive'] + const reactiveComputed: typeof import('@vueuse/core')['reactiveComputed'] + const reactiveOmit: typeof import('@vueuse/core')['reactiveOmit'] + const reactivePick: typeof import('@vueuse/core')['reactivePick'] + const readonly: typeof import('vue')['readonly'] + const ref: typeof import('vue')['ref'] + const refAutoReset: typeof import('@vueuse/core')['refAutoReset'] + const refDebounced: typeof import('@vueuse/core')['refDebounced'] + const refDefault: typeof import('@vueuse/core')['refDefault'] + const refThrottled: typeof import('@vueuse/core')['refThrottled'] + const refWithControl: typeof import('@vueuse/core')['refWithControl'] + const resolveComponent: typeof import('vue')['resolveComponent'] + const resolveRef: typeof import('@vueuse/core')['resolveRef'] + const resolveUnref: typeof import('@vueuse/core')['resolveUnref'] + const setActivePinia: typeof import('pinia')['setActivePinia'] + const setMapStoreSuffix: typeof import('pinia')['setMapStoreSuffix'] + const shallowReactive: typeof import('vue')['shallowReactive'] + const shallowReadonly: typeof import('vue')['shallowReadonly'] + const shallowRef: typeof import('vue')['shallowRef'] + const storeToRefs: typeof import('pinia')['storeToRefs'] + const syncRef: typeof import('@vueuse/core')['syncRef'] + const syncRefs: typeof import('@vueuse/core')['syncRefs'] + const t: typeof import('vue-i18n')['t'] + const templateRef: typeof import('@vueuse/core')['templateRef'] + const throttledRef: typeof import('@vueuse/core')['throttledRef'] + const throttledWatch: typeof import('@vueuse/core')['throttledWatch'] + const toRaw: typeof import('vue')['toRaw'] + const toReactive: typeof import('@vueuse/core')['toReactive'] + const toRef: typeof import('vue')['toRef'] + const toRefs: typeof import('vue')['toRefs'] + const toValue: typeof import('vue')['toValue'] + const triggerRef: typeof import('vue')['triggerRef'] + const tryOnBeforeMount: typeof import('@vueuse/core')['tryOnBeforeMount'] + const tryOnBeforeUnmount: typeof import('@vueuse/core')['tryOnBeforeUnmount'] + const tryOnMounted: typeof import('@vueuse/core')['tryOnMounted'] + const tryOnScopeDispose: typeof import('@vueuse/core')['tryOnScopeDispose'] + const tryOnUnmounted: typeof import('@vueuse/core')['tryOnUnmounted'] + const unref: typeof import('vue')['unref'] + const unrefElement: typeof import('@vueuse/core')['unrefElement'] + const until: typeof import('@vueuse/core')['until'] + const useActiveElement: typeof import('@vueuse/core')['useActiveElement'] + const useAnimate: typeof import('@vueuse/core')['useAnimate'] + const useArrayDifference: typeof import('@vueuse/core')['useArrayDifference'] + const useArrayEvery: typeof import('@vueuse/core')['useArrayEvery'] + const useArrayFilter: typeof import('@vueuse/core')['useArrayFilter'] + const useArrayFind: typeof import('@vueuse/core')['useArrayFind'] + const useArrayFindIndex: typeof import('@vueuse/core')['useArrayFindIndex'] + const useArrayFindLast: typeof import('@vueuse/core')['useArrayFindLast'] + const useArrayIncludes: typeof import('@vueuse/core')['useArrayIncludes'] + const useArrayJoin: typeof import('@vueuse/core')['useArrayJoin'] + const useArrayMap: typeof import('@vueuse/core')['useArrayMap'] + const useArrayReduce: typeof import('@vueuse/core')['useArrayReduce'] + const useArraySome: typeof import('@vueuse/core')['useArraySome'] + const useArrayUnique: typeof import('@vueuse/core')['useArrayUnique'] + const useAsyncQueue: typeof import('@vueuse/core')['useAsyncQueue'] + const useAsyncState: typeof import('@vueuse/core')['useAsyncState'] + const useAttrs: typeof import('vue')['useAttrs'] + const useBase64: typeof import('@vueuse/core')['useBase64'] + const useBattery: typeof import('@vueuse/core')['useBattery'] + const useBluetooth: typeof import('@vueuse/core')['useBluetooth'] + const useBreakpoints: typeof import('@vueuse/core')['useBreakpoints'] + const useBroadcastChannel: typeof import('@vueuse/core')['useBroadcastChannel'] + const useBrowserLocation: typeof import('@vueuse/core')['useBrowserLocation'] + const useCached: typeof import('@vueuse/core')['useCached'] + const useClipboard: typeof import('@vueuse/core')['useClipboard'] + const useClipboardItems: typeof import('@vueuse/core')['useClipboardItems'] + const useCloned: typeof import('@vueuse/core')['useCloned'] + const useColorMode: typeof import('@vueuse/core')['useColorMode'] + const useConfirmDialog: typeof import('@vueuse/core')['useConfirmDialog'] + const useCounter: typeof import('@vueuse/core')['useCounter'] + const useCssModule: typeof import('vue')['useCssModule'] + const useCssVar: typeof import('@vueuse/core')['useCssVar'] + const useCssVars: typeof import('vue')['useCssVars'] + const useCurrentElement: typeof import('@vueuse/core')['useCurrentElement'] + const useCycleList: typeof import('@vueuse/core')['useCycleList'] + const useDark: typeof import('@vueuse/core')['useDark'] + const useDateFormat: typeof import('@vueuse/core')['useDateFormat'] + const useDebounce: typeof import('@vueuse/core')['useDebounce'] + const useDebounceFn: typeof import('@vueuse/core')['useDebounceFn'] + const useDebouncedRefHistory: typeof import('@vueuse/core')['useDebouncedRefHistory'] + const useDeviceMotion: typeof import('@vueuse/core')['useDeviceMotion'] + const useDeviceOrientation: typeof import('@vueuse/core')['useDeviceOrientation'] + const useDevicePixelRatio: typeof import('@vueuse/core')['useDevicePixelRatio'] + const useDevicesList: typeof import('@vueuse/core')['useDevicesList'] + const useDisplayMedia: typeof import('@vueuse/core')['useDisplayMedia'] + const useDocumentVisibility: typeof import('@vueuse/core')['useDocumentVisibility'] + const useDraggable: typeof import('@vueuse/core')['useDraggable'] + const useDropZone: typeof import('@vueuse/core')['useDropZone'] + const useElementBounding: typeof import('@vueuse/core')['useElementBounding'] + const useElementByPoint: typeof import('@vueuse/core')['useElementByPoint'] + const useElementHover: typeof import('@vueuse/core')['useElementHover'] + const useElementSize: typeof import('@vueuse/core')['useElementSize'] + const useElementVisibility: typeof import('@vueuse/core')['useElementVisibility'] + const useEventBus: typeof import('@vueuse/core')['useEventBus'] + const useEventListener: typeof import('@vueuse/core')['useEventListener'] + const useEventSource: typeof import('@vueuse/core')['useEventSource'] + const useEyeDropper: typeof import('@vueuse/core')['useEyeDropper'] + const useFavicon: typeof import('@vueuse/core')['useFavicon'] + const useFetch: typeof import('@vueuse/core')['useFetch'] + const useFileDialog: typeof import('@vueuse/core')['useFileDialog'] + const useFileSystemAccess: typeof import('@vueuse/core')['useFileSystemAccess'] + const useFocus: typeof import('@vueuse/core')['useFocus'] + const useFocusWithin: typeof import('@vueuse/core')['useFocusWithin'] + const useFps: typeof import('@vueuse/core')['useFps'] + const useFullscreen: typeof import('@vueuse/core')['useFullscreen'] + const useGamepad: typeof import('@vueuse/core')['useGamepad'] + const useGeolocation: typeof import('@vueuse/core')['useGeolocation'] + const useI18n: typeof import('vue-i18n')['useI18n'] + const useId: typeof import('vue')['useId'] + const useIdle: typeof import('@vueuse/core')['useIdle'] + const useImage: typeof import('@vueuse/core')['useImage'] + const useInfiniteScroll: typeof import('@vueuse/core')['useInfiniteScroll'] + const useIntersectionObserver: typeof import('@vueuse/core')['useIntersectionObserver'] + const useInterval: typeof import('@vueuse/core')['useInterval'] + const useIntervalFn: typeof import('@vueuse/core')['useIntervalFn'] + const useKeyModifier: typeof import('@vueuse/core')['useKeyModifier'] + const useLastChanged: typeof import('@vueuse/core')['useLastChanged'] + const useLink: typeof import('vue-router')['useLink'] + const useLocalStorage: typeof import('@vueuse/core')['useLocalStorage'] + const useMagicKeys: typeof import('@vueuse/core')['useMagicKeys'] + const useManualRefHistory: typeof import('@vueuse/core')['useManualRefHistory'] + const useMediaControls: typeof import('@vueuse/core')['useMediaControls'] + const useMediaQuery: typeof import('@vueuse/core')['useMediaQuery'] + const useMemoize: typeof import('@vueuse/core')['useMemoize'] + const useMemory: typeof import('@vueuse/core')['useMemory'] + const useModel: typeof import('vue')['useModel'] + const useMounted: typeof import('@vueuse/core')['useMounted'] + const useMouse: typeof import('@vueuse/core')['useMouse'] + const useMouseInElement: typeof import('@vueuse/core')['useMouseInElement'] + const useMousePressed: typeof import('@vueuse/core')['useMousePressed'] + const useMutationObserver: typeof import('@vueuse/core')['useMutationObserver'] + const useNavigatorLanguage: typeof import('@vueuse/core')['useNavigatorLanguage'] + const useNetwork: typeof import('@vueuse/core')['useNetwork'] + const useNow: typeof import('@vueuse/core')['useNow'] + const useObjectUrl: typeof import('@vueuse/core')['useObjectUrl'] + const useOffsetPagination: typeof import('@vueuse/core')['useOffsetPagination'] + const useOnline: typeof import('@vueuse/core')['useOnline'] + const usePageLeave: typeof import('@vueuse/core')['usePageLeave'] + const useParallax: typeof import('@vueuse/core')['useParallax'] + const useParentElement: typeof import('@vueuse/core')['useParentElement'] + const usePerformanceObserver: typeof import('@vueuse/core')['usePerformanceObserver'] + const usePermission: typeof import('@vueuse/core')['usePermission'] + const usePointer: typeof import('@vueuse/core')['usePointer'] + const usePointerLock: typeof import('@vueuse/core')['usePointerLock'] + const usePointerSwipe: typeof import('@vueuse/core')['usePointerSwipe'] + const usePreferredColorScheme: typeof import('@vueuse/core')['usePreferredColorScheme'] + const usePreferredContrast: typeof import('@vueuse/core')['usePreferredContrast'] + const usePreferredDark: typeof import('@vueuse/core')['usePreferredDark'] + const usePreferredLanguages: typeof import('@vueuse/core')['usePreferredLanguages'] + const usePreferredReducedMotion: typeof import('@vueuse/core')['usePreferredReducedMotion'] + const usePreferredReducedTransparency: typeof import('@vueuse/core')['usePreferredReducedTransparency'] + const usePrevious: typeof import('@vueuse/core')['usePrevious'] + const useRafFn: typeof import('@vueuse/core')['useRafFn'] + const useRefHistory: typeof import('@vueuse/core')['useRefHistory'] + const useResizeObserver: typeof import('@vueuse/core')['useResizeObserver'] + const useRoute: typeof import('vue-router')['useRoute'] + const useRouter: typeof import('vue-router')['useRouter'] + const useSSRWidth: typeof import('@vueuse/core')['useSSRWidth'] + const useScreenOrientation: typeof import('@vueuse/core')['useScreenOrientation'] + const useScreenSafeArea: typeof import('@vueuse/core')['useScreenSafeArea'] + const useScriptTag: typeof import('@vueuse/core')['useScriptTag'] + const useScroll: typeof import('@vueuse/core')['useScroll'] + const useScrollLock: typeof import('@vueuse/core')['useScrollLock'] + const useSessionStorage: typeof import('@vueuse/core')['useSessionStorage'] + const useShare: typeof import('@vueuse/core')['useShare'] + const useSlots: typeof import('vue')['useSlots'] + const useSorted: typeof import('@vueuse/core')['useSorted'] + const useSpeechRecognition: typeof import('@vueuse/core')['useSpeechRecognition'] + const useSpeechSynthesis: typeof import('@vueuse/core')['useSpeechSynthesis'] + const useStepper: typeof import('@vueuse/core')['useStepper'] + const useStorage: typeof import('@vueuse/core')['useStorage'] + const useStorageAsync: typeof import('@vueuse/core')['useStorageAsync'] + const useStyleTag: typeof import('@vueuse/core')['useStyleTag'] + const useSupported: typeof import('@vueuse/core')['useSupported'] + const useSwipe: typeof import('@vueuse/core')['useSwipe'] + const useTemplateRef: typeof import('vue')['useTemplateRef'] + const useTemplateRefsList: typeof import('@vueuse/core')['useTemplateRefsList'] + const useTextDirection: typeof import('@vueuse/core')['useTextDirection'] + const useTextSelection: typeof import('@vueuse/core')['useTextSelection'] + const useTextareaAutosize: typeof import('@vueuse/core')['useTextareaAutosize'] + const useThrottle: typeof import('@vueuse/core')['useThrottle'] + const useThrottleFn: typeof import('@vueuse/core')['useThrottleFn'] + const useThrottledRefHistory: typeof import('@vueuse/core')['useThrottledRefHistory'] + const useTimeAgo: typeof import('@vueuse/core')['useTimeAgo'] + const useTimeout: typeof import('@vueuse/core')['useTimeout'] + const useTimeoutFn: typeof import('@vueuse/core')['useTimeoutFn'] + const useTimeoutPoll: typeof import('@vueuse/core')['useTimeoutPoll'] + const useTimestamp: typeof import('@vueuse/core')['useTimestamp'] + const useTitle: typeof import('@vueuse/core')['useTitle'] + const useToNumber: typeof import('@vueuse/core')['useToNumber'] + const useToString: typeof import('@vueuse/core')['useToString'] + const useToggle: typeof import('@vueuse/core')['useToggle'] + const useTransition: typeof import('@vueuse/core')['useTransition'] + const useUrlSearchParams: typeof import('@vueuse/core')['useUrlSearchParams'] + const useUserMedia: typeof import('@vueuse/core')['useUserMedia'] + const useVModel: typeof import('@vueuse/core')['useVModel'] + const useVModels: typeof import('@vueuse/core')['useVModels'] + const useVibrate: typeof import('@vueuse/core')['useVibrate'] + const useVirtualList: typeof import('@vueuse/core')['useVirtualList'] + const useWakeLock: typeof import('@vueuse/core')['useWakeLock'] + const useWebNotification: typeof import('@vueuse/core')['useWebNotification'] + const useWebSocket: typeof import('@vueuse/core')['useWebSocket'] + const useWebWorker: typeof import('@vueuse/core')['useWebWorker'] + const useWebWorkerFn: typeof import('@vueuse/core')['useWebWorkerFn'] + const useWindowFocus: typeof import('@vueuse/core')['useWindowFocus'] + const useWindowScroll: typeof import('@vueuse/core')['useWindowScroll'] + const useWindowSize: typeof import('@vueuse/core')['useWindowSize'] + const watch: typeof import('vue')['watch'] + const watchArray: typeof import('@vueuse/core')['watchArray'] + const watchAtMost: typeof import('@vueuse/core')['watchAtMost'] + const watchDebounced: typeof import('@vueuse/core')['watchDebounced'] + const watchDeep: typeof import('@vueuse/core')['watchDeep'] + const watchEffect: typeof import('vue')['watchEffect'] + const watchIgnorable: typeof import('@vueuse/core')['watchIgnorable'] + const watchImmediate: typeof import('@vueuse/core')['watchImmediate'] + const watchOnce: typeof import('@vueuse/core')['watchOnce'] + const watchPausable: typeof import('@vueuse/core')['watchPausable'] + const watchPostEffect: typeof import('vue')['watchPostEffect'] + const watchSyncEffect: typeof import('vue')['watchSyncEffect'] + const watchThrottled: typeof import('@vueuse/core')['watchThrottled'] + const watchTriggerable: typeof import('@vueuse/core')['watchTriggerable'] + const watchWithFilter: typeof import('@vueuse/core')['watchWithFilter'] + const whenever: typeof import('@vueuse/core')['whenever'] +} +// for type re-export +declare global { + // @ts-ignore + export type { Component, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue' + import('vue') +} + +// for vue template auto import +import { UnwrapRef } from 'vue' +declare module 'vue' { + interface GlobalComponents {} + interface ComponentCustomProperties { + readonly EffectScope: UnwrapRef + readonly Notification: UnwrapRef + readonly Notivue: UnwrapRef + readonly acceptHMRUpdate: UnwrapRef + readonly asyncComputed: UnwrapRef + readonly autoResetRef: UnwrapRef + readonly browser: UnwrapRef + readonly computed: UnwrapRef + readonly computedAsync: UnwrapRef + readonly computedEager: UnwrapRef + readonly computedInject: UnwrapRef + readonly computedWithControl: UnwrapRef + readonly controlledComputed: UnwrapRef + readonly controlledRef: UnwrapRef + readonly createApp: UnwrapRef + readonly createEventHook: UnwrapRef + readonly createGlobalState: UnwrapRef + readonly createInjectionState: UnwrapRef + readonly createPinia: UnwrapRef + readonly createReactiveFn: UnwrapRef + readonly createReusableTemplate: UnwrapRef + readonly createSharedComposable: UnwrapRef + readonly createTemplatePromise: UnwrapRef + readonly createUnrefFn: UnwrapRef + readonly customRef: UnwrapRef + readonly debouncedRef: UnwrapRef + readonly debouncedWatch: UnwrapRef + readonly defineAsyncComponent: UnwrapRef + readonly defineComponent: UnwrapRef + readonly definePage: UnwrapRef + readonly defineStore: UnwrapRef + readonly eagerComputed: UnwrapRef + readonly effectScope: UnwrapRef + readonly extendRef: UnwrapRef + readonly getActivePinia: UnwrapRef + readonly getCurrentInstance: UnwrapRef + readonly getCurrentScope: UnwrapRef + readonly h: UnwrapRef + readonly ignorableWatch: UnwrapRef + readonly inject: UnwrapRef + readonly injectLocal: UnwrapRef + readonly isDefined: UnwrapRef + readonly isProxy: UnwrapRef + readonly isReactive: UnwrapRef + readonly isReadonly: UnwrapRef + readonly isRef: UnwrapRef + readonly makeDestructurable: UnwrapRef + readonly mapActions: UnwrapRef + readonly mapGetters: UnwrapRef + readonly mapState: UnwrapRef + readonly mapStores: UnwrapRef + readonly mapWritableState: UnwrapRef + readonly markRaw: UnwrapRef + readonly nextTick: UnwrapRef + readonly onActivated: UnwrapRef + readonly onBeforeMount: UnwrapRef + readonly onBeforeRouteLeave: UnwrapRef + readonly onBeforeRouteUpdate: UnwrapRef + readonly onBeforeUnmount: UnwrapRef + readonly onBeforeUpdate: UnwrapRef + readonly onClickOutside: UnwrapRef + readonly onDeactivated: UnwrapRef + readonly onErrorCaptured: UnwrapRef + readonly onKeyStroke: UnwrapRef + readonly onLongPress: UnwrapRef + readonly onMounted: UnwrapRef + readonly onRenderTracked: UnwrapRef + readonly onRenderTriggered: UnwrapRef + readonly onScopeDispose: UnwrapRef + readonly onServerPrefetch: UnwrapRef + readonly onStartTyping: UnwrapRef + readonly onUnmounted: UnwrapRef + readonly onUpdated: UnwrapRef + readonly onWatcherCleanup: UnwrapRef + readonly pausableWatch: UnwrapRef + readonly provide: UnwrapRef + readonly provideLocal: UnwrapRef + readonly pushNotification: UnwrapRef + readonly reactify: UnwrapRef + readonly reactifyObject: UnwrapRef + readonly reactive: UnwrapRef + readonly reactiveComputed: UnwrapRef + readonly reactiveOmit: UnwrapRef + readonly reactivePick: UnwrapRef + readonly readonly: UnwrapRef + readonly ref: UnwrapRef + readonly refAutoReset: UnwrapRef + readonly refDebounced: UnwrapRef + readonly refDefault: UnwrapRef + readonly refThrottled: UnwrapRef + readonly refWithControl: UnwrapRef + readonly resolveComponent: UnwrapRef + readonly resolveRef: UnwrapRef + readonly resolveUnref: UnwrapRef + readonly setActivePinia: UnwrapRef + readonly setMapStoreSuffix: UnwrapRef + readonly shallowReactive: UnwrapRef + readonly shallowReadonly: UnwrapRef + readonly shallowRef: UnwrapRef + readonly storeToRefs: UnwrapRef + readonly syncRef: UnwrapRef + readonly syncRefs: UnwrapRef + readonly t: UnwrapRef + readonly templateRef: UnwrapRef + readonly throttledRef: UnwrapRef + readonly throttledWatch: UnwrapRef + readonly toRaw: UnwrapRef + readonly toReactive: UnwrapRef + readonly toRef: UnwrapRef + readonly toRefs: UnwrapRef + readonly toValue: UnwrapRef + readonly triggerRef: UnwrapRef + readonly tryOnBeforeMount: UnwrapRef + readonly tryOnBeforeUnmount: UnwrapRef + readonly tryOnMounted: UnwrapRef + readonly tryOnScopeDispose: UnwrapRef + readonly tryOnUnmounted: UnwrapRef + readonly unref: UnwrapRef + readonly unrefElement: UnwrapRef + readonly until: UnwrapRef + readonly useActiveElement: UnwrapRef + readonly useAnimate: UnwrapRef + readonly useArrayDifference: UnwrapRef + readonly useArrayEvery: UnwrapRef + readonly useArrayFilter: UnwrapRef + readonly useArrayFind: UnwrapRef + readonly useArrayFindIndex: UnwrapRef + readonly useArrayFindLast: UnwrapRef + readonly useArrayIncludes: UnwrapRef + readonly useArrayJoin: UnwrapRef + readonly useArrayMap: UnwrapRef + readonly useArrayReduce: UnwrapRef + readonly useArraySome: UnwrapRef + readonly useArrayUnique: UnwrapRef + readonly useAsyncQueue: UnwrapRef + readonly useAsyncState: UnwrapRef + readonly useAttrs: UnwrapRef + readonly useBase64: UnwrapRef + readonly useBattery: UnwrapRef + readonly useBluetooth: UnwrapRef + readonly useBreakpoints: UnwrapRef + readonly useBroadcastChannel: UnwrapRef + readonly useBrowserLocation: UnwrapRef + readonly useCached: UnwrapRef + readonly useClipboard: UnwrapRef + readonly useClipboardItems: UnwrapRef + readonly useCloned: UnwrapRef + readonly useColorMode: UnwrapRef + readonly useConfirmDialog: UnwrapRef + readonly useCounter: UnwrapRef + readonly useCssModule: UnwrapRef + readonly useCssVar: UnwrapRef + readonly useCssVars: UnwrapRef + readonly useCurrentElement: UnwrapRef + readonly useCycleList: UnwrapRef + readonly useDark: UnwrapRef + readonly useDateFormat: UnwrapRef + readonly useDebounce: UnwrapRef + readonly useDebounceFn: UnwrapRef + readonly useDebouncedRefHistory: UnwrapRef + readonly useDeviceMotion: UnwrapRef + readonly useDeviceOrientation: UnwrapRef + readonly useDevicePixelRatio: UnwrapRef + readonly useDevicesList: UnwrapRef + readonly useDisplayMedia: UnwrapRef + readonly useDocumentVisibility: UnwrapRef + readonly useDraggable: UnwrapRef + readonly useDropZone: UnwrapRef + readonly useElementBounding: UnwrapRef + readonly useElementByPoint: UnwrapRef + readonly useElementHover: UnwrapRef + readonly useElementSize: UnwrapRef + readonly useElementVisibility: UnwrapRef + readonly useEventBus: UnwrapRef + readonly useEventListener: UnwrapRef + readonly useEventSource: UnwrapRef + readonly useEyeDropper: UnwrapRef + readonly useFavicon: UnwrapRef + readonly useFetch: UnwrapRef + readonly useFileDialog: UnwrapRef + readonly useFileSystemAccess: UnwrapRef + readonly useFocus: UnwrapRef + readonly useFocusWithin: UnwrapRef + readonly useFps: UnwrapRef + readonly useFullscreen: UnwrapRef + readonly useGamepad: UnwrapRef + readonly useGeolocation: UnwrapRef + readonly useI18n: UnwrapRef + readonly useId: UnwrapRef + readonly useIdle: UnwrapRef + readonly useImage: UnwrapRef + readonly useInfiniteScroll: UnwrapRef + readonly useIntersectionObserver: UnwrapRef + readonly useInterval: UnwrapRef + readonly useIntervalFn: UnwrapRef + readonly useKeyModifier: UnwrapRef + readonly useLastChanged: UnwrapRef + readonly useLink: UnwrapRef + readonly useLocalStorage: UnwrapRef + readonly useMagicKeys: UnwrapRef + readonly useManualRefHistory: UnwrapRef + readonly useMediaControls: UnwrapRef + readonly useMediaQuery: UnwrapRef + readonly useMemoize: UnwrapRef + readonly useMemory: UnwrapRef + readonly useModel: UnwrapRef + readonly useMounted: UnwrapRef + readonly useMouse: UnwrapRef + readonly useMouseInElement: UnwrapRef + readonly useMousePressed: UnwrapRef + readonly useMutationObserver: UnwrapRef + readonly useNavigatorLanguage: UnwrapRef + readonly useNetwork: UnwrapRef + readonly useNow: UnwrapRef + readonly useObjectUrl: UnwrapRef + readonly useOffsetPagination: UnwrapRef + readonly useOnline: UnwrapRef + readonly usePageLeave: UnwrapRef + readonly useParallax: UnwrapRef + readonly useParentElement: UnwrapRef + readonly usePerformanceObserver: UnwrapRef + readonly usePermission: UnwrapRef + readonly usePointer: UnwrapRef + readonly usePointerLock: UnwrapRef + readonly usePointerSwipe: UnwrapRef + readonly usePreferredColorScheme: UnwrapRef + readonly usePreferredContrast: UnwrapRef + readonly usePreferredDark: UnwrapRef + readonly usePreferredLanguages: UnwrapRef + readonly usePreferredReducedMotion: UnwrapRef + readonly usePreferredReducedTransparency: UnwrapRef + readonly usePrevious: UnwrapRef + readonly useRafFn: UnwrapRef + readonly useRefHistory: UnwrapRef + readonly useResizeObserver: UnwrapRef + readonly useRoute: UnwrapRef + readonly useRouter: UnwrapRef + readonly useSSRWidth: UnwrapRef + readonly useScreenOrientation: UnwrapRef + readonly useScreenSafeArea: UnwrapRef + readonly useScriptTag: UnwrapRef + readonly useScroll: UnwrapRef + readonly useScrollLock: UnwrapRef + readonly useSessionStorage: UnwrapRef + readonly useShare: UnwrapRef + readonly useSlots: UnwrapRef + readonly useSorted: UnwrapRef + readonly useSpeechRecognition: UnwrapRef + readonly useSpeechSynthesis: UnwrapRef + readonly useStepper: UnwrapRef + readonly useStorage: UnwrapRef + readonly useStorageAsync: UnwrapRef + readonly useStyleTag: UnwrapRef + readonly useSupported: UnwrapRef + readonly useSwipe: UnwrapRef + readonly useTemplateRef: UnwrapRef + readonly useTemplateRefsList: UnwrapRef + readonly useTextDirection: UnwrapRef + readonly useTextSelection: UnwrapRef + readonly useTextareaAutosize: UnwrapRef + readonly useThrottle: UnwrapRef + readonly useThrottleFn: UnwrapRef + readonly useThrottledRefHistory: UnwrapRef + readonly useTimeAgo: UnwrapRef + readonly useTimeout: UnwrapRef + readonly useTimeoutFn: UnwrapRef + readonly useTimeoutPoll: UnwrapRef + readonly useTimestamp: UnwrapRef + readonly useTitle: UnwrapRef + readonly useToNumber: UnwrapRef + readonly useToString: UnwrapRef + readonly useToggle: UnwrapRef + readonly useTransition: UnwrapRef + readonly useUrlSearchParams: UnwrapRef + readonly useUserMedia: UnwrapRef + readonly useVModel: UnwrapRef + readonly useVModels: UnwrapRef + readonly useVibrate: UnwrapRef + readonly useVirtualList: UnwrapRef + readonly useWakeLock: UnwrapRef + readonly useWebNotification: UnwrapRef + readonly useWebSocket: UnwrapRef + readonly useWebWorker: UnwrapRef + readonly useWebWorkerFn: UnwrapRef + readonly useWindowFocus: UnwrapRef + readonly useWindowScroll: UnwrapRef + readonly useWindowSize: UnwrapRef + readonly watch: UnwrapRef + readonly watchArray: UnwrapRef + readonly watchAtMost: UnwrapRef + readonly watchDebounced: UnwrapRef + readonly watchDeep: UnwrapRef + readonly watchEffect: UnwrapRef + readonly watchIgnorable: UnwrapRef + readonly watchImmediate: UnwrapRef + readonly watchOnce: UnwrapRef + readonly watchPausable: UnwrapRef + readonly watchPostEffect: UnwrapRef + readonly watchSyncEffect: UnwrapRef + readonly watchThrottled: UnwrapRef + readonly watchTriggerable: UnwrapRef + readonly watchWithFilter: UnwrapRef + readonly whenever: UnwrapRef + } +} \ No newline at end of file diff --git a/chrome/src/types/components.d.ts b/chrome/src/types/components.d.ts new file mode 100644 index 00000000..01686efe --- /dev/null +++ b/chrome/src/types/components.d.ts @@ -0,0 +1,17 @@ +/* eslint-disable */ +// @ts-nocheck +// Generated by unplugin-vue-components +// Read more: https://github.com/vuejs/core/pull/3399 +export {} + +/* prettier-ignore */ +declare module 'vue' { + export interface GlobalComponents { + IPhArrowLeft: typeof import('~icons/ph/arrow-left')['default'] + IPhListHeart: typeof import('~icons/ph/list-heart')['default'] + IPhPresentationChart: typeof import('~icons/ph/presentation-chart')['default'] + IPhRocketLaunch: typeof import('~icons/ph/rocket-launch')['default'] + RouterLink: typeof import('vue-router')['RouterLink'] + RouterView: typeof import('vue-router')['RouterView'] + } +} diff --git a/copyFtoC.js b/copyFtoC.js deleted file mode 100644 index ed8e2687..00000000 --- a/copyFtoC.js +++ /dev/null @@ -1,83 +0,0 @@ -/* global require */ -/* global process */ -const fs = require("fs"); -const path = require("path"); - -// Check if 'chrome' folder exists, if not, create it -if (!fs.existsSync("chrome")) { - fs.mkdirSync("chrome"); -} - -// Read all the firefox files and replace the chrome files -let files = [ - "skipper.js", - "cr.js", - path.join("popup", "settings.js"), - path.join("popup", "settings.css"), - path.join("popup", "popup.html"), - path.join("popup", "settings.html"), -]; -const locales = fs.readdirSync(path.join("firefox", "_locales")); -for (let locale of locales) { - // console.log(locsale); - files.push(path.join("_locales", path.join(locale, "messages.json"))); -} -// all regex replacements -const replaces = [ - [/browser([^-])/g, "chrome$1"], - [ - "https://addons.mozilla.org/firefox/addon/netflix-prime-auto-skip/", - "https://chrome.google.com/webstore/detail/netflixprime-auto-skip/akaimhgappllmlkadblbdknhbfghdgle", - ], - [ - "https://img.shields.io/amo/stars/NetflixPrime@Autoskip.io?color=e60010", - "https://img.shields.io/chrome-web-store/stars/akaimhgappllmlkadblbdknhbfghdgle?color=e60010", - ], - ["Streaming enhanced: Netflix Disney+ Prime Video", "Streaming enhanced Netflix Disney Prime Video"], -]; -console.log("Copy Files from Firefox to Chrome:"); -for (let file of files) { - fs.readFile(path.join("firefox", file), "utf8", function (err, data) { - console.log(path.join("chrome", file)); - if (err) return console.log(err); - for (let replace of replaces) { - data = data.replaceAll(replace[0], replace[1]); - } - - // Write the updated content to a new file in the 'chrome' folder - fs.writeFile(path.join("chrome", file), data, "utf8", function (err) { - if (err) return console.log(err); - }); - }); -} - -// Copy markdown translation files -// copy zip form web-ext-artifacts to home folder as a xpi file -const storeDescriptionsPath = path.join("docs", "storeDescriptions"); -const ChromeStoreDescriptionsPath = path.join("docs", "ChromeStoreDescriptions"); -const storeDescriptions = fs.readdirSync(storeDescriptionsPath); -const replacesForDescription = [ - [/.*ul>\r?\n/g, ""], - ["
  • ", " • "], - // only /li in line - [/\n<\/li>\r?\n/g, ""], - ["
  • ", ""], - // change link to markdown - [/(.*)<\/a>/g, "[$2]($1)"], - [/(.*)<\/a>/g, "[$2]($1)"], -]; -// pick last file -storeDescriptions.forEach((file) => { - console.log(ChromeStoreDescriptionsPath + "\\" + file); - fs.readFile(path.join(storeDescriptionsPath, file), "utf8", function (err, data) { - if (err) return console.log(err); - for (let replace of replacesForDescription) { - data = data.replaceAll(replace[0], replace[1]); - } - fs.writeFile(path.join(ChromeStoreDescriptionsPath, file), data, "utf8", function (err) { - if (err) return console.log(err); - }); - }); -}); - -console.log("\n"); diff --git a/define.config.mjs b/define.config.mjs new file mode 100644 index 00000000..41628568 --- /dev/null +++ b/define.config.mjs @@ -0,0 +1,27 @@ +import fs from "node:fs" +import { spawnSync } from "node:child_process" +import packageJson from "./package.json" with { type: "json" } + +// Read CHANGELOG.md file into a string. +const changelog = fs.readFileSync("./CHANGELOG.md", "utf-8") + +// Get the current git commit hash. +const gitCommit = spawnSync("git", ["rev-parse", "--short", "HEAD"]).stdout.toString().trim() + +const jsn = (value) => JSON.stringify(value) + +// Don't forget to add your added variables to vite-env.d.ts also! + +// These variables are available in your Vue components and will be replaced by their values at build time. +// These will be compiled into your app. Don't store secrets here! + +export const defineViteConfig = { + __VERSION__: jsn(packageJson.version), + __NAME__: jsn(packageJson.name), + __DISPLAY_NAME__: jsn(packageJson.displayName), + __CHANGELOG__: jsn(changelog), + __GIT_COMMIT__: jsn(gitCommit), + __GITHUB_URL__: jsn(packageJson.repository.url), + // Set the HTML title for all pages from package.json so you can use %HTML_TITLE% in your HTML files. + HTML_TITLE: jsn(packageJson.displayName), +} diff --git a/dist/chrome/.gitkeep b/dist/chrome/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/dist/firefox/.gitkeep b/dist/firefox/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 00000000..4ca5628b --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,24 @@ +import globals from "globals" +import pluginJs from "@eslint/js" +import tseslint from "typescript-eslint" +import pluginVue from "eslint-plugin-vue" + +/** @type {import('eslint').Linter.Config[]} */ +export default [ + { files: ["**/*.{ts,vue}"] }, + { languageOptions: { globals: globals.browser } }, + pluginJs.configs.recommended, + ...tseslint.configs.recommended, + ...pluginVue.configs["flat/essential"], + { files: ["**/*.vue"], languageOptions: { parserOptions: { parser: tseslint.parser } } }, + { + rules: { + "no-inner-declarations": "off", + "no-console": "off", + "no-undef": "off", + "@typescript-eslint/no-explicit-any": "off", + "vue/multi-word-component-names": "off", + "@typescript-eslint/no-unused-vars": "off", + }, + }, +] diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000..d70e29d1 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,81 @@ +import globals from "globals" +import pluginJs from "@eslint/js" +import tseslint from "typescript-eslint" +import pluginVue from "eslint-plugin-vue" +import { includeIgnoreFile } from "@eslint/compat" +import path from "node:path" +import { fileURLToPath } from "node:url" +import AutoImportGlobals from "./src/types/.eslintrc-auto-import.json" with { type: "json" } +import { defineViteConfig as viteDefineVariable } from "./define.config.mjs" + +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) +const gitignorePath = path.resolve(__dirname, ".gitignore") +const viteDefineGlobals = Object.keys(viteDefineVariable).reduce((acc, key) => { + acc[key] = "readonly" + return acc +}, {}) + +export default [ + includeIgnoreFile(gitignorePath), + { + ignores: [ + "node_modules", + "dist", + "**/*.js", + "**/*.d.ts", + "public", + "build", + "coverage", + "tests", + "cypress", + "src/types/**/*", + "eslint.config.mjs", + ], + }, + { files: ["**/*.{js,mjs,cjs,ts,vue}"] }, + { + languageOptions: { + globals: { + ...globals.node, + ...globals.browser, + ...globals.worker, + ...globals.webextensions, + ...AutoImportGlobals.globals, + ...viteDefineGlobals, + }, + }, + }, + pluginJs.configs.recommended, + ...tseslint.configs.recommended, + ...pluginVue.configs["flat/recommended"], + { + files: ["**/*.vue"], + languageOptions: { parserOptions: { parser: tseslint.parser } }, + }, + { + rules: { + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/no-explicit-any": "warn", + "@typescript-eslint/no-unused-vars": "off", + "no-console": ["warn", { allow: ["info", "warn", "error"] }], + "no-restricted-globals": "warn", + "vue/multi-word-component-names": "warn", + "vue/singleline-html-element-content-newline": "off", + "vue/html-self-closing": "off", + "vue/html-indent": "off", + }, + }, + { + files: ["**/*.cjs", "scripts/**/*.{js,mjs,cjs,ts,vue}"], + rules: { + "@typescript-eslint/no-require-imports": "off", + }, + }, + { + files: ["**/pages/**/*.vue"], + rules: { + "vue/multi-word-component-names": "off", + }, + }, +] diff --git a/firefox/_locales/de/messages.json b/firefox/_locales/de/messages.json deleted file mode 100644 index 76fca020..00000000 --- a/firefox/_locales/de/messages.json +++ /dev/null @@ -1,315 +0,0 @@ -{ - "extensionName": { - "message": "Streaming enhanced: Netflix Disney+ Prime Video", - "description": "Name der Erweiterung" - }, - "extensionDescription": { - "message": "Werbung, Intros, Rückblicke, Abspanne usw. auf Netflix, Prime video, Disney+, Crunchyroll und HBO max überspringen.", - "description": "Beschreibung der Erweiterung" - }, - "settingsTitle": { - "message": "Einstellungen - Streaming enhanced", - "description": "Titel der Registerkarte 'Einstellungen'" - }, - "pageTitle": { - "message": "enhanced", - "description": "Titel der Einstellungsseite" - }, - "rateNow": { - "message": "Jetzt bewerten!" - }, - "sharedSettings": { - "message": "Gemeinsame Einstellungen" - }, - "sharedSettingsDescription": { - "message": "Mit diesen Optionen wird nur der $service$-Teil der gemeinsamen Einstellung aktiviert/deaktiviert", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "backup": { - "message": "Sichern/Zurücksetzen" - }, - "statistics": { - "message": "Statistik" - }, - "changelog": { - "message": "Changelog" - }, - "donate": { - "message": "Spende" - }, - "PageSpecificTitle": { - "message": "$service$ spezifisch", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "defaultPageTitle": { - "message": "Optionale Funktionen" - }, - "defaultPageDescription": { - "message": "Alle Funktionen, die standardmäßig ausgeschaltet sind, entweder weil sie verwirrend sind, wenn sie eingeschaltet wären, oder weil sie in der Beta-Phase sind" - }, - "DefaultPaidContentDescription": { - "message": "Entfernen aller kostenpflichtigen Filme/Serien Kategorien von Amazon Prime" - }, - "SharedPageTitle": { - "message": "Gemeinsame Videofunktionen" - }, - "SharedPageDescription": { - "message": "Diese Optionen aktivieren/deaktivieren die Einstellungen für alle Streaming-Dienste. In der folgenden Tabelle können Sie die gemeinsamen Einstellungen für einen bestimmten Dienst deaktivieren." - }, - "IntroSwitch": { - "message": "Intros & Rückblicke überspringen:" - }, - "SharedIntroDescription": { - "message": "Überspringen der Intros und Rückblicke beliebiger Serien. Außer Netflix, da dort Rückblicke nicht noch einmal angesehen werden können." - }, - "CreditsSwitch": { - "message": "Abspann überspringen:" - }, - "CreditsSwitchDescription": { - "message": "Springt so schnell wie möglich zur nächsten Episode jeder Serie" - }, - "AdsSwitch": { - "message": "Werbung überspringen:" - }, - "AdsSwitchDescription": { - "message": "Überspringen der Freevee-Werbung für Amazon und Werbung in der Netflix-Basisstufe" - }, - "SliderSwitch": { - "message": "Geschwindigkeitsregler:" - }, - "SliderSwitchDescription": { - "message": "Geschwindigkeitsregler hinzufügen." - }, - "SliderOptions": { - "message": "Slider-Optionen: Geschwindigkeit = Schrittgröße /10" - }, - "SliderStepSize": { - "message": "Slider Schrittgröße:" - }, - "SliderMin": { - "message": "Slider minimum:" - }, - "SliderMax": { - "message": "Slider maximum:" - }, - "SliderPreview": { - "message": "Slider Vorschau:" - }, - "FullscreenSwitch": { - "message": "Im Vollbildmodus abspielen:" - }, - "FullscreenSwitchDescription": { - "message": "Wenn ein Video auf Vollbild umgeschaltet wird, wird das Video automatisch abgespielt" - }, - "SelfAdsSwitch": { - "message": "Eigenwerbung überspringen:" - }, - "SelfAdsSwitchDescription": { - "message": "Überspringen der Prime-Show-Vorschauen, die vor jedem Video angezeigt werden" - }, - "PaidContentSwitch": { - "message": "Bezahlte Inhalte entfernen:", - "description": "Schalter für bezahlte Inhalte entfernen" - }, - "PaidContentDescription": { - "message": "Entfernen aller bezahlten Serien/Filmkategorien" - }, - "ContinuePositionSwitch": { - "message": "Kategorie \"Fortsetzen\" verschieben:" - }, - "ContinuePositionDescription": { - "message": "Kategorie \"Fortsetzen\" an den Seitenanfang verschieben" - }, - "FreeveeSwitch": { - "message": "Freevee-Werbungen überspringen:" - }, - "RecapSwitch": { - "message": "Rückblicke überspringen:" - }, - "RecapSwitchDescription": { - "message": "Überspringt Rückblicke jeder Sendung" - }, - "InactivitySwitch": { - "message": "Inaktivitätswarnung blocken:" - }, - "InactivitySwitchDescription": { - "message": "Setzt das Video fort, wenn die Aufforderung 'Sehen Sie noch zu' angezeigt wird" - }, - "ProfileSwitch": { - "message": "Automatisch das letztes Profil auswählen:" - }, - "ProfileSwitchDescription": { - "message": "Das zuletzt verwendete Profil wird direkt beim Start der Seite ausgewählt" - }, - "User": { - "message": "Benutzer:" - }, - "StatisticPageTitle": { - "message": "Statistik" - }, - "SkippedTime": { - "message": "Übersprungene Zeit:" - }, - "AmazonAdDescription": { - "message": "Zeit der übersprungenen FreeVee Werbung + Prime Video Eigenwerbung" - }, - "StatisticAd": { - "message": "$service$ Werbung:", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "NetflixAdDescription": { - "message": "Zeit der übersprungenen Netflix-Werbung" - }, - "StatisticIntro": { - "message": "Intro:" - }, - "StatisticIntroDescription": { - "message": "Zeit der übersprungenen Intros auf Netflix, Amazon und Disney+" - }, - "StatisticRecap": { - "message": "Rückblicke:" - }, - "StatisticRecapDescription": { - "message": "Zeit der übersprungenen Rückblicke auf Netflix, Amazon und Disney+" - }, - "StatisticSegments": { - "message": "Übersprungene Segmente:" - }, - "StatisticSegmentsDescription": { - "message": "Anzahl der übersprungenen einzelnen Segmente wie ein Intro oder eine Werbung für Netflix, Amazon und Disney+" - }, - "ImportSettings": { - "message": "Alle Einstellungen importieren/exportieren" - }, - "SaveSettings": { - "message": "Einstellungen als Datei speichern" - }, - "UploadSettings": { - "message": "Einstellungen hochladen" - }, - "ResetAddon": { - "message": "Addon auf Standard zurücksetzen" - }, - "noWrap": { - "message": "unset" - }, - "WatchCreditsSwitch": { - "message": "Abspann ansehen:" - }, - "WatchCreditsSwitchDescription": { - "message": "Sich immer den Abspann jeder Serie ansehen" - }, - "conflictingTitle": { - "message": "Alle widersprüchlichen Funktionen" - }, - "RatingSwitch": { - "message": "TMDB Bewertung:" - }, - "RatingSwitchDescription": { - "message": "Zeigt die TMDB Bewertung für jeden Film/Serie an" - }, - "ReleaseCalendarSwitch": { - "message": "Release-Kalender Optionen hinzufügen:" - }, - "ReleaseCalendarDescription": { - "message": "Fügt dem Veröffentlichungskalender die Kontrollkästchen 'Nur Playlists anzeigen' und 'DUB filtern' hinzu" - }, - "EpilepsySwitch": { - "message": "Epilepsy option" - }, - "EpilepsySwitchDescription": { - "message": "Beim überspringen der Werbung den Bildschirm verdunkeln" - }, - "UserAgentSwitch": { - "message": "Zu Desktop-Webseiten wechseln" - }, - "UserAgentSwitchDescription": { - "message": "Für prime video und disney+ auf die Desktop-Website wechseln und für amazon die Website mobilfreundlich machen" - }, - "XraySwitch": { - "message": "Xray ausblenden:" - }, - "XraySwitchDescription": { - "message": "Ausblenden der Xray-Schnellansicht über einem video" - }, - "Feature": { - "message": "Funktion: Tooltip für mehr Informationen" - }, - "Shared": { - "message": "Alle" - }, - "OpenSharedSettings": { - "message": "Gemeinsame Einstellungen öffnen" - }, - "autoOpenSettings": { - "message": "Öffnen Sie automatisch die richtigen Einstellungen:" - }, - "requestTabs": { - "message": "Erlaubnis für Tabs anfordern" - }, - "autoOpenDescription": { - "message": "Wenn auf der Streaming-Seite öffnet sich die entsprechenden Einstellungen im popup automatisch" - }, - "DuplicateSwitch": { - "message": "Entfernt doppelte Shows:" - }, - "DuplicateSwitchDescription": { - "message": "Entfernt jede doppelte Show, die bereits vorher auf Disney sichtbar war. Sichtbar bedeutet, dass die Show unter den ersten 5 Shows in jeder Reihe war" - }, - "WatchSkippedButton": { - "message": "Zurückspulen?", - "description": "Watch skipped button to watch an intro" - }, - "HomeButton": { - "message": "Startseite", - "description": "Disney Homepage button" - }, - "BigPlayerSwitch": { - "message": "Video vergrößern:" - }, - "BigPlayerDescription": { - "message": "Erweitert die größe des Videos zum gesamten Browserfenster ohne Vollbild." - }, - "DisableNumpadSwitch": { - "message": "Ziffernblock deaktivieren:" - }, - "DisableNumpadDescription": { - "message": "Deaktivieren Sie die Zifferntasten, damit nicht versehentlich die aktuelle Videozeit /-position geändert wird." - }, - "DoubleClickSwitch": { - "message": "Vollbildmodus mit Doppelklick:" - }, - "DoubleClickSwitchDescription": { - "message": "Wenn Sie auf das Video doppelklicken, wird es im Vollbildmodus angezeigt." - }, - "scrollVolumeSwitch": { - "message": "Scrollen für Lautstärke:" - }, - "scrollVolumeDescription": { - "message": "Wenn Sie auf dem Tonsymbol nach oben oder unten scrollen, wird die Lautstärke geändert." - }, - "DisneyAdDescription": { - "message": "Zeit der übersprungenen Disney-Werbung." - }, - "ShowYearSwitch": { - "message": "Erscheinungsjahr anzeigen:" - }, - "ShowYearDescription": { - "message": "Zeigt das Erscheinungsjahr neben der Bewertung an." - } -} \ No newline at end of file diff --git a/firefox/_locales/en/messages.json b/firefox/_locales/en/messages.json deleted file mode 100644 index 784477f4..00000000 --- a/firefox/_locales/en/messages.json +++ /dev/null @@ -1,315 +0,0 @@ -{ - "extensionName": { - "message": "Streaming enhanced: Netflix Disney+ Prime Video", - "description": "Name of the extension" - }, - "extensionDescription": { - "message": "Skip ads, intros, credits and add adjust speed, etc. on Netflix, Prime video, Disney+, Crunchyroll and HBO max.", - "description": "Description of the extension" - }, - "settingsTitle": { - "message": "Settings - Streaming enhanced", - "description": "Title of the Settings Tab" - }, - "pageTitle": { - "message": "enhanced", - "description": "Title of the Settings Page" - }, - "rateNow": { - "message": "Rate now!" - }, - "sharedSettings": { - "message": "Shared Settings" - }, - "sharedSettingsDescription": { - "message": "These options will only enable/disable the $service$ part of the shared setting", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "backup": { - "message": "Backup/Reset" - }, - "statistics": { - "message": "Statistics" - }, - "changelog": { - "message": "Changelog" - }, - "donate": { - "message": "Donate" - }, - "PageSpecificTitle": { - "message": "$service$ specific", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "defaultPageTitle": { - "message": "Optional functions" - }, - "defaultPageDescription": { - "message": "Every feature which is turned off by default either because they are confusing if they were turned on or they are in beta" - }, - "DefaultPaidContentDescription": { - "message": "Removing every paid movie/series category from Amazon prime" - }, - "SharedPageTitle": { - "message": "Shared Video features" - }, - "SharedPageDescription": { - "message": "These options will only enable/disable the settings for all streaming services. In the below table you can disable the shared settings for a specific service" - }, - "IntroSwitch": { - "message": "Skip Intro & Recap:" - }, - "SharedIntroDescription": { - "message": "Skipping the intros and recaps of any series. Except Netflix since there Recaps cannot be watched again." - }, - "CreditsSwitch": { - "message": "Skip Credits:" - }, - "CreditsSwitchDescription": { - "message": "Skipping to the next episode of every series as fast as possible" - }, - "AdsSwitch": { - "message": "Skip Ads:" - }, - "AdsSwitchDescription": { - "message": "Skipping freevee ads for amazon and all of the ads in the basic Netflix tier" - }, - "SliderSwitch": { - "message": "Add Speed control:" - }, - "SliderSwitchDescription": { - "message": "Adding a speed adjustment slider" - }, - "SliderOptions": { - "message": "Slider options: speed = stepsize /10" - }, - "SliderStepSize": { - "message": "Slider stepsize:" - }, - "SliderMin": { - "message": "Slider minimum:" - }, - "SliderMax": { - "message": "Slider maximum:" - }, - "SliderPreview": { - "message": "Slider preview:" - }, - "FullscreenSwitch": { - "message": "Play on fullscreen:" - }, - "FullscreenSwitchDescription": { - "message": "If a video is put on fullscreen, the video will play automatically" - }, - "SelfAdsSwitch": { - "message": "Skip Self Ads:" - }, - "SelfAdsSwitchDescription": { - "message": "Skipping the prime show previews which are shown before any video" - }, - "PaidContentSwitch": { - "message": "Remove paid content:", - "description": "Remove paid content feature switch" - }, - "PaidContentDescription": { - "message": "Removing every paid movie/series category" - }, - "ContinuePositionSwitch": { - "message": "Move category \"Continue\":" - }, - "ContinuePositionDescription": { - "message": "Move category \"Continue\" to the top of the page" - }, - "FreeveeSwitch": { - "message": "Skip Freevee Ads:" - }, - "RecapSwitch": { - "message": "Skip Recaps:" - }, - "RecapSwitchDescription": { - "message": "Skips recapitulations of every show" - }, - "InactivitySwitch": { - "message": "Resume inactivity warning:" - }, - "InactivitySwitchDescription": { - "message": "Resumes the video if the 'Are you still watching' prompt is shown" - }, - "ProfileSwitch": { - "message": "Auto pick last profile:" - }, - "ProfileSwitchDescription": { - "message": "The last used profile is directly chosen when the page is launched" - }, - "User": { - "message": "User:" - }, - "StatisticPageTitle": { - "message": "Statistics" - }, - "SkippedTime": { - "message": "Skipped time:" - }, - "AmazonAdDescription": { - "message": "Time of skipped FreeVee Ads + Prime Video Self Ads" - }, - "StatisticAd": { - "message": "$service$ Ad:", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "NetflixAdDescription": { - "message": "Time of skipped Netflix Ads" - }, - "StatisticIntro": { - "message": "Intro:" - }, - "StatisticIntroDescription": { - "message": "Time of skipped Intros on Netflix, Amazon and Disney+" - }, - "StatisticRecap": { - "message": "Recap:" - }, - "StatisticRecapDescription": { - "message": "Time of skipped Recaps on Netflix, Amazon and Disney+" - }, - "StatisticSegments": { - "message": "Segments Skipped:" - }, - "StatisticSegmentsDescription": { - "message": "Amount of Individual Segments Skipped like an Intro or an Ad for Netflix, Amazon and Disney+" - }, - "ImportSettings": { - "message": "Import/Export all Settings" - }, - "SaveSettings": { - "message": "Save Settings as file" - }, - "UploadSettings": { - "message": "Upload settings" - }, - "ResetAddon": { - "message": "Reset Addon to default" - }, - "noWrap": { - "message": "nowrap" - }, - "WatchCreditsSwitch": { - "message": "Watch Credits:" - }, - "WatchCreditsSwitchDescription": { - "message": "Always watch the credits of every series" - }, - "conflictingTitle": { - "message": "All conflicting Features" - }, - "RatingSwitch": { - "message": "TMDB Rating:" - }, - "RatingSwitchDescription": { - "message": "Adding the TMDB rating to every movie and series" - }, - "ReleaseCalendarSwitch": { - "message": "Add Release Calendar options:" - }, - "ReleaseCalendarDescription": { - "message": "Adds the checkboxes 'Show Playlists only' and 'Filter DUB' to the release calendar" - }, - "EpilepsySwitch": { - "message": "Epilepsy option" - }, - "EpilepsySwitchDescription": { - "message": "Darken the screen when skipping the ad" - }, - "UserAgentSwitch": { - "message": "Switch to desktop websites" - }, - "UserAgentSwitchDescription": { - "message": "For prime video and disney+ change to the Desktop website and for amazon make the site mobile friendly" - }, - "XraySwitch": { - "message": "Hide Xray:" - }, - "XraySwitchDescription": { - "message": "Hide the Xray Quick View over a video" - }, - "Feature": { - "message": "Feature: Tooltip for more information" - }, - "Shared": { - "message": "All" - }, - "OpenSharedSettings": { - "message": "Open Shared Settings" - }, - "autoOpenSettings": { - "message": "Automatically open correct Settings:" - }, - "requestTabs": { - "message": "Request Tabs permission" - }, - "autoOpenDescription": { - "message": "If on streaming site open the according settings in popup automatically" - }, - "DuplicateSwitch": { - "message": "Remove duplicate Shows:" - }, - "DuplicateSwitchDescription": { - "message": "Remove every duplicate show, which was already visible on Disney before. Visible means that the show is in the first 5 shows in every row" - }, - "WatchSkippedButton": { - "message": "Rewind?", - "description": "Watch skipped button to watch an intro" - }, - "HomeButton": { - "message": "Home", - "description": "Disney Homepage button" - }, - "BigPlayerSwitch": { - "message": "Video bigger:" - }, - "BigPlayerDescription": { - "message": "Extends the video size to the entire browser window without full screen." - }, - "DisableNumpadSwitch": { - "message": "Disable numpad:" - }, - "DisableNumpadDescription": { - "message": "Disable the numpad keys so you don't accidentally change the current video time/position." - }, - "DoubleClickSwitch": { - "message": "Fullscreen by double clicking:" - }, - "DoubleClickSwitchDescription": { - "message": "If you double click on the video it will go to fullscreen." - }, - "scrollVolumeSwitch": { - "message": "Scroll for volume:" - }, - "scrollVolumeDescription": { - "message": "Scrolling up or down on the Sound Icon will change the volume." - }, - "DisneyAdDescription": { - "message": "Time of skipped Disney Ads." - }, - "ShowYearSwitch": { - "message": "Show release year:" - }, - "ShowYearDescription": { - "message": "Shows the release year next to the rating." - } -} \ No newline at end of file diff --git a/firefox/_locales/es/messages.json b/firefox/_locales/es/messages.json deleted file mode 100644 index 58f36bcf..00000000 --- a/firefox/_locales/es/messages.json +++ /dev/null @@ -1,315 +0,0 @@ -{ - "extensionName": { - "message": "Streaming enhanced: Netflix Disney+ Prime Video", - "description": "Nombre de la extensión" - }, - "extensionDescription": { - "message": "Omite anuncios, intros, créditos y añade ajustar velocidad, etc. en Netflix, Prime video, Disney+, Crunchyroll y HBO max.", - "description": "Descripción de la ampliación" - }, - "settingsTitle": { - "message": "Ajustes - Streaming enhanced", - "description": "Título de la pestaña Configuración" - }, - "pageTitle": { - "message": "mejorado", - "description": "Título de la página de configuración" - }, - "rateNow": { - "message": "¡Califique ahora!" - }, - "sharedSettings": { - "message": "Ajustes compartidos" - }, - "sharedSettingsDescription": { - "message": "Estas opciones sólo activarán/desactivarán la parte $service$ de la configuración compartida", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "backup": { - "message": "Copia de seguridad/reinicio" - }, - "statistics": { - "message": "Estadísticas" - }, - "changelog": { - "message": "Registro de cambios" - }, - "donate": { - "message": "Donar" - }, - "PageSpecificTitle": { - "message": "$service$ específico", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "defaultPageTitle": { - "message": "Funciones opcionales" - }, - "defaultPageDescription": { - "message": "Todas las funciones que están desactivadas por defecto, ya sea porque son confusas si se activan o porque están en fase beta." - }, - "DefaultPaidContentDescription": { - "message": "Eliminación de todas las categorías de películas/series de pago de Amazon prime" - }, - "SharedPageTitle": { - "message": "Funciones de vídeo compartido" - }, - "SharedPageDescription": { - "message": "Estas opciones sólo activarán/desactivarán los ajustes para todos los servicios de streaming. En la siguiente tabla puede desactivar los ajustes compartidos para un servicio específico" - }, - "IntroSwitch": { - "message": "Skip Intro & Recap:" - }, - "SharedIntroDescription": { - "message": "Saltarse las intros y las recapitulaciones de cualquier serie. Excepto Netflix, ya que los resúmenes no se pueden volver a ver." - }, - "CreditsSwitch": { - "message": "Saltar créditos:" - }, - "CreditsSwitchDescription": { - "message": "Saltar al siguiente episodio de cada serie lo más rápido posible" - }, - "AdsSwitch": { - "message": "Saltar anuncios:" - }, - "AdsSwitchDescription": { - "message": "Saltar los anuncios de freevee para amazon y todos los anuncios en el nivel básico de Netflix" - }, - "SliderSwitch": { - "message": "Añadir control de velocidad:" - }, - "SliderSwitchDescription": { - "message": "Añadir un control deslizante de ajuste de la velocidad" - }, - "SliderOptions": { - "message": "Opciones del control deslizante: velocidad = tamaño del paso /10" - }, - "SliderStepSize": { - "message": "Tamaño de paso del deslizador:" - }, - "SliderMin": { - "message": "Deslizador mínimo:" - }, - "SliderMax": { - "message": "Deslizador máximo:" - }, - "SliderPreview": { - "message": "Vista previa del deslizador:" - }, - "FullscreenSwitch": { - "message": "Juega a pantalla completa:" - }, - "FullscreenSwitchDescription": { - "message": "Si un vídeo se pone en pantalla completa, se reproducirá automáticamente" - }, - "SelfAdsSwitch": { - "message": "Saltar anuncios propios:" - }, - "SelfAdsSwitchDescription": { - "message": "Saltar los avances de los programas de máxima audiencia que se muestran antes de cualquier vídeo" - }, - "PaidContentSwitch": { - "message": "Elimine los contenidos de pago:", - "description": "Eliminar la función de contenidos de pago" - }, - "PaidContentDescription": { - "message": "Eliminación de todas las categorías de películas/series de pago" - }, - "ContinuePositionSwitch": { - "message": "Mover categoría \"Continuar\":" - }, - "ContinuePositionDescription": { - "message": "Mover la categoría \"Continuar\" a la parte superior de la página" - }, - "FreeveeSwitch": { - "message": "Saltar anuncios de Freevee:" - }, - "RecapSwitch": { - "message": "Skip Recaps:" - }, - "RecapSwitchDescription": { - "message": "Se salta las recapitulaciones de cada programa" - }, - "InactivitySwitch": { - "message": "Reanudar aviso de inactividad:" - }, - "InactivitySwitchDescription": { - "message": "Reanuda el vídeo si se muestra el mensaje \"¿Sigue viendo el vídeo?" - }, - "ProfileSwitch": { - "message": "Elección automática del último perfil:" - }, - "ProfileSwitchDescription": { - "message": "Al abrir la página, se selecciona directamente el último perfil utilizado." - }, - "User": { - "message": "Usuario:" - }, - "StatisticPageTitle": { - "message": "Estadísticas" - }, - "SkippedTime": { - "message": "Tiempo perdido:" - }, - "AmazonAdDescription": { - "message": "Tiempo de anuncios de FreeVee omitidos + anuncios propios de Prime Video" - }, - "StatisticAd": { - "message": "$service$ Ad:", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "NetflixAdDescription": { - "message": "Tiempo de anuncios de Netflix omitidos" - }, - "StatisticIntro": { - "message": "Intro:" - }, - "StatisticIntroDescription": { - "message": "Tiempo de Intros saltadas en Netflix, Amazon y Disney+." - }, - "StatisticRecap": { - "message": "Recapitulemos:" - }, - "StatisticRecapDescription": { - "message": "Tiempo de recapitulaciones omitidas en Netflix, Amazon y Disney+." - }, - "StatisticSegments": { - "message": "Segmentos saltados:" - }, - "StatisticSegmentsDescription": { - "message": "Cantidad de segmentos individuales omitidos como una introducción o un anuncio para Netflix, Amazon y Disney+." - }, - "ImportSettings": { - "message": "Importar/exportar todos los ajustes" - }, - "SaveSettings": { - "message": "Guardar configuración como archivo" - }, - "UploadSettings": { - "message": "Cargar configuración" - }, - "ResetAddon": { - "message": "Restablecer Addon por defecto" - }, - "noWrap": { - "message": "nowrap" - }, - "WatchCreditsSwitch": { - "message": "Ver créditos:" - }, - "WatchCreditsSwitchDescription": { - "message": "Ver siempre los créditos de cada serie" - }, - "conflictingTitle": { - "message": "Todas las características en conflicto" - }, - "RatingSwitch": { - "message": "Clasificación TMDB:" - }, - "RatingSwitchDescription": { - "message": "Añadir la clasificación TMDB a todas las películas y series" - }, - "ReleaseCalendarSwitch": { - "message": "Añadir opciones de calendario de publicación:" - }, - "ReleaseCalendarDescription": { - "message": "Añade las casillas \"Mostrar sólo listas de reproducción\" y \"Filtrar DUB\" al calendario de lanzamientos." - }, - "EpilepsySwitch": { - "message": "Opción epilepsia" - }, - "EpilepsySwitchDescription": { - "message": "Oscurecer la pantalla al saltar el anuncio" - }, - "UserAgentSwitch": { - "message": "Cambiar a sitios web de escritorio" - }, - "UserAgentSwitchDescription": { - "message": "Para prime video y disney+ cambiar a la web de escritorio y para amazon hacer el sitio móvil amigable" - }, - "XraySwitch": { - "message": "Ocultar Rayos X:" - }, - "XraySwitchDescription": { - "message": "Ocultar la vista rápida de rayos X sobre un vídeo" - }, - "Feature": { - "message": "Función: Tooltip para más información" - }, - "Shared": { - "message": "Todos" - }, - "OpenSharedSettings": { - "message": "Abrir la configuración compartida" - }, - "autoOpenSettings": { - "message": "Abrir automáticamente la configuración correcta:" - }, - "requestTabs": { - "message": "Solicitar permiso para pestañas" - }, - "autoOpenDescription": { - "message": "Si en el sitio de streaming de abrir la configuración de acuerdo en la ventana emergente de forma automática" - }, - "DuplicateSwitch": { - "message": "Eliminar duplicados Espectáculos:" - }, - "DuplicateSwitchDescription": { - "message": "Elimina todos los programas duplicados que ya estaban visibles en Disney. Visible significa que el programa está entre los 5 primeros programas de cada fila." - }, - "WatchSkippedButton": { - "message": "¿Rebobinar?", - "description": "Botón Watch skipped para ver una introducción" - }, - "HomeButton": { - "message": "Inicio", - "description": "Botón Disney Homepage" - }, - "BigPlayerSwitch": { - "message": "Un vídeo más grande:" - }, - "BigPlayerDescription": { - "message": "Amplía el tamaño del vídeo a toda la ventana del navegador sin pantalla completa." - }, - "DisableNumpadSwitch": { - "message": "Desactiva el teclado numérico:" - }, - "DisableNumpadDescription": { - "message": "Desactiva las teclas del teclado numérico para no cambiar accidentalmente el tiempo/posición de vídeo actual." - }, - "DoubleClickSwitch": { - "message": "Pantalla completa haciendo doble clic:" - }, - "DoubleClickSwitchDescription": { - "message": "Si haces doble clic en el vídeo, pasará a pantalla completa." - }, - "scrollVolumeSwitch": { - "message": "Desplácese para el volumen:" - }, - "scrollVolumeDescription": { - "message": "Si se desplaza hacia arriba o hacia abajo en el icono de sonido, cambiará el volumen." - }, - "DisneyAdDescription": { - "message": "Tiempo de anuncios Disney saltados." - }, - "ShowYearSwitch": { - "message": "Mostrar año de lanzamiento:" - }, - "ShowYearDescription": { - "message": "Muestra el año de publicación junto a la clasificación." - } -} \ No newline at end of file diff --git a/firefox/_locales/fr/messages.json b/firefox/_locales/fr/messages.json deleted file mode 100644 index 903e44ac..00000000 --- a/firefox/_locales/fr/messages.json +++ /dev/null @@ -1,315 +0,0 @@ -{ - "extensionName": { - "message": "Streaming enhanced: Netflix Disney+ Prime Video", - "description": "Nom de l'extension" - }, - "extensionDescription": { - "message": "Passez les publicités, intros, génériques et ajustez la vitesse, etc. sur Netflix, Prime video, Disney+, Crunchyroll et HBO max.", - "description": "Description de l'extension" - }, - "settingsTitle": { - "message": "Paramètres - Streaming enhanced", - "description": "Titre de l'onglet Paramètres" - }, - "pageTitle": { - "message": "améliorée", - "description": "Titre de la page des paramètres" - }, - "rateNow": { - "message": "Tarifer maintenant !" - }, - "sharedSettings": { - "message": "Paramètres partagés" - }, - "sharedSettingsDescription": { - "message": "Ces options n'activeront/désactiveront que la partie $service$ du paramètre partagé", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "backup": { - "message": "Sauvegarde/Réinitialisation" - }, - "statistics": { - "message": "Statistiques" - }, - "changelog": { - "message": "Changelog" - }, - "donate": { - "message": "Faire un don" - }, - "PageSpecificTitle": { - "message": "$service$ spécifique", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "defaultPageTitle": { - "message": "Fonctions optionnelles" - }, - "defaultPageDescription": { - "message": "Toutes les fonctionnalités qui sont désactivées par défaut, soit parce qu'elles prêtent à confusion si elles sont activées, soit parce qu'elles sont en version bêta." - }, - "DefaultPaidContentDescription": { - "message": "Suppression de toutes les catégories de films et de séries payantes sur Amazon Prime" - }, - "SharedPageTitle": { - "message": "Fonctionnalités de la vidéo partagée" - }, - "SharedPageDescription": { - "message": "Ces options n'activent/désactivent les paramètres que pour tous les services de diffusion en continu. Dans le tableau ci-dessous, vous pouvez désactiver les paramètres partagés pour un service spécifique." - }, - "IntroSwitch": { - "message": "Skip Intro & Recap:" - }, - "SharedIntroDescription": { - "message": "Sauter les intros et les récapitulatifs de n'importe quelle série. Sauf Netflix, car les récapitulatifs ne peuvent pas être regardés à nouveau." - }, - "CreditsSwitch": { - "message": "Crédits Skip:" - }, - "CreditsSwitchDescription": { - "message": "Passer à l'épisode suivant de chaque série aussi vite que possible" - }, - "AdsSwitch": { - "message": "Sauter les annonces:" - }, - "AdsSwitchDescription": { - "message": "Sauter les publicités freevee pour amazon et toutes les publicités dans le niveau de base de Netflix" - }, - "SliderSwitch": { - "message": "Ajouter le contrôle de la vitesse:" - }, - "SliderSwitchDescription": { - "message": "Ajout d'un curseur de réglage de la vitesse" - }, - "SliderOptions": { - "message": "Options du curseur: vitesse = taille du pas /10" - }, - "SliderStepSize": { - "message": "Taille du curseur:" - }, - "SliderMin": { - "message": "Slider minimum:" - }, - "SliderMax": { - "message": "Maximum de la glissière:" - }, - "SliderPreview": { - "message": "Aperçu du curseur:" - }, - "FullscreenSwitch": { - "message": "Jouer en plein écran:" - }, - "FullscreenSwitchDescription": { - "message": "Si une vidéo est mise en plein écran, la vidéo sera lue automatiquement." - }, - "SelfAdsSwitch": { - "message": "Skip Self Ads:" - }, - "SelfAdsSwitchDescription": { - "message": "Sauter les aperçus des émissions de premier plan qui sont diffusés avant toute vidéo" - }, - "PaidContentSwitch": { - "message": "Supprimer les contenus payants:", - "description": "Supprimer le commutateur de la fonction de contenu payant" - }, - "PaidContentDescription": { - "message": "Suppression de toutes les catégories de films/séries payants" - }, - "ContinuePositionSwitch": { - "message": "Déplacer la catégorie \"Continuer\":" - }, - "ContinuePositionDescription": { - "message": "Déplacer la catégorie \"Continuer\" en haut de la page" - }, - "FreeveeSwitch": { - "message": "Sauter les annonces de Freevee:" - }, - "RecapSwitch": { - "message": "Skip Recaps:" - }, - "RecapSwitchDescription": { - "message": "Sauter les récapitulations de chaque émission" - }, - "InactivitySwitch": { - "message": "Avertissement d'inactivité de reprise:" - }, - "InactivitySwitchDescription": { - "message": "Reprend la vidéo si l'invite \"Êtes-vous toujours en train de regarder\" s'affiche." - }, - "ProfileSwitch": { - "message": "Sélection automatique du dernier profil:" - }, - "ProfileSwitchDescription": { - "message": "Le dernier profil utilisé est directement choisi lors du lancement de la page." - }, - "User": { - "message": "Utilisateur:" - }, - "StatisticPageTitle": { - "message": "Statistiques" - }, - "SkippedTime": { - "message": "Le temps a sauté:" - }, - "AmazonAdDescription": { - "message": "Durée des publicités FreeVee sautées + publicités Prime Video Self" - }, - "StatisticAd": { - "message": "$service$ Ad:", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "NetflixAdDescription": { - "message": "Durée des publicités Netflix sautées" - }, - "StatisticIntro": { - "message": "Intro:" - }, - "StatisticIntroDescription": { - "message": "L'heure des introductions sautées sur Netflix, Amazon et Disney+" - }, - "StatisticRecap": { - "message": "Récapitulation:" - }, - "StatisticRecapDescription": { - "message": "Les récapitulatifs de Time of skipped sur Netflix, Amazon et Disney+" - }, - "StatisticSegments": { - "message": "Segments ignorés:" - }, - "StatisticSegmentsDescription": { - "message": "Nombre de segments individuels sautés comme une intro ou une publicité pour Netflix, Amazon et Disney+" - }, - "ImportSettings": { - "message": "Importer/exporter tous les paramètres" - }, - "SaveSettings": { - "message": "Enregistrer les paramètres dans un fichier" - }, - "UploadSettings": { - "message": "Paramètres de téléchargement" - }, - "ResetAddon": { - "message": "Réinitialiser l'addon par défaut" - }, - "noWrap": { - "message": "piège à souris" - }, - "WatchCreditsSwitch": { - "message": "Voir les crédits:" - }, - "WatchCreditsSwitchDescription": { - "message": "Toujours regarder le générique de chaque série" - }, - "conflictingTitle": { - "message": "Toutes les caractéristiques contradictoires" - }, - "RatingSwitch": { - "message": "TMDB Rating:" - }, - "RatingSwitchDescription": { - "message": "Ajouter la note TMDB à chaque film et série" - }, - "ReleaseCalendarSwitch": { - "message": "Ajouter des options de calendrier de diffusion:" - }, - "ReleaseCalendarDescription": { - "message": "Ajoute les cases à cocher \"Afficher uniquement les listes de lecture\" et \"Filtrer DUB\" au calendrier des sorties." - }, - "EpilepsySwitch": { - "message": "Option épilepsie" - }, - "EpilepsySwitchDescription": { - "message": "Assombrir l'écran lorsque l'on saute la publicité" - }, - "UserAgentSwitch": { - "message": "Passer à des sites web de bureau" - }, - "UserAgentSwitchDescription": { - "message": "Pour prime video et disney+, passer au site web de bureau et pour amazon, rendre le site adapté aux mobiles." - }, - "XraySwitch": { - "message": "Cacher la radiographie:" - }, - "XraySwitchDescription": { - "message": "Masquer l'affichage rapide des radiographies sur une vidéo" - }, - "Feature": { - "message": "Fonctionnalité: Info-bulle pour plus d'informations" - }, - "Shared": { - "message": "Tous" - }, - "OpenSharedSettings": { - "message": "Ouvrir les paramètres partagés" - }, - "autoOpenSettings": { - "message": "Ouvrir automatiquement les paramètres corrects:" - }, - "requestTabs": { - "message": "Demande d'autorisation pour les onglets" - }, - "autoOpenDescription": { - "message": "Si vous êtes sur un site de streaming, les paramètres correspondants s'ouvrent automatiquement dans une fenêtre contextuelle." - }, - "DuplicateSwitch": { - "message": "Supprimer les spectacles en double:" - }, - "DuplicateSwitchDescription": { - "message": "Supprimez tous les spectacles en double, qui étaient déjà visibles sur Disney auparavant. Visible signifie que le spectacle se trouve dans les 5 premiers spectacles de chaque ligne." - }, - "WatchSkippedButton": { - "message": "Retour en arrière ?", - "description": "Bouton \"Regarder sautée\" pour regarder une intro" - }, - "HomeButton": { - "message": "Accueil", - "description": "Bouton de la page d'accueil Disney" - }, - "BigPlayerSwitch": { - "message": "Vidéo plus grande:" - }, - "BigPlayerDescription": { - "message": "Étend la taille de la vidéo à l'ensemble de la fenêtre du navigateur sans passer par le plein écran." - }, - "DisableNumpadSwitch": { - "message": "Désactiver le pavé numérique:" - }, - "DisableNumpadDescription": { - "message": "Désactivez les touches du pavé numérique afin de ne pas modifier accidentellement la durée/la position de la vidéo en cours." - }, - "DoubleClickSwitch": { - "message": "Plein écran en double-cliquant:" - }, - "DoubleClickSwitchDescription": { - "message": "Si vous double-cliquez sur la vidéo, elle s'affichera en plein écran." - }, - "scrollVolumeSwitch": { - "message": "Défilement pour le volume:" - }, - "scrollVolumeDescription": { - "message": "Le défilement vers le haut ou vers le bas de l'icône du son modifie le volume." - }, - "DisneyAdDescription": { - "message": "Durée des publicités Disney sautées." - }, - "ShowYearSwitch": { - "message": "Année de sortie de l'exposition :" - }, - "ShowYearDescription": { - "message": "Indique l'année de publication à côté de la note." - } -} \ No newline at end of file diff --git a/firefox/_locales/it/messages.json b/firefox/_locales/it/messages.json deleted file mode 100644 index 7811427b..00000000 --- a/firefox/_locales/it/messages.json +++ /dev/null @@ -1,315 +0,0 @@ -{ - "extensionName": { - "message": "Streaming enhanced: Netflix Disney+ Prime Video", - "description": "Nome dell'estensione" - }, - "extensionDescription": { - "message": "Salta annunci, intro, titoli di coda e regola la velocità su Netflix, Prime Video, Disney+, Crunchyroll e HBO Max.", - "description": "Descrizione dell'estensione" - }, - "settingsTitle": { - "message": "Impostazioni - Streaming enhanced", - "description": "Titolo della scheda Impostazioni" - }, - "pageTitle": { - "message": "potenziato", - "description": "Titolo della pagina delle impostazioni" - }, - "rateNow": { - "message": "Vota ora!" - }, - "sharedSettings": { - "message": "Impostazioni condivise" - }, - "sharedSettingsDescription": { - "message": "Queste opzioni abilitano/disabilitano solo la parte $service$ dell'impostazione condivisa", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "backup": { - "message": "Backup/Reset" - }, - "statistics": { - "message": "Statistiche" - }, - "changelog": { - "message": "Changelog" - }, - "donate": { - "message": "Donare" - }, - "PageSpecificTitle": { - "message": "$service$ specifico", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "defaultPageTitle": { - "message": "Funzioni opzionali" - }, - "defaultPageDescription": { - "message": "Tutte le funzionalità che sono disattivate per impostazione predefinita o perché confondono se sono attivate o perché sono in fase di beta." - }, - "DefaultPaidContentDescription": { - "message": "Rimozione di ogni categoria di film/serie a pagamento da Amazon prime" - }, - "SharedPageTitle": { - "message": "Caratteristiche dei video condivisi" - }, - "SharedPageDescription": { - "message": "Queste opzioni abilitano/disabilitano le impostazioni solo per tutti i servizi di streaming. Nella tabella seguente è possibile disattivare le impostazioni condivise per un servizio specifico." - }, - "IntroSwitch": { - "message": "Salta l'introduzione e la ripetizione:" - }, - "SharedIntroDescription": { - "message": "Saltare le introduzioni e i riassunti di qualsiasi serie. Tranne che su Netflix, dove i riassunti non possono essere guardati di nuovo." - }, - "CreditsSwitch": { - "message": "Crediti di salto:" - }, - "CreditsSwitchDescription": { - "message": "Saltare all'episodio successivo di ogni serie il più velocemente possibile" - }, - "AdsSwitch": { - "message": "Salta gli annunci:" - }, - "AdsSwitchDescription": { - "message": "Saltare gli annunci di freevee per amazon e tutti gli annunci nel livello base di Netflix" - }, - "SliderSwitch": { - "message": "Aggiungere il controllo della velocità:" - }, - "SliderSwitchDescription": { - "message": "Aggiunta di un cursore di regolazione della velocità" - }, - "SliderOptions": { - "message": "Opzioni del cursore: velocità = stepsize /10" - }, - "SliderStepSize": { - "message": "Dimensione del cursore:" - }, - "SliderMin": { - "message": "Cursore minimo:" - }, - "SliderMax": { - "message": "Cursore massimo:" - }, - "SliderPreview": { - "message": "Anteprima del cursore:" - }, - "FullscreenSwitch": { - "message": "Riproduzione a schermo intero:" - }, - "FullscreenSwitchDescription": { - "message": "Se un video viene messo a schermo intero, il video verrà riprodotto automaticamente." - }, - "SelfAdsSwitch": { - "message": "Salta gli annunci personali:" - }, - "SelfAdsSwitchDescription": { - "message": "Saltare le anteprime della prima serata, che vengono mostrate prima di ogni video." - }, - "PaidContentSwitch": { - "message": "Rimuovere i contenuti a pagamento:", - "description": "Rimuovere il cambio di funzione dei contenuti a pagamento" - }, - "PaidContentDescription": { - "message": "Rimozione di tutte le categorie di film/serie a pagamento" - }, - "ContinuePositionSwitch": { - "message": "Spostare la categoria \"Continua\":" - }, - "ContinuePositionDescription": { - "message": "Spostare la categoria \"Continua\" all'inizio della pagina" - }, - "FreeveeSwitch": { - "message": "Salta gli annunci di Freevee:" - }, - "RecapSwitch": { - "message": "Skip Recaps:" - }, - "RecapSwitchDescription": { - "message": "Salta le ricapitolazioni di ogni spettacolo" - }, - "InactivitySwitch": { - "message": "Avviso di inattività della ripresa:" - }, - "InactivitySwitchDescription": { - "message": "Riprende il video se viene visualizzato il messaggio \"Stai ancora guardando\"." - }, - "ProfileSwitch": { - "message": "Scelta automatica dell'ultimo profilo:" - }, - "ProfileSwitchDescription": { - "message": "All'avvio della pagina viene scelto direttamente l'ultimo profilo utilizzato." - }, - "User": { - "message": "Utente:" - }, - "StatisticPageTitle": { - "message": "Statistiche" - }, - "SkippedTime": { - "message": "Tempo saltato:" - }, - "AmazonAdDescription": { - "message": "Tempo degli annunci FreeVee saltati + Prime Video Self Ads" - }, - "StatisticAd": { - "message": "$service$ Annuncio:", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "NetflixAdDescription": { - "message": "Tempo di salto degli annunci di Netflix" - }, - "StatisticIntro": { - "message": "Introduzione:" - }, - "StatisticIntroDescription": { - "message": "Tempo di intro saltate su Netflix, Amazon e Disney+" - }, - "StatisticRecap": { - "message": "Riconoscimento:" - }, - "StatisticRecapDescription": { - "message": "Il tempo delle repliche saltate su Netflix, Amazon e Disney+" - }, - "StatisticSegments": { - "message": "Segmenti saltati:" - }, - "StatisticSegmentsDescription": { - "message": "Quantità di singoli segmenti saltati come un'introduzione o una pubblicità per Netflix, Amazon e Disney+" - }, - "ImportSettings": { - "message": "Importazione/Esportazione di tutte le impostazioni" - }, - "SaveSettings": { - "message": "Salva le impostazioni come file" - }, - "UploadSettings": { - "message": "Impostazioni di caricamento" - }, - "ResetAddon": { - "message": "Ripristinare l'impostazione predefinita del componente aggiuntivo" - }, - "noWrap": { - "message": "nowrap" - }, - "WatchCreditsSwitch": { - "message": "Guarda i crediti:" - }, - "WatchCreditsSwitchDescription": { - "message": "Guardate sempre i titoli di coda di ogni serie" - }, - "conflictingTitle": { - "message": "Tutte le caratteristiche in conflitto" - }, - "RatingSwitch": { - "message": "Valutazione TMDB:" - }, - "RatingSwitchDescription": { - "message": "Aggiunta della valutazione TMDB a tutti i film e le serie" - }, - "ReleaseCalendarSwitch": { - "message": "Aggiungere le opzioni del calendario di rilascio:" - }, - "ReleaseCalendarDescription": { - "message": "Aggiunge le caselle di controllo \"Mostra solo playlist\" e \"Filtra DUB\" al calendario delle uscite." - }, - "EpilepsySwitch": { - "message": "Opzione epilessia" - }, - "EpilepsySwitchDescription": { - "message": "Oscuramento dello schermo quando si salta l'annuncio" - }, - "UserAgentSwitch": { - "message": "Passare a siti web desktop" - }, - "UserAgentSwitchDescription": { - "message": "Per prime video e disney+ passare al sito web per desktop e per amazon rendere il sito compatibile con i dispositivi mobili." - }, - "XraySwitch": { - "message": "Nascondere i raggi X:" - }, - "XraySwitchDescription": { - "message": "Nascondere la vista rapida Xray su un video" - }, - "Feature": { - "message": "Caratteristica: Tooltip per maggiori informazioni" - }, - "Shared": { - "message": "Tutti" - }, - "OpenSharedSettings": { - "message": "Aprire le impostazioni condivise" - }, - "autoOpenSettings": { - "message": "Aprire automaticamente le impostazioni corrette:" - }, - "requestTabs": { - "message": "Richiesta di autorizzazione per le schede" - }, - "autoOpenDescription": { - "message": "Se sul sito di streaming si aprono automaticamente le impostazioni corrispondenti nel popup" - }, - "DuplicateSwitch": { - "message": "Rimuovere i duplicati delle Mostre:" - }, - "DuplicateSwitchDescription": { - "message": "Rimuove tutti gli spettacoli duplicati che erano già visibili su Disney. Visibile significa che lo spettacolo è tra i primi 5 spettacoli di ogni riga." - }, - "WatchSkippedButton": { - "message": "Riavvolgere?", - "description": "Pulsante Guarda saltato per guardare un'introduzione" - }, - "HomeButton": { - "message": "Casa", - "description": "Pulsante della homepage Disney" - }, - "BigPlayerSwitch": { - "message": "Video più grande:" - }, - "BigPlayerDescription": { - "message": "Estende le dimensioni del video all'intera finestra del browser senza schermo intero." - }, - "DisableNumpadSwitch": { - "message": "Disabilita il tastierino numerico:" - }, - "DisableNumpadDescription": { - "message": "Disattivare i tasti del tastierino numerico per evitare di modificare accidentalmente la posizione o l'ora del video corrente." - }, - "DoubleClickSwitch": { - "message": "Fare doppio clic su schermo intero:" - }, - "DoubleClickSwitchDescription": { - "message": "Se si fa doppio clic sul video, questo verrà visualizzato a schermo intero." - }, - "scrollVolumeSwitch": { - "message": "Scorrere per il volume:" - }, - "scrollVolumeDescription": { - "message": "Lo scorrimento verso l'alto o verso il basso dell'icona del suono modifica il volume." - }, - "DisneyAdDescription": { - "message": "Tempo di salto degli annunci Disney." - }, - "ShowYearSwitch": { - "message": "Anno di uscita dello spettacolo:" - }, - "ShowYearDescription": { - "message": "Mostra l'anno di uscita accanto al rating." - } -} \ No newline at end of file diff --git a/firefox/_locales/ja/messages.json b/firefox/_locales/ja/messages.json deleted file mode 100644 index 2cfaf571..00000000 --- a/firefox/_locales/ja/messages.json +++ /dev/null @@ -1,315 +0,0 @@ -{ - "extensionName": { - "message": "Streaming enhanced: Netflix Disney+ Prime Video", - "description": "拡張子の名前" - }, - "extensionDescription": { - "message": "Netflix、Prime video、Disney+、Crunchyroll、HBO maxでは、広告、イントロ、クレジットをスキップし、速度などを調整できます。", - "description": "エクステンションの説明" - }, - "settingsTitle": { - "message": "設定 - Streaming enhanced", - "description": "設定タブのタイトル" - }, - "pageTitle": { - "message": "強化された", - "description": "設定ページのタイトル" - }, - "rateNow": { - "message": "今すぐレートを" - }, - "sharedSettings": { - "message": "共有設定" - }, - "sharedSettingsDescription": { - "message": "これらのオプションは、共有設定の$service$部分のみを有効/無効にします。", - "placeholders": { - "service": { - "content": "$1", - "example": "ネットフリックス" - } - } - }, - "backup": { - "message": "バックアップ/リセット" - }, - "statistics": { - "message": "統計" - }, - "changelog": { - "message": "変更履歴" - }, - "donate": { - "message": "寄付する" - }, - "PageSpecificTitle": { - "message": "$service$ 専用", - "placeholders": { - "service": { - "content": "$1", - "example": "ネットフリックス" - } - } - }, - "defaultPageTitle": { - "message": "オプション機能" - }, - "defaultPageDescription": { - "message": "デフォルトでオフになっているすべての機能は、オンになっていると混乱を招くか、ベータ版であるかのどちらかである。" - }, - "DefaultPaidContentDescription": { - "message": "Amazonプライムからすべての有料映画/シリーズカテゴリーを削除" - }, - "SharedPageTitle": { - "message": "共有ビデオ機能" - }, - "SharedPageDescription": { - "message": "これらのオプションは、すべてのストリーミングサービスの設定のみを有効/無効にします。以下の表では、特定のサービスの共有設定を無効にすることができます。" - }, - "IntroSwitch": { - "message": "イントロと総括をスキップする:" - }, - "SharedIntroDescription": { - "message": "どのシリーズでもイントロと総集編をスキップする。ただし、Netflixは再放送ができないので別だ。" - }, - "CreditsSwitch": { - "message": "スキップ・クレジット" - }, - "CreditsSwitchDescription": { - "message": "すべてのシリーズの次のエピソードにできるだけ早く飛ぶ" - }, - "AdsSwitch": { - "message": "広告をスキップする:" - }, - "AdsSwitchDescription": { - "message": "amazonのfreevee広告とNetflixのベーシック・ティアの広告をすべてスキップする。" - }, - "SliderSwitch": { - "message": "スピードコントロールを追加する:" - }, - "SliderSwitchDescription": { - "message": "スピード調整スライダーの追加" - }, - "SliderOptions": { - "message": "スライダーのオプション:スピード = ステップサイズ /10" - }, - "SliderStepSize": { - "message": "スライダーのステップサイズ:" - }, - "SliderMin": { - "message": "スライダーの最小値:" - }, - "SliderMax": { - "message": "スライダーの最大値:" - }, - "SliderPreview": { - "message": "スライダーのプレビュー" - }, - "FullscreenSwitch": { - "message": "フルスクリーンで再生する:" - }, - "FullscreenSwitchDescription": { - "message": "ビデオをフルスクリーンにすると、自動的に再生されます。" - }, - "SelfAdsSwitch": { - "message": "自己広告をスキップする:" - }, - "SelfAdsSwitchDescription": { - "message": "ビデオの前に表示されるプライムショーのプレビューをスキップする。" - }, - "PaidContentSwitch": { - "message": "有料コンテンツを削除する:", - "description": "有料コンテンツ機能のスイッチを削除" - }, - "PaidContentDescription": { - "message": "すべての有料映画/シリーズカテゴリーの削除" - }, - "ContinuePositionSwitch": { - "message": "カテゴリーを「続ける」に移動する:" - }, - "ContinuePositionDescription": { - "message": "カテゴリー \"Continue \"をページのトップに移動" - }, - "FreeveeSwitch": { - "message": "フリービー広告をスキップする:" - }, - "RecapSwitch": { - "message": "スキップ・リキャップ" - }, - "RecapSwitchDescription": { - "message": "すべてのショーの総括を省略" - }, - "InactivitySwitch": { - "message": "非アクティブの警告を再開する:" - }, - "InactivitySwitchDescription": { - "message": "まだ見ていますか」というプロンプトが表示されたら、ビデオを再開する" - }, - "ProfileSwitch": { - "message": "最後のプロファイルを自動的に選択します:" - }, - "ProfileSwitchDescription": { - "message": "最後に使用されたプロファイルは、ページが立ち上げられたときに直接選択される" - }, - "User": { - "message": "ユーザー" - }, - "StatisticPageTitle": { - "message": "統計" - }, - "SkippedTime": { - "message": "時間を飛ばした:" - }, - "AmazonAdDescription": { - "message": "FreeVee広告+プライム・ビデオ自己広告のスキップ時間" - }, - "StatisticAd": { - "message": "$service$ 広告:", - "placeholders": { - "service": { - "content": "$1", - "example": "ネットフリックス" - } - } - }, - "NetflixAdDescription": { - "message": "Netflix広告のスキップ時間" - }, - "StatisticIntro": { - "message": "イントロダクション" - }, - "StatisticIntroDescription": { - "message": "Netflix、Amazon、Disney+のイントロがスキップされる時間" - }, - "StatisticRecap": { - "message": "総括する:" - }, - "StatisticRecapDescription": { - "message": "Netflix、Amazon、Disney+で再放送をスキップした時間" - }, - "StatisticSegments": { - "message": "セグメントスキップ:" - }, - "StatisticSegmentsDescription": { - "message": "Netflix、Amazon、Disney+のイントロや広告のようにスキップされた個別セグメントの量" - }, - "ImportSettings": { - "message": "すべての設定のインポート/エクスポート" - }, - "SaveSettings": { - "message": "設定をファイルに保存" - }, - "UploadSettings": { - "message": "設定のアップロード" - }, - "ResetAddon": { - "message": "アドオンをデフォルトに戻す" - }, - "noWrap": { - "message": "ナウラップ" - }, - "WatchCreditsSwitch": { - "message": "クレジットを見る" - }, - "WatchCreditsSwitchDescription": { - "message": "すべてのシリーズのクレジットを見る" - }, - "conflictingTitle": { - "message": "相反するすべての機能" - }, - "RatingSwitch": { - "message": "TMDBの評価" - }, - "RatingSwitchDescription": { - "message": "すべての映画とシリーズにTMDBの評価を加える" - }, - "ReleaseCalendarSwitch": { - "message": "リリースカレンダーのオプションを追加:" - }, - "ReleaseCalendarDescription": { - "message": "リリースカレンダーに「プレイリストのみ表示」と「DUBをフィルタリング」のチェックボックスを追加" - }, - "EpilepsySwitch": { - "message": "てんかんオプション" - }, - "EpilepsySwitchDescription": { - "message": "広告スキップ時に画面を暗くする" - }, - "UserAgentSwitch": { - "message": "デスクトップウェブサイトへの切り替え" - }, - "UserAgentSwitchDescription": { - "message": "プライム・ビデオとdisney+はデスクトップ・サイトに変更し、amazonはモバイル・フレンドリー・サイトにする。" - }, - "XraySwitch": { - "message": "X線を隠す:" - }, - "XraySwitchDescription": { - "message": "Xrayクイックビューをビデオの上に隠す" - }, - "Feature": { - "message": "特徴詳細情報のツールチップ" - }, - "Shared": { - "message": "すべて" - }, - "OpenSharedSettings": { - "message": "共有設定を開く" - }, - "autoOpenSettings": { - "message": "自動的に正しい設定を開きます:" - }, - "requestTabs": { - "message": "タブの使用許可を申請する" - }, - "autoOpenDescription": { - "message": "ストリーミング・サイトの場合、ポップアップで該当する設定を自動的に開く" - }, - "DuplicateSwitch": { - "message": "重複する番組を削除する:" - }, - "DuplicateSwitchDescription": { - "message": "以前ディズニーで表示されていた重複ショーをすべて削除する。表示されているということは、そのショーがすべての行の最初の5つのショーに入っているということです。" - }, - "WatchSkippedButton": { - "message": "巻き戻し?", - "description": "スキップボタンでイントロを見る" - }, - "HomeButton": { - "message": "ホーム", - "description": "ディズニー・ホームページ・ボタン" - }, - "BigPlayerSwitch": { - "message": "ビデオも大きくなった:" - }, - "BigPlayerDescription": { - "message": "フルスクリーンにすることなく、動画サイズをブラウザウィンドウ全体に拡大します。" - }, - "DisableNumpadSwitch": { - "message": "テンキーパッドを無効にする:" - }, - "DisableNumpadDescription": { - "message": "誤って現在のビデオ時間/位置を変更しないように、テンキーキーを無効にします。" - }, - "DoubleClickSwitch": { - "message": "ダブルクリックでフルスクリーン:" - }, - "DoubleClickSwitchDescription": { - "message": "ビデオをダブルクリックするとフルスクリーンになります。" - }, - "scrollVolumeSwitch": { - "message": "音量をスクロールする:" - }, - "scrollVolumeDescription": { - "message": "サウンドアイコンを上下にスクロールすると音量が変わります。" - }, - "DisneyAdDescription": { - "message": "ディズニーの広告をスキップした時間。" - }, - "ShowYearSwitch": { - "message": "ショーのリリース年" - }, - "ShowYearDescription": { - "message": "レーティングの横にリリース年を表示。" - } -} \ No newline at end of file diff --git a/firefox/_locales/ko/messages.json b/firefox/_locales/ko/messages.json deleted file mode 100644 index d39bf609..00000000 --- a/firefox/_locales/ko/messages.json +++ /dev/null @@ -1,315 +0,0 @@ -{ - "extensionName": { - "message": "Streaming enhanced: Netflix Disney+ Prime Video", - "description": "확장 프로그램 이름" - }, - "extensionDescription": { - "message": "넷플릭스, 프라임 비디오, 디즈니+, 크런치롤, HBO max에서 광고, 인트로, 크레딧을 건너뛰고 속도 조절 등을 추가할 수 있습니다.", - "description": "확장 기능에 대한 설명" - }, - "settingsTitle": { - "message": "설정 - Streaming enhanced", - "description": "설정 탭의 제목" - }, - "pageTitle": { - "message": "향상된", - "description": "설정 페이지의 제목" - }, - "rateNow": { - "message": "지금 평가하세요!" - }, - "sharedSettings": { - "message": "공유 설정" - }, - "sharedSettingsDescription": { - "message": "이러한 옵션은 공유 설정의 $service$ 부분만 활성화/비활성화합니다.", - "placeholders": { - "service": { - "content": "$1", - "example": "넷플릭스" - } - } - }, - "backup": { - "message": "백업/리셋" - }, - "statistics": { - "message": "통계" - }, - "changelog": { - "message": "변경 로그" - }, - "donate": { - "message": "기부하기" - }, - "PageSpecificTitle": { - "message": "$service$ 특정", - "placeholders": { - "service": { - "content": "$1", - "example": "넷플릭스" - } - } - }, - "defaultPageTitle": { - "message": "선택적 기능" - }, - "defaultPageDescription": { - "message": "켜져 있으면 혼란스럽거나 베타 버전이기 때문에 기본적으로 꺼져 있는 모든 기능" - }, - "DefaultPaidContentDescription": { - "message": "Amazon Prime에서 모든 유료 영화/시리즈 카테고리 제거하기" - }, - "SharedPageTitle": { - "message": "공유 비디오 기능" - }, - "SharedPageDescription": { - "message": "이러한 옵션은 모든 스트리밍 서비스에 대한 설정만 활성화/비활성화합니다. 아래 표에서 특정 서비스에 대한 공유 설정을 비활성화할 수 있습니다." - }, - "IntroSwitch": { - "message": "소개 및 요약 건너뛰기:" - }, - "SharedIntroDescription": { - "message": "모든 시리즈의 인트로 및 요약 건너뛰기. 넷플릭스는 다시 볼 수 없는 요약본이 있으므로 제외합니다." - }, - "CreditsSwitch": { - "message": "크레딧 건너뛰기:" - }, - "CreditsSwitchDescription": { - "message": "모든 시리즈의 다음 에피소드로 최대한 빠르게 건너뛰기" - }, - "AdsSwitch": { - "message": "광고 건너뛰기:" - }, - "AdsSwitchDescription": { - "message": "아마존 프리비 광고 건너뛰기 및 기본 넷플릭스 티어의 모든 광고 건너뛰기" - }, - "SliderSwitch": { - "message": "속도 제어를 추가합니다:" - }, - "SliderSwitchDescription": { - "message": "속도 조절 슬라이더 추가" - }, - "SliderOptions": { - "message": "슬라이더 옵션: 속도 = 단계 크기 /10" - }, - "SliderStepSize": { - "message": "슬라이더 단계 크기:" - }, - "SliderMin": { - "message": "최소 슬라이더:" - }, - "SliderMax": { - "message": "슬라이더 최대:" - }, - "SliderPreview": { - "message": "슬라이더 미리 보기:" - }, - "FullscreenSwitch": { - "message": "전체 화면으로 재생합니다:" - }, - "FullscreenSwitchDescription": { - "message": "동영상이 전체 화면으로 표시되면 동영상이 자동으로 재생됩니다." - }, - "SelfAdsSwitch": { - "message": "셀프 광고 건너뛰기:" - }, - "SelfAdsSwitchDescription": { - "message": "동영상 전에 표시되는 프라임 쇼 미리보기 건너뛰기" - }, - "PaidContentSwitch": { - "message": "유료 콘텐츠를 제거합니다:", - "description": "유료 콘텐츠 기능 전환 제거" - }, - "PaidContentDescription": { - "message": "모든 유료 영화/시리즈 카테고리 삭제" - }, - "ContinuePositionSwitch": { - "message": "카테고리 이동 \"계속\":" - }, - "ContinuePositionDescription": { - "message": "카테고리 '계속'을 페이지 상단으로 이동합니다." - }, - "FreeveeSwitch": { - "message": "프리비 광고 건너뛰기:" - }, - "RecapSwitch": { - "message": "요약 건너뛰기:" - }, - "RecapSwitchDescription": { - "message": "모든 프로그램 요약 건너뛰기" - }, - "InactivitySwitch": { - "message": "비활성 상태 재개 경고:" - }, - "InactivitySwitchDescription": { - "message": "'아직 시청 중이십니까'라는 메시지가 표시되면 동영상을 다시 시작합니다." - }, - "ProfileSwitch": { - "message": "마지막 프로필 자동 선택:" - }, - "ProfileSwitchDescription": { - "message": "페이지가 시작될 때 마지막으로 사용한 프로필이 바로 선택됩니다." - }, - "User": { - "message": "사용자:" - }, - "StatisticPageTitle": { - "message": "통계" - }, - "SkippedTime": { - "message": "시간 건너뛰기:" - }, - "AmazonAdDescription": { - "message": "프리비 광고 + 프라임 비디오 셀프 광고 건너뛰기 시간" - }, - "StatisticAd": { - "message": "$service$ 광고:", - "placeholders": { - "service": { - "content": "$1", - "example": "넷플릭스" - } - } - }, - "NetflixAdDescription": { - "message": "넷플릭스 광고를 건너뛴 시간" - }, - "StatisticIntro": { - "message": "소개:" - }, - "StatisticIntroDescription": { - "message": "넷플릭스, 아마존, 디즈니+에서 인트로를 건너뛴 시간" - }, - "StatisticRecap": { - "message": "요약합니다:" - }, - "StatisticRecapDescription": { - "message": "넷플릭스, 아마존 및 디즈니+에서 건너뛴 요약 시간" - }, - "StatisticSegments": { - "message": "세그먼트 건너뛰기:" - }, - "StatisticSegmentsDescription": { - "message": "넷플릭스, 아마존 및 디즈니+의 인트로 또는 광고처럼 건너뛴 개별 세그먼트의 수" - }, - "ImportSettings": { - "message": "모든 설정 가져오기/내보내기" - }, - "SaveSettings": { - "message": "설정을 파일로 저장" - }, - "UploadSettings": { - "message": "업로드 설정" - }, - "ResetAddon": { - "message": "애드온을 기본값으로 재설정" - }, - "noWrap": { - "message": "nowrap" - }, - "WatchCreditsSwitch": { - "message": "크레딧 보기:" - }, - "WatchCreditsSwitchDescription": { - "message": "모든 시리즈의 크레딧을 항상 시청하세요" - }, - "conflictingTitle": { - "message": "충돌하는 모든 기능" - }, - "RatingSwitch": { - "message": "TMDB 등급:" - }, - "RatingSwitchDescription": { - "message": "모든 영화 및 시리즈에 TMDB 등급 추가하기" - }, - "ReleaseCalendarSwitch": { - "message": "릴리즈 캘린더 옵션을 추가합니다:" - }, - "ReleaseCalendarDescription": { - "message": "출시 캘린더에 '재생목록만 표시' 및 'DUB 필터링' 확인란을 추가합니다." - }, - "EpilepsySwitch": { - "message": "간질 옵션" - }, - "EpilepsySwitchDescription": { - "message": "광고 건너뛰기 시 화면 어둡게 하기" - }, - "UserAgentSwitch": { - "message": "데스크톱 웹사이트로 전환" - }, - "UserAgentSwitchDescription": { - "message": "프라임 비디오 및 디즈니+의 경우 데스크톱 웹사이트로 변경하고 아마존의 경우 사이트를 모바일 친화적으로 만듭니다." - }, - "XraySwitch": { - "message": "X레이 숨기기:" - }, - "XraySwitchDescription": { - "message": "동영상 위에 X레이 퀵뷰 숨기기" - }, - "Feature": { - "message": "기능: 기능: 자세한 내용은 도구 설명" - }, - "Shared": { - "message": "모두" - }, - "OpenSharedSettings": { - "message": "공유 설정 열기" - }, - "autoOpenSettings": { - "message": "올바른 설정이 자동으로 열립니다:" - }, - "requestTabs": { - "message": "탭 권한 요청" - }, - "autoOpenDescription": { - "message": "스트리밍 사이트에서 해당 설정이 자동으로 팝업으로 열리면 다음과 같이 설정합니다." - }, - "DuplicateSwitch": { - "message": "중복된 쇼를 제거합니다:" - }, - "DuplicateSwitchDescription": { - "message": "이전에 Disney에서 이미 표시되었던 중복 쇼를 모두 제거합니다. 표시됨은 모든 행의 처음 5개 쇼에 해당 쇼가 있음을 의미합니다." - }, - "WatchSkippedButton": { - "message": "되감기?", - "description": "인트로를 시청하려면 건너뛰기 버튼을 클릭하세요." - }, - "HomeButton": { - "message": "홈", - "description": "디즈니 홈페이지 버튼" - }, - "BigPlayerSwitch": { - "message": "동영상 크게 보기:" - }, - "BigPlayerDescription": { - "message": "동영상 크기를 전체 화면 없이 브라우저 창 전체로 확장합니다." - }, - "DisableNumpadSwitch": { - "message": "숫자 패드를 비활성화합니다:" - }, - "DisableNumpadDescription": { - "message": "현재 동영상 시간/위치를 실수로 변경하지 않도록 숫자패드 키를 비활성화합니다." - }, - "DoubleClickSwitch": { - "message": "두 번 클릭하면 전체 화면으로 전환됩니다:" - }, - "DoubleClickSwitchDescription": { - "message": "동영상을 두 번 클릭하면 전체 화면으로 이동합니다." - }, - "scrollVolumeSwitch": { - "message": "볼륨을 찾으려면 스크롤합니다:" - }, - "scrollVolumeDescription": { - "message": "사운드 아이콘을 위아래로 스크롤하면 볼륨이 변경됩니다." - }, - "DisneyAdDescription": { - "message": "디즈니 광고를 건너뛴 시간." - }, - "ShowYearSwitch": { - "message": "출시 연도를 표시합니다:" - }, - "ShowYearDescription": { - "message": "등급 옆에 출시 연도를 표시합니다." - } -} \ No newline at end of file diff --git a/firefox/_locales/mk/messages.json b/firefox/_locales/mk/messages.json deleted file mode 100644 index 6f333669..00000000 --- a/firefox/_locales/mk/messages.json +++ /dev/null @@ -1 +0,0 @@ -{ "extensionName": { "message": "Streaming enhanced: Netflix Disney+ Prime Video", "description": "Име на наставката" }, "extensionDescription": { "message": "Автоматски прескокнете ги рекламите, воведот, резимето на филмовите/сериите на Netflix, Disney+, Prime, Crunchyroll, HBO max.", "description": "Опис на наставката" }, "settingsTitle": { "message": "Поставки - skipper", "description": "Името на Поставки јазичето" }, "pageTitle": { "message": "enhanced", "description": "Името на Поставки страницата" }, "rateNow": { "message": "Оцценете нè!" }, "sharedSettings": { "message": "Споделени Поставки/Опции" }, "sharedSettingsDescription": { "message": "Овие опции само ќе овозможат/оневозможат дел од споделените поставки од $service$", "placeholders": { "service": { "content": "$1", "example": "Netflix" } } }, "backup": { "message": "Правење резервна копија и ресетирање" }, "statistics": { "message": "Статистика" }, "changelog": { "message": "Дневник на измени и ажурирања" }, "donate": { "message": "Донирајте" }, "PageSpecificTitle": { "message": "$service$ подесувања", "placeholders": { "service": { "content": "$1", "example": "Netflix" } } }, "defaultPageTitle": { "message": "Факултативни карактеристики" }, "defaultPageDescription": { "message": "Секоја од функциите која е исклучена од почетокот е затоа што се во beta издание или се збунувачки за корисникот" }, "DefaultPaidContentDescription": { "message": "Отстранување на категоријата за купување на филмови и ТВ-серии на Amazon Prime" }, "SharedPageTitle": { "message": "Комбинирани подесувања" }, "SharedPageDescription": { "message": "Овие опции ќе ги овозможат/оневозможат само поставките за сите стриминг услуги. Во табелата подолу можете да ги оневозможите споделените поставки за одредена услуга." }, "IntroSwitch": { "message": "Прескокни вовед и резиме:" }, "SharedIntroDescription": { "message": "Прескокнување на воведот и резимето на сериите на поддржаните платформи освен на Netflix" }, "CreditsSwitch": { "message": "Прескокни благодаренија:" }, "CreditsSwitchDescription": { "message": "Прескокнување кон следната епизода што е можно побрзо" }, "AdsSwitch": { "message": "Прескокни реклами:" }, "AdsSwitchDescription": { "message": "Прескокнување на рекламите на Amazon Prime & Netflix претплати кои имаат реклами врз видеата" }, "SliderSwitch": { "message": "Додадете контрола на брзината:" }, "SliderSwitchDescription": { "message": "Додавање лизгач за прилагодување на брзината" }, "SliderOptions": { "message": "Добивање на брзина на лизгачот: брзина = големина на чекори / 10" }, "SliderStepSize": { "message": "Големина на чекорот на лизгачот:" }, "SliderMin": { "message": "Минимум брзина на лизгачот:" }, "SliderMax": { "message": "Максимум брзина на лизгачот:" }, "SliderPreview": { "message": "Преглед на лизгачот:" }, "FullscreenSwitch": { "message": "Гледање на цел екран:" }, "FullscreenSwitchDescription": { "message": "Ако видеото е поставено низ цел екран, тогаш ќе се пуште автоматски" }, "SelfAdsSwitch": { "message": "Прескокни реклами:" }, "SelfAdsSwitchDescription": { "message": "Прескокнување на краткиот преглед на шоуто што се прикажуваат пред секое отварање на видеото" }, "PaidContentSwitch": { "message": "Отстранете ја содржината која се плаќа:", "description": "Копче за отстранување/додавање на содржина која се плаќа" }, "PaidContentDescription": { "message": "Отстранување на секоја ТВ-серија/филм кој треба да се купи за да се гледа" }, "ContinuePositionSwitch": { "message": "Преместете ја категоријата „Продолжи“:" }, "ContinuePositionDescription": { "message": "Преместете ја категоријата „Продолжи“ на врвот на страницата" }, "FreeveeSwitch": { "message": "Прескокнете ги рекламите:" }, "RecapSwitch": { "message": "Прескокни го резимето:" }, "RecapSwitchDescription": { "message": "Го прескокнува резимето на секоја ТВ-серија" }, "InactivitySwitch": { "message": "Прескокни го предупредувањето за дали сè уште гледате:" }, "InactivitySwitchDescription": { "message": "Го продолжува видеото ако се прикаже известувањето 'Дали сè уште гледате'." }, "ProfileSwitch": { "message": "Автоматски избирање на последниот одберен профил на Netflix:" }, "ProfileSwitchDescription": { "message": "Последниот користен профил на автоматски се избира кога ќе се одбере прв пат на" }, "User": { "message": "Профил:" }, "StatisticPageTitle": { "message": "Статистика" }, "SkippedTime": { "message": "Време заштедено:" }, "AmazonAdDescription": { "message": "Време заштедено од FreeVee реклами + Prime Video реклами" }, "StatisticAd": { "message": "$service$ реклами:", "placeholders": { "service": { "content": "$1", "example": "Netflix" } } }, "NetflixAdDescription": { "message": "Време заштедено од Netflix реклами" }, "StatisticIntro": { "message": "Вовед:" }, "StatisticIntroDescription": { "message": "Време заштедено за вовед од Netflix, Amazon and Disney+" }, "StatisticRecap": { "message": "Резиме:" }, "StatisticRecapDescription": { "message": "Време заштедено за резиме од Netflix, Amazon and Disney+" }, "StatisticSegments": { "message": "Прескокнати сегменти:" }, "StatisticSegmentsDescription": { "message": "Количина на поединечни прескокнати сегменти како вовед или реклами од Netflix, Amazon and Disney+" }, "ImportSettings": { "message": "Целосно зачувување и прикачување на поставките" }, "SaveSettings": { "message": "Зачувај промени во датотека" }, "UploadSettings": { "message": "Прикачете претходно зачуваани промени од датотека" }, "ResetAddon": { "message": "Ресетирај алатка ( Фабрички ресет )" }, "noWrap": { "message": "unset" }, "WatchCreditsSwitch": { "message": "Прикажи кредити:" }, "WatchCreditsSwitchDescription": { "message": "Секогаш гледај ги завршните наслови на секоја серија" }, "conflictingTitle": { "message": "Сите конфликтни функции" }, "RatingSwitch": { "message": "Оцена на ИМДБ:" }, "RatingSwitchDescription": { "message": "Го прикажува рејтингот на IMDB за секој филм/серија" }, "EpilepsySwitch": { "message": "Опција за епилепсија" }, "EpilepsySwitchDescription": { "message": "Затемни го екранот кога ја прескокнуваш рекламата" }, "UserAgentSwitch": { "message": "Префрли се на веб-локации за десктоп" }, "UserAgentSwitchDescription": { "message": "За примарното видео и disney+ сменете на веб-страницата на Desktop и за amazon направете ја страницата пријателска за мобилни телефони" }, "XraySwitch": { "message": "Скриј Xray:" }, "XraySwitchDescription": { "message": "Скриј го брзиот преглед на Xray преку видео" }, "Feature": { "message": "Функција: Совет за алатки за повеќе информации" }, "Shared": { "message": "Сите" }, "OpenSharedSettings": { "message": "Отворете ги споделените поставки" }, "autoOpenSettings": { "message": "Автоматски отворете ги правилните поставки:" }, "requestTabs": { "message": "Побарајте дозвола за картички" }, "DuplicateSwitch": { "message": "Отстрани дупликат емисии:" }, "DuplicateSwitchDescription": { "message": "Отстранете го секое дупликат шоу, кое претходно беше видливо на Disney. Видливо значи дека шоуто е во првите 5 емисии во секој ред" }, "WatchSkippedButton": { "message": "Премотајте назад?", "description": "Watch skipped button to watch an intro" }, "HomeButton": { "message": "Дома", "description": "Disney Homepage button" }, "DisableNumpadSwitch": { "message": "Оневозможи numpad:" }, "DisableNumpadDescription": { "message": "Оневозможете ги копчињата со нумпод за случајно да не го промените тековното време/положба на видеото." }, "DoubleClickSwitch": { "message": "Цел екран со двоен клик:" }, "DoubleClickSwitchDescription": { "message": "Ако кликнете двапати на видеото, тоа ќе оди на цел екран." }, "scrollVolumeSwitch": { "message": "Скролувајте за јачина на звук:" }, "scrollVolumeDescription": { "message": "Скролањето нагоре или надолу на иконата за звук ќе ја промени јачината на звукот." }} \ No newline at end of file diff --git a/firefox/_locales/pl/messages.json b/firefox/_locales/pl/messages.json deleted file mode 100644 index 3f9c1c4a..00000000 --- a/firefox/_locales/pl/messages.json +++ /dev/null @@ -1,315 +0,0 @@ -{ - "extensionName": { - "message": "Streaming enhanced: Netflix Disney+ Prime Video", - "description": "Nazwa rozszerzenia" - }, - "extensionDescription": { - "message": "Pomiń reklamy, wstępy, napisy końcowe i dostosuj prędkość itp. w serwisach Netflix, Prime Video, Disney+, Crunchyroll i HBO max.", - "description": "Opis rozszerzenia" - }, - "settingsTitle": { - "message": "Ustawienia - Streaming enhanced", - "description": "Tytuł karty Ustawienia" - }, - "pageTitle": { - "message": "wzmocniony", - "description": "Tytuł strony ustawień" - }, - "rateNow": { - "message": "Oceń teraz!" - }, - "sharedSettings": { - "message": "Ustawienia współdzielone" - }, - "sharedSettingsDescription": { - "message": "Te opcje włączą/wyłączą tylko część $service$ współdzielonego ustawienia", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "backup": { - "message": "Backup/Reset" - }, - "statistics": { - "message": "Statystyki" - }, - "changelog": { - "message": "Dziennik zmian" - }, - "donate": { - "message": "Darowizna" - }, - "PageSpecificTitle": { - "message": "$service$ Specyficzna", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "defaultPageTitle": { - "message": "Funkcje opcjonalne" - }, - "defaultPageDescription": { - "message": "Każda funkcja, która jest domyślnie wyłączona, ponieważ jest myląca, jeśli została włączona, lub jest w wersji beta." - }, - "DefaultPaidContentDescription": { - "message": "Usunięcie każdej płatnej kategorii filmów/seriali z Amazon Prime" - }, - "SharedPageTitle": { - "message": "Funkcje udostępnionego wideo" - }, - "SharedPageDescription": { - "message": "Opcje te włączą/wyłączą ustawienia tylko dla wszystkich usług streamingowych. W poniższej tabeli można wyłączyć współdzielone ustawienia dla określonej usługi." - }, - "IntroSwitch": { - "message": "Pomiń wprowadzenie i podsumowanie:" - }, - "SharedIntroDescription": { - "message": "Pomijanie wstępów i podsumowań dowolnego serialu. Z wyjątkiem Netflixa, ponieważ tam recapów nie można oglądać ponownie." - }, - "CreditsSwitch": { - "message": "Pomiń kredyty:" - }, - "CreditsSwitchDescription": { - "message": "Przeskakiwanie do następnego odcinka każdej serii tak szybko, jak to możliwe." - }, - "AdsSwitch": { - "message": "Pomiń reklamy:" - }, - "AdsSwitchDescription": { - "message": "Pomijanie reklam freevee dla amazon i wszystkich reklam w podstawowej warstwie Netflix." - }, - "SliderSwitch": { - "message": "Dodaj kontrolę prędkości:" - }, - "SliderSwitchDescription": { - "message": "Dodanie suwaka regulacji prędkości" - }, - "SliderOptions": { - "message": "Opcje suwaka: prędkość = wielkość kroku /10" - }, - "SliderStepSize": { - "message": "Wielkość kroku suwaka:" - }, - "SliderMin": { - "message": "Suwak minimum:" - }, - "SliderMax": { - "message": "Maksymalny suwak:" - }, - "SliderPreview": { - "message": "Podgląd suwaka:" - }, - "FullscreenSwitch": { - "message": "Graj na pełnym ekranie:" - }, - "FullscreenSwitchDescription": { - "message": "Jeśli wideo zostanie wyświetlone na pełnym ekranie, będzie ono odtwarzane automatycznie." - }, - "SelfAdsSwitch": { - "message": "Pomiń reklamy własne:" - }, - "SelfAdsSwitchDescription": { - "message": "Pomijanie podglądu głównego programu, który jest wyświetlany przed każdym filmem." - }, - "PaidContentSwitch": { - "message": "Usuń płatne treści:", - "description": "Usuń przełącznik funkcji płatnej zawartości" - }, - "PaidContentDescription": { - "message": "Usunięcie każdej płatnej kategorii filmów/seriali" - }, - "ContinuePositionSwitch": { - "message": "Przenieś kategorię \"Kontynuuj\":" - }, - "ContinuePositionDescription": { - "message": "Przeniesienie kategorii \"Kontynuuj\" na górę strony" - }, - "FreeveeSwitch": { - "message": "Pomiń reklamy Freevee:" - }, - "RecapSwitch": { - "message": "Pomiń podsumowania:" - }, - "RecapSwitchDescription": { - "message": "Pomija podsumowania każdego programu" - }, - "InactivitySwitch": { - "message": "Ostrzeżenie o braku aktywności:" - }, - "InactivitySwitchDescription": { - "message": "Wznawia odtwarzanie wideo, jeśli wyświetlany jest monit \"Czy nadal oglądasz\"." - }, - "ProfileSwitch": { - "message": "Automatyczny wybór ostatniego profilu:" - }, - "ProfileSwitchDescription": { - "message": "Ostatnio używany profil jest wybierany bezpośrednio po uruchomieniu strony" - }, - "User": { - "message": "Użytkownik:" - }, - "StatisticPageTitle": { - "message": "Statystyki" - }, - "SkippedTime": { - "message": "Pominięty czas:" - }, - "AmazonAdDescription": { - "message": "Czas pominiętych reklam FreeVee + reklamy własne Prime Video" - }, - "StatisticAd": { - "message": "$service$ Ad:", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "NetflixAdDescription": { - "message": "Czas pominiętych reklam Netflix" - }, - "StatisticIntro": { - "message": "Wprowadzenie:" - }, - "StatisticIntroDescription": { - "message": "Czas pominiętych intro w serwisach Netflix, Amazon i Disney+" - }, - "StatisticRecap": { - "message": "Podsumowanie:" - }, - "StatisticRecapDescription": { - "message": "Czas pominiętych podsumowań w serwisach Netflix, Amazon i Disney+" - }, - "StatisticSegments": { - "message": "Pominięte segmenty:" - }, - "StatisticSegmentsDescription": { - "message": "Liczba pominiętych pojedynczych segmentów, takich jak intro lub reklama w serwisach Netflix, Amazon i Disney+" - }, - "ImportSettings": { - "message": "Import/eksport wszystkich ustawień" - }, - "SaveSettings": { - "message": "Zapisz ustawienia jako plik" - }, - "UploadSettings": { - "message": "Ustawienia przesyłania" - }, - "ResetAddon": { - "message": "Przywróć domyślne ustawienia dodatku" - }, - "noWrap": { - "message": "nowrap" - }, - "WatchCreditsSwitch": { - "message": "Kredyty na oglądanie:" - }, - "WatchCreditsSwitchDescription": { - "message": "Zawsze oglądaj napisy końcowe każdego serialu" - }, - "conflictingTitle": { - "message": "Wszystkie sprzeczne funkcje" - }, - "RatingSwitch": { - "message": "Ocena TMDB:" - }, - "RatingSwitchDescription": { - "message": "Dodawanie oceny TMDB do każdego filmu i serialu" - }, - "ReleaseCalendarSwitch": { - "message": "Dodaj opcje kalendarza wydań:" - }, - "ReleaseCalendarDescription": { - "message": "Dodaje pola wyboru \"Pokaż tylko listy odtwarzania\" i \"Filtruj DUB\" do kalendarza wydań." - }, - "EpilepsySwitch": { - "message": "Opcja padaczki" - }, - "EpilepsySwitchDescription": { - "message": "Przyciemnianie ekranu podczas pomijania reklam" - }, - "UserAgentSwitch": { - "message": "Przełączanie na witryny stacjonarne" - }, - "UserAgentSwitchDescription": { - "message": "Dla prime video i disney+ zmień stronę na desktopową, a dla amazon zrób stronę przyjazną dla urządzeń mobilnych." - }, - "XraySwitch": { - "message": "Ukryj rentgen:" - }, - "XraySwitchDescription": { - "message": "Ukryj szybki podgląd rentgenowski nad wideo" - }, - "Feature": { - "message": "Funkcja: Podpowiedź, aby uzyskać więcej informacji" - }, - "Shared": { - "message": "Wszystkie" - }, - "OpenSharedSettings": { - "message": "Otwórz Ustawienia udostępnione" - }, - "autoOpenSettings": { - "message": "Automatycznie otwórz prawidłowe ustawienia:" - }, - "requestTabs": { - "message": "Zażądaj uprawnień do zakładek" - }, - "autoOpenDescription": { - "message": "Jeśli na stronie streamingowej automatycznie otworzą się odpowiednie ustawienia w wyskakującym okienku" - }, - "DuplicateSwitch": { - "message": "Usuń zduplikowane pokazy:" - }, - "DuplicateSwitchDescription": { - "message": "Usuń każdy zduplikowany program, który był już wcześniej widoczny w Disney. Widoczny oznacza, że program znajduje się w pierwszych 5 programach w każdym rzędzie." - }, - "WatchSkippedButton": { - "message": "Przewinąć?", - "description": "Przycisk obejrzyj pominięte, aby obejrzeć intro" - }, - "HomeButton": { - "message": "Strona główna", - "description": "Przycisk strony głównej Disney" - }, - "BigPlayerSwitch": { - "message": "Wideo większe:" - }, - "BigPlayerDescription": { - "message": "Rozszerza rozmiar wideo do całego okna przeglądarki bez pełnego ekranu." - }, - "DisableNumpadSwitch": { - "message": "Wyłącz klawiaturę numeryczną:" - }, - "DisableNumpadDescription": { - "message": "Wyłącz klawisze numeryczne, aby przypadkowo nie zmienić bieżącego czasu/pozycji wideo." - }, - "DoubleClickSwitch": { - "message": "Pełny ekran po dwukrotnym kliknięciu:" - }, - "DoubleClickSwitchDescription": { - "message": "Dwukrotne kliknięcie wideo spowoduje przejście do trybu pełnoekranowego." - }, - "scrollVolumeSwitch": { - "message": "Przewijanie głośności:" - }, - "scrollVolumeDescription": { - "message": "Przewijanie ikony dźwięku w górę lub w dół powoduje zmianę głośności." - }, - "DisneyAdDescription": { - "message": "Czas pominiętych reklam Disneya." - }, - "ShowYearSwitch": { - "message": "Rok premiery programu:" - }, - "ShowYearDescription": { - "message": "Pokazuje rok wydania obok oceny." - } -} \ No newline at end of file diff --git a/firefox/_locales/pt/messages.json b/firefox/_locales/pt/messages.json deleted file mode 100644 index e85990e0..00000000 --- a/firefox/_locales/pt/messages.json +++ /dev/null @@ -1,315 +0,0 @@ -{ - "extensionName": { - "message": "Streaming enhanced: Netflix Disney+ Prime Video", - "description": "Nome da extensão" - }, - "extensionDescription": { - "message": "Salte anúncios, introduções, créditos e ajuste a velocidade, etc. no Netflix, Prime video, Disney+, Crunchyroll e HBO max.", - "description": "Descrição da extensão" - }, - "settingsTitle": { - "message": "Definições - Streaming enhanced", - "description": "Título da ficha Definições" - }, - "pageTitle": { - "message": "melhorado", - "description": "Título da página de definições" - }, - "rateNow": { - "message": "Avaliar agora!" - }, - "sharedSettings": { - "message": "Definições partilhadas" - }, - "sharedSettingsDescription": { - "message": "Estas opções apenas activam/desactivam a parte $service$ da definição partilhada", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "backup": { - "message": "Cópia de segurança/reinicialização" - }, - "statistics": { - "message": "Estatísticas" - }, - "changelog": { - "message": "Registo de alterações" - }, - "donate": { - "message": "Doar" - }, - "PageSpecificTitle": { - "message": "$service$ específico", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "defaultPageTitle": { - "message": "Funções opcionais" - }, - "defaultPageDescription": { - "message": "Todas as funcionalidades que estão desactivadas por defeito ou porque são confusas se estiverem activadas ou porque estão em fase beta" - }, - "DefaultPaidContentDescription": { - "message": "Remoção de todas as categorias de filmes/séries pagas do Amazon prime" - }, - "SharedPageTitle": { - "message": "Caraterísticas do vídeo partilhado" - }, - "SharedPageDescription": { - "message": "Estas opções só activam/desactivam as definições para todos os serviços de streaming. Na tabela abaixo, pode desativar as definições partilhadas para um serviço específico" - }, - "IntroSwitch": { - "message": "Saltar a introdução e a recapitulação:" - }, - "SharedIntroDescription": { - "message": "Saltar as introduções e recapitulações de qualquer série. Exceto no Netflix, onde as recapitulações não podem ser vistas novamente." - }, - "CreditsSwitch": { - "message": "Saltar Créditos:" - }, - "CreditsSwitchDescription": { - "message": "Saltar para o episódio seguinte de cada série o mais rapidamente possível" - }, - "AdsSwitch": { - "message": "Saltar anúncios:" - }, - "AdsSwitchDescription": { - "message": "Saltar os anúncios do freevee para a amazon e todos os anúncios do nível básico da Netflix" - }, - "SliderSwitch": { - "message": "Adicionar Controlo de velocidade:" - }, - "SliderSwitchDescription": { - "message": "Adicionar um cursor de ajuste de velocidade" - }, - "SliderOptions": { - "message": "Opções do seletor: velocidade = tamanho do passo /10" - }, - "SliderStepSize": { - "message": "Tamanho do passo do seletor:" - }, - "SliderMin": { - "message": "Mínimo do seletor:" - }, - "SliderMax": { - "message": "Deslizador máximo:" - }, - "SliderPreview": { - "message": "Pré-visualização de diapositivos:" - }, - "FullscreenSwitch": { - "message": "Reproduzir em ecrã completo:" - }, - "FullscreenSwitchDescription": { - "message": "Se um vídeo for colocado em ecrã inteiro, o vídeo será reproduzido automaticamente" - }, - "SelfAdsSwitch": { - "message": "Saltar anúncios próprios:" - }, - "SelfAdsSwitchDescription": { - "message": "Saltar as antevisões do programa principal que são apresentadas antes de qualquer vídeo" - }, - "PaidContentSwitch": { - "message": "Remover conteúdo pago:", - "description": "Remover o interrutor da funcionalidade de conteúdo pago" - }, - "PaidContentDescription": { - "message": "Remoção de todas as categorias de filmes/séries pagos" - }, - "ContinuePositionSwitch": { - "message": "Mover a categoria \"Continuar\":" - }, - "ContinuePositionDescription": { - "message": "Mover a categoria \"Continuar\" para o topo da página" - }, - "FreeveeSwitch": { - "message": "Saltar anúncios do Freevee:" - }, - "RecapSwitch": { - "message": "Saltar Recapitulações:" - }, - "RecapSwitchDescription": { - "message": "Salta as recapitulações de todos os espectáculos" - }, - "InactivitySwitch": { - "message": "Aviso de inatividade do currículo:" - }, - "InactivitySwitchDescription": { - "message": "Retoma o vídeo se a mensagem \"Ainda está a ver\" for apresentada" - }, - "ProfileSwitch": { - "message": "Seleção automática do último perfil:" - }, - "ProfileSwitchDescription": { - "message": "O último perfil utilizado é escolhido diretamente quando a página é lançada" - }, - "User": { - "message": "Utilizador:" - }, - "StatisticPageTitle": { - "message": "Estatísticas" - }, - "SkippedTime": { - "message": "Tempo saltado:" - }, - "AmazonAdDescription": { - "message": "Tempo de anúncios FreeVee ignorados + anúncios Prime Video Self" - }, - "StatisticAd": { - "message": "$service$ Anúncio:", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "NetflixAdDescription": { - "message": "Tempo de anúncios da Netflix ignorados" - }, - "StatisticIntro": { - "message": "Introdução:" - }, - "StatisticIntroDescription": { - "message": "Tempo de introduções ignoradas na Netflix, Amazon e Disney+" - }, - "StatisticRecap": { - "message": "Recapitulação:" - }, - "StatisticRecapDescription": { - "message": "Recapitulações de Time of Skipped na Netflix, Amazon e Disney+" - }, - "StatisticSegments": { - "message": "Segmentos ignorados:" - }, - "StatisticSegmentsDescription": { - "message": "Quantidade de segmentos individuais saltados como uma introdução ou um anúncio para a Netflix, Amazon e Disney+" - }, - "ImportSettings": { - "message": "Importar/Exportar todas as definições" - }, - "SaveSettings": { - "message": "Guardar definições como ficheiro" - }, - "UploadSettings": { - "message": "Carregar definições" - }, - "ResetAddon": { - "message": "Repor a predefinição da extensão" - }, - "noWrap": { - "message": "nowrap" - }, - "WatchCreditsSwitch": { - "message": "Créditos do relógio:" - }, - "WatchCreditsSwitchDescription": { - "message": "Ver sempre os créditos de todas as séries" - }, - "conflictingTitle": { - "message": "Todas as caraterísticas contraditórias" - }, - "RatingSwitch": { - "message": "Classificação TMDB:" - }, - "RatingSwitchDescription": { - "message": "Adicionar a classificação TMDB a todos os filmes e séries" - }, - "ReleaseCalendarSwitch": { - "message": "Adicionar opções de calendário de lançamento:" - }, - "ReleaseCalendarDescription": { - "message": "Adiciona as caixas de verificação \"Mostrar apenas listas de reprodução\" e \"Filtrar DUB\" ao calendário de lançamentos" - }, - "EpilepsySwitch": { - "message": "Opção de epilepsia" - }, - "EpilepsySwitchDescription": { - "message": "Escurecer o ecrã quando saltar o anúncio" - }, - "UserAgentSwitch": { - "message": "Mudar para sítios Web de secretária" - }, - "UserAgentSwitchDescription": { - "message": "No caso do Prime Video e do Disney+, mudar para o sítio Web para computador e, no caso da Amazon, tornar o sítio Web compatível com os telemóveis" - }, - "XraySwitch": { - "message": "Esconder o raio X:" - }, - "XraySwitchDescription": { - "message": "Ocultar a visualização rápida do raio X sobre um vídeo" - }, - "Feature": { - "message": "Funcionalidade: Sugestão de ferramenta para mais informações" - }, - "Shared": { - "message": "Todos" - }, - "OpenSharedSettings": { - "message": "Abrir Definições Partilhadas" - }, - "autoOpenSettings": { - "message": "Abrir automaticamente as Definições corretas:" - }, - "requestTabs": { - "message": "Pedir permissão para separadores" - }, - "autoOpenDescription": { - "message": "Se estiver num sítio de transmissão, abra automaticamente as definições correspondentes na janela de contexto" - }, - "DuplicateSwitch": { - "message": "Remover os programas duplicados:" - }, - "DuplicateSwitchDescription": { - "message": "Remover todos os espectáculos duplicados que já estavam visíveis na Disney anteriormente. Visível significa que o espetáculo está entre os primeiros 5 espectáculos de cada fila" - }, - "WatchSkippedButton": { - "message": "Rebobinar?", - "description": "Botão Ver ignorado para ver uma introdução" - }, - "HomeButton": { - "message": "Início", - "description": "Botão da página inicial da Disney" - }, - "BigPlayerSwitch": { - "message": "Vídeo maior:" - }, - "BigPlayerDescription": { - "message": "Aumenta o tamanho do vídeo para toda a janela do browser sem ecrã completo." - }, - "DisableNumpadSwitch": { - "message": "Desativar o teclado numérico:" - }, - "DisableNumpadDescription": { - "message": "Desativar as teclas do teclado numérico para não alterar acidentalmente a hora/posição atual do vídeo." - }, - "DoubleClickSwitch": { - "message": "Ecrã completo com um duplo clique:" - }, - "DoubleClickSwitchDescription": { - "message": "Se fizer duplo clique no vídeo, este passará para ecrã inteiro." - }, - "scrollVolumeSwitch": { - "message": "Deslocação para o volume:" - }, - "scrollVolumeDescription": { - "message": "Deslocar-se para cima ou para baixo no ícone de som altera o volume." - }, - "DisneyAdDescription": { - "message": "Tempo de saltar anúncios da Disney." - }, - "ShowYearSwitch": { - "message": "Ano de lançamento do espetáculo:" - }, - "ShowYearDescription": { - "message": "Mostra o ano de lançamento ao lado da classificação." - } -} \ No newline at end of file diff --git a/firefox/_locales/pt_BR/messages.json b/firefox/_locales/pt_BR/messages.json deleted file mode 100644 index 19234778..00000000 --- a/firefox/_locales/pt_BR/messages.json +++ /dev/null @@ -1,315 +0,0 @@ -{ - "extensionName": { - "message": "Streaming enhanced Netflix Disney Prime Video", - "description": "Nome da extensão" - }, - "extensionDescription": { - "message": "Pule anúncios, introduções, créditos e ajuste a velocidade... na Netflix, Prime Video, Disney+, Crunchyroll e HBO Max.", - "description": "Descrição da extensão" - }, - "settingsTitle": { - "message": "Configurações - aprimoramento de serviços de streaming", - "description": "Título da guia Configurações" - }, - "pageTitle": { - "message": "enhanced", - "description": "Título da página de configurações" - }, - "rateNow": { - "message": "Avalie agora!" - }, - "sharedSettings": { - "message": "Configurações compartilhadas" - }, - "sharedSettingsDescription": { - "message": "Essas opções só serão ativadas/desativas a partir de $service$ da configuração compartilhada", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "backup": { - "message": "Cópia de segurança/redefinir" - }, - "statistics": { - "message": "Estatísticas" - }, - "changelog": { - "message": "Registro de mudanças" - }, - "donate": { - "message": "Doar" - }, - "PageSpecificTitle": { - "message": "$service$", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "defaultPageTitle": { - "message": "Recursos opcionais" - }, - "defaultPageDescription": { - "message": "Todos as funcionalidades estão desativadas por padrão, não funcionam corretamente ou estão em sua versão beta" - }, - "DefaultPaidContentDescription": { - "message": "Remove todas as categorias de filmes/séries pagos do Amazon Prime" - }, - "SharedPageTitle": { - "message": "Recursos de vídeo compartilhado" - }, - "SharedPageDescription": { - "message": "Essas opções serão ativadas ou desativadas para todas os serviços de streaming. Na tabela abaixo, você pode desativar as configurações compartilhadas de um serviço específico." - }, - "IntroSwitch": { - "message": "Pular a introdução e recapitulação:" - }, - "SharedIntroDescription": { - "message": "Pular as introduções e recapitulações de qualquer série. Exceto na Netflix, pois as recapitulações não podem ser assistidas novamente." - }, - "CreditsSwitch": { - "message": "Ignorar créditos:" - }, - "CreditsSwitchDescription": { - "message": "Pular para o próximo episódio de cada série o mais rápido possível" - }, - "AdsSwitch": { - "message": "Ignorar anúncios:" - }, - "AdsSwitchDescription": { - "message": "Ignorando os anúncios da Amazon e todos os anúncios no nível básico da Netflix" - }, - "SliderSwitch": { - "message": "Adicionar controle de velocidade:" - }, - "SliderSwitchDescription": { - "message": "Adição de um controle deslizante de ajuste de velocidade." - }, - "SliderOptions": { - "message": "Opções do controle deslizante: velocidade = quadro a quadro /10" - }, - "SliderStepSize": { - "message": "Quantidade de quadros:" - }, - "SliderMin": { - "message": "Controle mínimo:" - }, - "SliderMax": { - "message": "Controle máximo:" - }, - "SliderPreview": { - "message": "Visualização do controle deslizante:" - }, - "FullscreenSwitch": { - "message": "Reproduzir em tela cheia:" - }, - "FullscreenSwitchDescription": { - "message": "Se um vídeo for colocado em tela cheia, ele será reproduzido automaticamente" - }, - "SelfAdsSwitch": { - "message": "Ignorar anúncios direcionados:" - }, - "SelfAdsSwitchDescription": { - "message": "Ignorar as prévias do programa principal que são exibidas antes de qualquer vídeo" - }, - "PaidContentSwitch": { - "message": "Remover conteúdo pago:", - "description": "Remover o botão de recurso de conteúdo pago" - }, - "PaidContentDescription": { - "message": "Remoção de todas as categorias de filmes e séries pagos" - }, - "ContinuePositionSwitch": { - "message": "Mover categoria \"Continuar\":" - }, - "ContinuePositionDescription": { - "message": "Mova a categoria \"Continuar\" para o topo da página" - }, - "FreeveeSwitch": { - "message": "Ignorar anúncios:" - }, - "RecapSwitch": { - "message": "Ignorar recapitulações:" - }, - "RecapSwitchDescription": { - "message": "Pula as recapitulações de todos os programas" - }, - "InactivitySwitch": { - "message": "Aviso de retorno por inatividade:" - }, - "InactivitySwitchDescription": { - "message": "Reiniciar o vídeo se a mensagem (você ainda está assistindo) for exibida" - }, - "ProfileSwitch": { - "message": "Seleção automática do último perfil:" - }, - "ProfileSwitchDescription": { - "message": "O último perfil da usado é escolhido diretamente quando a página é iniciada" - }, - "User": { - "message": "Usuário:" - }, - "StatisticPageTitle": { - "message": "Estatísticas" - }, - "SkippedTime": { - "message": "Tempo ignorado:" - }, - "AmazonAdDescription": { - "message": "Tempo de anúncios pulados + auto promoções do Prime Video" - }, - "StatisticAd": { - "message": "$service$ Ad:", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "NetflixAdDescription": { - "message": "Tempo de anúncios ignorados da Netflix" - }, - "StatisticIntro": { - "message": "Introdução:" - }, - "StatisticIntroDescription": { - "message": "Tempo de introduções puladas na Netflix, Amazon e Disney+" - }, - "StatisticRecap": { - "message": "Recapitulação:" - }, - "StatisticRecapDescription": { - "message": "Tempo de recapitulações puladas na Netflix, Amazon e Disney+" - }, - "StatisticSegments": { - "message": "Segmentos ignorados:" - }, - "StatisticSegmentsDescription": { - "message": "Quantidade de segmentos individuais ignorados como introdução ou um anúncio da Netflix, Amazon e Disney+" - }, - "ImportSettings": { - "message": "Importar ou exportar configurações" - }, - "SaveSettings": { - "message": "Salvar configurações para um arquivo" - }, - "UploadSettings": { - "message": "Carregar configurações" - }, - "ResetAddon": { - "message": "Redefinir a extensão para o padrão" - }, - "noWrap": { - "message": "nowrap" - }, - "WatchCreditsSwitch": { - "message": "Assista os créditos:" - }, - "WatchCreditsSwitchDescription": { - "message": "Sempre assistir aos créditos de todas as séries" - }, - "conflictingTitle": { - "message": "Todos os recursos conflitantes" - }, - "RatingSwitch": { - "message": "Classificações TMDB:" - }, - "RatingSwitchDescription": { - "message": "Adiciona a classificação do TMDB a todos os filmes e séries" - }, - "ReleaseCalendarSwitch": { - "message": "Incluir calendário de lançamento:" - }, - "ReleaseCalendarDescription": { - "message": "Adiciona as caixas de seleção \"Mostrar somente listas de reprodução\" e \"Filtrar\" ao calendário de lançamentos" - }, - "EpilepsySwitch": { - "message": "Opção de epilepsia" - }, - "EpilepsySwitchDescription": { - "message": "Escurecer a tela ao pular o anúncio" - }, - "UserAgentSwitch": { - "message": "Mudar para sites de desktop" - }, - "UserAgentSwitchDescription": { - "message": "Para o Prime Video e Disney+, mude para o site para desktop, para a Amazon, torne o site compatível com dispositivos móveis" - }, - "XraySwitch": { - "message": "Ocultar raioX:" - }, - "XraySwitchDescription": { - "message": "Ocultar a visualização rápida do raio Xray da tela" - }, - "Feature": { - "message": "Recurso: Dica de ferramenta para obter mais informações" - }, - "Shared": { - "message": "Todos" - }, - "OpenSharedSettings": { - "message": "Abrir configurações compartilhadas" - }, - "autoOpenSettings": { - "message": "Abrir automaticamente as configurações corretas:" - }, - "requestTabs": { - "message": "Solicitar permissão de guias" - }, - "autoOpenDescription": { - "message": "Se estiver em um site de streaming, uma janela de configurações será aberta" - }, - "DuplicateSwitch": { - "message": "Remover programas duplicados:" - }, - "DuplicateSwitchDescription": { - "message": "Remover todos os programas duplicados, que já estavam visíveis na Disney anteriormente. Visível significa que o programa está entre os primeiros 5 programas em cada linha" - }, - "WatchSkippedButton": { - "message": "Retroceder?", - "description": "Watch skipped button to watch an intro" - }, - "HomeButton": { - "message": "Lar", - "description": "Disney Homepage button" - }, - "BigPlayerSwitch": { - "message": "Vídeo maior:" - }, - "BigPlayerDescription": { - "message": "Estende o tamanho do vídeo para toda a janela do navegador sem tela cheia." - }, - "DisableNumpadSwitch": { - "message": "Desativar o teclado numérico:" - }, - "DisableNumpadDescription": { - "message": "Desative as teclas do teclado numérico para não alterar acidentalmente o tempo/posição do vídeo atual." - }, - "DoubleClickSwitch": { - "message": "Tela cheia clicando duas vezes:" - }, - "DoubleClickSwitchDescription": { - "message": "Se você clicar duas vezes no vídeo, ele será exibido em tela cheia." - }, - "scrollVolumeSwitch": { - "message": "Deslocação para o volume:" - }, - "scrollVolumeDescription": { - "message": "Deslocar-se para cima ou para baixo no ícone de som altera o volume." - }, - "DisneyAdDescription": { - "message": "Tempo de saltar anúncios da Disney." - }, - "ShowYearSwitch": { - "message": "Ano de lançamento do espetáculo:" - }, - "ShowYearDescription": { - "message": "Mostra o ano de lançamento ao lado da classificação." - } -} \ No newline at end of file diff --git a/firefox/_locales/sv/messages.json b/firefox/_locales/sv/messages.json deleted file mode 100644 index 43adc4ca..00000000 --- a/firefox/_locales/sv/messages.json +++ /dev/null @@ -1,315 +0,0 @@ -{ - "extensionName": { - "message": "Streaming enhanced: Netflix Disney+ Prime Video", - "description": "Namn på tillägget" - }, - "extensionDescription": { - "message": "Hoppa över annonser, intron, eftertexter och justera hastighet m.m. på Netflix, Prime video, Disney+, Crunchyroll och HBO max.", - "description": "Beskrivning av tillägget" - }, - "settingsTitle": { - "message": "Inställningar - Streaming enhanced", - "description": "Titel på fliken Inställningar" - }, - "pageTitle": { - "message": "förbättrad", - "description": "Titel på sidan Inställningar" - }, - "rateNow": { - "message": "Betygsätt nu!" - }, - "sharedSettings": { - "message": "Delade inställningar" - }, - "sharedSettingsDescription": { - "message": "Dessa alternativ aktiverar/avaktiverar endast $service$-delen av den delade inställningen", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "backup": { - "message": "Säkerhetskopiering/återställning" - }, - "statistics": { - "message": "Statistik" - }, - "changelog": { - "message": "Changelog" - }, - "donate": { - "message": "Donera" - }, - "PageSpecificTitle": { - "message": "$service$ specifik", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "defaultPageTitle": { - "message": "Valfria funktioner" - }, - "defaultPageDescription": { - "message": "Alla funktioner som är avstängda som standard antingen för att de är förvirrande om de är påslagna eller för att de är i betaversion" - }, - "DefaultPaidContentDescription": { - "message": "Ta bort alla betalda film- och seriekategorier från Amazon Prime" - }, - "SharedPageTitle": { - "message": "Funktioner för delad video" - }, - "SharedPageDescription": { - "message": "Dessa alternativ aktiverar/inaktiverar endast inställningarna för alla streamingtjänster. I tabellen nedan kan du inaktivera de delade inställningarna för en specifik tjänst" - }, - "IntroSwitch": { - "message": "Hoppa över intro och sammanfattning:" - }, - "SharedIntroDescription": { - "message": "Hoppa över intron och sammanfattningar av alla serier. Utom Netflix eftersom deras sammanfattningar inte kan ses igen." - }, - "CreditsSwitch": { - "message": "Hoppa över krediter:" - }, - "CreditsSwitchDescription": { - "message": "Hoppa till nästa avsnitt i varje serie så snabbt som möjligt" - }, - "AdsSwitch": { - "message": "Hoppa över annonser:" - }, - "AdsSwitchDescription": { - "message": "Hoppa över freevee-annonser för Amazon och alla annonser i den grundläggande Netflix-nivån" - }, - "SliderSwitch": { - "message": "Lägg till Speed control:" - }, - "SliderSwitchDescription": { - "message": "Lägga till ett reglage för hastighetsjustering" - }, - "SliderOptions": { - "message": "Slider-alternativ: hastighet = stegstorlek /10" - }, - "SliderStepSize": { - "message": "Skjutreglagets stegstorlek:" - }, - "SliderMin": { - "message": "Slider minimum:" - }, - "SliderMax": { - "message": "Slider maximalt:" - }, - "SliderPreview": { - "message": "Förhandsgranskning av slider:" - }, - "FullscreenSwitch": { - "message": "Spela på helskärm:" - }, - "FullscreenSwitchDescription": { - "message": "Om en video läggs i helskärmsläge spelas videon upp automatiskt" - }, - "SelfAdsSwitch": { - "message": "Hoppa över självannonser:" - }, - "SelfAdsSwitchDescription": { - "message": "Hoppa över förhandsvisningarna av prime show som visas före varje video" - }, - "PaidContentSwitch": { - "message": "Ta bort betalt innehåll:", - "description": "Ta bort funktionen för betalt innehåll" - }, - "PaidContentDescription": { - "message": "Ta bort alla kategorier för betalda filmer/serier" - }, - "ContinuePositionSwitch": { - "message": "Flytta kategori \"Fortsätt\":" - }, - "ContinuePositionDescription": { - "message": "Flytta kategorin \"Fortsätt\" till toppen av sidan" - }, - "FreeveeSwitch": { - "message": "Hoppa över Freevee-annonser:" - }, - "RecapSwitch": { - "message": "Hoppa över sammanfattningar:" - }, - "RecapSwitchDescription": { - "message": "Hoppar över sammanfattningar av varje program" - }, - "InactivitySwitch": { - "message": "Varning för inaktivitet vid återupptagning:" - }, - "InactivitySwitchDescription": { - "message": "Återupptar videon om meddelandet \"Tittar du fortfarande?\" visas" - }, - "ProfileSwitch": { - "message": "Välj automatiskt den senaste profilen:" - }, - "ProfileSwitchDescription": { - "message": "Den senast använda profilen väljs direkt när sidan startas" - }, - "User": { - "message": "Användare:" - }, - "StatisticPageTitle": { - "message": "Statistik" - }, - "SkippedTime": { - "message": "Hoppade över tid:" - }, - "AmazonAdDescription": { - "message": "Tid för överhoppade FreeVee-annonser + Prime Video självannonser" - }, - "StatisticAd": { - "message": "$service$ Annons:", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "NetflixAdDescription": { - "message": "Tid för överhoppade Netflix-annonser" - }, - "StatisticIntro": { - "message": "Intro:" - }, - "StatisticIntroDescription": { - "message": "Tid för överhoppade intron på Netflix, Amazon och Disney+" - }, - "StatisticRecap": { - "message": "Sammanställning:" - }, - "StatisticRecapDescription": { - "message": "Time of skipped Återblickar på Netflix, Amazon och Disney+" - }, - "StatisticSegments": { - "message": "Överhoppade segment:" - }, - "StatisticSegmentsDescription": { - "message": "Mängden enskilda segment som hoppats över som ett intro eller en annons för Netflix, Amazon och Disney+" - }, - "ImportSettings": { - "message": "Importera/exportera alla inställningar" - }, - "SaveSettings": { - "message": "Spara inställningar som fil" - }, - "UploadSettings": { - "message": "Ladda upp inställningar" - }, - "ResetAddon": { - "message": "Återställ Addon till standard" - }, - "noWrap": { - "message": "nurap" - }, - "WatchCreditsSwitch": { - "message": "Titta på krediter:" - }, - "WatchCreditsSwitchDescription": { - "message": "Titta alltid på eftertexterna i varje serie" - }, - "conflictingTitle": { - "message": "Alla motstridiga funktioner" - }, - "RatingSwitch": { - "message": "TMDB Betyg:" - }, - "RatingSwitchDescription": { - "message": "Lägga till TMDB-betyg för varje film och serie" - }, - "ReleaseCalendarSwitch": { - "message": "Lägg till alternativ för Release Calendar:" - }, - "ReleaseCalendarDescription": { - "message": "Lägger till kryssrutorna \"Visa endast spellistor\" och \"Filtrera DUB\" i releasekalendern" - }, - "EpilepsySwitch": { - "message": "Alternativ för epilepsi" - }, - "EpilepsySwitchDescription": { - "message": "Mörka skärmen när du hoppar över annonsen" - }, - "UserAgentSwitch": { - "message": "Byt till desktop-webbplatser" - }, - "UserAgentSwitchDescription": { - "message": "För prime video och disney+ byt till Desktop-webbplatsen och för amazon gör webbplatsen mobilvänlig" - }, - "XraySwitch": { - "message": "Göm röntgen:" - }, - "XraySwitchDescription": { - "message": "Dölj snabbvisningen för röntgen över en video" - }, - "Feature": { - "message": "Funktion: Verktygstips för mer information" - }, - "Shared": { - "message": "Alla" - }, - "OpenSharedSettings": { - "message": "Öppna delade inställningar" - }, - "autoOpenSettings": { - "message": "Öppna automatiskt korrekta inställningar:" - }, - "requestTabs": { - "message": "Begär tillstånd för flikar" - }, - "autoOpenDescription": { - "message": "Om du är på en streamingwebbplats öppnas motsvarande inställningar automatiskt i popup-fönstret" - }, - "DuplicateSwitch": { - "message": "Ta bort duplicerade program:" - }, - "DuplicateSwitchDescription": { - "message": "Ta bort alla dubbletter av program som redan tidigare var synliga på Disney. Synlig innebär att programmet finns bland de 5 första programmen i varje rad" - }, - "WatchSkippedButton": { - "message": "Spola tillbaka?", - "description": "Se överhoppad knapp för att se ett intro" - }, - "HomeButton": { - "message": "Hem", - "description": "Knapp för Disneys hemsida" - }, - "BigPlayerSwitch": { - "message": "Video större:" - }, - "BigPlayerDescription": { - "message": "Utökar videostorleken till hela webbläsarfönstret utan helskärm." - }, - "DisableNumpadSwitch": { - "message": "Inaktivera numpad:" - }, - "DisableNumpadDescription": { - "message": "Inaktivera numpad-tangenterna så att du inte av misstag ändrar den aktuella videotiden/positionen." - }, - "DoubleClickSwitch": { - "message": "Fullskärm genom att dubbelklicka:" - }, - "DoubleClickSwitchDescription": { - "message": "Om du dubbelklickar på videon kommer den att visas i helskärm." - }, - "scrollVolumeSwitch": { - "message": "Bläddra för volym:" - }, - "scrollVolumeDescription": { - "message": "Om du bläddrar upp eller ner på ljudikonen ändras volymen." - }, - "DisneyAdDescription": { - "message": "Tid för överhoppade Disney-annonser." - }, - "ShowYearSwitch": { - "message": "Visa utgivningsår:" - }, - "ShowYearDescription": { - "message": "Visar utgivningsåret bredvid klassificeringen." - } -} \ No newline at end of file diff --git a/firefox/_locales/tr/messages.json b/firefox/_locales/tr/messages.json deleted file mode 100644 index 14f582f6..00000000 --- a/firefox/_locales/tr/messages.json +++ /dev/null @@ -1,315 +0,0 @@ -{ - "extensionName": { - "message": "Streaming enhanced: Netflix Disney+ Prime Video", - "description": "Uzantının adı" - }, - "extensionDescription": { - "message": "Netflix, Prime video, Disney+, Crunchyroll ve HBO max'te reklamları, introları, jenerikleri atlayın ve hız ayarı vb. ekleyin.", - "description": "Uzantının açıklaması" - }, - "settingsTitle": { - "message": "Ayarlar - Streaming enhanced", - "description": "Ayarlar Sekmesinin Başlığı" - }, - "pageTitle": { - "message": "geliştirilmiş", - "description": "Ayarlar Sayfasının Başlığı" - }, - "rateNow": { - "message": "Şimdi değerlendirin!" - }, - "sharedSettings": { - "message": "Paylaşılan Ayarlar" - }, - "sharedSettingsDescription": { - "message": "Bu seçenekler yalnızca paylaşılan ayarın $service$ kısmını etkinleştirir/devre dışı bırakır", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "backup": { - "message": "Yedekleme/Sıfırlama" - }, - "statistics": { - "message": "İstatistikler" - }, - "changelog": { - "message": "Değişiklik Günlüğü" - }, - "donate": { - "message": "Bağış Yapın" - }, - "PageSpecificTitle": { - "message": "$service$ özel", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "defaultPageTitle": { - "message": "İsteğe bağlı fonksiyonlar" - }, - "defaultPageDescription": { - "message": "Varsayılan olarak kapalı olan her özellik ya açık olduklarında kafa karıştırıcı oldukları için ya da beta aşamasında oldukları için" - }, - "DefaultPaidContentDescription": { - "message": "Amazon Prime'dan tüm ücretli film/dizi kategorilerinin kaldırılması" - }, - "SharedPageTitle": { - "message": "Paylaşılan Video özellikleri" - }, - "SharedPageDescription": { - "message": "Bu seçenekler yalnızca tüm akış hizmetleri için ayarları etkinleştirir/devre dışı bırakır. Aşağıdaki tabloda belirli bir hizmet için paylaşılan ayarları devre dışı bırakabilirsiniz" - }, - "IntroSwitch": { - "message": "Giriş ve Özeti Atlayın:" - }, - "SharedIntroDescription": { - "message": "Herhangi bir dizinin girişlerini ve özetlerini atlamak. Netflix hariç çünkü orada özetler tekrar izlenemiyor." - }, - "CreditsSwitch": { - "message": "Skip Credits:" - }, - "CreditsSwitchDescription": { - "message": "Her dizinin bir sonraki bölümüne olabildiğince hızlı atlamak" - }, - "AdsSwitch": { - "message": "Reklamları atla:" - }, - "AdsSwitchDescription": { - "message": "Amazon için freevee reklamlarını ve temel Netflix katmanındaki tüm reklamları atlamak" - }, - "SliderSwitch": { - "message": "Hız kontrolü ekleyin:" - }, - "SliderSwitchDescription": { - "message": "Hız ayarlama sürgüsü ekleme" - }, - "SliderOptions": { - "message": "Kaydırıcı seçenekleri: hız = adım boyutu /10" - }, - "SliderStepSize": { - "message": "Kaydırıcı adım boyutu:" - }, - "SliderMin": { - "message": "Kaydırıcı minimum:" - }, - "SliderMax": { - "message": "Kaydırıcı maksimum:" - }, - "SliderPreview": { - "message": "Kaydırıcı önizlemesi:" - }, - "FullscreenSwitch": { - "message": "Tam ekranda oynatın:" - }, - "FullscreenSwitchDescription": { - "message": "Bir video tam ekrana getirilirse, video otomatik olarak oynatılır" - }, - "SelfAdsSwitch": { - "message": "Kendi Reklamlarını Atla:" - }, - "SelfAdsSwitchDescription": { - "message": "Herhangi bir videodan önce gösterilen ana program önizlemelerini atlama" - }, - "PaidContentSwitch": { - "message": "Ücretli içeriği kaldırın:", - "description": "Ücretli içerik özelliği anahtarını kaldırın" - }, - "PaidContentDescription": { - "message": "Tüm ücretli film/dizi kategorilerinin kaldırılması" - }, - "ContinuePositionSwitch": { - "message": "\"Devam\" kategorisine taşıyın:" - }, - "ContinuePositionDescription": { - "message": "\"Devam\" kategorisini sayfanın en üstüne taşıyın" - }, - "FreeveeSwitch": { - "message": "Freevee Reklamlarını Atla:" - }, - "RecapSwitch": { - "message": "Skip Recaps:" - }, - "RecapSwitchDescription": { - "message": "Her gösterinin özetini atlar" - }, - "InactivitySwitch": { - "message": "Hareketsizlik uyarısına devam edin:" - }, - "InactivitySwitchDescription": { - "message": "'Hala izliyor musunuz' uyarısı gösterilirse videoyu devam ettirir" - }, - "ProfileSwitch": { - "message": "Son profili otomatik seç:" - }, - "ProfileSwitchDescription": { - "message": "Sayfa başlatıldığında en son kullanılan profil doğrudan seçilir" - }, - "User": { - "message": "Kullanıcı:" - }, - "StatisticPageTitle": { - "message": "İstatistikler" - }, - "SkippedTime": { - "message": "Atlanan zaman:" - }, - "AmazonAdDescription": { - "message": "Atlanan FreeVee Reklamlarının Süresi + Prime Video Self Reklamları" - }, - "StatisticAd": { - "message": "$service$ Reklam:", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "NetflixAdDescription": { - "message": "Atlanan Netflix Reklamlarının Süresi" - }, - "StatisticIntro": { - "message": "Giriş:" - }, - "StatisticIntroDescription": { - "message": "Netflix, Amazon ve Disney+'ta atlanan tanıtımların zamanı" - }, - "StatisticRecap": { - "message": "Özet:" - }, - "StatisticRecapDescription": { - "message": "Netflix, Amazon ve Disney+'ta Atlanan Özetler Zamanı" - }, - "StatisticSegments": { - "message": "Atlanan bölümler:" - }, - "StatisticSegmentsDescription": { - "message": "Netflix, Amazon ve Disney+ için Giriş veya Reklam Gibi Atlanan Bireysel Bölümlerin Miktarı" - }, - "ImportSettings": { - "message": "Tüm Ayarları İçe/Dışa Aktar" - }, - "SaveSettings": { - "message": "Ayarları dosya olarak kaydet" - }, - "UploadSettings": { - "message": "Yükleme ayarları" - }, - "ResetAddon": { - "message": "Eklentiyi varsayılana sıfırla" - }, - "noWrap": { - "message": "nowrap" - }, - "WatchCreditsSwitch": { - "message": "İzleme Kredileri:" - }, - "WatchCreditsSwitchDescription": { - "message": "Her dizinin jeneriğini mutlaka izleyin" - }, - "conflictingTitle": { - "message": "Tüm çelişkili özellikler" - }, - "RatingSwitch": { - "message": "TMDB Değerlendirmesi:" - }, - "RatingSwitchDescription": { - "message": "Her film ve diziye TMDB derecelendirmesinin eklenmesi" - }, - "ReleaseCalendarSwitch": { - "message": "Yayın Takvimi seçenekleri ekleyin:" - }, - "ReleaseCalendarDescription": { - "message": "Yayın takvimine 'Yalnızca Çalma Listelerini Göster' ve 'DUB'ı Filtrele' onay kutularını ekler" - }, - "EpilepsySwitch": { - "message": "Epilepsi seçeneği" - }, - "EpilepsySwitchDescription": { - "message": "Reklamı atlarken ekranı karartın" - }, - "UserAgentSwitch": { - "message": "Masaüstü web sitelerine geçiş yapın" - }, - "UserAgentSwitchDescription": { - "message": "Prime video ve disney+ için Masaüstü web sitesine geçin ve amazon için siteyi mobil uyumlu hale getirin" - }, - "XraySwitch": { - "message": "Xray'i sakla:" - }, - "XraySwitchDescription": { - "message": "Xray Hızlı Görünümünü bir video üzerinde gizleme" - }, - "Feature": { - "message": "Özellik: Daha fazla bilgi için araç ipucu" - }, - "Shared": { - "message": "Tümü" - }, - "OpenSharedSettings": { - "message": "Paylaşılan Ayarları Açın" - }, - "autoOpenSettings": { - "message": "Doğru Ayarları otomatik olarak aç:" - }, - "requestTabs": { - "message": "Sekmeler izni iste" - }, - "autoOpenDescription": { - "message": "Akış sitesindeyse, açılır pencerede otomatik olarak uygun ayarları açın" - }, - "DuplicateSwitch": { - "message": "Yinelenen Gösterileri kaldırın:" - }, - "DuplicateSwitchDescription": { - "message": "Daha önce Disney'de zaten görünür olan her yinelenen gösteriyi kaldırın. Görünür, gösterinin her satırdaki ilk 5 gösteri içinde olduğu anlamına gelir" - }, - "WatchSkippedButton": { - "message": "Geri sarmak mı?", - "description": "Bir girişi izlemek için atlananları izle düğmesi" - }, - "HomeButton": { - "message": "Ev", - "description": "Disney Ana Sayfa düğmesi" - }, - "BigPlayerSwitch": { - "message": "Video daha büyük:" - }, - "BigPlayerDescription": { - "message": "Video boyutunu tam ekran olmadan tüm tarayıcı penceresine genişletir." - }, - "DisableNumpadSwitch": { - "message": "Numpad'i devre dışı bırakın:" - }, - "DisableNumpadDescription": { - "message": "Mevcut video zamanını/konumunu yanlışlıkla değiştirmemek için sayısal tuşları devre dışı bırakın." - }, - "DoubleClickSwitch": { - "message": "Çift tıklayarak tam ekran yapın:" - }, - "DoubleClickSwitchDescription": { - "message": "Videoya çift tıklarsanız tam ekrana geçecektir." - }, - "scrollVolumeSwitch": { - "message": "Ses seviyesi için kaydırın:" - }, - "scrollVolumeDescription": { - "message": "Ses Simgesi üzerinde yukarı veya aşağı kaydırma yapmak ses seviyesini değiştirecektir." - }, - "DisneyAdDescription": { - "message": "Disney reklamlarını atlama zamanı." - }, - "ShowYearSwitch": { - "message": "Gösterinin çıkış yılı:" - }, - "ShowYearDescription": { - "message": "Derecelendirmenin yanında yayın yılını gösterir." - } -} \ No newline at end of file diff --git a/firefox/_locales/zh_CN/messages.json b/firefox/_locales/zh_CN/messages.json deleted file mode 100644 index 78ccee0a..00000000 --- a/firefox/_locales/zh_CN/messages.json +++ /dev/null @@ -1,315 +0,0 @@ -{ - "extensionName": { - "message": "Streaming enhanced: Netflix Disney+ Prime Video", - "description": "扩展名" - }, - "extensionDescription": { - "message": "在 Netflix、Prime video、Disney+、Crunchyroll 和 HBO max 上跳过广告、开场白、片头,并添加调整速度等功能。", - "description": "扩展说明" - }, - "settingsTitle": { - "message": "设置 - Streaming enhanced", - "description": "设置选项卡标题" - }, - "pageTitle": { - "message": "加强", - "description": "设置页面标题" - }, - "rateNow": { - "message": "现在评分" - }, - "sharedSettings": { - "message": "共享设置" - }, - "sharedSettingsDescription": { - "message": "这些选项只会启用/禁用共享设置中的 $service$ 部分", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "backup": { - "message": "备份/重置" - }, - "statistics": { - "message": "统计资料" - }, - "changelog": { - "message": "更新日志" - }, - "donate": { - "message": "捐赠" - }, - "PageSpecificTitle": { - "message": "$service$ 专属", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "defaultPageTitle": { - "message": "可选功能" - }, - "defaultPageDescription": { - "message": "默认情况下关闭的所有功能,要么是因为开启后会引起混淆,要么是因为处于测试阶段" - }, - "DefaultPaidContentDescription": { - "message": "从亚马逊 prime 中删除所有付费电影/连续剧类别" - }, - "SharedPageTitle": { - "message": "共享视频功能" - }, - "SharedPageDescription": { - "message": "这些选项只能启用/禁用所有流媒体服务的设置。在下表中,您可以禁用特定服务的共享设置" - }, - "IntroSwitch": { - "message": "跳过介绍和回顾:" - }, - "SharedIntroDescription": { - "message": "跳过任何剧集的前奏和回顾。Netflix除外,因为那里的剧情回顾不能再看一遍。" - }, - "CreditsSwitch": { - "message": "略过:" - }, - "CreditsSwitchDescription": { - "message": "以最快的速度跳到每个系列的下一集" - }, - "AdsSwitch": { - "message": "跳过广告" - }, - "AdsSwitchDescription": { - "message": "跳过亚马逊的 freevee 广告和 Netflix 基本层的所有广告" - }, - "SliderSwitch": { - "message": "添加速度控制:" - }, - "SliderSwitchDescription": { - "message": "添加速度调节滑块" - }, - "SliderOptions": { - "message": "滑块选项:速度 = 步长 /10" - }, - "SliderStepSize": { - "message": "滑块步长" - }, - "SliderMin": { - "message": "滑块最小值:" - }, - "SliderMax": { - "message": "滑块最大值:" - }, - "SliderPreview": { - "message": "滑块预览" - }, - "FullscreenSwitch": { - "message": "全屏播放" - }, - "FullscreenSwitchDescription": { - "message": "如果将视频设置为全屏,视频将自动播放" - }, - "SelfAdsSwitch": { - "message": "跳过自助广告:" - }, - "SelfAdsSwitchDescription": { - "message": "跳过在任何视频之前播放的黄金节目预告" - }, - "PaidContentSwitch": { - "message": "删除付费内容:", - "description": "移除付费内容功能开关" - }, - "PaidContentDescription": { - "message": "删除所有付费电影/剧集类别" - }, - "ContinuePositionSwitch": { - "message": "移动类别 \"继续\":" - }, - "ContinuePositionDescription": { - "message": "将类别 \"继续 \"移至页面顶部" - }, - "FreeveeSwitch": { - "message": "跳过 Freevee 广告:" - }, - "RecapSwitch": { - "message": "跳过回顾:" - }, - "RecapSwitchDescription": { - "message": "跳过每个节目的复述" - }, - "InactivitySwitch": { - "message": "恢复不活动警告:" - }, - "InactivitySwitchDescription": { - "message": "如果出现 \"您是否仍在观看 \"提示,则继续播放视频" - }, - "ProfileSwitch": { - "message": "自动选择最后一个配置文件:" - }, - "ProfileSwitchDescription": { - "message": "页面启动时直接选择上次使用的配置文件" - }, - "User": { - "message": "用户:" - }, - "StatisticPageTitle": { - "message": "统计资料" - }, - "SkippedTime": { - "message": "跳过时间" - }, - "AmazonAdDescription": { - "message": "跳过 FreeVee 广告 + Prime 视频自助广告的时间" - }, - "StatisticAd": { - "message": "$service$ 广告:", - "placeholders": { - "service": { - "content": "$1", - "example": "Netflix" - } - } - }, - "NetflixAdDescription": { - "message": "跳过 Netflix 广告的时间" - }, - "StatisticIntro": { - "message": "介绍:" - }, - "StatisticIntroDescription": { - "message": "Netflix、亚马逊和迪士尼+上被跳过的介绍时间" - }, - "StatisticRecap": { - "message": "回顾一下" - }, - "StatisticRecapDescription": { - "message": "Netflix、亚马逊和迪士尼+上跳过的时间回顾" - }, - "StatisticSegments": { - "message": "跳过的片段:" - }, - "StatisticSegmentsDescription": { - "message": "Netflix、亚马逊和迪士尼+跳过介绍或广告等个别片段的数量" - }, - "ImportSettings": { - "message": "导入/导出所有设置" - }, - "SaveSettings": { - "message": "将设置保存为文件" - }, - "UploadSettings": { - "message": "上传设置" - }, - "ResetAddon": { - "message": "将插件重置为默认设置" - }, - "noWrap": { - "message": "nowrap" - }, - "WatchCreditsSwitch": { - "message": "腕表荣誉" - }, - "WatchCreditsSwitchDescription": { - "message": "经常观看每部电视剧的片头" - }, - "conflictingTitle": { - "message": "所有冲突功能" - }, - "RatingSwitch": { - "message": "TMDB Rating:" - }, - "RatingSwitchDescription": { - "message": "为每部电影和剧集添加 TMDB 评级" - }, - "ReleaseCalendarSwitch": { - "message": "添加发布日历选项:" - }, - "ReleaseCalendarDescription": { - "message": "在发布日历中添加 \"仅显示播放列表 \"和 \"过滤 DUB \"复选框" - }, - "EpilepsySwitch": { - "message": "癫痫选项" - }, - "EpilepsySwitchDescription": { - "message": "跳过广告时使屏幕变暗" - }, - "UserAgentSwitch": { - "message": "切换到桌面网站" - }, - "UserAgentSwitchDescription": { - "message": "将 prime video 和 disney+ 改为桌面网站,将亚马逊网站改为移动友好型网站" - }, - "XraySwitch": { - "message": "隐藏 X 光" - }, - "XraySwitchDescription": { - "message": "在视频上隐藏 X 光快速视图" - }, - "Feature": { - "message": "功能:更多信息的工具提示" - }, - "Shared": { - "message": "全部" - }, - "OpenSharedSettings": { - "message": "打开共享设置" - }, - "autoOpenSettings": { - "message": "自动打开正确的设置:" - }, - "requestTabs": { - "message": "申请选项卡权限" - }, - "autoOpenDescription": { - "message": "如果在流媒体网站上,弹出窗口会自动打开相应设置" - }, - "DuplicateSwitch": { - "message": "删除重复显示:" - }, - "DuplicateSwitchDescription": { - "message": "删除所有重复的节目,这些节目之前在迪斯尼上已经可见。可见表示节目位于每一行的前 5 个节目中" - }, - "WatchSkippedButton": { - "message": "倒带?", - "description": "观看跳过按钮观看介绍" - }, - "HomeButton": { - "message": "首页", - "description": "迪士尼主页按钮" - }, - "BigPlayerSwitch": { - "message": "视频更大:" - }, - "BigPlayerDescription": { - "message": "将视频尺寸扩展到整个浏览器窗口,而无需全屏。" - }, - "DisableNumpadSwitch": { - "message": "禁用数字键盘:" - }, - "DisableNumpadDescription": { - "message": "禁用数字键盘,以免意外更改当前视频时间/位置。" - }, - "DoubleClickSwitch": { - "message": "双击全屏:" - }, - "DoubleClickSwitchDescription": { - "message": "如果双击视频,它就会变成全屏。" - }, - "scrollVolumeSwitch": { - "message": "滚动音量:" - }, - "scrollVolumeDescription": { - "message": "上下滚动声音图标可改变音量。" - }, - "DisneyAdDescription": { - "message": "跳过迪斯尼广告的时间" - }, - "ShowYearSwitch": { - "message": "节目发布年份:" - }, - "ShowYearDescription": { - "message": "显示评级旁边的发行年份。" - } -} \ No newline at end of file diff --git a/firefox/badge.js b/firefox/badge.js deleted file mode 100644 index f3835b88..00000000 --- a/firefox/badge.js +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Streaming enhanced - * Copyright (c) 2022 Marvin Krebber - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License v3.0. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License v3.0 for more details. - */ -/* global browser */ -console.log("badge.js loaded"); -let Badges = {}; -const isMobile = /Android/i.test(navigator.userAgent); -/** - * - * Increases Badge by 1 - * - */ -async function increaseBadge(tabId = null) { - if (Badges[tabId] === undefined || typeof Badges[tabId] !== "number") { - Badges[tabId] = 0; - } - Badges[tabId]++; - browser.browserAction.setBadgeText({ text: Badges[tabId].toString(), tabId }); -} -/** - * Set Badge to a specific value - * @param {string} text - * @param {number} tabId - */ -async function setBadgeText(text, tabId = null) { - Badges[tabId] = text; - browser.browserAction.setBadgeText({ text, tabId }); -} - -// receive message from content script with the badgeText and set it in the badge -browser.runtime.onMessage.addListener(function (message, sender, sendResponse) { - if (message.url) { - fetch(message.url, { - method: "GET", - headers: { - accept: "application/json", - Authorization: - "Bearer eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiI5OWQyMWUxMmYzNjU1MjM4NzdhNTAwODVhMmVjYThiZiIsInN1YiI6IjY1M2E3Mjg3MjgxMWExMDBlYTA4NjI5OCIsInNjb3BlcyI6WyJhcGlfcmVhZCJdLCJ2ZXJzaW9uIjoxfQ.x_EaVXQkg1_plk0NVSBnoNUl4QlGytdeO613nXIsP3w", - }, - }) - .then((response) => response.json()) - .then((data) => sendResponse(data)) - .catch((error) => console.error(error)); - return true; // Indicates that sendResponse will be called asynchronously - } else if (message.type === "fullscreen") { - console.log("Fullscreen", sender); - browser.windows.update(sender.tab.windowId, { state: "fullscreen" }); - } else if (message.type === "exitFullscreen") { - console.log("exit Fullscreen", sender); - browser.windows.update(sender.tab.windowId, { state: "normal" }); - } else if (message.type === "setBadgeText") { - setBadgeText(message.content, sender.tab.id); - } else if (message.type === "increaseBadge") { - increaseBadge(sender.tab.id); - } else if (message.type === "resetBadge") { - delete Badges[sender.tab.id]; - browser.browserAction.setBadgeText({ text: "", tabId: sender.tab.id }); - } -}); - -browser.runtime.onInstalled.addListener((details) => { - // details.reason === "update" || - if (details.reason === "install") { - browser.tabs.create({ - url: "popup/settings.html#Default", - }); - } -}); - -if (isMobile) { - const defaultSettings = { - settings: { - Amazon: { - skipIntro: true, - skipCredits: true, - watchCredits: false, - skipAd: true, - blockFreevee: true, - speedSlider: true, - filterPaid: false, - continuePosition: true, - showRating: true, - xray: true, - }, - Netflix: { - skipIntro: true, - skipRecap: true, - skipCredits: true, - watchCredits: false, - skipBlocked: true, - skipAd: true, - speedSlider: true, - profile: true, - showRating: true, - }, - Disney: { skipIntro: true, skipCredits: true, watchCredits: false, skipAd: true, speedSlider: true, showRating: true, selfAd: true }, - Crunchyroll: { - skipIntro: true, - speedSlider: true, - releaseCalendar: true, - dubLanguage: null, - profile: true, - bigPlayer: true, - disableNumpad: true, - }, - HBO: { skipIntro: true, skipCredits: true, watchCredits: false, speedSlider: true, showRating: true }, - Video: { playOnFullScreen: true, epilepsy: false, userAgent: true, doubleClick: true, scrollVolume: true, showYear: false }, - Statistics: { - AmazonAdTimeSkipped: 0, - NetflixAdTimeSkipped: 0, - DisneyAdTimeSkipped: 0, - IntroTimeSkipped: 0, - RecapTimeSkipped: 0, - SegmentsSkipped: 0, - }, - General: { - Crunchyroll_profilePicture: null, - profileName: null, - profilePicture: null, - sliderSteps: 1, - sliderMin: 5, - sliderMax: 20, - filterDub: true, - filterQueued: true, - savedCrunchyList: [], - GCdate: "2024-01-01", - }, - }, - }; - let settings = { ...defaultSettings.settings }; - browser.storage.sync.get("settings", function (result) { - // overwrite default settings with user settings - // List of keys to merge individually - settings.Amazon = { ...defaultSettings.settings.Amazon, ...result?.settings?.Amazon }; - settings.Netflix = { ...defaultSettings.settings.Netflix, ...result?.settings?.Netflix }; - settings.Disney = { ...defaultSettings.settings.Disney, ...result?.settings?.Disney }; - settings.Crunchyroll = { ...defaultSettings.settings.Crunchyroll, ...result?.settings?.Crunchyroll }; - settings.HBO = { ...defaultSettings.settings.HBO, ...result?.settings?.HBO }; - settings.Video = { ...defaultSettings.settings.Video, ...result?.settings?.Video }; - settings.Statistics = { ...defaultSettings.settings.Statistics, ...result?.settings?.Statistics }; - settings.General = { ...defaultSettings.settings.General, ...result?.settings?.General }; - - ChangeUserAgent(); - console.log("userAgent", settings.Video.userAgent); - }); - - browser.storage.sync.onChanged.addListener(function (changes) { - if (changes?.settings) { - const { oldValue, newValue } = changes.settings; - settings = newValue; - if (newValue.Video.userAgent !== oldValue?.Video?.userAgent) { - console.log("userAgent", settings.Video.userAgent); - // remove listener - if (!newValue?.Video?.userAgent) { - browser.webRequest.onBeforeSendHeaders.removeListener(ReplaceUserAgent); - } else { - ChangeUserAgent(); - } - } - } - }); - const newUa = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0 streamingEnhanced"; - function ReplaceUserAgent(details) { - for (let header of details.requestHeaders) { - if (header.name === "User-Agent") { - header.value = newUa; - break; - } - } - return { requestHeaders: details.requestHeaders }; - } - - function ChangeUserAgent() { - if (settings.Video.userAgent) { - browser.webRequest.onBeforeSendHeaders.addListener( - ReplaceUserAgent, - { - urls: [ - "*://*.disneyplus.com/*", - "*://*.starplus.com/*", - "*://*.max.com/*", - "*://*.hbomax.com/*", - // these are only the prime video urls - "*://*.primevideo.com/*", - "*://*.amazon.com/gp/video/*", - "*://*.amazon.co.jp/gp/video/*", - "*://*.amazon.de/gp/video/*", - "*://*.amazon.co.uk/gp/video/*", - ], - }, - ["blocking", "requestHeaders"] - ); - } - } -} diff --git a/firefox/cr.js b/firefox/cr.js deleted file mode 100644 index 7124e33e..00000000 --- a/firefox/cr.js +++ /dev/null @@ -1,338 +0,0 @@ -/* - * Streaming enhanced - * Copyright (c) 2022 Marvin Krebber - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License v3.0. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License v3.0 for more details. - */ -/* global browser */ -const defaultSettings = { - settings: { - Amazon: { - skipIntro: true, - skipCredits: true, - watchCredits: false, - skipAd: true, - blockFreevee: true, - speedSlider: true, - filterPaid: false, - continuePosition: true, - showRating: true, - xray: true, - }, - Netflix: { - skipIntro: true, - skipRecap: true, - skipCredits: true, - watchCredits: false, - skipBlocked: true, - skipAd: true, - speedSlider: true, - profile: true, - showRating: true, - }, - Disney: { skipIntro: true, skipCredits: true, watchCredits: false, skipAd: true, speedSlider: true, showRating: true, selfAd: true }, - Crunchyroll: { - skipIntro: true, - speedSlider: true, - releaseCalendar: true, - dubLanguage: null, - profile: true, - bigPlayer: true, - disableNumpad: true, - }, - HBO: { skipIntro: true, skipCredits: true, watchCredits: false, speedSlider: true, showRating: true }, - Video: { playOnFullScreen: true, epilepsy: false, userAgent: true, doubleClick: true, scrollVolume: true, showYear: false }, - Statistics: { - AmazonAdTimeSkipped: 0, - NetflixAdTimeSkipped: 0, - DisneyAdTimeSkipped: 0, - IntroTimeSkipped: 0, - RecapTimeSkipped: 0, - SegmentsSkipped: 0, - }, - General: { - Crunchyroll_profilePicture: null, - profileName: null, - profilePicture: null, - sliderSteps: 1, - sliderMin: 5, - sliderMax: 20, - filterDub: true, - filterQueued: true, - savedCrunchyList: [], - GCdate: "2024-01-01", - }, - }, -}; -let settings = { ...defaultSettings.settings }; -browser.storage.sync.get("settings", function (result) { - // overwrite default settings with user settings - // List of keys to merge individually - settings.Amazon = { ...defaultSettings.settings.Amazon, ...result?.settings?.Amazon }; - settings.Netflix = { ...defaultSettings.settings.Netflix, ...result?.settings?.Netflix }; - settings.Disney = { ...defaultSettings.settings.Disney, ...result?.settings?.Disney }; - settings.Crunchyroll = { ...defaultSettings.settings.Crunchyroll, ...result?.settings?.Crunchyroll }; - settings.HBO = { ...defaultSettings.settings.HBO, ...result?.settings?.HBO }; - settings.Video = { ...defaultSettings.settings.Video, ...result?.settings?.Video }; - settings.Statistics = { ...defaultSettings.settings.Statistics, ...result?.settings?.Statistics }; - settings.General = { ...defaultSettings.settings.General, ...result?.settings?.General }; - if (settings?.Crunchyroll?.disableNumpad) Crunchyroll_disableNumpad(); - if (settings?.Video?.doubleClick) startdoubleClick(); - CrunchyrollObserver.observe(document, config); - if (settings?.Video?.playOnFullScreen) startPlayOnFullScreen(); -}); -browser.storage.sync.onChanged.addListener(function (changes) { - if (changes?.settings) { - const { oldValue, newValue } = changes.settings; - settings = newValue; - if (!oldValue || newValue.Video.playOnFullScreen !== oldValue?.Video?.playOnFullScreen) startPlayOnFullScreen(); - } -}); -const config = { attributes: true, childList: true, subtree: true }; -const CrunchyrollObserver = new MutationObserver(Crunchyroll); -function Crunchyroll() { - let video = document.querySelector("video"); - const time = video?.currentTime; - if (settings.Crunchyroll?.skipIntro) Crunchyroll_Intro(video, time); - if (settings.Crunchyroll?.speedSlider) Crunchyroll_SpeedSlider(video); - if (settings.Video?.scrollVolume) Crunchyroll_scrollVolume(video); -} -async function Crunchyroll_scrollVolume(video) { - const volumeControl = document.querySelector('[data-testid="vilos-volume_container"]:not(.enhanced)'); - if (volumeControl) { - volumeControl.classList.add("enhanced"); - volumeControl?.addEventListener("wheel", (event) => { - event.preventDefault(); - let volume = video.volume; - if (event.deltaY < 0) volume = Math.min(1, volume + 0.1); - else volume = Math.max(0, volume - 0.1); - video.volume = volume; - const sliderKnob = document.querySelector('div[data-testid="vilos-volume_slider"]').children[1].firstChild.firstChild; - sliderKnob.style.transform = `translateX(${volume * 61}px) translateX(-8px) scale(1)`; - }); - } -} -const date = new Date(); -function log(...args) { - console.log(date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds(), ...args); -} -async function addSkippedTime(startTime, endTime, key) { - if (typeof startTime === "number" && typeof endTime === "number" && endTime > startTime) { - log(key, endTime - startTime); - settings.Statistics[key] += endTime - startTime; - increaseBadge(); - } -} -function OnFullScreenChange() { - let video = document.querySelector("video"); - if (window.fullScreen && video) { - video.play(); - log("auto-played on fullscreen"); - increaseBadge(); - } -} -async function startPlayOnFullScreen() { - if (settings.Video?.playOnFullScreen) { - log("started observing| PlayOnFullScreen"); - addEventListener("fullscreenchange", OnFullScreenChange); - } else { - log("stopped observing| PlayOnFullScreen"); - removeEventListener("fullscreenchange", OnFullScreenChange); - } -} -let skipped = false; -let audioButtonClicked = false; -async function setLanguage(lang, index) { - settings.Crunchyroll.dubLanguage = { lang, index }; - console.log("dubLanguage", settings.Crunchyroll.dubLanguage); - browser.storage.sync.set({ settings }); -} -async function registerAudioButton() { - const Radios = document.querySelectorAll('[data-testid="vilos-settings_radio_item"]'); - if (Radios) { - Radios.forEach((radio, index) => { - const checked = radio.querySelector("circle.dot")?.parentNode?.parentNode?.querySelector(".r-jwli3a"); - const lang = radio.querySelector('[dir="auto"]')?.textContent; - if (checked && settings.Crunchyroll.dubLanguage?.lang != checked?.textContent) setLanguage(lang, index); - radio.addEventListener("click", function () { - setLanguage(lang, index); - }); - }); - } -} -function setAudioLanguage() { - // check if settings_audio_track_submenu was clicked - const audioButton = document.querySelector('[data-testid="vilos-settings_audio_track_submenu"]'); - if (audioButton) { - audioButton.addEventListener("click", function () { - if (!audioButtonClicked) { - console.log("audioButton clicked"); - audioButtonClicked = true; - setTimeout(function () { - registerAudioButton(); - }, 200); - } - }); - } else if (audioButtonClicked) { - setTimeout(function () { - audioButtonClicked = false; - }, 1000); - } -} -let reverseButtonClicked = false; -let reverseButtonStartTime; -let reverseButtonEndTime; -async function Crunchyroll_Intro(video, time) { - // saves the audio language to settings - setAudioLanguage(); - if (!reverseButtonClicked) { - const button = document.querySelector('[data-testid="skipIntroText"]'); - if (button && !skipped) { - // add timeout because it can skip mid sentence if language is not japanese. - skipped = true; - setTimeout( - function () { - button?.click(); - skipped = false; - log("Intro skipped", button); - setTimeout(function () { - CrunchyrollGobackbutton(video, time, video?.currentTime); - addSkippedTime(time, video?.currentTime, "IntroTimeSkipped"); - }, 600); - }, - settings.Crunchyroll?.dubLanguage?.index === 0 || settings.Crunchyroll?.dubLanguage?.index == undefined ? 0 : 2e3 - ); - } - } else if (!document.querySelector(".reverse-button")) { - addButton(video, reverseButtonStartTime, reverseButtonEndTime); - } -} - -function addButton(video, startTime, endTime) { - if (reverseButtonClicked) return; - const button = document.createElement("div"); - button.setAttribute( - "class", - "reverse-button css-1dbjc4n r-1awozwy r-lj0ial r-1jd5jdk r-1loqt21 r-18u37iz r-eu3ka r-1777fci r-kuhrb7 r-ymttw5 r-u8s1d r-1ff5aok r-1otgn73" - ); - button.style = "color:white;"; - button.textContent = "Watch skipped ?"; - - let buttonTimeout = setTimeout(() => { - button.remove(); - }, 5000); - button.onclick = function () { - reverseButtonClicked = true; - video.currentTime = startTime; - button.remove(); - clearTimeout(buttonTimeout); - const waitTime = endTime - startTime + 2; - //log("waiting for:", waitTime); - setTimeout(function () { - reverseButtonClicked = false; - }, waitTime * 1000); - }; - let position = document.querySelector("#velocity-overlay-package"); - if (position) position.appendChild(button); -} - -async function CrunchyrollGobackbutton(video, startTime, endTime) { - reverseButtonStartTime = startTime; - reverseButtonEndTime = endTime; - addButton(video, startTime, endTime); -} - -let videoSpeed; -async function setVideoSpeed(speed) { - videoSpeed = speed; -} -async function Crunchyroll_SpeedSlider(video) { - if (video) { - let alreadySlider = document.querySelector("#videoSpeedSlider"); - if (!alreadySlider) { - // infobar position for the slider to be added - // console.log(document.querySelector("#settingsControl")); - const position = document.querySelector("#settingsControl")?.parentElement; - if (position) { - videoSpeed = videoSpeed || video.playbackRate; - - let slider = document.createElement("input"); - slider.id = "videoSpeedSlider"; - slider.type = "range"; - slider.min = settings.General.sliderMin; - slider.max = settings.General.sliderMax; - slider.value = videoSpeed * 10; - slider.step = settings.General.sliderSteps; - slider.style = "display: none;width:200px;"; - - let speed = document.createElement("p"); - speed.id = "videoSpeed"; - speed.textContent = videoSpeed ? videoSpeed.toFixed(1) + "x" : "1.0x"; - // makes the button clickable - // speed.setAttribute("class", "control-icon-btn"); - speed.style = "color:white;margin: auto;padding: 0 5px;"; - position.prepend(slider, speed); - - if (videoSpeed) video.playbackRate = videoSpeed; - speed.onclick = function (event) { - event.stopPropagation(); - slider.style.display = slider.style.display === "block" ? "none" : "block"; - }; - slider.onclick = function (event) { - event.stopPropagation(); - }; - slider.oninput = function (event) { - event.stopPropagation(); - speed.textContent = (this.value / 10).toFixed(1) + "x"; - video.playbackRate = this.value / 10; - setVideoSpeed(this.value / 10); - }; - } - } - } -} -async function Crunchyroll_disableNumpad() { - addEventListener( - "keydown", - async function (event) { - if (event.location === 3) { - console.log("key blocked: " + event.key); - event.stopPropagation(); - increaseBadge(); - } - }, - true - ); -} -async function startdoubleClick() { - if (settings.Video?.doubleClick) { - // event listener for double click - document.ondblclick = function () { - let video = document.querySelector("video"); - if (video) { - // video is fullscreen - if (window.fullScreen) { - document.exitFullscreen(); - } else { - document.body.requestFullscreen(); - } - } - }; - } else { - document.ondblclick = null; - } -} -// Badge Functions -function increaseBadge() { - settings.Statistics.SegmentsSkipped++; - browser.storage.sync.set({ settings }); - browser.runtime.sendMessage({ - type: "increaseBadge", - }); -} diff --git a/firefox/icons/NetflixAmazon Auto-Skip.svg b/firefox/icons/NetflixAmazon Auto-Skip.svg deleted file mode 100644 index 7003bf94..00000000 --- a/firefox/icons/NetflixAmazon Auto-Skip.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/firefox/manifest.json b/firefox/manifest.json deleted file mode 100644 index 3303e04a..00000000 --- a/firefox/manifest.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "manifest_version": 2, - "name": "__MSG_extensionName__", - "description": "__MSG_extensionDescription__", - "version": "1.1.54", - "homepage_url": "https://github.com/Dreamlinerm/Netflix-Prime-Auto-Skip", - "icons": { - "16": "icons/NetflixAmazon Auto-Skip.svg", - "24": "icons/NetflixAmazon Auto-Skip.svg", - "32": "icons/NetflixAmazon Auto-Skip.svg", - "48": "icons/NetflixAmazon Auto-Skip.svg", - "64": "icons/NetflixAmazon Auto-Skip.svg", - "96": "icons/NetflixAmazon Auto-Skip.svg", - "128": "icons/NetflixAmazon Auto-Skip.svg" - }, - "content_scripts": [ - { - "matches": [ - "*://*.primevideo.com/*", - "*://*.amazon.com/*", - "*://*.amazon.co.jp/*", - "*://*.amazon.de/*", - "*://*.amazon.co.uk/*", - "*://*.netflix.com/*", - "*://*.netflix.ca/*", - "*://*.netflix.com.au/*", - "*://*.disneyplus.com/*", - "*://*.hotstar.com/*", - "*://*.crunchyroll.com/*", - "*://*.starplus.com/*", - "*://*.max.com/*", - "*://*.hbomax.com/*" - ], - "js": [ - "skipper.js" - ] - }, - { - "all_frames": true, - "js": [ - "cr.js" - ], - "matches": [ - "https://static.crunchyroll.com/vilos-v2/web/vilos/player.html*" - ] - } - ], - "optional_permissions": [ - "tabs" - ], - "permissions": [ - "storage", - "webRequest", - "webRequestBlocking", - "*://*.disneyplus.com/*", - "*://*.starplus.com/*", - "*://*.primevideo.com/*", - "*://*.amazon.com/*", - "*://*.amazon.co.jp/*", - "*://*.amazon.de/*", - "*://*.amazon.co.uk/*", - "*://*.max.com/*", - "*://*.hbomax.com/*" - ], - "browser_action": { - "default_icon": "icons/NetflixAmazon Auto-Skip.svg", - "default_title": "__MSG_extensionName__", - "default_popup": "popup/popup.html" - }, - "background": { - "scripts": [ - "badge.js" - ] - }, - "options_ui": { - "page": "popup/settings.html" - }, - "browser_specific_settings": { - "gecko": { - "id": "NetflixPrime@Autoskip.io" - } - }, - "default_locale": "en" -} \ No newline at end of file diff --git a/firefox/popup/popup.html b/firefox/popup/popup.html deleted file mode 100644 index 8949978b..00000000 --- a/firefox/popup/popup.html +++ /dev/null @@ -1,452 +0,0 @@ - - - - - - - - - - - - - Popup - - - -
    - - -
    -
    - - - - - - -
    - -
    - - - - - - - -
    - - - \ No newline at end of file diff --git a/firefox/popup/settings.css b/firefox/popup/settings.css deleted file mode 100644 index 2c3e89fc..00000000 --- a/firefox/popup/settings.css +++ /dev/null @@ -1,393 +0,0 @@ -/* - * Streaming enhanced - * Copyright (c) 2022 Marvin Krebber - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License v3.0. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License v3.0 for more details. - */ - -body, -h1, -h2, -p, -span, -a, -h3, -h4, -h5, -h6 { - font-family: "Lato", sans-serif; -} -html, -body, -.content { - min-width: 500px; - min-height: 450px; - background-color: #212121; -} -body { - margin: unset; -} -.page { - padding: 80px 0 0 3%; - width: 97%; -} -div { - color: white; -} -.hidden { - display: none; -} -/* buttons */ -.button { - font-size: 1.5em; - cursor: pointer; - transition-duration: 0.4s; - - margin: 5px; - border-radius: 15px; - padding: 5px 10px; - text-align: center; - background-color: #0082fc; - color: white; - text-decoration: none; - flex-grow: 1; - - -webkit-user-select: none; /* Safari */ - -ms-user-select: none; /* IE 10 and IE 11 */ - user-select: none; /* Standard syntax */ -} -.button:hover { - opacity: 0.8; -} - -.reset { - margin-top: 50px; -} - -.flex { - display: flex; -} -.flex-center { - display: flex; - justify-content: center; - align-items: center; -} -.flex-justify { - display: flex; - justify-content: center; -} -.flex-align { - display: flex; - align-items: center; -} -.flex-col { - flex-direction: column; -} -.flex-between { - display: flex; - justify-content: space-between; -} -.flex-end { - display: flex; - justify-content: flex-end; -} -.flex-start { - display: flex; - justify-content: flex-start; -} -.flex-wrap { - flex-wrap: wrap; -} -.line, -h1, -h2, -h3, -p { - padding: 5px 5px; - margin: unset; -} -p { - color: white; - font-size: 1.4em; - padding-right: 10px; -} -.Logo { - height: 3em; -} -.title { - padding-top: unset; - padding-bottom: unset; -} -/* Switch styling */ -label { - margin-left: auto; -} -/* The switch - the box around the slider */ -.switch { - position: relative; - display: inline-block; - width: 60px; - height: 34px; -} - -/* Hide default HTML checkbox */ -.switch input { - opacity: 0; - width: 0; - height: 0; -} - -/* The slider */ -.slider { - position: absolute; - cursor: pointer; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: #ccc; - -webkit-transition: 0.4s; - transition: 0.4s; -} - -.slider:before { - position: absolute; - content: ""; - height: 26px; - width: 26px; - left: 4px; - bottom: 4px; - background-color: white; -} - -input:checked + .slider { - background-color: #00a205; -} -/* change color on hover */ -input:checked + .slider:hover { - background-color: #006303; -} - -input:checked + .slider:before { - -webkit-transform: translateX(26px); - -ms-transform: translateX(26px); - transform: translateX(26px); -} - -/* Rounded sliders */ -.slider.round { - border-radius: 34px; -} - -.slider.round:before { - border-radius: 50%; -} -/* WebKit and Chromiums */ -::-webkit-scrollbar { - width: 8px; - height: 8px; - background-color: #212121; -} - -::-webkit-scrollbar-thumb { - background: grey; - border-radius: 5px; -} - -/* The side navigation menu */ -.sidenav { - height: 100%; - background-color: #111; - padding: 0 10px; - gap: 20px; -} - -/* The navigation menu links */ -.menuButton { - border-radius: 15px; - margin: 5px 15px; - padding: 13px 20px; - max-width: 400px; - background-color: #242424; - text-decoration: none; - white-space: __MSG_noWrap__; - cursor: pointer; - color: white; - font-size: 1.5em; - user-select: none; - align-items: center; -} - -.popupMenuButton { - flex: 1 0 calc(25% - 30px); - border-radius: 15px; - padding: 20px; - margin: 10px; - background-color: #242424; - cursor: pointer; - color: white; - align-items: center; - user-select: none; -} -.popupMenuButton .icon { - margin: 0; - width: 100%; - height: fit-content; -} -/* When you mouse over the navigation links, change their color */ -.menuButton:hover, -.popupMenuButton:hover { - background-color: #4d0000; -} - -.description { - font-size: 17px; - padding: 10px 80px 20px 20px; - color: #cccccc; -} -hr { - margin: 0 5px; -} -.IconBox { - padding: 20px 20px; -} -.settingsIcon:hover { - -webkit-animation: spin 4s linear infinite; - -moz-animation: spin 4s linear infinite; - animation: spin 4s linear infinite; -} -@-moz-keyframes spin { - 100% { - -moz-transform: rotate(360deg); - } -} -@-webkit-keyframes spin { - 100% { - -webkit-transform: rotate(360deg); - } -} -@keyframes spin { - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} - -@media only screen and (max-height: 800px), only screen and (max-width: 1000px) { - .MenuButtons { - flex-direction: row; - justify-content: center; - } - .menuButton { - margin: 5px; - padding: 5px 10px; - } - .blueButtons { - margin: 0 5px !important; - font-size: 1em; - } - body { - flex-direction: column; - } - .page { - padding: 0px; - margin: 0 15px 0 15px; - width: calc(100% - 30px); - } - .IconBox { - padding: 10px 0px 0px 0px; - flex-direction: row; - } - .sidenav { - height: auto; - display: block; - } -} -@media only screen and (max-width: 800px), only screen and (max-height: 600px) { - .menuButton i-18n, - .menuButton div, - .IconBox { - display: none; - } - .MenuButtons { - padding-top: 5px; - } -} -.icon { - width: 1.4em; - height: 1.4em; - background-color: transparent; - fill: white; - color: white; - display: flex; - justify-content: center; - align-items: center; - cursor: pointer; - margin: 0 5px; -} - -.featureTable tr *:nth-of-type(2) { - border-right: 1px solid white; -} -.featureTable tr td:nth-of-type(2) label { - margin-right: 20px; -} -.featureTable { - border-collapse: collapse; -} -/* .featureTable, -th, -td { - border-right: 1px solid white; - border-left: 1px solid white; -} */ - -.tooltip { - position: relative; - display: inline-block; - border-bottom: 1px dotted white; - /* color: #346991; - font-weight: bold; */ -} - -.tooltip .tooltiptext { - visibility: hidden; - width: 300px; - background-color: #fff; - color: #000; - text-align: center; - border-radius: 6px; - padding: 5px 0; - position: absolute; - z-index: 1; - bottom: 100%; - left: 0%; -} - -.tooltip .tooltiptext::after { - content: ""; - position: absolute; - top: 100%; - left: 50%; - margin-left: -5px; - border-width: 5px; - border-style: solid; - border-color: #fff transparent transparent transparent; -} - -.tooltip:hover .tooltiptext { - visibility: visible; -} - -#backButton { - cursor: pointer; -} -td { - text-align: center; -} diff --git a/firefox/popup/settings.html b/firefox/popup/settings.html deleted file mode 100644 index 4a734849..00000000 --- a/firefox/popup/settings.html +++ /dev/null @@ -1,1677 +0,0 @@ - - - - - - - - - - - settingsTitle - - - - - -
    -
    - -
    -
    -

    SharedPageTitle

    - -
    -

    SharedPageDescription

    -
    -
    -
    -

    UserAgentSwitch

    - -
    -

    UserAgentSwitchDescription

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FeatureSharedNetflixPrimeDisney+CrunchyrollHBO
    -

    IntroSwitch

    - SharedIntroDescription -
    - - - - - - - - - - - -
    -

    CreditsSwitch

    - CreditsSwitchDescription -
    - - - - - - - - - -
    -

    WatchCreditsSwitch

    - WatchCreditsSwitchDescription -
    - - - - - - - - - -
    -

    AdsSwitch

    - AdsSwitchDescription -
    - - - - - - - -
    -

    RatingSwitch

    - RatingSwitchDescription -
    - - - - - - - - - -
    -

    SliderSwitch

    - SliderSwitchDescription -
    - - - - - - - - - - - -
    -
    -
    -

    FullscreenSwitch

    - -
    -

    FullscreenSwitchDescription

    -
    -
    -

    DoubleClickSwitch

    - -
    -

    DoubleClickSwitchDescription

    -
    -
    -

    scrollVolumeSwitch

    - -
    -

    scrollVolumeDescription

    -
    -
    -

    EpilepsySwitch

    - -
    -

    EpilepsySwitchDescription

    -
    -
    -

    ShowYearSwitch

    - -
    -

    ShowYearSwitchDescription

    -
    - -
    -

    SliderSwitch

    -
    -

    SliderSwitchDescription

    -

    SliderOptions

    - - - - - - - - - - - - - - - - - -
    -

    SliderStepSize

    -
    -

    SliderMin

    -
    - -
    -

    SliderMax

    -
    - -
    -

    SliderPreview

    -
    -
    - -

    1.0x

    -
    -
    -
    -
    - - - - - - - - -
    - -
    - - - \ No newline at end of file diff --git a/firefox/popup/settings.js b/firefox/popup/settings.js deleted file mode 100644 index 8f6d57f9..00000000 --- a/firefox/popup/settings.js +++ /dev/null @@ -1,543 +0,0 @@ -/* - * Streaming enhanced - * Copyright (c) 2022 Marvin Krebber - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License v3.0. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License v3.0 for more details. - */ -/* global browser */ - -// find out if on settings page or on popup page -const isPopup = document.title === "Popup"; -/** - * Localize by replacing __MSG_***__ meta tags - * @returns {void} - */ -async function localizeHtmlPage() { - // https://stackoverflow.com/questions/25467009/internationalization-of-html-pages-for-my-google-chrome-extension - // innerHTML triggers warnings so changed functions - // i18n tag - let translations = document.getElementsByTagName("i-18n"); - for (let trans of translations) { - trans.textContent = browser.i18n.getMessage.apply(null, trans.textContent.split(";")); - } - // i18n attribute - translations = document.querySelectorAll("[data-i18n]"); - for (let trans of translations) { - trans.textContent = browser.i18n.getMessage.apply(null, trans.textContent.split(";")); - } -} -localizeHtmlPage(); -// firefox inline settings change minheight; -if (window.name == "addon-inline-options") { - document.querySelector("body").style.minHeight = "700px"; -} - -let backButtonHistory = ["Popup"]; -// remove everything before # in window.location -let url = window.location.href; -if (url.includes("#")) Menu(url.split("#")[1]); - -// if on streaming page open settings for page -const query = { active: true, currentWindow: true }; -function callback(tabs) { - const currentUrl = tabs[0].url; - const isPrimeVideo = /.amazon.|.primevideo./i.test(currentUrl); - const isNetflix = /.netflix./i.test(currentUrl); - const isDisney = /.disneyplus.|.starplus.|.hotstar./i.test(currentUrl); - const isCrunchyroll = /.crunchyroll./i.test(currentUrl); - // const isHBO = /max/i.test(currentUrl); - if (isPrimeVideo) Menu("Amazon"); - else if (isNetflix) Menu("Netflix"); - else if (isDisney) Menu("Disney"); - else if (isCrunchyroll) Menu("Crunchyroll"); - // else if (isHBO) Menu("HBO"); -} -browser.tabs.query(query, callback); - -// global variables in localStorage -const defaultSettings = { - settings: { - Amazon: { - skipIntro: true, - skipCredits: true, - watchCredits: false, - skipAd: true, - blockFreevee: true, - speedSlider: true, - filterPaid: false, - continuePosition: true, - showRating: true, - xray: true, - }, - Netflix: { - skipIntro: true, - skipRecap: true, - skipCredits: true, - watchCredits: false, - skipBlocked: true, - skipAd: true, - speedSlider: true, - profile: true, - showRating: true, - }, - Disney: { skipIntro: true, skipCredits: true, watchCredits: false, skipAd: true, speedSlider: true, showRating: true, selfAd: true }, - Crunchyroll: { - skipIntro: true, - speedSlider: true, - releaseCalendar: true, - dubLanguage: null, - profile: true, - bigPlayer: true, - disableNumpad: true, - }, - HBO: { skipIntro: true, skipCredits: true, watchCredits: false, speedSlider: true, showRating: true }, - Video: { playOnFullScreen: true, epilepsy: false, userAgent: true, doubleClick: true, scrollVolume: true, showYear: false }, - Statistics: { - AmazonAdTimeSkipped: 0, - NetflixAdTimeSkipped: 0, - DisneyAdTimeSkipped: 0, - IntroTimeSkipped: 0, - RecapTimeSkipped: 0, - SegmentsSkipped: 0, - }, - General: { - Crunchyroll_profilePicture: null, - profileName: null, - profilePicture: null, - sliderSteps: 1, - sliderMin: 5, - sliderMax: 20, - filterDub: true, - filterQueued: true, - savedCrunchyList: [], - GCdate: "2024-01-01", - }, - }, -}; -const isMobile = /mobile|streamingEnhanced/i.test(navigator.userAgent); -console.log("isMobile", isMobile, navigator.userAgent); -let settings = { ...defaultSettings.settings }; -browser.storage.sync.get("settings", function (result) { - // overwrite default settings with user settings - // List of keys to merge individually - settings.Amazon = { ...defaultSettings.settings.Amazon, ...result?.settings?.Amazon }; - settings.Netflix = { ...defaultSettings.settings.Netflix, ...result?.settings?.Netflix }; - settings.Disney = { ...defaultSettings.settings.Disney, ...result?.settings?.Disney }; - settings.Crunchyroll = { ...defaultSettings.settings.Crunchyroll, ...result?.settings?.Crunchyroll }; - settings.HBO = { ...defaultSettings.settings.HBO, ...result?.settings?.HBO }; - settings.Video = { ...defaultSettings.settings.Video, ...result?.settings?.Video }; - settings.Statistics = { ...defaultSettings.settings.Statistics, ...result?.settings?.Statistics }; - settings.General = { ...defaultSettings.settings.General, ...result?.settings?.General }; - // delete every setting that is not in defaultSettings - let changedSettings; - for (const key in settings) { - for (const subkey in settings[key]) { - if (typeof defaultSettings.settings[key][subkey] === "undefined") { - console.log("delete Setting:", key, subkey); - changedSettings = true; - delete settings[key][subkey]; - } - } - } - setCheckboxesToSettings(); - if (changedSettings) { - browser.storage.sync.set({ settings }); - } -}); -browser.storage.sync.onChanged.addListener(function (changes) { - if (changes?.settings) { - const { oldValue, newValue } = changes.settings; - settings = newValue; - console.log("settings", "Old value:", oldValue, ", new value:", newValue); - setCheckboxesToSettings(); - } -}); -//global variables -let sliderValue = settings.General.sliderMax; -// ------------------- functions -------------------- -function getTimeFormatted(sec = 0) { - if (typeof sec !== "number") return "0s"; - let days = Math.floor(sec / 86400); - let hours = Math.floor((sec % 86400) / 3600); - let minutes = Math.floor(((sec % 86400) % 3600) / 60); - let seconds = Math.floor(((sec % 86400) % 3600) % 60); - let text; - if (days > 0) text = `${days}d ${hours}h ${minutes}m`; - else if (hours > 0) text = `${hours}h ${minutes}m ${seconds}s`; - else if (minutes > 0) text = `${minutes}m ${seconds}s`; - else text = `${seconds}s`; - return text; -} -// for all services get the shared boolean of the category -function getBooleanOfCategory(category) { - let bool = true; - if (settings?.Amazon?.[category] !== undefined) bool &= settings?.Amazon[category]; - if (settings?.Netflix?.[category] !== undefined) bool &= settings?.Netflix[category]; - if (settings?.Disney?.[category] !== undefined) bool &= settings?.Disney[category]; - if (settings?.Crunchyroll?.[category] !== undefined) bool &= settings?.Crunchyroll[category]; - if (settings?.HBO?.[category] !== undefined) bool &= settings?.HBO[category]; - return bool; -} -function setCategoryToBoolean(category, bool) { - if (settings?.Amazon?.[category] !== undefined) settings.Amazon[category] = bool; - if (settings?.Netflix?.[category] !== undefined) settings.Netflix[category] = bool; - if (settings?.Disney?.[category] !== undefined) settings.Disney[category] = bool; - if (settings?.Crunchyroll?.[category] !== undefined) settings.Crunchyroll[category] = bool; - if (settings?.HBO?.[category] !== undefined) settings.HBO[category] = bool; -} -function capitalizeFirstLetter(str) { - return str.charAt(0).toUpperCase() + str.slice(1); -} -function lowerCaseFirstLetter(str) { - return str.charAt(0).toLowerCase() + str.slice(1); -} -async function setCheckboxesOfService(service) { - Object.keys(settings[service]).forEach((key) => { - const buttons = document.querySelectorAll("#" + service + capitalizeFirstLetter(key)); - buttons.forEach((button) => { - if (service === "Statistics") { - if (key != "SegmentsSkipped") button.textContent = getTimeFormatted(settings[service][key]); - else button.textContent = settings[service][key]; - } else button.checked = settings[service][key]; - }); - }); -} -async function setButtonChecked(id, condition) { - const buttons = document.querySelectorAll(`#${id}`); - buttons.forEach((button) => { - button.checked = condition; - }); -} -async function setCheckboxesToSettings() { - let button; - button = document.querySelector("#VideoSkips"); - if (button) - button.checked = - getBooleanOfCategory("skipIntro") && - getBooleanOfCategory("skipCredits") && - // Ads - settings?.Amazon.blockFreevee && - settings?.Netflix.skipAd && - settings?.Disney.skipAd && - getBooleanOfCategory("showRating") && - getBooleanOfCategory("speedSlider") && - // playOnFullScreen - settings?.Video.playOnFullScreen && - settings?.Video.doubleClick && - settings?.Video.scrollVolume; - let VideoCheckboxes = ["skipIntro", "skipCredits", "watchCredits", "showRating", "speedSlider"]; - VideoCheckboxes.forEach((key) => { - setButtonChecked("Video" + capitalizeFirstLetter(key), getBooleanOfCategory(key)); - }); - setButtonChecked("VideoShowYear", settings?.Video.showYear); - setButtonChecked("VideoAds", settings?.Amazon.blockFreevee && settings?.Netflix.skipAd && settings?.Disney.skipAd); - setButtonChecked("VideoFullScreen", settings?.Video.playOnFullScreen); - setButtonChecked("VideoDoubleClick", settings?.Video.doubleClick); - setButtonChecked("VideoScrollVolume", settings?.Video.scrollVolume); - setButtonChecked("VideoEpilepsy", settings?.Video.epilepsy); - setButtonChecked("VideoUserAgent", settings?.Video.userAgent); - button = document.querySelector(".categoryMobile"); - if (button) button.style.display = isMobile ? "block" : "none"; - // ------------- Default --------------------------------------- - setButtonChecked("DefaultSkips", settings?.Amazon.filterPaid); - // ------------- global buttons --------------------------------------- - setButtonChecked( - "AmazonSkips", - settings?.Amazon.skipAd && settings?.Amazon.filterPaid && settings?.Amazon.continuePosition && settings?.Amazon.xray - ); - setButtonChecked("NetflixSkips", settings?.Netflix.skipRecap && settings?.Netflix.skipBlocked && settings?.Netflix.profile); - setButtonChecked("DisneySkips", settings?.Disney.selfAd); - setButtonChecked( - "CrunchyrollSkips", - settings?.Crunchyroll.skipIntro && - settings?.Crunchyroll.releaseCalendar && - settings?.Crunchyroll.profile && - settings?.Crunchyroll.bigPlayer && - settings?.Crunchyroll.disableNumpad - ); - setButtonChecked("HBOSkips", true); - // ------------- Individual Checkboxes --------------------------------------- - setCheckboxesOfService("Amazon"); - setCheckboxesOfService("Netflix"); - setCheckboxesOfService("Disney"); - setCheckboxesOfService("Statistics"); - setCheckboxesOfService("Crunchyroll"); - setCheckboxesOfService("HBO"); - // ------------- Netflix other --------------------------------------- - button = document.querySelector("#profileName"); - if (button) button.textContent = settings?.General.profileName; - button = document.querySelector("#profilePicture"); - if (button && settings.General.profilePicture) { - button.setAttribute("src", settings?.General.profilePicture); - button.style.display = "block"; - } - // ------------- Slider Options --------------------------------------- - button = document.querySelector("#SliderSteps"); - if (button) button.value = settings?.General.sliderSteps; - button = document.querySelector("#SliderMin"); - if (button) button.value = settings?.General.sliderMin; - button = document.querySelector("#SliderMax"); - if (button) button.value = settings?.General.sliderMax; - button = document.querySelector("#SliderPreview"); - if (button) { - button.step = settings?.General.sliderSteps; - button.min = settings?.General.sliderMin; - button.max = settings?.General.sliderMax; - } - button = document.querySelector("#SliderValue"); - if (button) button.textContent = (sliderValue / 10).toFixed(1) + "x"; - const optionalPermissions = ["tabs"]; - optionalPermissions.forEach((permission) => { - showPermissionRequest(permission); - }); - - // import/export buttons - button = document.querySelector("#save"); - if (button) { - let file = new Blob([JSON.stringify(settings)], { type: "text/json" }); - button.href = URL.createObjectURL(file); - button.download = "settings.json"; - } -} -async function showPermissionRequest(permission) { - const PermissionButtons = document.querySelectorAll("#Permission" + permission + "Div"); - const permissionStatus = await browser.permissions.contains({ permissions: [permission] }); - if (!permissionStatus) { - PermissionButtons.forEach((button) => { - button.style.display = "block"; - }); - } -} - -function Menu(setting, isBackButton = false) { - if (!isBackButton) backButtonHistory.push(setting); - console.log(backButtonHistory); - const Pages = isPopup - ? ["Video", "Amazon", "Netflix", "Disney", "Crunchyroll", "Statistics", "Popup"] - : ["Video", "Amazon", "Netflix", "Disney", "Crunchyroll", "Statistics", "Other", "Changelog", "Default"]; - const noButton = ["Default", "Popup"]; - for (const page of Pages) { - document.getElementById(page + "Settings").style.display = "none"; - if (!noButton.includes(page)) document.getElementById("Menu" + page).style.setProperty("background-color", ""); - } - document.getElementById(setting + "Settings").style.display = setting != "Video" && setting != "Statistics" && isPopup ? "flex" : "block"; - if (!noButton.includes(setting)) document.getElementById("Menu" + setting).style.setProperty("background-color", "#e60010"); -} -/** - * Listen for clicks on the buttons, and send the appropriate message to - * the content script in the page. - */ -function setSettings(log) { - console.log(log, settings); - browser.storage.sync.set({ settings }); -} -/** - * for inverse Settings - * @param {*} setting the setting that should be set - * @param {*} target the setting that should be unset if setting is set - */ -function toggleSetting(service, target, setting) { - settings[service][setting] = !settings[service]?.[setting]; - if (settings[service][setting]) settings[service][target] = false; -} -function toggleCategoryBoolean(target, setting) { - const value = getBooleanOfCategory(setting); - setCategoryToBoolean(setting, !value); - if (!value) setCategoryToBoolean(target, false); -} -function listenForClicks() { - document.addEventListener("click", (e) => { - if (e.target.classList.contains("reset")) { - if (confirm("Are you sure to reset every Setting including Statistics?")) { - console.log("settings resetted to default"); - browser.storage.sync.set(defaultSettings); - } - } - // ------------- Statistics --------------------------------------- - else if (e.target.id === "upload") { - // get the file from #file and console.log it - const file = document.getElementById("file").files[0]; - if (file !== undefined && "application/json" === file.type) { - if (confirm(file.name + " will replace the Settings.\n\nAre you sure you want to do this?")) { - // read contents of file - const reader = new FileReader(); - // reader.onload = (e) => { - reader.addEventListener("load", (e) => { - try { - // parse the JSON - const data = JSON.parse(e.target.result); - // set the settings to the parsed JSON - settings = data; - // save the settings to the storage - browser.storage.sync.set({ settings }); - // reload the page - location.reload(); - // }; - } catch (e) { - alert("The file you uploaded is not a valid JSON file."); - return; - } - }); - reader.readAsText(file); - } - } else { - alert("The file you uploaded is not a valid JSON file."); - return; - } - } - // ------------- Menu --------------------------------------- - else if (e.target.id.startsWith("Menu")) Menu(e.target.id.replace("Menu", "")); - else if (e.target.id === "backButton") { - if (backButtonHistory.length > 0) { - backButtonHistory.pop(); - Menu(backButtonHistory[backButtonHistory.length - 1], true); - } else Menu("Popup", true); - } else if (e.target.id.startsWith("Permission")) { - browser.permissions.request({ permissions: [e.target.id.replace("Permission", "")] }); - } - // all buttons changing settings - else { - // ------------- Video --------------------------------------- - const currentSettings = { ...settings }; - if (e.target.id === "VideoSkips") { - const VideoSkips = !( - getBooleanOfCategory("skipIntro") && - getBooleanOfCategory("skipCredits") && - // Ads - settings?.Amazon.blockFreevee && - settings?.Netflix.skipAd && - settings?.Disney.skipAd && - getBooleanOfCategory("showRating") && - getBooleanOfCategory("speedSlider") && - // playOnFullScreen - settings?.Video.playOnFullScreen && - settings?.Video.doubleClick && - settings?.Video.scrollVolume - ); - let VideoSkipTypes = ["skipIntro", "skipCredits", "showRating", "speedSlider"]; - VideoSkipTypes.forEach((key) => { - setCategoryToBoolean(key, VideoSkips); - }); - settings.Amazon.blockFreevee = - settings.Netflix.skipAd = - settings.Disney.skipAd = - settings.Video.playOnFullScreen = - settings.Video.doubleClick = - settings.Video.scrollVolume = - VideoSkips; - if (VideoSkips) setCategoryToBoolean("watchCredits", false); - } else if (e.target.id === "VideoShowYear") settings.Video.showYear = !settings.Video.showYear; - else if (e.target.id === "VideoAds") - settings.Amazon.blockFreevee = - settings.Netflix.skipAd = - settings.Disney.skipAd = - !(settings?.Amazon.blockFreevee && settings?.Netflix.skipAd && settings?.Disney.skipAd); - else if (e.target.id === "VideoFullScreen") settings.Video.playOnFullScreen = !settings.Video.playOnFullScreen; - else if (e.target.id === "VideoDoubleClick") settings.Video.doubleClick = !settings.Video.doubleClick; - else if (e.target.id === "VideoScrollVolume") settings.Video.scrollVolume = !settings.Video.scrollVolume; - else if (e.target.id === "VideoEpilepsy") settings.Video.epilepsy = !settings.Video.epilepsy; - else if (e.target.id === "VideoUserAgent") settings.Video.userAgent = !settings.Video.userAgent; - else if (e.target.id.startsWith("Video")) { - let key = lowerCaseFirstLetter(e.target.id.replace("Video", "")); - if (key === "skipCredits" || key === "watchCredits") { - toggleCategoryBoolean(key === "skipCredits" ? "watchCredits" : "skipCredits", key); - } else { - setCategoryToBoolean(key, !getBooleanOfCategory(key)); - } - } - // ------------- Default --------------------------------------- - else if (e.target.id === "DefaultSkips") settings.Amazon.filterPaid = !settings?.Amazon.filterPaid; - // ------------- Amazon --------------------------------------- - else if (e.target.id === "AmazonSkips") - settings.Amazon.skipAd = - settings.Amazon.filterPaid = - settings.Amazon.continuePosition = - settings.Amazon.xray = - !(settings.Amazon.skipAd && settings.Amazon.filterPaid && settings.Amazon.continuePosition && settings?.Amazon.xray); - else if (e.target.id === "NetflixSkips") - settings.Netflix.skipRecap = - settings.Netflix.skipBlocked = - settings.Netflix.profile = - !(settings?.Netflix.skipRecap && settings?.Netflix.skipBlocked && settings?.Netflix.profile); - else if (e.target.id === "DisneySkips") settings.Disney.selfAd = !settings?.Disney.selfAd; - else if (e.target.id === "CrunchyrollSkips") - settings.Crunchyroll.skipIntro = - settings.Crunchyroll.releaseCalendar = - settings.Crunchyroll.profile = - settings.Crunchyroll.bigPlayer = - settings.Crunchyroll.disableNumpad = - !( - settings?.Crunchyroll.skipIntro && - settings?.Crunchyroll.releaseCalendar && - settings.Crunchyroll.profile && - settings.Crunchyroll.bigPlayer && - settings.Crunchyroll.disableNumpad - ); - // else if (e.target.id === "HBOSkips") - else { - const services = ["Amazon", "Netflix", "Disney", "Crunchyroll", "HBO"]; - for (const service of services) { - if (e.target.id.startsWith(service)) { - let key = lowerCaseFirstLetter(e.target.id.replace(service, "")); - if (key === "skipCredits" || key === "watchCredits") { - toggleSetting(service, key === "skipCredits" ? "watchCredits" : "skipCredits", key); - } else { - settings[service][key] = !settings[service]?.[key]; - } - } - } - } - // check if settings changed - if (JSON.stringify(settings) !== JSON.stringify(currentSettings)) { - setSettings(e.target.id); - } - } - }); -} - -function listenForInput() { - document.addEventListener("input", (e) => { - if (e.target.id === "SliderPreview") { - sliderValue = Number(e.target.value); - setCheckboxesToSettings(); - } else { - if (e.target.id === "SliderSteps") settings.General.sliderSteps = Number(e.target.value); - else if (e.target.id === "SliderMin") { - settings.General.sliderMin = Number(e.target.value); - sliderValue = settings.General.sliderMin; - } else if (e.target.id === "SliderMax") { - settings.General.sliderMax = Number(e.target.value); - sliderValue = settings.General.sliderMax; - } - setCheckboxesToSettings(); - setSettings(e.target.id); - } - }); -} - -/** - * There was an error executing the script. - * Display the popup's error message, and hide the normal UI. - */ -function reportExecuteScriptError(error) { - document.querySelector("#popup-content").classList.add("hidden"); - document.querySelector("#error-content").classList.remove("hidden"); - console.error(`Failed to execute primeskip content script: ${error.message}`); -} - -/** - * When the popup loads, add a click handler. - * If we couldn't inject the script, handle the error. - */ -try { - listenForClicks(); - listenForInput(); -} catch (e) { - reportExecuteScriptError(e); -} diff --git a/firefox/skipper.js b/firefox/skipper.js deleted file mode 100644 index 046d099e..00000000 --- a/firefox/skipper.js +++ /dev/null @@ -1,1658 +0,0 @@ -/* - * Streaming enhanced - * Copyright (c) 2022 Marvin Krebber - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License v3.0. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License v3.0 for more details. - */ -/* global browser */ -// matches all amazon urls under https://en.wikipedia.org/wiki/Amazon_(company)#Website -const hostname = window.location.hostname; -const title = document.title; -let url = window.location.href; -const ua = navigator.userAgent; -// only on prime video pages -const isPrimeVideo = /amazon|primevideo/i.test(hostname) && (/video/i.test(title) || /video/i.test(url)); -const isNetflix = /netflix/i.test(hostname); -const isDisney = /disneyplus|starplus/i.test(hostname); -const isHotstar = /hotstar/i.test(hostname); -const isCrunchyroll = /crunchyroll/i.test(hostname); -const isStarPlus = /starplus/i.test(hostname); -const isHBO = /max.com/i.test(hostname); - -const isMobile = /mobile|streamingEnhanced/i.test(ua); -const isEdge = /edg/i.test(ua); -// const isFirefox = /firefox/i.test(ua); -// const isChrome = /chrome/i.test(ua); -const htmlLang = document.documentElement.lang; -const date = new Date(); -const today = date.toISOString().split("T")[0]; -const version = "1.1.54"; -if (isPrimeVideo || isNetflix || isDisney || isHotstar || isCrunchyroll || isHBO) { - /* eslint-env root:true */ - // global variables in localStorage - const defaultSettings = { - settings: { - Amazon: { - skipIntro: true, - skipCredits: true, - watchCredits: false, - skipAd: true, - blockFreevee: true, - speedSlider: true, - filterPaid: false, - continuePosition: true, - showRating: true, - xray: true, - }, - Netflix: { - skipIntro: true, - skipRecap: true, - skipCredits: true, - watchCredits: false, - skipBlocked: true, - skipAd: true, - speedSlider: true, - profile: true, - showRating: true, - }, - Disney: { skipIntro: true, skipCredits: true, watchCredits: false, skipAd: true, speedSlider: true, showRating: true, selfAd: true }, - Crunchyroll: { - skipIntro: true, - speedSlider: true, - releaseCalendar: true, - dubLanguage: null, - profile: true, - bigPlayer: true, - disableNumpad: true, - }, - HBO: { skipIntro: true, skipCredits: true, watchCredits: false, speedSlider: true, showRating: true }, - Video: { playOnFullScreen: true, epilepsy: false, userAgent: true, doubleClick: true, scrollVolume: true, showYear: false }, - Statistics: { - AmazonAdTimeSkipped: 0, - NetflixAdTimeSkipped: 0, - DisneyAdTimeSkipped: 0, - IntroTimeSkipped: 0, - RecapTimeSkipped: 0, - SegmentsSkipped: 0, - }, - General: { - Crunchyroll_profilePicture: null, - profileName: null, - profilePicture: null, - sliderSteps: 1, - sliderMin: 5, - sliderMax: 20, - filterDub: true, - filterQueued: true, - savedCrunchyList: [], - GCdate: "2024-01-01", - }, - }, - }; - let settings = { ...defaultSettings.settings }; - let DBCache = {}; - let lastAdTimeText = 0; - let videoSpeed = 1; - async function setVideoSpeed(speed) { - videoSpeed = speed; - } - resetBadge(); - // how long a record should be kept in the cache - const GCdiff = 30; - async function garbageCollection() { - // clear every rating older than 30 days - // clear every rating where db != tmdb - log("garbageCollection started, deleting old ratings:"); - const keys = Object.keys(DBCache); - for (let key of keys) { - if (getDiffInDays(DBCache[key].date, date) >= GCdiff || DBCache[key].db != "tmdb") { - console.log(DBCache[key].date, key); - delete DBCache[key]; - } - } - settings.General.GCdate = today; - setStorage(); - setDBCache(); - } - async function getDBCache() { - browser.storage.local.get("DBCache", function (result) { - DBCache = result?.DBCache; - if (typeof DBCache !== "object") { - log("DBCache not found, creating new one", DBCache); - try { - browser.storage.local.set({ DBCache: {} }); - } catch (error) { - log(error); - } - DBCache = {}; - } - if (isNetflix && settings.Netflix?.showRating) startShowRatingInterval(); - else if (isDisney || isHotstar) { - if (settings.Disney?.showRating) startShowRatingInterval(); - } else if (isPrimeVideo && settings.Amazon?.showRating) startShowRatingInterval(); - else if (isHBO && settings.HBO?.showRating) startShowRatingInterval(); - if (getDiffInDays(settings.General.GCdate, date) >= GCdiff) garbageCollection(); - }); - } - function logStartOfAddon() { - console.log("%cStreaming enhanced", "color: #00aeef;font-size: 2em;"); - console.log("version:", version); - console.log("Settings", settings); - if (isNetflix) console.log("Page %cNetflix", "color: #e60010;"); - else if (isPrimeVideo) console.log("Page %cAmazon", "color: #00aeef;"); - else if (isStarPlus) console.log("Page %cStarPlus", "color: #fe541c;"); - else if (isDisney) console.log("Page %cDisney", "color: #0682f0;"); - else if (isHotstar) console.log("Page %cHotstar", "color: #0682f0;"); - else if (isCrunchyroll) console.log("Page %cCrunchyroll", "color: #e67a35;"); - else if (isHBO) console.log("Page %cHBO", "color: #0836f1;"); - } - function startNetflix(Netflix) { - if (Netflix?.profile) AutoPickProfile(); - if (Netflix?.skipAd) Netflix_SkipAdInterval(); - NetflixObserver.observe(document, config); - } - function startAmazon(Amazon) { - AmazonSkipIntroObserver.observe(document, AmazonSkipIntroConfig); - if (settings?.Video?.doubleClick) Amazon_doubleClick(); - AmazonObserver.observe(document, config); - if (Amazon?.skipAd) Amazon_AdTimeout(); - if (Amazon?.blockFreevee) { - // timeout of 100 ms because the ad is not loaded fast enough and the video will crash - setTimeout(function () { - Amazon_FreeveeTimeout(); - }, 1000); - } - if (Amazon?.continuePosition) setTimeout(() => Amazon_continuePosition(), 500); - if (settings.Video?.userAgent && isMobile) Amazon_customizeMobileView(); - } - function startCrunchyroll(Crunchyroll) { - if (Crunchyroll?.releaseCalendar) Crunchyroll_ReleaseCalendar(); - if (Crunchyroll?.profile) { - let pickInterval = setInterval(function () { - Crunchyroll_AutoPickProfile(); - }, 100); - setTimeout(function () { - if (settings.Crunchyroll?.bigPlayer) Crunchyroll_bigPlayerStyle(); - }, 1000); - // only click on profile on page load not when switching profiles - setTimeout(function () { - clearInterval(pickInterval); - }, 2000); - CrunchyrollObserver.observe(document, config); - } - } - browser.storage.sync.get("settings", function (result) { - // overwrite default settings with user settings - // List of keys to merge individually - settings.Amazon = { ...defaultSettings.settings.Amazon, ...result?.settings?.Amazon }; - settings.Netflix = { ...defaultSettings.settings.Netflix, ...result?.settings?.Netflix }; - settings.Disney = { ...defaultSettings.settings.Disney, ...result?.settings?.Disney }; - settings.Crunchyroll = { ...defaultSettings.settings.Crunchyroll, ...result?.settings?.Crunchyroll }; - settings.HBO = { ...defaultSettings.settings.HBO, ...result?.settings?.HBO }; - settings.Video = { ...defaultSettings.settings.Video, ...result?.settings?.Video }; - settings.Statistics = { ...defaultSettings.settings.Statistics, ...result?.settings?.Statistics }; - settings.General = { ...defaultSettings.settings.General, ...result?.settings?.General }; - - logStartOfAddon(); - if (isNetflix) startNetflix(settings.Netflix); - else if (isPrimeVideo) startAmazon(settings.Amazon); - else if (isDisney || isHotstar) { - if (isHotstar) Hotstar_doubleClick(); - DisneyObserver.observe(document, config); - setInterval(function () { - let video = Array.from(document.querySelectorAll("video")).find((v) => v.checkVisibility()); - if (settings.Disney?.skipAd) Disney_skipAd(video); - }, 300); - } else if (isCrunchyroll) startCrunchyroll(settings.Crunchyroll); - else if (isHBO) HBOObserver.observe(document, config); - if (settings?.Video?.playOnFullScreen) startPlayOnFullScreen(); - getDBCache(); - }); - browser.storage.local.onChanged.addListener(function (changes) { - if (changes?.DBCache) DBCache = changes.DBCache.newValue; - }); - browser.storage.sync.onChanged.addListener(function (changes) { - if (changes?.settings) { - const { oldValue, newValue } = changes.settings; - settings = newValue; - log("settings", "Old value:", oldValue, ", new value:", newValue); - if (isNetflix) NetflixSettingsChanged(oldValue?.Netflix, newValue?.Netflix); - else if (isPrimeVideo) AmazonSettingsChanged(oldValue?.Amazon, newValue?.Amazon); - else if (isDisney || isHotstar) DisneySettingsChanged(oldValue?.Disney, newValue?.Disney); - else if (isHBO) HBOSettingsChanged(oldValue?.HBO, newValue?.HBO); - - if (!oldValue || newValue.Video.playOnFullScreen !== oldValue?.Video?.playOnFullScreen) startPlayOnFullScreen(); - if (!oldValue || newValue.Video.doubleClick !== oldValue?.Video?.doubleClick) Amazon_doubleClick(); - if (oldValue?.Video?.userAgent != undefined && newValue.Video.userAgent !== oldValue?.Video?.userAgent) location.reload(); - } - }); - function NetflixSettingsChanged(oldValue, newValue) { - if (!oldValue?.skipAd && newValue.skipAd) Netflix_SkipAdInterval(); - if (!oldValue?.showRating && newValue.showRating) startShowRatingInterval(); - } - function AmazonSettingsChanged(oldValue, newValue) { - if (!oldValue?.skipAd && newValue.skipAd) Amazon_AdTimeout(); - if (!oldValue?.blockFreevee && newValue.blockFreevee) Amazon_FreeveeTimeout(); - if (!oldValue?.continuePosition && newValue.continuePosition) Amazon_continuePosition(); - if (!oldValue?.showRating && newValue.showRating) startShowRatingInterval(); - } - function DisneySettingsChanged(oldValue, newValue) { - if (!oldValue?.showRating && newValue.showRating) startShowRatingInterval(); - } - function HBOSettingsChanged(oldValue, newValue) { - if (!oldValue?.showRating && newValue.showRating) startShowRatingInterval(); - } - async function addSkippedTime(startTime, endTime, key) { - if (typeof startTime === "number" && typeof endTime === "number" && endTime > startTime) { - log(key, endTime - startTime); - settings.Statistics[key] += endTime - startTime; - increaseBadge(); - } - } - // ...args - function log(...args) { - console.log(date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds(), ...args); - } - // set DB Cache if cache size under 2MB - async function setDBCache() { - const size = new TextEncoder().encode(JSON.stringify(DBCache)).length; - const kiloBytes = size / 1024; - const megaBytes = kiloBytes / 1024; - if (megaBytes < 5) { - log("updateDBCache size:", megaBytes.toFixed(4) + " MB"); - browser.storage.local.set({ DBCache }); - } else { - log("DBCache cleared", megaBytes); - DBCache = {}; - browser.storage.local.set({ DBCache }); - } - } - async function getMovieInfo(title, card, media_type = null, year = null) { - // justwatch api - // const url = `https://apis.justwatch.com/content/titles/${locale}/popular?language=en&body={"page_size":1,"page":1,"query":"${title}","content_types":["show","movie"]}`; - let locale = htmlLang || navigator?.language || "en-US"; - const queryType = media_type || "multi"; - let url = `https://api.themoviedb.org/3/search/${queryType}?query=${encodeURI(title)}&include_adult=false&language=${locale}&page=1`; - if (year) url += `&year=${year}`; - // const response = await fetch(encodeURI(url)); - // const data = await response.json(); - try { - browser.runtime.sendMessage({ url }, function (data) { - if (data != undefined && data != "") { - // themoviedb - let compiledData = {}; - const movie = data?.results?.[0]; - compiledData = { - id: movie?.id, - media_type: queryType == "multi" ? movie?.media_type : queryType, - score: movie?.vote_average, - vote_count: movie?.vote_count, - release_date: movie?.release_date || movie?.first_air_date, - title: movie?.title || movie?.original_title || movie?.name || movie?.original_name, - date: today, - db: "tmdb", - }; - // if ( - // compiledData?.title && - // !compiledData.title - // .toLowerCase() - // .replace(":", "") - // .replace("-", "") - // .replace(",", "") - // .includes(title.toLowerCase().replace(":", "").replace("-", "").replace(",", "")) - // ) { - // console.log( - // "Title mismatch", - // title.replace(":", "").replace("-", "").replace(",", "") + "><" + compiledData.title.replace(":", "").replace("-", "").replace(",", "") - // ); - // } - DBCache[title] = compiledData; - setRatingOnCard(card, compiledData, title); - } - }); - } catch (error) { - log(error); - if (error.toString().includes("Extension context invalidated")) { - location.reload(); - } - } - } - - // ----------------------- functions --------------------------------- - // default Options for the observer (which mutations to observe) - const config = { attributes: true, childList: true, subtree: true }; - // #region Shared funcs - // shared functions - // show rating depending on page - const uuidRegex = /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/g; - function showRating() { - if (isDisney) { - url = window.location.href; - // disable search and suggested movies - if (url.includes("search")) return false; - if (url.includes("entity")) { - const SelectedTab = document.querySelector('[aria-selected="true"]'); - return uuidRegex.test(SelectedTab?.id.split("_control")[0]) && SelectedTab?.getAttribute("aria-label") != "EXTRAS"; - } - return true; - } else if (isPrimeVideo) { - // suggested movies - if (window.location.href.includes("detail")) { - return document.querySelector('[data-testid="btf-related-tab"]')?.tabIndex == 0; - } - return true; - } else return true; - } - async function startShowRatingInterval() { - if (showRating()) addRating(); - let RatingInterval = setInterval(function () { - if ( - (isNetflix && !settings.Netflix?.showRating) || - (isPrimeVideo && !settings.Amazon?.showRating) || - ((isDisney || isHotstar) && !settings.Disney?.showRating) || - (isHBO && !settings.HBO?.showRating) - ) { - log("stopped adding Rating"); - clearInterval(RatingInterval); - return; - } - if (showRating()) addRating(); - }, 1000); - } - function getDiffInDays(firstDate, secondDate) { - if (!firstDate || !secondDate) return 31; - return Math.round(Math.abs(new Date(secondDate).getTime() - new Date(firstDate).getTime()) / (1000 * 60 * 60 * 24)); - } - function useDBCache(title, card, media_type) { - if (!DBCache[title]?.date) DBCache[title].date = today; - const vote_count = DBCache[title]?.vote_count || 100; - const diffInReleaseDate = - // vote count is under 80 inaccurate rating - vote_count < 100 && - // did not refresh rating in the last 0 days - getDiffInDays(DBCache[title].date, date) > 0 && - // release date is in the last 50 days after not many people will - getDiffInDays(DBCache[title]?.release_date, date) <= 50; - - // refresh rating if older than 30 days or release date is in last month and vote count is under 100 - if (getDiffInDays(DBCache[title].date, date) >= GCdiff || diffInReleaseDate) { - if (diffInReleaseDate) - log("update recent movie:", title, ",Age:", getDiffInDays(DBCache[title]?.release_date, date), "Vote count:", vote_count); - else log("update old rating:", title, ",Age:", getDiffInDays(DBCache[title].date, date)); - getMovieInfo(title, card, media_type); - // log("no info today", title); - } else { - setRatingOnCard(card, DBCache[title], title); - } - } - function getMediaType(type) { - if (!type) return null; - if (type.toLowerCase().includes("tv")) return "tv"; - if (type.toLowerCase().includes("movie")) return "movie"; - return null; - } - async function addRating() { - url = window.location.href; - let AllTitleCardsTypes; - if (isNetflix) AllTitleCardsTypes = [document.querySelectorAll(".title-card .boxart-container:not(.imdb)")]; - else if (isDisney) AllTitleCardsTypes = [document.querySelectorAll("a[data-testid='set-item']:not(.imdb)")]; - else if (isHotstar) AllTitleCardsTypes = [document.querySelectorAll(".swiper-slide img:not(.imdb)")]; - else if (isHBO) AllTitleCardsTypes = [document.querySelectorAll("a[class*='StyledTileLinkNormal-Beam-Web-Ent']:not(.imdb)")]; - else if (isPrimeVideo) - AllTitleCardsTypes = [ - document.querySelectorAll("li:not(.imdb) article[data-card-title]:not([data-card-entity-type='EVENT']):not([data-card-title='Live-TV'])"), - document.querySelectorAll("article[data-testid*='-card']:not(.imdb):not(:has(a#rating))"), - ]; - // on disney there are multiple images for the same title so only use the first one - let lastTitle = ""; - // for each is not going in order on chrome - let updateDBCache = false; - for (let type = 0; type < AllTitleCardsTypes.length; type++) { - const titleCards = AllTitleCardsTypes[type]; - let media_type = null; - for (let i = 0; i < titleCards.length; i++) { - let card = titleCards[i]; - // add seen class - if (isNetflix || isDisney || isHotstar || isHBO) card.classList.add("imdb"); - else if (isPrimeVideo) { - if (type == 0) card?.closest("li")?.classList.add("imdb"); - else if (type == 1) card?.classList.add("imdb"); - } - let title; - if (isNetflix) { - title = card?.parentElement?.getAttribute("aria-label")?.split(" (")[0]; - if (url.includes("genre/83")) media_type = "tv"; - else if (url.includes("genre/34399")) media_type = "movie"; - } else if (isDisney) { - title = card?.getAttribute("aria-label")?.replace(" Disney+ Original", "")?.replace(" STAR Original", ""); - // no section Extras on disney shows - if (url.includes("entity")) { - const SelectedTabId = document.querySelector('[aria-selected="true"]')?.id.split("_control")[0]; - if (SelectedTabId != card.closest('div[role="tabpanel"]')?.id) title = ""; - } - if (url.includes("browse/series")) media_type = "tv"; - else if (url.includes("browse/movies")) media_type = "movie"; - else if (/(Staffel)|(Nummer)|(Season)|(Episod)|(Number)/g.test(title)) media_type = "tv"; - // german translation - if (htmlLang == "de") { - title = title - ?.replace(/Nummer \d* /, "") - .split(" Für Details")[0] - .split(" Staffel")[0] - .split("Staffel")[0] - .split(" Neue")[0] - .split(" Alle")[0] - .split(" Demnächst")[0] - .split(" Altersfreigabe")[0] - .split(" Mach dich bereit")[0] // deadpool - //did not find translation - .split(" Jeden")[0] - .split(" Noch")[0] - .split(" Premiere")[0]; - } else if (htmlLang == "en") { - title = title - ?.replace(/Number \d* /, "") - .replace(" Select for details on this title.", "") - .split(" Season")[0] - .split("Season")[0] - .split(" New ")[0] - .split(" All Episodes")[0] - .split(" Coming")[0] - .split(" Two-Episode")[0] - .split(" Rated")[0] - .split(" Prepare for")[0] // deadpool - //did not find translation - .split(" Streaming ")[0] - //did not find translation - .replace(/ \d+ minutes remaining/g, ""); - } - } else if (isHotstar) title = card?.getAttribute("alt")?.replace(/(S\d+\sE\d+)/g, ""); - else if (isPrimeVideo) { - function fixTitle(title) { - return ( - title - ?.split(" - ")[0] - ?.split(" – ")[0] - ?.replace(/(S\d+)/g, "") - ?.replace(/ \[.*\]/g, "") - ?.replace(/\s\(.*\)/g, "") - ?.replace(/:?\sStaffel-?\s\d+/g, "") - ?.replace(/:?\sSeason-?\s\d+/g, "") - ?.replace(/ \/ \d/g, "") - ?.split(": Die komplette")[0] - // nicht sicher - ?.split(": The complete")[0] - ); - } - // detail means not live shows - if (card.querySelector("a").href.includes("detail")) { - if (type == 0) title = fixTitle(card.getAttribute("data-card-title")); - else if (type == 1) title = fixTitle(card.querySelector("a")?.getAttribute("aria-label")); - } - if (url.includes("video/tv")) media_type = "tv"; - else if (url.includes("video/movie")) media_type = "movie"; - else media_type = getMediaType(card.getAttribute("data-card-entity-type")); - } else if (isHBO) title = card.querySelector("p[class*='md_strong-Beam-Web-Ent']")?.textContent; - // for the static Pixar Disney, Starplus etc. cards - if (!isDisney || !card?.classList.contains("_1p76x1y4")) { - // sometimes more than one image is loaded for the same title - if (title && lastTitle != title && !title.includes("Netflix") && !title.includes("Prime Video")) { - lastTitle = title; - console.log("Title:", title, media_type); - if ( - (DBCache[title]?.score || getDiffInDays(DBCache[title]?.date, date) <= 7) && - (!media_type || DBCache[title]?.media_type == media_type) - ) { - useDBCache(title, card, media_type); - } else { - getMovieInfo(title, card, media_type); - updateDBCache = true; - } - } - } - } - } - if (updateDBCache) { - setTimeout(function () { - setDBCache(); - }, 5000); - } - } - function getColorForRating(rating, lowVoteCount) { - // I want a color gradient from red to green with yellow in the middle - // the ratings are between 0 and 10 - // the average rating is 6.5 - // https://distributionofthings.com/imdb-movie-ratings/ - if (!rating || lowVoteCount) return "grey"; - if (rating <= 5.5) return "red"; - if (rating <= 7) return "rgb(245, 197, 24)"; //#f5c518 - return "rgb(0, 166, 0)"; - } - function getTMDBUrl(id, media_type) { - return `https://www.themoviedb.org/${media_type}/${id}`; - } - - async function setRatingOnCard(card, data, title) { - let div = document.createElement(data?.id ? "a" : "div"); - if (data?.id) { - div.href = getTMDBUrl(data.id, data.media_type); - div.target = "_blank"; - } - const vote_count = data?.vote_count || 100; - // right: 1.5vw; - div.id = "rating"; - div.style = - "position: absolute;bottom: 0;color: black;text-decoration: none;background:" + - getColorForRating(data?.score, vote_count < 50) + - ";border-radius: 5px;padding: 0 2px 0 2px;" + - (isNetflix ? "right:0.2vw;" : "right:0;") + - (isDisney ? "" : "z-index: 9999;") + - (isMobile ? "font-size: 4vw;" : "font-size: 1vw;"); - - // div.id = "imdb"; - if (data?.score >= 0) { - let releaseDate = ""; - if (settings.Video?.showYear && data?.release_date) { - releaseDate = new Date(data?.release_date)?.getFullYear() + "-"; - // const year = new Date(data?.release_date)?.getYear(); - // releaseDate = year >= 100 ? (year + " ").substring(1) : year + " "; - } - div.textContent = releaseDate + data.score?.toFixed(1); - div.setAttribute("alt", data?.title + ", OG title: " + title + ", Vote count: " + vote_count); - } else { - div.textContent = "?"; - div.setAttribute("alt", title); - log("no score found:", title, data); - } - if (isNetflix) { - card.closest(".title-card-container")?.appendChild(div); - } else if (isHBO) card.appendChild(div); - else if (isDisney) { - const parentDiv = card?.closest("div"); - if (parentDiv) { - if (card.nextElementSibling) { - div.style.top = card.offsetHeight + "px"; - div.style.bottom = ""; - } - parentDiv.style.position = "relative"; - parentDiv.appendChild(div); - } - } else if (isHotstar) card.parentElement.appendChild(div); - else if (isPrimeVideo) { - if (card.getAttribute("data-card-title")) card.firstChild.firstChild.appendChild(div); - else if (card.querySelector('div[data-testid="title-metadata-main"]')) { - card.querySelector('div[data-testid="title-metadata-main"]').appendChild(div); - } else card.appendChild(div); - } - } - function OnFullScreenChange() { - let video; - if (isNetflix || isDisney || isHotstar || isHBO) video = document.querySelector("video"); - else video = document.querySelector(AmazonVideoClass); - if (window.fullScreen && video) { - video.play(); - log("auto-played on fullscreen"); - increaseBadge(); - } - } - async function startPlayOnFullScreen() { - if (settings.Video?.playOnFullScreen) { - addEventListener("fullscreenchange", OnFullScreenChange); - } else { - removeEventListener("fullscreenchange", OnFullScreenChange); - } - } - // #endregion - // #region Disney - // Disney Observers - const DisneyObserver = new MutationObserver(Disney); - function Disney() { - // first ad not first video - let video = Array.from(document.querySelectorAll("video")).find((v) => v.checkVisibility()); - const time = video?.currentTime; - if (settings.Disney?.skipIntro) Disney_Intro(video, time); - Disney_skipCredits(time); - if (settings.Disney?.watchCredits) Disney_Watch_Credits(); - if (settings.Disney?.speedSlider) Disney_SpeedSlider(video); - if (isDisney) { - Disney_addHomeButton(); - if (settings.Disney?.selfAd) Disney_selfAd(video, time); - } - if (settings.Video?.scrollVolume) Disney_scrollVolume(video); - } - async function Disney_skipAd(video) { - if (video) { - const adTimeText = document.querySelector("div.overlay_interstitials__content_time_display"); - if (adTimeText) { - const adTime = parseAdTime(adTimeText.textContent); - if (adTime >= 1 && lastAdTimeText != video.currentTime) { - if (lastAdTimeText == 0) { - log("Disney Ad skipped, length:", adTime, "s"); - settings.Statistics.DisneyAdTimeSkipped += adTime; - increaseBadge(); - } - lastAdTimeText = video.currentTime; - video.currentTime += adTime; - } - } else lastAdTimeText = 0; - // remove das video wird nach der pause fortgesetzt text after skipping ad - const continueText = document.querySelector("p.toast-notification__text[aria-hidden='true']"); - if (continueText?.checkVisibility()) { - continueText.remove(); - increaseBadge(); - } - } - } - async function Disney_scrollVolume(video) { - const volumeControl = document.querySelector("div.audio-control:not(.enhanced)"); - if (volumeControl) { - volumeControl.classList.add("enhanced"); - volumeControl?.addEventListener("wheel", (event) => { - let volume = video.volume; - if (event.deltaY < 0) volume = Math.min(1, volume + 0.1); - else volume = Math.max(0, volume - 0.1); - video.volume = volume; - const sliderContainer = volumeControl.querySelector(".slider-container"); - sliderContainer.firstChild.children[1].style.strokeDashoffset = 100 - volume * 100 + "px"; - sliderContainer.children[1].style.height = volume * 100 + "%"; - sliderContainer.children[2].style.height = volume * 100 + "%"; - }); - } - } - - async function Disney_Intro(video, time) { - // intro star wars andor Season 1 episode 2 - // Recap Criminal Minds Season 1 Episode 2 - let button; - if (isDisney) { - const skipCreditsButton = isStarPlus - ? document.querySelector('[data-gv2elementkey="playNext"]') - : document.querySelector('[data-testid="playback-action-button"]'); - if (!skipCreditsButton) button = document.querySelector(".skip__button"); - } else button = document.evaluate("//span[contains(., 'Skip Intro')]", document, null, XPathResult.ANY_TYPE, null)?.iterateNext()?.parentElement; - if (button) { - button.click(); - log("Intro/Recap skipped", button); - setTimeout(function () { - addSkippedTime(time, video?.currentTime, "Intro/RecapTimeSkipped"); - }, 600); - } - // // if intro/recap time starts at 0 there is no skip button so always rewind to 0 - // if (isDisney && video?.play && SetTimeToZeroOnce != video.src) { - // if (video.currentTime > 0.2 && video.currentTime < 5) { - // log("reset time to", video.currentTime); - // video.currentTime = 0; - // SetTimeToZeroOnce = video.src; - // } - // } - } - async function Disney_skipCredits(currentTime) { - let button; - if (isStarPlus) button = document.querySelector('[data-gv2elementkey="playNext"]'); - else if (isDisney && !document.querySelector('[data-testid="playback-action-button"]')) - button = document.querySelector('[data-testid="icon-restart"]')?.parentElement; - else button = document.evaluate("//span[contains(., 'Next Episode')]", document, null, XPathResult.ANY_TYPE, null)?.iterateNext()?.parentElement; - if (button) { - // time is to avoid clicking too fast - const time = parseInt(currentTime); - if (time && lastAdTimeText != time) { - const videoFullscreen = document.fullscreenElement !== null; - lastAdTimeText = time; - if (settings.Disney?.skipCredits) { - button.click(); - log("Credits skipped", button); - increaseBadge(); - resetLastATimeText(); - } - if (!isHotstar) { - // keep video fullscreen - setTimeout(function () { - if (videoFullscreen && document.fullscreenElement == null) { - browser.runtime.sendMessage({ type: "fullscreen" }); - function resetFullscreen() { - browser.runtime.sendMessage({ type: "exitFullscreen" }); - log("exitFullscreen"); - removeEventListener("fullscreenchange", resetFullscreen); - } - addEventListener("fullscreenchange", resetFullscreen); - document.onkeydown = function (evt) { - if ("key" in evt && (evt.key === "Escape" || evt.key === "Esc")) { - browser.runtime.sendMessage({ type: "exitFullscreen" }); - } - }; - log("fullscreen"); - } - }, 1000); - } - } - } - } - async function Disney_addHomeButton() { - // add home button to the end of the credits - const buttonDiv = document.querySelector('[data-testid="browser-action-button"]')?.parentElement; - if (buttonDiv && !document.querySelector("#homeButton")) { - const homeButton = document.createElement("button"); - homeButton.textContent = browser.i18n.getMessage("HomeButton"); - homeButton.id = "homeButton"; - homeButton.style = - 'color: white;background-color: #40424A;border: rgb(64, 66, 74);border-radius: 5px;padding: 0 2px 0 2px;height: 56px;padding-left: 24px;padding-right: 24px;letter-spacing: 1.76px;font-size: 15px; text-transform: uppercase;cursor: pointer;font-family:"Avenir-World-for-Disney-Demi", sans-serif;'; - // add hover effect - homeButton.onmouseover = function () { - homeButton.style.backgroundColor = "#474a53"; - }; - homeButton.onmouseout = function () { - homeButton.style.backgroundColor = "#40424A"; - }; - homeButton.onclick = function () { - window.location.href = "/"; - }; - buttonDiv.appendChild(homeButton); - } - } - async function Disney_Watch_Credits() { - let button; - if (isStarPlus) button = document.querySelector('[data-gv2elementkey="playNext"]'); - else if (isDisney && !document.querySelector('[data-testid="playback-action-button"]')) - button = document.querySelector('[data-testid="icon-restart"]')?.parentElement; - else button = document.evaluate("//span[contains(., 'Next Episode')]", document, null, XPathResult.ANY_TYPE, null)?.iterateNext()?.parentElement; - if (button) { - // only skip if the next video is the next episode of a series (there is a timer) - let time; - if (isDisney) time = /\d+/.exec(button.textContent)?.[0]; - if ( - (isHotstar && !document.evaluate("//span[contains(., 'My Space')]", document, null, XPathResult.ANY_TYPE, null)?.iterateNext()) || - (time && lastAdTimeText != time) - ) { - let video = document.querySelector("video"); - if (video) { - video.click(); - lastAdTimeText = time; - log("Credits Watched", button); - increaseBadge(); - resetLastATimeText(); - } - } - } - } - function createSlider(video, position, sliderStyle, speedStyle, divStyle = "") { - videoSpeed = videoSpeed || video.playbackRate; - - let slider = document.createElement("input"); - slider.id = "videoSpeedSlider"; - slider.type = "range"; - slider.min = settings.General.sliderMin; - slider.max = settings.General.sliderMax; - slider.value = videoSpeed * 10; - slider.step = settings.General.sliderSteps; - slider.style = sliderStyle; - - let speed = document.createElement("p"); - speed.id = "videoSpeed"; - speed.textContent = videoSpeed ? videoSpeed.toFixed(1) + "x" : "1.0x"; - speed.style = speedStyle; - if (divStyle) { - let div = document.createElement("div"); - div.style = divStyle; - div.appendChild(slider); - div.appendChild(speed); - position.prepend(div); - } else position.prepend(slider, speed); - - if (videoSpeed) video.playbackRate = videoSpeed; - speed.onclick = function () { - slider.style.display = slider.style.display === "block" ? "none" : "block"; - }; - slider.oninput = function () { - speed.textContent = (this.value / 10).toFixed(1) + "x"; - video.playbackRate = this.value / 10; - setVideoSpeed(this.value / 10); - }; - - return { slider, speed }; - } - - const DisneySliderStyle = "pointer-events: auto;background: rgb(221, 221, 221);display: none;width:200px;"; - const DisneySpeedStyle = "height:10px;min-width:40px;color:#f9f9f9;pointer-events: auto;position: relative;bottom: 8px;padding: 0 5px;"; - async function Disney_SpeedSlider(video) { - if (video) { - let alreadySlider = document.querySelector("#videoSpeedSlider"); - if (!alreadySlider) { - // infobar position for the slider to be added - let position; - if (isDisney) position = document.querySelector(".controls__right"); - else position = document.querySelector(".icon-player-landscape")?.parentElement?.parentElement?.parentElement?.parentElement; - if (position) createSlider(video, position, DisneySliderStyle, DisneySpeedStyle); - } else { - // need to resync the slider with the video sometimes - let speed = document.querySelector("#videoSpeed"); - if (video.playbackRate != alreadySlider.value / 10) { - video.playbackRate = alreadySlider.value / 10; - } - alreadySlider.oninput = function () { - speed.textContent = (this.value / 10).toFixed(1) + "x"; - video.playbackRate = this.value / 10; - setVideoSpeed(this.value / 10); - }; - } - } - } - - async function Disney_selfAd(video, time) { - if (isDisney) { - let button = document.querySelector(".overlay_interstitials__promo_skip_button"); - if (button) { - button.click(); - log("SelfAd skipped", button); - setTimeout(function () { - addSkippedTime(time, video?.currentTime, "selfAdkipped"); - }, 600); - } - } - } - - async function Hotstar_doubleClick() { - if (settings.Video?.doubleClick) { - // event listener for double click - document.ondblclick = function () { - document.querySelector(".icon-player-landscape")?.closest("button")?.click(); - document.querySelector(".icon-player-portrait")?.closest("button")?.click(); - }; - } else { - document.ondblclick = null; - } - } - // #endregion - // #region Netflix - // Netflix Observer - const NetflixObserver = new MutationObserver(Netflix); - function Netflix() { - const video = document.querySelector("video"); - const time = video?.currentTime; - const NSettings = settings.Netflix; - if (NSettings?.profile) Netflix_profile(); - if (NSettings?.skipIntro) { - if (Netflix_General('[data-uia="player-skip-intro"]', "Intro skipped", false)) { - setTimeout(function () { - addSkippedTime(time, video?.currentTime, "IntroTimeSkipped"); - }, 600); - } - } - if (NSettings?.skipRecap) { - if ( - Netflix_General('[data-uia="player-skip-recap"]', "Recap skipped", false) || - Netflix_General('[data-uia="player-skip-preplay"]', "Recap skipped", false) - ) { - setTimeout(function () { - addSkippedTime(time, video?.currentTime, "RecapTimeSkipped"); - }, 600); - } - } - if (NSettings?.skipCredits) Netflix_General('[data-uia="next-episode-seamless-button"]', "Credits skipped"); - if (NSettings?.watchCredits) Netflix_General('[data-uia="watch-credits-seamless-button"]', "Credits watched"); - if (NSettings?.skipBlocked) Netflix_General('[data-uia="interrupt-autoplay-continue"]', "Blocked skipped"); - if (NSettings?.speedSlider) Netflix_SpeedSlider(video); - if (settings.Video?.scrollVolume) Netflix_scrollVolume(video); - } - async function Netflix_scrollVolume(video) { - const volumeControl = document.querySelector('[data-uia*="control-volume"]:not(.enhanced)'); - if (volumeControl) { - volumeControl.classList.add("enhanced"); - const handleVolumeControl = (event) => { - let volume = video.volume; - if (event.deltaY < 0) volume = Math.min(1, volume + 0.05); - else volume = Math.max(0, volume - 0.05); - video.volume = volume; - }; - removeEventListener("wheel", handleVolumeControl); - volumeControl?.addEventListener("wheel", handleVolumeControl); - } - } - // to parse html umlaut symbols like ä to ä - function decodeHtmlEntities(str) { - return new DOMParser().parseFromString("" + str, "text/html").body.textContent; - } - function Netflix_profile() { - // AutoPickProfile(); - let currentProfile = document.querySelector("[href*='/YourAccount']"); - if (currentProfile) { - // there is a space before the - thats why slice -1 - const currentProfileName = decodeHtmlEntities(currentProfile?.getAttribute("aria-label")?.split("–")?.[0].split("-")?.[0].slice(0, -1)); - if (currentProfileName && currentProfileName !== settings.General.profileName) { - // small profile picture - settings.General.profilePicture = currentProfile?.firstChild?.firstChild?.src; - settings.General.profileName = currentProfileName; - setStorage(); - log("Profile switched to", currentProfileName); - } - } - } - function AutoPickProfile() { - if (!window.location.pathname.includes("Profile") && !window.location.pathname.includes("profile")) { - let profileButtons = document.querySelectorAll(".profile-name"); - profileButtons.forEach((button) => { - if (button.textContent === settings.General.profileName) { - // big profile picture - // slice(4, -1) to remove the url(" ") from the string - settings.General.profilePicture = button?.parentElement?.firstChild?.firstChild?.style?.backgroundImage?.slice(5, -2); - button?.parentElement.click(); - log("Profile automatically chosen:", settings.General.profileName); - increaseBadge(); - } - }); - } - } - function Netflix_General(selector, name, incBadge = true) { - const button = document.querySelector(selector); - if (button) { - log(name, button); - button.click(); - if (incBadge) increaseBadge(); - return true; - } - return false; - } - function Netflix_SkipAdInterval() { - let AdInterval = setInterval(() => { - if (!settings.Netflix?.skipAd) { - log("stopped observing| Ad"); - clearInterval(AdInterval); - return; - } - const video = document.querySelector("video"); - // .default-ltr-cache-mmvz9h or ltr-mmvz9h - const adLength = Number(document.querySelector('span[class*="mmvz9h"]')?.textContent); - // 16 max but too fast - if (video) { - let playBackRate = 8; - if (isEdge) playBackRate = 3; - if ((adLength || lastAdTimeText) && video.paused) { - video.play(); - } - if (adLength > 8 && video.playbackRate != playBackRate) { - log("Ad skipped, length:", adLength, "s"); - settings.Statistics.NetflixAdTimeSkipped += adLength; - increaseBadge(); - if (settings.Video.epilepsy) video.style.opacity = 0; - video.muted = true; - video.playbackRate = playBackRate; - lastAdTimeText = adLength; - } else if (adLength > 2 && video.playbackRate < 2) { - video.playbackRate = adLength / 2; - lastAdTimeText = adLength; - } // added lastAdTimeText because other speedsliders are not working anymore - else if (adLength <= 2 || (!adLength && lastAdTimeText)) { - // videospeed is speedSlider value - video.muted = false; - video.playbackRate = videoSpeed; - lastAdTimeText = 0; - if (settings.Video.epilepsy) video.style.opacity = 1; - } - } - // pause video shows ad - // sherlock show comes alot. - const div = document.querySelector('div[data-uia="pause-ad-title-display"]'); - const button = document.querySelector('button[data-uia="pause-ad-expand-button"]'); - if ( - button && - div.checkVisibility({ opacityProperty: true }) && - (!video || (video.paused && lastAdTimeText != parseInt(video.currentTime / 10))) - ) { - lastAdTimeText = parseInt(video.currentTime / 10); - resetLastATimeText(); - button.click(); - log("Remove Video Paused ad", button); - increaseBadge(); - setTimeout(() => { - // not always a video is showing on next episode apparently - (video || document.querySelector("video")).pause(); - }, 100); - } - }, 100); - } - const NetflixSliderStyle = "display: none;width:200px;"; - const NetflixSpeedStyle = "font-size: 3em;padding: 0 5px;margin: unset;align-content: center;"; - function Netflix_SpeedSlider(video) { - // only add speed slider on lowest subscription tier - // && !document.querySelector('[data-uia="control-speed"]') - if (video) { - let alreadySlider = document.querySelector("#videoSpeedSlider"); - if (!alreadySlider) { - let p = document.querySelector('[data-uia="controls-standard"]')?.firstChild?.children; - if (p) { - // infobar position for the slider to be added - let position = p[p.length - 2]?.firstChild?.lastChild; - if (position) createSlider(video, position, NetflixSliderStyle, NetflixSpeedStyle); - } - } - } - } - // #endregion - // #region Amazon - // Amazon Observers - const AmazonVideoClass = ".dv-player-fullscreen video"; - const AmazonObserver = new MutationObserver(Amazon); - - function Amazon() { - if (settings.Amazon?.filterPaid) Amazon_FilterPaid(); - const video = document.querySelector(AmazonVideoClass); - if (settings.Amazon?.skipCredits) Amazon_Credits(); - if (settings.Amazon?.watchCredits) Amazon_Watch_Credits(); - if (settings.Amazon?.speedSlider) Amazon_SpeedSlider(video); - if (settings.Amazon?.xray) Amazon_xray(); - if (settings.Video?.scrollVolume) Amazon_scrollVolume(); - } - const AmazonSkipIntroConfig = { attributes: true, attributeFilter: [".skipelement"], subtree: true, childList: true, attributeOldValue: false }; - // const AmazonSkipIntro = new RegExp("skipelement", "i"); - const AmazonSkipIntroObserver = new MutationObserver(Amazon_Intro); - - async function Amazon_scrollVolume() { - const volumeControl = document.querySelector('[aria-label="Volume"]:not(.enhanced)'); - if (volumeControl) { - volumeControl.classList.add("enhanced"); - volumeControl?.addEventListener("wheel", (event) => { - const video = document.querySelector(AmazonVideoClass); - let volume = video.volume; - if (event.deltaY < 0) volume = Math.min(1, volume + 0.1); - else volume = Math.max(0, volume - 0.1); - video.volume = volume; - }); - } - } - let lastIntroTime = -1; - function resetLastIntroTime() { - setTimeout(() => { - lastIntroTime = -1; - }, 5000); - } - function Amazon_Intro() { - if (settings.Amazon?.skipIntro) { - // skips intro and recap - // recap on lucifer season 3 episode 3 - // intro lucifer season 3 episode 4 - let button = document.querySelector("[class*=skipelement]"); - if (button) { - let video = document.querySelector(AmazonVideoClass); - const time = video?.currentTime; - if (typeof time === "number" && lastIntroTime != parseInt(time)) { - lastIntroTime = parseInt(time); - resetLastIntroTime(); - button.click(); - log("Intro skipped", button); - //delay where the video is loaded - setTimeout(function () { - AmazonGobackbutton(video, time, video.currentTime); - addSkippedTime(time, video.currentTime, "IntroTimeSkipped"); - }, 50); - } - } - } - } - let reverseButton = false; - async function AmazonGobackbutton(video, startTime, endTime) { - if (!reverseButton) { - reverseButton = true; - // go back button - const button = document.createElement("button"); - button.style = "padding: 0px 22px; line-height: normal; min-width: 0px;z-index:999;pointer-events:all;"; - button.setAttribute("class", "fqye4e3 f1ly7q5u fk9c3ap fz9ydgy f1xrlb00 f1hy0e6n fgbpje3 f1uteees f1h2a8xb f1cg7427 fiqc9rt fg426ew f1ekwadg"); - button.setAttribute("data-uia", "reverse-button"); - button.textContent = browser.i18n.getMessage("WatchSkippedButton"); - document.querySelector(".atvwebplayersdk-action-buttons").appendChild(button); - let buttonInHTML = document.querySelector('[data-uia="reverse-button"]'); - function goBack() { - video.currentTime = startTime; - buttonInHTML.remove(); - log("stopped observing| Intro"); - AmazonSkipIntroObserver.disconnect(); - const waitTime = endTime - startTime + 2; - //log("waiting for:", waitTime); - setTimeout(function () { - log("restarted observing| Intro"); - AmazonSkipIntroObserver.observe(document, AmazonSkipIntroConfig); - }, waitTime * 1000); - } - buttonInHTML.addEventListener("click", goBack); - setTimeout(() => { - buttonInHTML.remove(); - reverseButton = false; - }, 5000); - } - } - async function Amazon_Credits() { - const button = document.querySelector("[class*=nextupcard-button]"); - if (button) { - // only skipping to next episode not an entirely new series - const newEpNumber = document.querySelector("[class*=nextupcard-episode]"); - if (newEpNumber && !/(? { - deletePaidCategory(a); - }); - } - } - async function deletePaidCategory(a) { - // if the section is mostly paid content delete it - // -2 because sometimes there are title banners - if ( - a.children.length - a.querySelectorAll('[data-hidden="true"]').length - 2 <= - a.querySelectorAll("[data-testid='card-overlay'] svg.NbhXwl").length - ) { - const section = a.closest('[class="+OSZzQ"]'); - log("Filtered paid category", section); - section?.remove(); - increaseBadge(); - } - // remove individual paid elements - else { - a.querySelectorAll("li:has(svg.NbhXwl)").forEach((b) => { - log("Filtered paid Element", b); - b.remove(); - increaseBadge(); - }); - } - } - function Amazon_FreeveeTimeout() { - // set loop every 1 sec and check if ad is there - let AdInterval = setInterval(function () { - if (!settings.Amazon.blockFreevee) { - log("stopped observing| FreeVee Ad"); - clearInterval(AdInterval); - return; - } - let video = document.querySelector(AmazonVideoClass); - if (video && !video.paused && video.currentTime > 0) { - // && !video.paused - skipAd(video); - } - }, 100); - } - function parseAdTime(adTimeText) { - const adTime = parseInt(/:\d+/.exec(adTimeText)?.[0].substring(1)) + parseInt(/\d+/.exec(adTimeText)?.[0]) * 60; - if (isNaN(adTime)) return false; - return adTime; - } - async function skipAd(video) { - // Series grimm - // there area multiple adtime texts, the dv-player-fullscreen is the correct one - const adTimeText = document.querySelector(".dv-player-fullscreen .atvwebplayersdk-ad-timer-text"); - if (adTimeText?.checkVisibility()) { - let adTime; - adTime = parseAdTime(adTimeText?.childNodes?.[0]?.textContent); - if (!adTime) adTime = parseAdTime(adTimeText?.childNodes?.[1]?.textContent); - // !document.querySelector(".fu4rd6c.f1cw2swo") so it doesn't try to skip when the self ad is playing - if (!document.querySelector(".fu4rd6c.f1cw2swo") && adTime > 1 && !lastAdTimeText) { - lastAdTimeText = adTime; - // biggest skiptime before crashing on amazon.com, can be little higher than 90 but 90 to be safe - const bigTime = 90; - resetLastATimeText(adTime > bigTime ? 3000 : 1000); - const skipTime = adTime > bigTime ? bigTime : adTime - 1; - video.currentTime += skipTime; - log("FreeVee Ad skipped, length:", skipTime, "s"); - settings.Statistics.AmazonAdTimeSkipped += skipTime; - increaseBadge(); - } - } - } - async function resetLastATimeText(time = 1000) { - // timeout of 1 second to make sure the button is not pressed too fast, it will crash or slow the website otherwise - setTimeout(() => { - lastAdTimeText = 0; - }, time); - } - async function Amazon_AdTimeout() { - // set loop every 1 sec and check if ad is there - let AdInterval = setInterval(function () { - if (!settings.Amazon.skipAd) { - log("stopped observing| Self Ad"); - clearInterval(AdInterval); - return; - } - let video = document.querySelector(AmazonVideoClass); - if (video) { - video.onplay = function () { - // if video is playing - if (getComputedStyle(document.querySelector("#dv-web-player")).display != "none") { - let button = document.querySelector(".fu4rd6c.f1cw2swo"); - if (button) { - // only getting the time after :08 - let adTime = parseInt(/:\d+/.exec(document.querySelector(".atvwebplayersdk-adtimeindicator-text").innerHTML)?.[0].substring(1)); - // wait for 100ms before skipping to make sure the button is not pressed too fast, or there will be infinite loading - setTimeout(() => { - button.click(); - if (typeof adTime === "number") settings.Statistics.AmazonAdTimeSkipped += adTime; - increaseBadge(); - log("Self Ad skipped, length:", adTime, button); - }, 150); - } - } - }; - } - }, 100); - } - - async function Amazon_customizeMobileView() { - log("customizeMobileView"); - // customize mobile view for desktop website - // /gp/video/detail/ is the film description page otherwise looks weird - if (!url.includes("/gp/video/detail/")) { - // add to head - let meta = document.createElement("meta"); - meta.name = "viewport"; - meta.content = "width=device-width, initial-scale=1"; - document.head.appendChild(meta); - - // make amazon more mobile friendly - let navBelt = document.querySelector("#nav-belt"); - if (navBelt) { - navBelt.style.width = "100vw"; - navBelt.style.display = "flex"; - navBelt.style.flexDirection = "column"; - navBelt.style.height = "fit-content"; - } - let navMain = document.querySelector("#nav-main"); - if (navMain) navMain.style.display = "none"; - } - } - async function Amazon_xray() { - document.querySelector(".xrayQuickViewList")?.remove(); - // remove bad background hue which is annoying - let b = document.querySelector(".fkpovp9.f8hspre:not(.enhanced)"); - if (b) { - b.classList.add("enhanced"); - b.style.backgroundColor = "transparent"; - b.style.background = "transparent"; - } - } - - async function Amazon_doubleClick() { - if (settings.Video?.doubleClick) { - // event listener for double click - document.ondblclick = function () { - document.querySelector(".dv-player-fullscreen button[class*=fullscreen-button]")?.click(); - }; - } else { - document.ondblclick = null; - } - } - // #endregion - // #region Crunchyroll - // Crunchyroll functions - function filterQueued(display) { - document.querySelectorAll("div.queue-flag:not(.queued)").forEach((element) => { - // if not on premiere - element.parentElement.parentElement.parentElement.style.display = element.parentElement.parentElement - .querySelector(".premiere-flag") - ?.checkVisibility() - ? "block" - : display; - }); - if (display == "block" && settings.General.filterDub) filterDub("none"); - } - function filterDub(display) { - let list = document.querySelectorAll("cite[itemprop='name']"); - list.forEach((element) => { - if (element.textContent.includes("Dub") || element.textContent.includes("Audio")) - element.parentElement.parentElement.parentElement.parentElement.parentElement.style.display = display; - }); - if (display == "block" && settings.General.filterQueued) filterQueued("none"); - } - function createFilterElement(filterType, filterText, settingsValue, filterFunction) { - const label = document.createElement("label"); - const span = document.createElement("span"); - span.style = "display: flex;align-items: center;"; - const input = document.createElement("input"); - input.type = "checkbox"; - input.checked = settingsValue; - input.id = filterType; - input.onclick = function () { - settings.General[filterType] = this.checked; - filterFunction(this.checked ? "none" : "block"); - setStorage(); - }; - const p = document.createElement("p"); - p.style = "width: 100px;"; - p.textContent = filterText; - label.appendChild(span); - span.appendChild(input); - span.appendChild(p); - return label; - } - function addButtons() { - const toggleForm = document.querySelector("#filter_toggle_form"); - toggleForm.style.display = "flex"; - toggleForm.firstElementChild.appendChild(createFilterElement("filterQueued", "Show Playlist only", settings.General.filterQueued, filterQueued)); - toggleForm.firstElementChild.appendChild(createFilterElement("filterDub", "Filter Dub", settings.General.filterDub, filterDub)); - } - // start of add CrunchyList to Crunchyroll - function addShowsToList(position, list) { - list.forEach((element) => { - const article = document.createElement("article"); - article.className = "release js-release"; - - let time = document.createElement("time"); - time.className = "available-time"; - time.textContent = new Date(element.time).toLocaleString([], { hour: "2-digit", minute: "2-digit" }); - - let div1 = document.createElement("div"); - let div2 = document.createElement("div"); - div2.className = "queue-flag queued enhanced"; - - let svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); - svg.setAttribute("viewBox", "0 0 48 48"); - - let use = document.createElementNS("http://www.w3.org/2000/svg", "use"); - use.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:href", "/i/svg/simulcastcalendar/calendar_icons.svg#cr_bookmark"); - - svg.appendChild(use); - div2.appendChild(svg); - - let h1 = document.createElement("h1"); - h1.className = "season-name"; - - let a = document.createElement("a"); - a.className = "js-season-name-link"; - a.href = element.href; - a.setAttribute("itemprop", "url"); - - let cite = document.createElement("cite"); - cite.setAttribute("itemprop", "name"); - cite.textContent = element.name; - - a.appendChild(cite); - h1.appendChild(a); - - div1.appendChild(div2); - div1.appendChild(h1); - - article.appendChild(time); - article.appendChild(div1); - position.appendChild(article); - }); - } - function clickOnCurrentDay() { - let days = document.querySelectorAll(".specific-date [datetime]"); - for (const day of days) { - const dateOnPage = new Date(day.getAttribute("datetime")); - // if the day of the week is the same as today click on it, like if its Monday click on Monday - if (date.getDay() == dateOnPage.getDay()) { - // need timeout because the page is not fully loaded - setTimeout(() => { - day.click(); - }, 100); - // isCurrentWeek - return date.toLocaleDateString() == dateOnPage.toLocaleDateString(); - } - } - return false; - } - function createLocalList() { - let localList = []; - document.querySelectorAll("div.queue-flag.queued:not(.enhanced)").forEach((element) => { - const h1 = element.nextElementSibling?.firstChild?.nextSibling; - const name = h1.firstChild.nextSibling.textContent; - if (!name.includes("Dub")) { - const href = h1?.href; - const time = element.parentElement?.parentElement?.firstElementChild?.getAttribute("datetime"); - localList.push({ href, name, time }); - } - }); - return localList; - } - function filterOldList(isCurrentWeek, localList) { - let oldList = settings.General.savedCrunchyList || []; - const lastElement = localList[localList.length - 1]; - const lastTime = new Date(lastElement.time); - const [lastDay, lastHr, lastMin] = [lastTime.getDay(), lastTime.getHours(), lastTime.getMinutes()]; - // delete all previous weekdays from oldList - if (!isCurrentWeek) { - oldList = []; - } else { - oldList = oldList - .filter((item) => { - return shiftSunday(date.getDay()) - shiftSunday(new Date(item.time).getDay()) <= 0; - }) - // delete all items from same weekday before lastElement time - .filter((item) => { - const itemTime = new Date(item.time); - const itemHr = itemTime.getHours(); - // no shows today yet - const itemDay = itemTime.getDay(); - return lastDay != itemDay || itemDay != date.getDay() || itemHr > lastHr || (itemHr == lastHr && itemTime.getMinutes() > lastMin); - }); - } - return oldList; - } - const shiftSunday = (a) => (a + 6) % 7; - function addSavedCrunchyList() { - let localList = createLocalList(); - const isCurrentWeek = clickOnCurrentDay(); - const oldList = localList.length > 0 ? filterOldList(isCurrentWeek, localList) : settings.General.savedCrunchyList || []; - settings.General.savedCrunchyList = localList.concat(oldList); - setStorage(); - if (isCurrentWeek && !document.querySelector("div.queue-flag.queued.enhanced")) { - // now add the old list to the website list - document.querySelectorAll("section.calendar-day").forEach((element) => { - const weekday = new Date(element.querySelector("time")?.getAttribute("datetime")).getDay(); - // remove Schedule Coming Soon text - if (shiftSunday(date.getDay()) - shiftSunday(weekday) < 0) element?.children?.[1]?.firstChild?.nextSibling?.remove(); - addShowsToList( - element.children[1], - oldList.filter((item) => new Date(item.time).getDay() == weekday) - ); - }); - } - } - async function Crunchyroll_ReleaseCalendar() { - if (url.includes("simulcastcalendar")) { - // Show playlist only - filterQueued(settings.General.filterQueued ? "none" : "block"); - filterDub(settings.General.filterDub ? "none" : "block"); - if (!document.querySelector("#filterQueued")) addButtons(); - // add saved CrunchyList and click on current day - addSavedCrunchyList(); - } - } - const CrunchyrollObserver = new MutationObserver(Crunchyroll); - async function Crunchyroll() { - if (settings.Crunchyroll?.profile) Crunchyroll_profile(); - } - async function Crunchyroll_profile() { - // save profile - let img = document.querySelector(".erc-authenticated-user-menu img"); - if (img && img.src !== settings.General.Crunchyroll_profilePicture) { - settings.General.Crunchyroll_profilePicture = img.src; - setStorage(); - log("Profile switched to", img.src); - } - } - async function Crunchyroll_AutoPickProfile() { - // click on profile picture - if (document.querySelector(".profile-item-name")) { - document.querySelectorAll(".erc-profile-item img")?.forEach((img) => { - if (img.src === settings.General.Crunchyroll_profilePicture) { - img.click(); - log("Profile automatically chosen:", img.src); - increaseBadge(); - } - }); - } - } - async function Crunchyroll_bigPlayerStyle() { - if (document.querySelector(".video-player-wrapper")) { - // show header on hover - let style = document.createElement("style"); - style.innerHTML = ` - .video-player-wrapper{ - max-Height: calc(100vw / 1.7777); - height: 100vh; - } - .erc-large-header { - position: absolute; - top: 0; - width: 100%; - height: 3.75rem; - z-index: 999; - } - .erc-large-header .header-content { - position: absolute; - top: -3.75rem; - transition: top 0.4s, top 0.4s; - } - .erc-large-header:hover .header-content { - top: 0; - } - `; - document.head.appendChild(style); - } - } - // #endregion - // #region HBO - // HBO functions - const HBOObserver = new MutationObserver(HBO); - async function HBO() { - const video = document.querySelector("video"); - const time = video?.currentTime; - if (settings.HBO?.skipIntro) HBO_Intro(video, time); - if (settings.HBO?.skipCredits) HBO_Credits(time); - if (settings.HBO?.watchCredits) HBO_Watch_Credits(video); - if (settings.HBO?.speedSlider) HBO_SpeedSlider(video); - } - function HBO_Intro(video, time) { - let button = document.querySelector('[class*="SkipButton-Beam-Web-Ent"]'); - if (button?.checkVisibility({ visibilityProperty: true })) { - button.click(); - log("Intro skipped", button); - setTimeout(function () { - addSkippedTime(time, video?.currentTime, "IntroTimeSkipped"); - }, 600); - } - } - let lastSkip = 0; - function HBO_Credits(time) { - let button = document.querySelector('[class*="UpNextButton-Beam-Web-Ent"]'); - if (button && lastSkip < time - 1) { - lastSkip = parseInt(time); - button.click(); - increaseBadge(); - log("Credits skipped", button); - } - } - function HBO_Watch_Credits(video) { - let button = document.querySelector('[class*="DismissButton-Beam-Web-Ent"]'); - if (button) { - button.click(); - increaseBadge(); - log("Watched Credits", button); - } - // is movie - button = document.querySelector(".player-shrink-transition-enter-done"); - if (video && button) { - video.click(); - increaseBadge(); - log("Watched Credits", button); - } - } - const HBOSliderStyle = "height: 1em;background: rgb(221, 221, 221);display: none;width:200px;"; - const HBOSpeedStyle = "font-size: 1.5em;color:#b2b2b2;"; - const HBODivStyle = "height:48px;display: flex;align-items: center;"; - async function HBO_SpeedSlider(video) { - let alreadySlider = document.querySelector("#videoSpeedSlider"); - if (!alreadySlider) { - // infobar position for the slider to be added - let position = document.querySelector('[class*="ControlsFooterBottomRight-Beam-Web-Ent"]'); - if (position) createSlider(video, position, HBOSliderStyle, HBOSpeedStyle, HBODivStyle); - } - } - // #endregion - // Badge functions - // eslint-disable-next-line no-unused-vars - async function setBadgeText(text) { - try { - browser.runtime.sendMessage({ - type: "setBadgeText", - content: text, - }); - } catch (error) { - log(error); - } - } - async function increaseBadge() { - settings.Statistics.SegmentsSkipped++; - try { - browser.storage.sync.set({ settings }); - browser.runtime.sendMessage({ - type: "increaseBadge", - }); - } catch (error) { - log(error); - } - } - async function resetBadge() { - try { - browser.runtime.sendMessage({ - type: "resetBadge", - }); - } catch (error) { - log(error); - } - } - async function setStorage() { - try { - browser.storage.sync.set({ settings }); - } catch (error) { - log(error); - } - } -} diff --git a/hourstxtToJSON.js b/hourstxtToJSON.js deleted file mode 100644 index 11f6fe49..00000000 --- a/hourstxtToJSON.js +++ /dev/null @@ -1,15 +0,0 @@ -/* global require */ -/* global process */ -// requires https://github.com/lazypic/git-hours to be installed globally -const fs = require("fs"); -const path = require("path"); - -// open AuthorHours.txt and write time into JSON file - -const hours = fs.readFileSync("authorHours.json", "utf8"); -console.log(hours.split("\n")[0].split(": ")[1]); -const json = { time: hours.split("\n")[0].split(": ")[1] }; - -fs.writeFile("authorHours.json", JSON.stringify(json), "utf8", function (err) { - if (err) return console.log(err); -}); diff --git a/manifest.chrome.config.ts b/manifest.chrome.config.ts new file mode 100644 index 00000000..bef9547a --- /dev/null +++ b/manifest.chrome.config.ts @@ -0,0 +1,12 @@ +import { defineManifest } from "@crxjs/vite-plugin" +import ManifestConfig from "./manifest.config" +import packageJson from "./package.json" with { type: "json" } + +const { name, displayName } = packageJson +// @ts-expect-error ManifestConfig provides all required fields +export default defineManifest((env) => ({ + ...ManifestConfig, + key: env[ + "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnNxyk3xv8ExvmREOwq7387UYsKbCRQc+Lg0PXlAwERWEAn5zoXpIto4IJvsvFvVl0n9VfkRf37BNDQ+9mElupj1rTcqb7SEwqqZbTNUUoXVfsHdRCkmofmjct3o5O18BGK78ZtSXIICZDCNhiIhoTox1ZtsMQLx23j9EBCjRR4+PXofuK7Y4bDZQznKUvrnaddRlifLTYPHE+MN08SUpC6l0OUdGCcKJHDUAKsDIbmvL9KtuQntkZBDUqrMud/Yw3k7zgopd7vRSTvpICqaH0n9i1u3i6uaMRBI/czr35w/tQjhjXimJh9CgQh+F74Yn6JzLtMAB8qe1dp5NEL0xEQIDAQAB" + ], +})) diff --git a/manifest.config.ts b/manifest.config.ts new file mode 100644 index 00000000..cd1081cd --- /dev/null +++ b/manifest.config.ts @@ -0,0 +1,100 @@ +import { env } from "node:process" +import type { ManifestV3Export } from "@crxjs/vite-plugin" +import packageJson from "./package.json" with { type: "json" } + +const { version, name, description, displayName } = packageJson +// Convert from Semver (example: 0.1.0-beta6) +const [major, minor, patch] = version + // can only contain digits, dots, or dash + .replace(/[^\d.-]+/g, "") + // split into version parts + .split(/[.-]/) + +export default { + // author: { + // email: "mubaidr@gmail.com", + // }, + name: env.mode === "staging" ? `[INTERNAL] ${name}` : displayName || name, + description, + // up to four numbers separated by dots + version: `${major}.${minor}.${patch}`, + // semver is OK in "version_name" + // version_name: version, + manifest_version: 3, + background: { + service_worker: "src/background/index.ts", + type: "module", + }, + action: { + default_popup: "src/ui/action-popup/index.html", + }, + // web_accessible_resources: [ + // { + // matches: [ + // "*://*.primevideo.com/*", + // "*://*.amazon.com/*", + // "*://*.amazon.co.jp/*", + // "*://*.amazon.de/*", + // "*://*.amazon.co.uk/*", + // ], + // resources: ["src/ui/iframe-page/index.html"], + // use_dynamic_url: false, + // }, + // ], + content_scripts: [ + // { + // all_frames: false, + // js: ["src/content-script/iframe.ts"], + // matches: [ + // "*://*.primevideo.com/*", + // "*://*.amazon.com/*", + // "*://*.amazon.co.jp/*", + // "*://*.amazon.de/*", + // "*://*.amazon.co.uk/*", + // ], + // run_at: "document_end", + // }, + { + js: ["src/content-script/crunchyroll.ts"], + matches: ["*://*.crunchyroll.com/*"], + }, + { + js: ["src/content-script/amazon.ts"], + matches: [ + "*://*.primevideo.com/*", + "*://*.amazon.com/*", + "*://*.amazon.co.jp/*", + "*://*.amazon.de/*", + "*://*.amazon.co.uk/*", + ], + }, + { + js: ["src/content-script/netflix.ts"], + matches: ["*://*.netflix.com/*", "*://*.netflix.ca/*", "*://*.netflix.com.au/*"], + }, + { + js: ["src/content-script/disney.ts"], + matches: ["*://*.disneyplus.com/*", "*://*.hotstar.com/*", "*://*.starplus.com/*"], + }, + { + js: ["src/content-script/max.ts"], + matches: ["*://*.max.com/*", "*://*.hbomax.com/*"], + }, + { + all_frames: true, + js: ["src/content-script/static.crunchyroll.ts"], + matches: ["https://static.crunchyroll.com/vilos-v2/web/vilos/player.html*"], + }, + ], + options_page: "src/ui/options-page/index.html", + permissions: ["storage"], + optional_permissions: ["tabs"], + icons: { + 16: "src/assets/Logo/NetflixAmazon Auto-Skip--16.png", + 48: "src/assets/Logo/NetflixAmazon Auto-Skip--48.png", + 96: "src/assets/Logo/NetflixAmazon Auto-Skip--96.png", + 128: "src/assets/Logo/NetflixAmazon Auto-Skip--128.png", + 400: "src/assets/Logo/NetflixAmazon Auto-Skip--400.png", + }, + homepage_url: "https://github.com/Dreamlinerm/Netflix-Prime-Auto-Skip", +} as ManifestV3Export diff --git a/manifest.firefox.config.ts b/manifest.firefox.config.ts new file mode 100644 index 00000000..93fe693a --- /dev/null +++ b/manifest.firefox.config.ts @@ -0,0 +1,39 @@ +import { defineManifest } from "@crxjs/vite-plugin" +import ManifestConfig from "./manifest.config" + +// @ts-expect-error ManifestConfig provides all required fields +export default defineManifest((env) => ({ + ...ManifestConfig, + icons: { + 16: "src/assets/Logo/NetflixAmazon Auto-Skip.svg", + 48: "src/assets/Logo/NetflixAmazon Auto-Skip.svg", + 96: "src/assets/Logo/NetflixAmazon Auto-Skip.svg", + 128: "src/assets/Logo/NetflixAmazon Auto-Skip.svg", + 400: "src/assets/Logo/NetflixAmazon Auto-Skip.svg", + }, + browser_specific_settings: { + gecko: { + id: "NetflixPrime@Autoskip.io", + }, + }, + manifest_version: 3, + background: { + scripts: ["src/background/index.ts"], + type: "module", + persistent: false, + }, + permissions: [ + "storage", + "webRequest", + "webRequestBlocking", + "*://*.disneyplus.com/*", + "*://*.starplus.com/*", + "*://*.primevideo.com/*", + "*://*.amazon.com/*", + "*://*.amazon.co.jp/*", + "*://*.amazon.de/*", + "*://*.amazon.co.uk/*", + "*://*.max.com/*", + "*://*.hbomax.com/*", + ], +})) diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json deleted file mode 100644 index 9c46490a..00000000 --- a/node_modules/.package-lock.json +++ /dev/null @@ -1,6042 +0,0 @@ -{ - "name": "streaming-enhanced", - "version": "1.1.46", - "lockfileVersion": 2, - "requires": true, - "packages": { - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", - "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@devicefarmer/adbkit": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit/-/adbkit-3.2.3.tgz", - "integrity": "sha512-wK9rVrabs4QU0oK8Jnwi+HRBEm+s1x/o63kgthUe0y7K1bfcYmgLuQf41/adsj/5enddlSxzkJavl2EwOu+r1g==", - "dependencies": { - "@devicefarmer/adbkit-logcat": "^2.1.2", - "@devicefarmer/adbkit-monkey": "~1.2.0", - "bluebird": "~3.7", - "commander": "^9.1.0", - "debug": "~4.3.1", - "node-forge": "^1.3.1", - "split": "~1.0.1" - }, - "bin": { - "adbkit": "bin/adbkit" - }, - "engines": { - "node": ">= 0.10.4" - } - }, - "node_modules/@devicefarmer/adbkit-logcat": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit-logcat/-/adbkit-logcat-2.1.3.tgz", - "integrity": "sha512-yeaGFjNBc/6+svbDeul1tNHtNChw6h8pSHAt5D+JsedUrMTN7tla7B15WLDyekxsuS2XlZHRxpuC6m92wiwCNw==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@devicefarmer/adbkit-monkey": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit-monkey/-/adbkit-monkey-1.2.1.tgz", - "integrity": "sha512-ZzZY/b66W2Jd6NHbAhLyDWOEIBWC11VizGFk7Wx7M61JZRz7HR9Cq5P+65RKWUU7u6wgsE8Lmh9nE4Mz+U2eTg==", - "engines": { - "node": ">= 0.10.4" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", - "engines": { - "node": ">=14" - } - }, - "node_modules/@fluent/syntax": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@fluent/syntax/-/syntax-0.19.0.tgz", - "integrity": "sha512-5D2qVpZrgpjtqU4eNOcWGp1gnUCgjfM+vKGE2y03kKN6z5EBhtx0qdRFbg8QuNNj8wXNoX93KJoYb+NqoxswmQ==", - "engines": { - "node": ">=14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==" - }, - "node_modules/@iamtraction/google-translate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@iamtraction/google-translate/-/google-translate-2.0.1.tgz", - "integrity": "sha512-kOTkt23zflxpgxLIe9tLvDU8IvNscXYbgMSXydNkZGWDtJ75YJiU3v7EBz+t7h/gSiY7sT5r4dlFkMrHCl+N6A==", - "dependencies": { - "undici": "^5.12.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@mdn/browser-compat-data": { - "version": "5.5.7", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.5.7.tgz", - "integrity": "sha512-DoHTZ/TjtNfUu9eiqJd+x3IcCQrhS+yOYU436TKUnlE36jZwNbK535D1CmTsSYdi/UcdCWNm5KRQZ9g1tlZCPw==" - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@parvineyvazov/json-translator": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@parvineyvazov/json-translator/-/json-translator-3.1.0.tgz", - "integrity": "sha512-lfDnL6lxy92z6/TckJmlmp89Hn5HybmyGGwcisnuD+FDajEYfxUxqVRNx6AwJq6bcJR4Aoq05CmY5xz9JiN8NQ==", - "dependencies": { - "@iamtraction/google-translate": "^2.0.1", - "@types/bluebird": "^3.5.36", - "@types/filesystem": "^0.0.32", - "@vitalets/google-translate-api": "^9.2.0", - "axios": "^1.2.2", - "bing-translate-api": "^2.8.0", - "bluebird": "^3.7.2", - "commander": "^10.0.1", - "cwait": "^1.1.2", - "figlet": "^1.6.0", - "http-proxy-agent": "^5.0.0", - "inquirer": "^7.0.0", - "loading-cli": "^1.1.0", - "openai": "^4.52.3", - "yaml": "^2.3.2" - }, - "bin": { - "jsontt": "bin/jsontt" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@parvineyvazov/json-translator/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "engines": { - "node": ">=14" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "dependencies": { - "graceful-fs": "4.2.10" - }, - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/@pnpm/npm-conf": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", - "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", - "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@sindresorhus/is": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "dependencies": { - "defer-to-connect": "^2.0.1" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/@types/bluebird": { - "version": "3.5.42", - "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.42.tgz", - "integrity": "sha512-Jhy+MWRlro6UjVi578V/4ZGNfeCOcNCp0YaFNIUGFKlImowqwb1O/22wDVk3FDGMLqxdpOV3qQHD5fPEH4hK6A==" - }, - "node_modules/@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" - } - }, - "node_modules/@types/filesystem": { - "version": "0.0.32", - "resolved": "https://registry.npmjs.org/@types/filesystem/-/filesystem-0.0.32.tgz", - "integrity": "sha512-Yuf4jR5YYMR2DVgwuCiP11s0xuVRyPKmz8vo6HBY3CGdeMj8af93CFZX+T82+VD1+UqHOxTq31lO7MI7lepBtQ==", - "dependencies": { - "@types/filewriter": "*" - } - }, - "node_modules/@types/filewriter": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/filewriter/-/filewriter-0.0.33.tgz", - "integrity": "sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==" - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" - }, - "node_modules/@types/http-errors": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.2.tgz", - "integrity": "sha512-EqX+YQxINb+MeXaIqYDASb6U6FCHbWjkj4a1CKDBks3d/QiB2+PqBLyO72vLDgAO1wUI4O+9gweRcQK11bTL/w==" - }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" - }, - "node_modules/@types/node": { - "version": "20.10.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.6.tgz", - "integrity": "sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw==", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==", - "dependencies": { - "@types/node": "*", - "form-data": "^4.0.0" - } - }, - "node_modules/@types/node-fetch/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/@types/responselike": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", - "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yauzl": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" - }, - "node_modules/@vitalets/google-translate-api": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@vitalets/google-translate-api/-/google-translate-api-9.2.0.tgz", - "integrity": "sha512-w98IPWGuexlGmh8Y19AxF6cgWT0U5JLevVNDKEuFpTWtBC9z3YtDWKTDxF3nPP1k9bWicuB1V7I7YfHoZiDScw==", - "dependencies": { - "@types/http-errors": "^1.8.2", - "http-errors": "^2.0.0", - "node-fetch": "^2.6.7" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@vitalets/google-translate-api/node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/addons-linter": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-6.21.0.tgz", - "integrity": "sha512-4GBn14BR16FZE7dog6uz+1HO6V3B+mAVxmbwxRhed2y5eyrwIW832TmEpku+5A5bbovBZ4gilXEtBsl6A1AMmg==", - "dependencies": { - "@fluent/syntax": "0.19.0", - "@mdn/browser-compat-data": "5.5.7", - "addons-moz-compare": "1.3.0", - "addons-scanner-utils": "9.9.0", - "ajv": "8.12.0", - "chalk": "4.1.2", - "cheerio": "1.0.0-rc.12", - "columnify": "1.6.0", - "common-tags": "1.8.2", - "deepmerge": "4.3.1", - "eslint": "8.56.0", - "eslint-plugin-no-unsanitized": "4.0.2", - "eslint-visitor-keys": "3.4.3", - "espree": "9.6.1", - "esprima": "4.0.1", - "fast-json-patch": "3.1.1", - "glob": "10.3.10", - "image-size": "1.1.1", - "is-mergeable-object": "1.1.1", - "jed": "1.1.1", - "json-merge-patch": "1.0.2", - "os-locale": "5.0.0", - "pino": "8.17.2", - "postcss": "8.4.33", - "relaxed-json": "1.0.3", - "semver": "7.5.4", - "sha.js": "2.4.11", - "source-map-support": "0.5.21", - "tosource": "1.0.0", - "upath": "2.0.1", - "yargs": "17.7.2", - "yauzl": "2.10.0" - }, - "bin": { - "addons-linter": "bin/addons-linter" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/addons-linter/node_modules/addons-scanner-utils": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-9.9.0.tgz", - "integrity": "sha512-YDP10U3sEZMuIgnjXMiAYgUU64jTbxmhpUXMlhi1nKO4Etz+ctGWoTUst7IQRoLWaY9y2r1KZDG3jALxLA1n7Q==", - "dependencies": { - "@types/yauzl": "2.10.3", - "common-tags": "1.8.2", - "first-chunk-stream": "3.0.0", - "strip-bom-stream": "4.0.0", - "upath": "2.0.1", - "yauzl": "2.10.0" - }, - "peerDependencies": { - "body-parser": "1.20.2", - "express": "4.18.2", - "node-fetch": "2.6.11", - "safe-compare": "1.1.4" - }, - "peerDependenciesMeta": { - "body-parser": { - "optional": true - }, - "express": { - "optional": true - }, - "node-fetch": { - "optional": true - }, - "safe-compare": { - "optional": true - } - } - }, - "node_modules/addons-linter/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/addons-linter/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/addons-linter/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/addons-linter/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/addons-linter/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/addons-linter/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/addons-linter/node_modules/node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", - "optional": true, - "peer": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/addons-linter/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/addons-linter/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/addons-moz-compare": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/addons-moz-compare/-/addons-moz-compare-1.3.0.tgz", - "integrity": "sha512-/rXpQeaY0nOKhNx00pmZXdk5Mu+KhVlL3/pSBuAYwrxRrNiTvI/9xfQI8Lmm7DMMl+PDhtfAHY/0ibTpdeoQQQ==" - }, - "node_modules/adm-zip": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz", - "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", - "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-align/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/ansi-align/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/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/array-differ": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-4.0.0.tgz", - "integrity": "sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/array-union": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", - "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" - }, - "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/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==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/atomic-sleep": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", - "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" - }, - "node_modules/axios": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz", - "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/axios/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/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "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==", - "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/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/bing-translate-api": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/bing-translate-api/-/bing-translate-api-2.10.0.tgz", - "integrity": "sha512-jAxLMMftjB9KizG/IqUz+pyfB6n4Q8zu7LVgbAULeHbBvOy+Enwxm+f2uNrKTeiO4tKhNqi13Kjk29DOc+q/zw==", - "dependencies": { - "got": "^11.8.6" - } - }, - "node_modules/bing-translate-api/node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/bing-translate-api/node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/bing-translate-api/node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "engines": { - "node": ">=10.6.0" - } - }, - "node_modules/bing-translate-api/node_modules/cacheable-request": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", - "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bing-translate-api/node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/bing-translate-api/node_modules/http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/bing-translate-api/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/bing-translate-api/node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bing-translate-api/node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/bing-translate-api/node_modules/responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "dependencies": { - "lowercase-keys": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "node_modules/boxen": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", - "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^7.0.1", - "chalk": "^5.2.0", - "cli-boxes": "^3.0.0", - "string-width": "^5.1.2", - "type-fest": "^2.13.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/boxen/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "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==", - "engines": { - "node": "*" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/bunyan": { - "version": "1.8.15", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", - "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", - "engines": [ - "node >=0.10.0" - ], - "bin": { - "bunyan": "bin/bunyan" - }, - "optionalDependencies": { - "dtrace-provider": "~0.8", - "moment": "^2.19.3", - "mv": "~2", - "safe-json-stringify": "~1" - } - }, - "node_modules/cacheable-lookup": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", - "engines": { - "node": ">=14.16" - } - }, - "node_modules/cacheable-request": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", - "dependencies": { - "@types/http-cache-semantics": "^4.0.2", - "get-stream": "^6.0.1", - "http-cache-semantics": "^4.1.1", - "keyv": "^4.5.3", - "mimic-response": "^4.0.0", - "normalize-url": "^8.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", - "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" - }, - "node_modules/cdata": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/cdata/-/cdata-0.1.3.tgz", - "integrity": "sha512-z0R4cT5357OEAVkP1CEFTHz1egpu2gYiWm2WJOY/sQDhojEXUYL4m3v2kYi5wER3PkMRL+GgfDhed2kGzrHSZA==" - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/chrome-launcher": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.1.tgz", - "integrity": "sha512-UugC8u59/w2AyX5sHLZUHoxBAiSiunUhZa3zZwMH6zPVis0C3dDKiRWyUGIo14tTbZHGVviWxv3PQWZ7taZ4fg==", - "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0" - }, - "bin": { - "print-chrome-path": "bin/print-chrome-path.js" - }, - "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/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/cliui/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/cliui/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==", - "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/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clone-response/node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "engines": { - "node": ">=4" - } - }, - "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-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/colors-cli": { - "version": "1.0.33", - "resolved": "https://registry.npmjs.org/colors-cli/-/colors-cli-1.0.33.tgz", - "integrity": "sha512-PWGsmoJFdOB0t+BeHgmtuoRZUQucOLl5ii81NBzOOGVxlgE04muFNHlR5j8i8MKbOPELBl3243AI6lGBTj5ICQ==", - "bin": { - "colors": "bin/colors" - }, - "funding": { - "url": "https://jaywcjlove.github.io/#/sponsor" - } - }, - "node_modules/columnify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", - "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", - "dependencies": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "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/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/concat-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/config-chain/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/configstore": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", - "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", - "dependencies": { - "dot-prop": "^6.0.1", - "graceful-fs": "^4.2.6", - "unique-string": "^3.0.0", - "write-file-atomic": "^3.0.3", - "xdg-basedir": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/yeoman/configstore?sponsor=1" - } - }, - "node_modules/core-js": { - "version": "3.29.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.29.0.tgz", - "integrity": "sha512-VG23vuEisJNkGl6XQmFJd3rEG/so/CNatqeE+7uZAwTSwFeB/qaO0be8xZYUNWprJ/GIwL8aMt9cj1kvbpTZhg==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-random-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", - "dependencies": { - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/crypto-random-string/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cwait": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cwait/-/cwait-1.1.2.tgz", - "integrity": "sha512-kIx8zE5jJ1iBgZytTr01aj57HdC+thPsg8W9Tw0gbf30/F7wfRRUS+BiXT90Dn+A0oGtF0xLT5293Ua4w/ZsNA==", - "dependencies": { - "cdata": "^0.1.1" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "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/debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz", - "integrity": "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "node_modules/deepcopy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/deepcopy/-/deepcopy-2.1.0.tgz", - "integrity": "sha512-8cZeTb1ZKC3bdSCP6XOM1IsTczIO73fdqtwa2B0N15eAz7gmyhQo+mc5gnFuulsgN3vIQYmTgbmQVKalH1dKvQ==", - "dependencies": { - "type-detect": "^4.0.8" - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "engines": { - "node": ">=10" - } - }, - "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==", - "engines": { - "node": ">=8" - } - }, - "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/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dtrace-provider": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", - "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "nan": "^2.14.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" - }, - "node_modules/es6-promisify": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-7.0.0.tgz", - "integrity": "sha512-ginqzK3J90Rd4/Yz7qRrqUeIpe3TwSXTPPZtPne7tGBPeAaQiU8qt4fpKApnxHcq1AwtUdHVg5P77x/yrggG8Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-goat": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", - "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-no-unsanitized": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-4.0.2.tgz", - "integrity": "sha512-Pry0S9YmHoz8NCEMRQh7N0Yexh2MYCNPIlrV52hTmS7qXnTghWsjXouF08bgsrrZqaW9tt1ZiK3j5NEmPE+EjQ==", - "peerDependencies": { - "eslint": "^6 || ^7 || ^8" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/external-editor/node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-json-patch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz", - "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "node_modules/fast-redact": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.4.0.tgz", - "integrity": "sha512-2gwPvyna0zwBdxKnng1suu/dTL5s8XEy2ZqH8mwDUwJdDkV8w5kp+JV26mupdK68HmPMbm6yjW9m7/Ys/BHEHg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dependencies": { - "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==", - "dependencies": { - "pend": "~1.2.0" - } - }, - "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/figlet": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.7.0.tgz", - "integrity": "sha512-gO8l3wvqo0V7wEFLXPbkX83b7MVjRrk1oRLfYlZXol8nEpb/ON9pcKLI4qpBv5YtOTfrINtqb7b40iYY2FTWFg==", - "bin": { - "figlet": "bin/index.js" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/firefox-profile": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.3.2.tgz", - "integrity": "sha512-/C+Eqa0YgIsQT2p66p7Ygzqe7NlE/GNTbhw2SBCm5V3OsWDPITNdTPEcH2Q2fe7eMpYYNPKdUcuVioZBZiR6kA==", - "dependencies": { - "adm-zip": "~0.5.x", - "fs-extra": "~9.0.1", - "ini": "~2.0.0", - "minimist": "^1.2.5", - "xml2js": "^0.5.0" - }, - "bin": { - "firefox-profile": "lib/cli.js" - } - }, - "node_modules/firefox-profile/node_modules/fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/firefox-profile/node_modules/universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/first-chunk-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-3.0.0.tgz", - "integrity": "sha512-LNRvR4hr/S8cXXkIY5pTgVP7L3tq6LlYWcg9nWBuW7o1NMxKZo6oOVa/6GIekMGI0Iw7uC+HWimMe9u/VAeKqw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/flat-cache": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", - "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==" - }, - "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==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/form-data-encoder": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", - "engines": { - "node": ">= 14.17" - } - }, - "node_modules/formdata-node": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", - "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", - "dependencies": { - "node-domexception": "1.0.0", - "web-streams-polyfill": "4.0.0-beta.3" - }, - "engines": { - "node": ">= 12.20" - } - }, - "node_modules/formdata-node/node_modules/web-streams-polyfill": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", - "engines": { - "node": ">= 14" - } - }, - "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-extra": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", - "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "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==" - }, - "node_modules/fx-runner": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/fx-runner/-/fx-runner-1.4.0.tgz", - "integrity": "sha512-rci1g6U0rdTg6bAaBboP7XdRu01dzTAaKXxFf+PUqGuCv6Xu7o8NZdY1D5MvKGIjb6EdS1g3VlXOgksir1uGkg==", - "dependencies": { - "commander": "2.9.0", - "shell-quote": "1.7.3", - "spawn-sync": "1.0.15", - "when": "3.7.7", - "which": "1.2.4", - "winreg": "0.0.12" - }, - "bin": { - "fx-runner": "bin/fx-runner" - } - }, - "node_modules/fx-runner/node_modules/commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==", - "dependencies": { - "graceful-readlink": ">= 1.0.0" - }, - "engines": { - "node": ">= 0.6.x" - } - }, - "node_modules/fx-runner/node_modules/isexe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz", - "integrity": "sha512-d2eJzK691yZwPHcv1LbeAOa91yMJ9QmfTgSO1oXB65ezVhXQsxBac2vEB4bMVms9cGzaA99n6V2viHMq82VLDw==" - }, - "node_modules/fx-runner/node_modules/which": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/which/-/which-1.2.4.tgz", - "integrity": "sha512-zDRAqDSBudazdfM9zpiI30Fu9ve47htYXcGi3ln0wfKu2a7SmrT6F3VDoYONu//48V8Vz4TdCRNPjtvyRO3yBA==", - "dependencies": { - "is-absolute": "^0.1.7", - "isexe": "^1.1.1" - }, - "bin": { - "which": "bin/which" - } - }, - "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/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "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/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/got": { - "version": "12.6.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", - "dependencies": { - "@sindresorhus/is": "^5.2.0", - "@szmarczak/http-timer": "^5.0.1", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", - "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/got/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==" - }, - "node_modules/graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" - }, - "node_modules/growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==" - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-yarn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", - "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/http2-wrapper": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "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/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz", - "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==", - "dependencies": { - "queue": "6.0.2" - }, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=16.x" - } - }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "engines": { - "node": ">=0.8.19" - } - }, - "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==", - "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==" - }, - "node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/inquirer/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/inquirer/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/invert-kv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", - "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sindresorhus/invert-kv?sponsor=1" - } - }, - "node_modules/is-absolute": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz", - "integrity": "sha512-Xi9/ZSn4NFapG8RP98iNPMOeaV3mXPisxKxzKtHVqr3g56j/fBn+yZmnxSVAA8lmZbl2J9b/a4kJvfU3hqQYgA==", - "dependencies": { - "is-relative": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "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==", - "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", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-mergeable-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-mergeable-object/-/is-mergeable-object-1.1.1.tgz", - "integrity": "sha512-CPduJfuGg8h8vW74WOxHtHmtQutyQBzR+3MjQ6iDHIYdbOnm1YC7jv43SqCoU8OPGTJD4nibmiryA4kmogbGrA==" - }, - "node_modules/is-npm": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", - "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-relative": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz", - "integrity": "sha512-wBOr+rNM4gkAZqoLRJI4myw5WzzIdQosFAAbnvfXP5z1LyzgAI3ivOKehC5KfqlQJZoihVhirgtCBj378Eg8GA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==" - }, - "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==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-yarn-global": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz", - "integrity": "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" - }, - "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jed": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/jed/-/jed-1.1.1.tgz", - "integrity": "sha512-z35ZSEcXHxLW4yumw0dF6L464NT36vmx3wxJw8MDpraBcWuNVgUPZgPJKcu1HekNgwlMFNqol7i/IpSbjhqwqA==" - }, - "node_modules/jose": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.13.1.tgz", - "integrity": "sha512-MSJQC5vXco5Br38mzaQKiq9mwt7lwj2eXpgpRyQYNHYt2lq1PjkWa7DLXX0WVcQLE9HhMh3jPiufS7fhJf+CLQ==", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" - }, - "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==" - }, - "node_modules/json-merge-patch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-merge-patch/-/json-merge-patch-1.0.2.tgz", - "integrity": "sha512-M6Vp2GN9L7cfuMXiWOmHj9bEFbeC250iVtcKQbqVgEsDVYnIsrNsbU+h/Y/PkbBQCtEa4Bez+Ebv0zfbC8ObLg==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonwebtoken": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", - "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", - "dependencies": { - "jws": "^3.2.2", - "lodash": "^4.17.21", - "ms": "^2.1.1", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/jszip": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - } - }, - "node_modules/jszip/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/jszip/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/jszip/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "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==", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/latest-version": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", - "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", - "dependencies": { - "package-json": "^8.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lcid": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", - "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==", - "dependencies": { - "invert-kv": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "dependencies": { - "immediate": "~3.0.5" - } - }, - "node_modules/lighthouse-logger": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", - "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", - "dependencies": { - "debug": "^2.6.9", - "marky": "^1.2.2" - } - }, - "node_modules/lighthouse-logger/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/lighthouse-logger/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/lines-and-columns": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", - "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/loading-cli": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/loading-cli/-/loading-cli-1.1.2.tgz", - "integrity": "sha512-M1ntfXHpdGoQxfaqKBOQPwSrTr9EIoTgj664Q9UVSbSnJvAFdribo+Ij//1jvACgrGHaTvfKoD9PG3NOxGj44g==", - "dependencies": { - "colors-cli": "^1.0.26" - }, - "funding": { - "url": "https://jaywcjlove.github.io/#/sponsor" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "node_modules/lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - }, - "node_modules/map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dependencies": { - "p-defer": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/marky": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", - "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==" - }, - "node_modules/mem": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/mem/-/mem-5.1.1.tgz", - "integrity": "sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw==", - "dependencies": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^2.1.0", - "p-is-promise": "^2.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "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/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/moment": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", - "optional": true, - "engines": { - "node": "*" - } - }, - "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/multimatch": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-6.0.0.tgz", - "integrity": "sha512-I7tSVxHGPlmPN/enE3mS1aOSo6bWBfls+3HmuEeCUBCE7gWnm3cBXCBkpurzFjVRwC6Kld8lLaZ1Iv5vOcjvcQ==", - "dependencies": { - "@types/minimatch": "^3.0.5", - "array-differ": "^4.0.0", - "array-union": "^3.0.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, - "node_modules/mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", - "optional": true, - "dependencies": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/mv/node_modules/glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", - "optional": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mv/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "optional": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mv/node_modules/rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", - "optional": true, - "dependencies": { - "glob": "^6.0.1" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nan": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", - "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", - "optional": true - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "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/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - }, - "node_modules/ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", - "optional": true, - "bin": { - "ncp": "bin/ncp" - } - }, - "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.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz", - "integrity": "sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==", - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-notifier": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.1.tgz", - "integrity": "sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==", - "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.5", - "shellwords": "^0.1.1", - "uuid": "^8.3.2", - "which": "^2.0.2" - } - }, - "node_modules/normalize-url": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", - "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/on-exit-leak-free": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", - "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", - "engines": { - "node": ">=14.0.0" - } - }, - "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==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "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/openai": { - "version": "4.56.0", - "resolved": "https://registry.npmjs.org/openai/-/openai-4.56.0.tgz", - "integrity": "sha512-zcag97+3bG890MNNa0DQD9dGmmTWL8unJdNkulZzWRXrl+QeD+YkBI4H58rJcwErxqGK6a0jVPZ4ReJjhDGcmw==", - "dependencies": { - "@types/node": "^18.11.18", - "@types/node-fetch": "^2.6.4", - "abort-controller": "^3.0.0", - "agentkeepalive": "^4.2.1", - "form-data-encoder": "1.7.2", - "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7" - }, - "bin": { - "openai": "bin/cli" - }, - "peerDependencies": { - "zod": "^3.23.8" - }, - "peerDependenciesMeta": { - "zod": { - "optional": true - } - } - }, - "node_modules/openai/node_modules/@types/node": { - "version": "18.19.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.45.tgz", - "integrity": "sha512-VZxPKNNhjKmaC1SUYowuXSRSMGyQGmQjvvA1xE4QZ0xce2kLtEhPDS+kqpCPBZYgqblCLQ2DAjSzmgCM5auvhA==", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/openai/node_modules/form-data-encoder": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", - "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==" - }, - "node_modules/openai/node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/os-locale": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-5.0.0.tgz", - "integrity": "sha512-tqZcNEDAIZKBEPnHPlVDvKrp7NzgLi7jRmhKiUoa2NUmhl13FtkAGLUVR+ZsYvApBQdBfYm43A4tXXQ4IrYLBA==", - "dependencies": { - "execa": "^4.0.0", - "lcid": "^3.0.0", - "mem": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/os-shim": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", - "integrity": "sha512-jd0cvB8qQ5uVt0lvCIexBaROw1KyKm5sbulg2fWOHjETisuCzWyt+eTZKEMs8v6HwzoGs8xik26jg7eCM6pS+A==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/package-json": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", - "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", - "dependencies": { - "got": "^12.1.0", - "registry-auth-token": "^5.0.1", - "registry-url": "^6.0.0", - "semver": "^7.3.7" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-6.0.2.tgz", - "integrity": "sha512-SA5aMiaIjXkAiBrW/yPgLgQAQg42f7K3ACO+2l/zOvtQBwX58DMUsFJXelW2fx3yMBmWOVkR6j1MGsdSbCA4UA==", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "error-ex": "^1.3.2", - "json-parse-even-better-errors": "^2.3.1", - "lines-and-columns": "^2.0.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "dependencies": { - "domhandler": "^5.0.2", - "parse5": "^7.0.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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", - "engines": { - "node": "14 || >=16.14" - } - }, - "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==" - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/pino": { - "version": "8.17.2", - "resolved": "https://registry.npmjs.org/pino/-/pino-8.17.2.tgz", - "integrity": "sha512-LA6qKgeDMLr2ux2y/YiUt47EfgQ+S9LznBWOJdN3q1dx2sv0ziDLUBeVpyVv17TEcGCBuWf0zNtg3M5m1NhhWQ==", - "dependencies": { - "atomic-sleep": "^1.0.0", - "fast-redact": "^3.1.1", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "v1.1.0", - "pino-std-serializers": "^6.0.0", - "process-warning": "^3.0.0", - "quick-format-unescaped": "^4.0.3", - "real-require": "^0.2.0", - "safe-stable-stringify": "^2.3.1", - "sonic-boom": "^3.7.0", - "thread-stream": "^2.0.0" - }, - "bin": { - "pino": "bin.js" - } - }, - "node_modules/pino-abstract-transport": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz", - "integrity": "sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==", - "dependencies": { - "readable-stream": "^4.0.0", - "split2": "^4.0.0" - } - }, - "node_modules/pino-std-serializers": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", - "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==" - }, - "node_modules/postcss": { - "version": "8.4.33", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", - "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", - "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.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/process-warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", - "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==" - }, - "node_modules/promise-toolbox": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/promise-toolbox/-/promise-toolbox-0.21.0.tgz", - "integrity": "sha512-NV8aTmpwrZv+Iys54sSFOBx3tuVaOBvvrft5PNppnxy9xpU/akHbaWIril22AB22zaPgrgwKdD0KsrM0ptUtpg==", - "dependencies": { - "make-error": "^1.3.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" - }, - "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==" - }, - "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/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "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/pupa": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", - "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", - "dependencies": { - "escape-goat": "^4.0.0" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "dependencies": { - "inherits": "~2.0.3" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "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/quick-format-unescaped": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", - "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/real-require": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", - "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "node_modules/registry-auth-token": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", - "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", - "dependencies": { - "@pnpm/npm-conf": "^2.1.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/registry-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", - "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", - "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/relaxed-json": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/relaxed-json/-/relaxed-json-1.0.3.tgz", - "integrity": "sha512-b7wGPo7o2KE/g7SqkJDDbav6zmrEeP4TK2VpITU72J/M949TLe/23y/ZHJo+pskcGM52xIfFoT9hydwmgr1AEg==", - "dependencies": { - "chalk": "^2.4.2", - "commander": "^2.6.0" - }, - "bin": { - "rjson": "bin/rjson.js" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/relaxed-json/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/relaxed-json/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/relaxed-json/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/relaxed-json/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/relaxed-json/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/relaxed-json/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/relaxed-json/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/relaxed-json/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, - "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-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/responselike": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", - "dependencies": { - "lowercase-keys": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "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/safe-json-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "optional": true - }, - "node_modules/safe-stable-stringify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", - "engines": { - "node": ">=10" - } - }, - "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/sax": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", - "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", - "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" - }, - "node_modules/shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" - }, - "node_modules/sign-addon": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/sign-addon/-/sign-addon-5.3.0.tgz", - "integrity": "sha512-7nHlCzhQgVMLBNiXVEgbG/raq48awOW0lYMN5uo1BaB3mp0+k8M8pvDwbfTlr3apcxZJsk9HQsAW1POwoJugpQ==", - "dependencies": { - "common-tags": "1.8.2", - "core-js": "3.29.0", - "deepcopy": "2.1.0", - "es6-error": "4.1.1", - "es6-promisify": "7.0.0", - "jsonwebtoken": "9.0.0", - "mz": "2.7.0", - "request": "2.88.2", - "source-map-support": "0.5.21", - "stream-to-promise": "3.0.0" - } - }, - "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==" - }, - "node_modules/sonic-boom": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.0.tgz", - "integrity": "sha512-ybz6OYOUjoQQCQ/i4LU8kaToD8ACtYP+Cj5qd2AO36bwbdewxWJ3ArmJ2cr6AvxlL2o0PqnCcPGUgkILbfkaCA==", - "dependencies": { - "atomic-sleep": "^1.0.0" - } - }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/spawn-sync": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz", - "integrity": "sha512-9DWBgrgYZzNghseho0JOuh+5fg9u6QWhAWa51QC7+U5rCheZ/j1DrEZnyE0RBBRqZ9uEXGPgSSM0nky6burpVw==", - "hasInstallScript": true, - "dependencies": { - "concat-stream": "^1.4.7", - "os-shim": "^0.1.2" - } - }, - "node_modules/split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "engines": { - "node": ">= 10.x" - } - }, - "node_modules/sshpk": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", - "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stream-to-array": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", - "integrity": "sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==", - "dependencies": { - "any-promise": "^1.1.0" - } - }, - "node_modules/stream-to-promise": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-to-promise/-/stream-to-promise-3.0.0.tgz", - "integrity": "sha512-h+7wLeFiYegOdgTfTxjRsrT7/Op7grnKEIHWgaO1RTHwcwk7xRreMr3S8XpDfDMesSxzgM2V4CxNCFAGo6ssnA==", - "dependencies": { - "any-promise": "~1.3.0", - "end-of-stream": "~1.4.1", - "stream-to-array": "~2.3.0" - }, - "engines": { - "node": ">= 10" - } - }, - "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==", - "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", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "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/string-width-cjs/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/string-width/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "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/strip-ansi-cjs": { - "name": "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/strip-bom": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-5.0.0.tgz", - "integrity": "sha512-p+byADHF7SzEcVnLvc/r3uognM1hUhObuHXxJcgLCfD194XAkaLbjq3Wzb0N5G2tgIjH0dgT708Z51QxMeu60A==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-bom-buf": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-2.0.0.tgz", - "integrity": "sha512-gLFNHucd6gzb8jMsl5QmZ3QgnUJmp7qn4uUSHNwEXumAp7YizoGYw19ZUVfuq4aBOQUtyn2k8X/CwzWB73W2lQ==", - "dependencies": { - "is-utf8": "^0.2.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom-stream": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-4.0.0.tgz", - "integrity": "sha512-0ApK3iAkHv6WbgLICw/J4nhwHeDZsBxIIsOD+gHgZICL6SeJ0S9f/WZqemka9cjkTyMN5geId6e8U5WGFAn3cQ==", - "dependencies": { - "first-chunk-stream": "^3.0.0", - "strip-bom-buf": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/thread-stream": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.4.1.tgz", - "integrity": "sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg==", - "dependencies": { - "real-require": "^0.2.0" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - }, - "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tosource": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tosource/-/tosource-1.0.0.tgz", - "integrity": "sha512-N6g8eQ1eerw6Y1pBhdgkubWIiPFwXa2POSUrlL8jth5CyyEWNWzoGKRkO3CaO7Jx27hlJP54muB3btIAbx4MPg==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/undici": { - "version": "5.28.4", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", - "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=14.0" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" - }, - "node_modules/unique-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", - "dependencies": { - "crypto-random-string": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-notifier": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz", - "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==", - "dependencies": { - "boxen": "^7.0.0", - "chalk": "^5.0.1", - "configstore": "^6.0.0", - "has-yarn": "^3.0.0", - "import-lazy": "^4.0.0", - "is-ci": "^3.0.1", - "is-installed-globally": "^0.4.0", - "is-npm": "^6.0.0", - "is-yarn-global": "^0.4.0", - "latest-version": "^7.0.0", - "pupa": "^3.1.0", - "semver": "^7.3.7", - "semver-diff": "^4.0.0", - "xdg-basedir": "^5.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/web-ext": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-7.11.0.tgz", - "integrity": "sha512-EG6YXHITNDJB/h6Rc5FF08eMoN45sZPBBIIlEraBzxJ0RdJZ8Z3xvUUawbDwt+mowfv9X0XRWlLSwdWbRKgojg==", - "dependencies": { - "@babel/runtime": "7.21.0", - "@devicefarmer/adbkit": "3.2.3", - "addons-linter": "6.21.0", - "bunyan": "1.8.15", - "camelcase": "7.0.1", - "chrome-launcher": "0.15.1", - "debounce": "1.2.1", - "decamelize": "6.0.0", - "es6-error": "4.1.1", - "firefox-profile": "4.3.2", - "fs-extra": "11.1.0", - "fx-runner": "1.4.0", - "import-fresh": "3.3.0", - "jose": "4.13.1", - "mkdirp": "1.0.4", - "multimatch": "6.0.0", - "mz": "2.7.0", - "node-fetch": "3.3.1", - "node-notifier": "10.0.1", - "open": "8.4.2", - "parse-json": "6.0.2", - "promise-toolbox": "0.21.0", - "sign-addon": "5.3.0", - "source-map-support": "0.5.21", - "strip-bom": "5.0.0", - "strip-json-comments": "5.0.0", - "tmp": "0.2.1", - "update-notifier": "6.0.2", - "watchpack": "2.4.0", - "ws": "8.13.0", - "yargs": "17.7.1", - "zip-dir": "2.0.0" - }, - "bin": { - "web-ext": "bin/web-ext.js" - }, - "engines": { - "node": ">=14.0.0", - "npm": ">=6.9.0" - } - }, - "node_modules/web-ext/node_modules/strip-json-comments": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.0.tgz", - "integrity": "sha512-V1LGY4UUo0jgwC+ELQ2BNWfPa17TIuwBLg+j1AA/9RPzKINl1lhxVEu2r+ZTTO8aetIsUzE5Qj6LMSBkoGYKKw==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/when": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/when/-/when-3.7.7.tgz", - "integrity": "sha512-9lFZp/KHoqH6bPKjbWqa+3Dg/K/r2v0X/3/G2x4DBGchVS2QX2VXL3cZV994WQVnTM1/PD71Az25nAzryEUugw==" - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", - "dependencies": { - "string-width": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/winreg": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/winreg/-/winreg-0.0.12.tgz", - "integrity": "sha512-typ/+JRmi7RqP1NanzFULK36vczznSNN8kWVA9vIqXyv8GhghUlwhGp1Xj3Nms1FsPcNnsQrJOR10N58/nQ9hQ==" - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "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==", - "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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "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==" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "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/xdg-basedir": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", - "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/xml2js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yaml": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", - "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs/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/yargs/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/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zip-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/zip-dir/-/zip-dir-2.0.0.tgz", - "integrity": "sha512-uhlsJZWz26FLYXOD6WVuq+fIcZ3aBPGo/cFdiLlv3KNwpa52IF3ISV8fLhQLiqVu5No3VhlqlgthN6gehil1Dg==", - "dependencies": { - "async": "^3.2.0", - "jszip": "^3.2.2" - } - } - } -} diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index d365741e..00000000 --- a/package-lock.json +++ /dev/null @@ -1,10412 +0,0 @@ -{ - "name": "streaming-enhanced", - "version": "1.1.46", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "streaming-enhanced", - "version": "1.1.46", - "license": "weaklyProtective", - "dependencies": { - "@parvineyvazov/json-translator": "^3.1.0", - "dotenv": "^16.4.5", - "web-ext": "^7.11.0" - }, - "devDependencies": { - "eslint": "^8.52.0" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", - "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@devicefarmer/adbkit": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit/-/adbkit-3.2.3.tgz", - "integrity": "sha512-wK9rVrabs4QU0oK8Jnwi+HRBEm+s1x/o63kgthUe0y7K1bfcYmgLuQf41/adsj/5enddlSxzkJavl2EwOu+r1g==", - "dependencies": { - "@devicefarmer/adbkit-logcat": "^2.1.2", - "@devicefarmer/adbkit-monkey": "~1.2.0", - "bluebird": "~3.7", - "commander": "^9.1.0", - "debug": "~4.3.1", - "node-forge": "^1.3.1", - "split": "~1.0.1" - }, - "bin": { - "adbkit": "bin/adbkit" - }, - "engines": { - "node": ">= 0.10.4" - } - }, - "node_modules/@devicefarmer/adbkit-logcat": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit-logcat/-/adbkit-logcat-2.1.3.tgz", - "integrity": "sha512-yeaGFjNBc/6+svbDeul1tNHtNChw6h8pSHAt5D+JsedUrMTN7tla7B15WLDyekxsuS2XlZHRxpuC6m92wiwCNw==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@devicefarmer/adbkit-monkey": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit-monkey/-/adbkit-monkey-1.2.1.tgz", - "integrity": "sha512-ZzZY/b66W2Jd6NHbAhLyDWOEIBWC11VizGFk7Wx7M61JZRz7HR9Cq5P+65RKWUU7u6wgsE8Lmh9nE4Mz+U2eTg==", - "engines": { - "node": ">= 0.10.4" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", - "engines": { - "node": ">=14" - } - }, - "node_modules/@fluent/syntax": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@fluent/syntax/-/syntax-0.19.0.tgz", - "integrity": "sha512-5D2qVpZrgpjtqU4eNOcWGp1gnUCgjfM+vKGE2y03kKN6z5EBhtx0qdRFbg8QuNNj8wXNoX93KJoYb+NqoxswmQ==", - "engines": { - "node": ">=14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==" - }, - "node_modules/@iamtraction/google-translate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@iamtraction/google-translate/-/google-translate-2.0.1.tgz", - "integrity": "sha512-kOTkt23zflxpgxLIe9tLvDU8IvNscXYbgMSXydNkZGWDtJ75YJiU3v7EBz+t7h/gSiY7sT5r4dlFkMrHCl+N6A==", - "dependencies": { - "undici": "^5.12.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@mdn/browser-compat-data": { - "version": "5.5.7", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.5.7.tgz", - "integrity": "sha512-DoHTZ/TjtNfUu9eiqJd+x3IcCQrhS+yOYU436TKUnlE36jZwNbK535D1CmTsSYdi/UcdCWNm5KRQZ9g1tlZCPw==" - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@parvineyvazov/json-translator": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@parvineyvazov/json-translator/-/json-translator-3.1.0.tgz", - "integrity": "sha512-lfDnL6lxy92z6/TckJmlmp89Hn5HybmyGGwcisnuD+FDajEYfxUxqVRNx6AwJq6bcJR4Aoq05CmY5xz9JiN8NQ==", - "dependencies": { - "@iamtraction/google-translate": "^2.0.1", - "@types/bluebird": "^3.5.36", - "@types/filesystem": "^0.0.32", - "@vitalets/google-translate-api": "^9.2.0", - "axios": "^1.2.2", - "bing-translate-api": "^2.8.0", - "bluebird": "^3.7.2", - "commander": "^10.0.1", - "cwait": "^1.1.2", - "figlet": "^1.6.0", - "http-proxy-agent": "^5.0.0", - "inquirer": "^7.0.0", - "loading-cli": "^1.1.0", - "openai": "^4.52.3", - "yaml": "^2.3.2" - }, - "bin": { - "jsontt": "bin/jsontt" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@parvineyvazov/json-translator/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "engines": { - "node": ">=14" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "dependencies": { - "graceful-fs": "4.2.10" - }, - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/@pnpm/npm-conf": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", - "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", - "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@sindresorhus/is": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "dependencies": { - "defer-to-connect": "^2.0.1" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/@types/bluebird": { - "version": "3.5.42", - "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.42.tgz", - "integrity": "sha512-Jhy+MWRlro6UjVi578V/4ZGNfeCOcNCp0YaFNIUGFKlImowqwb1O/22wDVk3FDGMLqxdpOV3qQHD5fPEH4hK6A==" - }, - "node_modules/@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" - } - }, - "node_modules/@types/filesystem": { - "version": "0.0.32", - "resolved": "https://registry.npmjs.org/@types/filesystem/-/filesystem-0.0.32.tgz", - "integrity": "sha512-Yuf4jR5YYMR2DVgwuCiP11s0xuVRyPKmz8vo6HBY3CGdeMj8af93CFZX+T82+VD1+UqHOxTq31lO7MI7lepBtQ==", - "dependencies": { - "@types/filewriter": "*" - } - }, - "node_modules/@types/filewriter": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/filewriter/-/filewriter-0.0.33.tgz", - "integrity": "sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==" - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" - }, - "node_modules/@types/http-errors": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.2.tgz", - "integrity": "sha512-EqX+YQxINb+MeXaIqYDASb6U6FCHbWjkj4a1CKDBks3d/QiB2+PqBLyO72vLDgAO1wUI4O+9gweRcQK11bTL/w==" - }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" - }, - "node_modules/@types/node": { - "version": "20.10.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.6.tgz", - "integrity": "sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw==", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==", - "dependencies": { - "@types/node": "*", - "form-data": "^4.0.0" - } - }, - "node_modules/@types/node-fetch/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/@types/responselike": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", - "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yauzl": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" - }, - "node_modules/@vitalets/google-translate-api": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@vitalets/google-translate-api/-/google-translate-api-9.2.0.tgz", - "integrity": "sha512-w98IPWGuexlGmh8Y19AxF6cgWT0U5JLevVNDKEuFpTWtBC9z3YtDWKTDxF3nPP1k9bWicuB1V7I7YfHoZiDScw==", - "dependencies": { - "@types/http-errors": "^1.8.2", - "http-errors": "^2.0.0", - "node-fetch": "^2.6.7" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@vitalets/google-translate-api/node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/addons-linter": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-6.21.0.tgz", - "integrity": "sha512-4GBn14BR16FZE7dog6uz+1HO6V3B+mAVxmbwxRhed2y5eyrwIW832TmEpku+5A5bbovBZ4gilXEtBsl6A1AMmg==", - "dependencies": { - "@fluent/syntax": "0.19.0", - "@mdn/browser-compat-data": "5.5.7", - "addons-moz-compare": "1.3.0", - "addons-scanner-utils": "9.9.0", - "ajv": "8.12.0", - "chalk": "4.1.2", - "cheerio": "1.0.0-rc.12", - "columnify": "1.6.0", - "common-tags": "1.8.2", - "deepmerge": "4.3.1", - "eslint": "8.56.0", - "eslint-plugin-no-unsanitized": "4.0.2", - "eslint-visitor-keys": "3.4.3", - "espree": "9.6.1", - "esprima": "4.0.1", - "fast-json-patch": "3.1.1", - "glob": "10.3.10", - "image-size": "1.1.1", - "is-mergeable-object": "1.1.1", - "jed": "1.1.1", - "json-merge-patch": "1.0.2", - "os-locale": "5.0.0", - "pino": "8.17.2", - "postcss": "8.4.33", - "relaxed-json": "1.0.3", - "semver": "7.5.4", - "sha.js": "2.4.11", - "source-map-support": "0.5.21", - "tosource": "1.0.0", - "upath": "2.0.1", - "yargs": "17.7.2", - "yauzl": "2.10.0" - }, - "bin": { - "addons-linter": "bin/addons-linter" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/addons-linter/node_modules/addons-scanner-utils": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-9.9.0.tgz", - "integrity": "sha512-YDP10U3sEZMuIgnjXMiAYgUU64jTbxmhpUXMlhi1nKO4Etz+ctGWoTUst7IQRoLWaY9y2r1KZDG3jALxLA1n7Q==", - "dependencies": { - "@types/yauzl": "2.10.3", - "common-tags": "1.8.2", - "first-chunk-stream": "3.0.0", - "strip-bom-stream": "4.0.0", - "upath": "2.0.1", - "yauzl": "2.10.0" - }, - "peerDependencies": { - "body-parser": "1.20.2", - "express": "4.18.2", - "node-fetch": "2.6.11", - "safe-compare": "1.1.4" - }, - "peerDependenciesMeta": { - "body-parser": { - "optional": true - }, - "express": { - "optional": true - }, - "node-fetch": { - "optional": true - }, - "safe-compare": { - "optional": true - } - } - }, - "node_modules/addons-linter/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/addons-linter/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/addons-linter/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/addons-linter/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/addons-linter/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/addons-linter/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/addons-linter/node_modules/node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", - "optional": true, - "peer": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/addons-linter/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/addons-linter/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/addons-moz-compare": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/addons-moz-compare/-/addons-moz-compare-1.3.0.tgz", - "integrity": "sha512-/rXpQeaY0nOKhNx00pmZXdk5Mu+KhVlL3/pSBuAYwrxRrNiTvI/9xfQI8Lmm7DMMl+PDhtfAHY/0ibTpdeoQQQ==" - }, - "node_modules/adm-zip": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz", - "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", - "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-align/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/ansi-align/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/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/array-differ": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-4.0.0.tgz", - "integrity": "sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/array-union": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", - "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" - }, - "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/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==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/atomic-sleep": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", - "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" - }, - "node_modules/axios": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz", - "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/axios/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/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "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==", - "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/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/bing-translate-api": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/bing-translate-api/-/bing-translate-api-2.10.0.tgz", - "integrity": "sha512-jAxLMMftjB9KizG/IqUz+pyfB6n4Q8zu7LVgbAULeHbBvOy+Enwxm+f2uNrKTeiO4tKhNqi13Kjk29DOc+q/zw==", - "dependencies": { - "got": "^11.8.6" - } - }, - "node_modules/bing-translate-api/node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/bing-translate-api/node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/bing-translate-api/node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "engines": { - "node": ">=10.6.0" - } - }, - "node_modules/bing-translate-api/node_modules/cacheable-request": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", - "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bing-translate-api/node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/bing-translate-api/node_modules/http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/bing-translate-api/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/bing-translate-api/node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bing-translate-api/node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/bing-translate-api/node_modules/responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "dependencies": { - "lowercase-keys": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "node_modules/boxen": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", - "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^7.0.1", - "chalk": "^5.2.0", - "cli-boxes": "^3.0.0", - "string-width": "^5.1.2", - "type-fest": "^2.13.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/boxen/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "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==", - "engines": { - "node": "*" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/bunyan": { - "version": "1.8.15", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", - "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", - "engines": [ - "node >=0.10.0" - ], - "bin": { - "bunyan": "bin/bunyan" - }, - "optionalDependencies": { - "dtrace-provider": "~0.8", - "moment": "^2.19.3", - "mv": "~2", - "safe-json-stringify": "~1" - } - }, - "node_modules/cacheable-lookup": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", - "engines": { - "node": ">=14.16" - } - }, - "node_modules/cacheable-request": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", - "dependencies": { - "@types/http-cache-semantics": "^4.0.2", - "get-stream": "^6.0.1", - "http-cache-semantics": "^4.1.1", - "keyv": "^4.5.3", - "mimic-response": "^4.0.0", - "normalize-url": "^8.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", - "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" - }, - "node_modules/cdata": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/cdata/-/cdata-0.1.3.tgz", - "integrity": "sha512-z0R4cT5357OEAVkP1CEFTHz1egpu2gYiWm2WJOY/sQDhojEXUYL4m3v2kYi5wER3PkMRL+GgfDhed2kGzrHSZA==" - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/chrome-launcher": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.1.tgz", - "integrity": "sha512-UugC8u59/w2AyX5sHLZUHoxBAiSiunUhZa3zZwMH6zPVis0C3dDKiRWyUGIo14tTbZHGVviWxv3PQWZ7taZ4fg==", - "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0" - }, - "bin": { - "print-chrome-path": "bin/print-chrome-path.js" - }, - "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/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/cliui/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/cliui/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==", - "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/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clone-response/node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "engines": { - "node": ">=4" - } - }, - "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-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/colors-cli": { - "version": "1.0.33", - "resolved": "https://registry.npmjs.org/colors-cli/-/colors-cli-1.0.33.tgz", - "integrity": "sha512-PWGsmoJFdOB0t+BeHgmtuoRZUQucOLl5ii81NBzOOGVxlgE04muFNHlR5j8i8MKbOPELBl3243AI6lGBTj5ICQ==", - "bin": { - "colors": "bin/colors" - }, - "funding": { - "url": "https://jaywcjlove.github.io/#/sponsor" - } - }, - "node_modules/columnify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", - "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", - "dependencies": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "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/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/concat-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/config-chain/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/configstore": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", - "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", - "dependencies": { - "dot-prop": "^6.0.1", - "graceful-fs": "^4.2.6", - "unique-string": "^3.0.0", - "write-file-atomic": "^3.0.3", - "xdg-basedir": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/yeoman/configstore?sponsor=1" - } - }, - "node_modules/core-js": { - "version": "3.29.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.29.0.tgz", - "integrity": "sha512-VG23vuEisJNkGl6XQmFJd3rEG/so/CNatqeE+7uZAwTSwFeB/qaO0be8xZYUNWprJ/GIwL8aMt9cj1kvbpTZhg==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-random-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", - "dependencies": { - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/crypto-random-string/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cwait": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cwait/-/cwait-1.1.2.tgz", - "integrity": "sha512-kIx8zE5jJ1iBgZytTr01aj57HdC+thPsg8W9Tw0gbf30/F7wfRRUS+BiXT90Dn+A0oGtF0xLT5293Ua4w/ZsNA==", - "dependencies": { - "cdata": "^0.1.1" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "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/debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz", - "integrity": "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "node_modules/deepcopy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/deepcopy/-/deepcopy-2.1.0.tgz", - "integrity": "sha512-8cZeTb1ZKC3bdSCP6XOM1IsTczIO73fdqtwa2B0N15eAz7gmyhQo+mc5gnFuulsgN3vIQYmTgbmQVKalH1dKvQ==", - "dependencies": { - "type-detect": "^4.0.8" - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "engines": { - "node": ">=10" - } - }, - "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==", - "engines": { - "node": ">=8" - } - }, - "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/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dtrace-provider": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", - "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "nan": "^2.14.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" - }, - "node_modules/es6-promisify": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-7.0.0.tgz", - "integrity": "sha512-ginqzK3J90Rd4/Yz7qRrqUeIpe3TwSXTPPZtPne7tGBPeAaQiU8qt4fpKApnxHcq1AwtUdHVg5P77x/yrggG8Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-goat": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", - "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-no-unsanitized": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-4.0.2.tgz", - "integrity": "sha512-Pry0S9YmHoz8NCEMRQh7N0Yexh2MYCNPIlrV52hTmS7qXnTghWsjXouF08bgsrrZqaW9tt1ZiK3j5NEmPE+EjQ==", - "peerDependencies": { - "eslint": "^6 || ^7 || ^8" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/external-editor/node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-json-patch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz", - "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "node_modules/fast-redact": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.4.0.tgz", - "integrity": "sha512-2gwPvyna0zwBdxKnng1suu/dTL5s8XEy2ZqH8mwDUwJdDkV8w5kp+JV26mupdK68HmPMbm6yjW9m7/Ys/BHEHg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dependencies": { - "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==", - "dependencies": { - "pend": "~1.2.0" - } - }, - "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/figlet": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.7.0.tgz", - "integrity": "sha512-gO8l3wvqo0V7wEFLXPbkX83b7MVjRrk1oRLfYlZXol8nEpb/ON9pcKLI4qpBv5YtOTfrINtqb7b40iYY2FTWFg==", - "bin": { - "figlet": "bin/index.js" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/firefox-profile": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.3.2.tgz", - "integrity": "sha512-/C+Eqa0YgIsQT2p66p7Ygzqe7NlE/GNTbhw2SBCm5V3OsWDPITNdTPEcH2Q2fe7eMpYYNPKdUcuVioZBZiR6kA==", - "dependencies": { - "adm-zip": "~0.5.x", - "fs-extra": "~9.0.1", - "ini": "~2.0.0", - "minimist": "^1.2.5", - "xml2js": "^0.5.0" - }, - "bin": { - "firefox-profile": "lib/cli.js" - } - }, - "node_modules/firefox-profile/node_modules/fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/firefox-profile/node_modules/universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/first-chunk-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-3.0.0.tgz", - "integrity": "sha512-LNRvR4hr/S8cXXkIY5pTgVP7L3tq6LlYWcg9nWBuW7o1NMxKZo6oOVa/6GIekMGI0Iw7uC+HWimMe9u/VAeKqw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/flat-cache": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", - "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==" - }, - "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==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/form-data-encoder": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", - "engines": { - "node": ">= 14.17" - } - }, - "node_modules/formdata-node": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", - "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", - "dependencies": { - "node-domexception": "1.0.0", - "web-streams-polyfill": "4.0.0-beta.3" - }, - "engines": { - "node": ">= 12.20" - } - }, - "node_modules/formdata-node/node_modules/web-streams-polyfill": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", - "engines": { - "node": ">= 14" - } - }, - "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-extra": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", - "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "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==" - }, - "node_modules/fx-runner": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/fx-runner/-/fx-runner-1.4.0.tgz", - "integrity": "sha512-rci1g6U0rdTg6bAaBboP7XdRu01dzTAaKXxFf+PUqGuCv6Xu7o8NZdY1D5MvKGIjb6EdS1g3VlXOgksir1uGkg==", - "dependencies": { - "commander": "2.9.0", - "shell-quote": "1.7.3", - "spawn-sync": "1.0.15", - "when": "3.7.7", - "which": "1.2.4", - "winreg": "0.0.12" - }, - "bin": { - "fx-runner": "bin/fx-runner" - } - }, - "node_modules/fx-runner/node_modules/commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==", - "dependencies": { - "graceful-readlink": ">= 1.0.0" - }, - "engines": { - "node": ">= 0.6.x" - } - }, - "node_modules/fx-runner/node_modules/isexe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz", - "integrity": "sha512-d2eJzK691yZwPHcv1LbeAOa91yMJ9QmfTgSO1oXB65ezVhXQsxBac2vEB4bMVms9cGzaA99n6V2viHMq82VLDw==" - }, - "node_modules/fx-runner/node_modules/which": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/which/-/which-1.2.4.tgz", - "integrity": "sha512-zDRAqDSBudazdfM9zpiI30Fu9ve47htYXcGi3ln0wfKu2a7SmrT6F3VDoYONu//48V8Vz4TdCRNPjtvyRO3yBA==", - "dependencies": { - "is-absolute": "^0.1.7", - "isexe": "^1.1.1" - }, - "bin": { - "which": "bin/which" - } - }, - "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/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "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/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/got": { - "version": "12.6.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", - "dependencies": { - "@sindresorhus/is": "^5.2.0", - "@szmarczak/http-timer": "^5.0.1", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", - "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/got/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==" - }, - "node_modules/graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" - }, - "node_modules/growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==" - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-yarn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", - "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/http2-wrapper": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "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/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz", - "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==", - "dependencies": { - "queue": "6.0.2" - }, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=16.x" - } - }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "engines": { - "node": ">=0.8.19" - } - }, - "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==", - "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==" - }, - "node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/inquirer/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/inquirer/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/invert-kv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", - "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sindresorhus/invert-kv?sponsor=1" - } - }, - "node_modules/is-absolute": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz", - "integrity": "sha512-Xi9/ZSn4NFapG8RP98iNPMOeaV3mXPisxKxzKtHVqr3g56j/fBn+yZmnxSVAA8lmZbl2J9b/a4kJvfU3hqQYgA==", - "dependencies": { - "is-relative": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "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==", - "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", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-mergeable-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-mergeable-object/-/is-mergeable-object-1.1.1.tgz", - "integrity": "sha512-CPduJfuGg8h8vW74WOxHtHmtQutyQBzR+3MjQ6iDHIYdbOnm1YC7jv43SqCoU8OPGTJD4nibmiryA4kmogbGrA==" - }, - "node_modules/is-npm": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", - "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-relative": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz", - "integrity": "sha512-wBOr+rNM4gkAZqoLRJI4myw5WzzIdQosFAAbnvfXP5z1LyzgAI3ivOKehC5KfqlQJZoihVhirgtCBj378Eg8GA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==" - }, - "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==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-yarn-global": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz", - "integrity": "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" - }, - "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jed": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/jed/-/jed-1.1.1.tgz", - "integrity": "sha512-z35ZSEcXHxLW4yumw0dF6L464NT36vmx3wxJw8MDpraBcWuNVgUPZgPJKcu1HekNgwlMFNqol7i/IpSbjhqwqA==" - }, - "node_modules/jose": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.13.1.tgz", - "integrity": "sha512-MSJQC5vXco5Br38mzaQKiq9mwt7lwj2eXpgpRyQYNHYt2lq1PjkWa7DLXX0WVcQLE9HhMh3jPiufS7fhJf+CLQ==", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" - }, - "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==" - }, - "node_modules/json-merge-patch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-merge-patch/-/json-merge-patch-1.0.2.tgz", - "integrity": "sha512-M6Vp2GN9L7cfuMXiWOmHj9bEFbeC250iVtcKQbqVgEsDVYnIsrNsbU+h/Y/PkbBQCtEa4Bez+Ebv0zfbC8ObLg==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonwebtoken": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", - "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", - "dependencies": { - "jws": "^3.2.2", - "lodash": "^4.17.21", - "ms": "^2.1.1", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/jszip": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - } - }, - "node_modules/jszip/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/jszip/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/jszip/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "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==", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/latest-version": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", - "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", - "dependencies": { - "package-json": "^8.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lcid": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", - "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==", - "dependencies": { - "invert-kv": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "dependencies": { - "immediate": "~3.0.5" - } - }, - "node_modules/lighthouse-logger": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", - "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", - "dependencies": { - "debug": "^2.6.9", - "marky": "^1.2.2" - } - }, - "node_modules/lighthouse-logger/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/lighthouse-logger/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/lines-and-columns": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", - "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/loading-cli": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/loading-cli/-/loading-cli-1.1.2.tgz", - "integrity": "sha512-M1ntfXHpdGoQxfaqKBOQPwSrTr9EIoTgj664Q9UVSbSnJvAFdribo+Ij//1jvACgrGHaTvfKoD9PG3NOxGj44g==", - "dependencies": { - "colors-cli": "^1.0.26" - }, - "funding": { - "url": "https://jaywcjlove.github.io/#/sponsor" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "node_modules/lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - }, - "node_modules/map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dependencies": { - "p-defer": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/marky": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", - "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==" - }, - "node_modules/mem": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/mem/-/mem-5.1.1.tgz", - "integrity": "sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw==", - "dependencies": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^2.1.0", - "p-is-promise": "^2.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "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/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/moment": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", - "optional": true, - "engines": { - "node": "*" - } - }, - "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/multimatch": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-6.0.0.tgz", - "integrity": "sha512-I7tSVxHGPlmPN/enE3mS1aOSo6bWBfls+3HmuEeCUBCE7gWnm3cBXCBkpurzFjVRwC6Kld8lLaZ1Iv5vOcjvcQ==", - "dependencies": { - "@types/minimatch": "^3.0.5", - "array-differ": "^4.0.0", - "array-union": "^3.0.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, - "node_modules/mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", - "optional": true, - "dependencies": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/mv/node_modules/glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", - "optional": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mv/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "optional": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mv/node_modules/rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", - "optional": true, - "dependencies": { - "glob": "^6.0.1" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nan": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", - "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", - "optional": true - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "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/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - }, - "node_modules/ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", - "optional": true, - "bin": { - "ncp": "bin/ncp" - } - }, - "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.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz", - "integrity": "sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==", - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-notifier": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.1.tgz", - "integrity": "sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==", - "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.5", - "shellwords": "^0.1.1", - "uuid": "^8.3.2", - "which": "^2.0.2" - } - }, - "node_modules/normalize-url": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", - "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/on-exit-leak-free": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", - "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", - "engines": { - "node": ">=14.0.0" - } - }, - "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==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "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/openai": { - "version": "4.56.0", - "resolved": "https://registry.npmjs.org/openai/-/openai-4.56.0.tgz", - "integrity": "sha512-zcag97+3bG890MNNa0DQD9dGmmTWL8unJdNkulZzWRXrl+QeD+YkBI4H58rJcwErxqGK6a0jVPZ4ReJjhDGcmw==", - "dependencies": { - "@types/node": "^18.11.18", - "@types/node-fetch": "^2.6.4", - "abort-controller": "^3.0.0", - "agentkeepalive": "^4.2.1", - "form-data-encoder": "1.7.2", - "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7" - }, - "bin": { - "openai": "bin/cli" - }, - "peerDependencies": { - "zod": "^3.23.8" - }, - "peerDependenciesMeta": { - "zod": { - "optional": true - } - } - }, - "node_modules/openai/node_modules/@types/node": { - "version": "18.19.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.45.tgz", - "integrity": "sha512-VZxPKNNhjKmaC1SUYowuXSRSMGyQGmQjvvA1xE4QZ0xce2kLtEhPDS+kqpCPBZYgqblCLQ2DAjSzmgCM5auvhA==", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/openai/node_modules/form-data-encoder": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", - "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==" - }, - "node_modules/openai/node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/os-locale": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-5.0.0.tgz", - "integrity": "sha512-tqZcNEDAIZKBEPnHPlVDvKrp7NzgLi7jRmhKiUoa2NUmhl13FtkAGLUVR+ZsYvApBQdBfYm43A4tXXQ4IrYLBA==", - "dependencies": { - "execa": "^4.0.0", - "lcid": "^3.0.0", - "mem": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/os-shim": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", - "integrity": "sha512-jd0cvB8qQ5uVt0lvCIexBaROw1KyKm5sbulg2fWOHjETisuCzWyt+eTZKEMs8v6HwzoGs8xik26jg7eCM6pS+A==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/package-json": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", - "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", - "dependencies": { - "got": "^12.1.0", - "registry-auth-token": "^5.0.1", - "registry-url": "^6.0.0", - "semver": "^7.3.7" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-6.0.2.tgz", - "integrity": "sha512-SA5aMiaIjXkAiBrW/yPgLgQAQg42f7K3ACO+2l/zOvtQBwX58DMUsFJXelW2fx3yMBmWOVkR6j1MGsdSbCA4UA==", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "error-ex": "^1.3.2", - "json-parse-even-better-errors": "^2.3.1", - "lines-and-columns": "^2.0.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "dependencies": { - "domhandler": "^5.0.2", - "parse5": "^7.0.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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", - "engines": { - "node": "14 || >=16.14" - } - }, - "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==" - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/pino": { - "version": "8.17.2", - "resolved": "https://registry.npmjs.org/pino/-/pino-8.17.2.tgz", - "integrity": "sha512-LA6qKgeDMLr2ux2y/YiUt47EfgQ+S9LznBWOJdN3q1dx2sv0ziDLUBeVpyVv17TEcGCBuWf0zNtg3M5m1NhhWQ==", - "dependencies": { - "atomic-sleep": "^1.0.0", - "fast-redact": "^3.1.1", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "v1.1.0", - "pino-std-serializers": "^6.0.0", - "process-warning": "^3.0.0", - "quick-format-unescaped": "^4.0.3", - "real-require": "^0.2.0", - "safe-stable-stringify": "^2.3.1", - "sonic-boom": "^3.7.0", - "thread-stream": "^2.0.0" - }, - "bin": { - "pino": "bin.js" - } - }, - "node_modules/pino-abstract-transport": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz", - "integrity": "sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==", - "dependencies": { - "readable-stream": "^4.0.0", - "split2": "^4.0.0" - } - }, - "node_modules/pino-std-serializers": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", - "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==" - }, - "node_modules/postcss": { - "version": "8.4.33", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", - "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", - "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.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/process-warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", - "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==" - }, - "node_modules/promise-toolbox": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/promise-toolbox/-/promise-toolbox-0.21.0.tgz", - "integrity": "sha512-NV8aTmpwrZv+Iys54sSFOBx3tuVaOBvvrft5PNppnxy9xpU/akHbaWIril22AB22zaPgrgwKdD0KsrM0ptUtpg==", - "dependencies": { - "make-error": "^1.3.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" - }, - "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==" - }, - "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/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "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/pupa": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", - "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", - "dependencies": { - "escape-goat": "^4.0.0" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "dependencies": { - "inherits": "~2.0.3" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "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/quick-format-unescaped": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", - "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/real-require": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", - "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "node_modules/registry-auth-token": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", - "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", - "dependencies": { - "@pnpm/npm-conf": "^2.1.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/registry-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", - "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", - "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/relaxed-json": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/relaxed-json/-/relaxed-json-1.0.3.tgz", - "integrity": "sha512-b7wGPo7o2KE/g7SqkJDDbav6zmrEeP4TK2VpITU72J/M949TLe/23y/ZHJo+pskcGM52xIfFoT9hydwmgr1AEg==", - "dependencies": { - "chalk": "^2.4.2", - "commander": "^2.6.0" - }, - "bin": { - "rjson": "bin/rjson.js" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/relaxed-json/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/relaxed-json/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/relaxed-json/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/relaxed-json/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/relaxed-json/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/relaxed-json/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/relaxed-json/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/relaxed-json/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, - "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-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/responselike": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", - "dependencies": { - "lowercase-keys": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "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/safe-json-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "optional": true - }, - "node_modules/safe-stable-stringify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", - "engines": { - "node": ">=10" - } - }, - "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/sax": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", - "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", - "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" - }, - "node_modules/shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" - }, - "node_modules/sign-addon": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/sign-addon/-/sign-addon-5.3.0.tgz", - "integrity": "sha512-7nHlCzhQgVMLBNiXVEgbG/raq48awOW0lYMN5uo1BaB3mp0+k8M8pvDwbfTlr3apcxZJsk9HQsAW1POwoJugpQ==", - "dependencies": { - "common-tags": "1.8.2", - "core-js": "3.29.0", - "deepcopy": "2.1.0", - "es6-error": "4.1.1", - "es6-promisify": "7.0.0", - "jsonwebtoken": "9.0.0", - "mz": "2.7.0", - "request": "2.88.2", - "source-map-support": "0.5.21", - "stream-to-promise": "3.0.0" - } - }, - "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==" - }, - "node_modules/sonic-boom": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.0.tgz", - "integrity": "sha512-ybz6OYOUjoQQCQ/i4LU8kaToD8ACtYP+Cj5qd2AO36bwbdewxWJ3ArmJ2cr6AvxlL2o0PqnCcPGUgkILbfkaCA==", - "dependencies": { - "atomic-sleep": "^1.0.0" - } - }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/spawn-sync": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz", - "integrity": "sha512-9DWBgrgYZzNghseho0JOuh+5fg9u6QWhAWa51QC7+U5rCheZ/j1DrEZnyE0RBBRqZ9uEXGPgSSM0nky6burpVw==", - "hasInstallScript": true, - "dependencies": { - "concat-stream": "^1.4.7", - "os-shim": "^0.1.2" - } - }, - "node_modules/split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "engines": { - "node": ">= 10.x" - } - }, - "node_modules/sshpk": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", - "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stream-to-array": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", - "integrity": "sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==", - "dependencies": { - "any-promise": "^1.1.0" - } - }, - "node_modules/stream-to-promise": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-to-promise/-/stream-to-promise-3.0.0.tgz", - "integrity": "sha512-h+7wLeFiYegOdgTfTxjRsrT7/Op7grnKEIHWgaO1RTHwcwk7xRreMr3S8XpDfDMesSxzgM2V4CxNCFAGo6ssnA==", - "dependencies": { - "any-promise": "~1.3.0", - "end-of-stream": "~1.4.1", - "stream-to-array": "~2.3.0" - }, - "engines": { - "node": ">= 10" - } - }, - "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==", - "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", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "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/string-width-cjs/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/string-width/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "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/strip-ansi-cjs": { - "name": "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/strip-bom": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-5.0.0.tgz", - "integrity": "sha512-p+byADHF7SzEcVnLvc/r3uognM1hUhObuHXxJcgLCfD194XAkaLbjq3Wzb0N5G2tgIjH0dgT708Z51QxMeu60A==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-bom-buf": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-2.0.0.tgz", - "integrity": "sha512-gLFNHucd6gzb8jMsl5QmZ3QgnUJmp7qn4uUSHNwEXumAp7YizoGYw19ZUVfuq4aBOQUtyn2k8X/CwzWB73W2lQ==", - "dependencies": { - "is-utf8": "^0.2.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom-stream": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-4.0.0.tgz", - "integrity": "sha512-0ApK3iAkHv6WbgLICw/J4nhwHeDZsBxIIsOD+gHgZICL6SeJ0S9f/WZqemka9cjkTyMN5geId6e8U5WGFAn3cQ==", - "dependencies": { - "first-chunk-stream": "^3.0.0", - "strip-bom-buf": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/thread-stream": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.4.1.tgz", - "integrity": "sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg==", - "dependencies": { - "real-require": "^0.2.0" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - }, - "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tosource": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tosource/-/tosource-1.0.0.tgz", - "integrity": "sha512-N6g8eQ1eerw6Y1pBhdgkubWIiPFwXa2POSUrlL8jth5CyyEWNWzoGKRkO3CaO7Jx27hlJP54muB3btIAbx4MPg==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/undici": { - "version": "5.28.4", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", - "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=14.0" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" - }, - "node_modules/unique-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", - "dependencies": { - "crypto-random-string": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-notifier": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz", - "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==", - "dependencies": { - "boxen": "^7.0.0", - "chalk": "^5.0.1", - "configstore": "^6.0.0", - "has-yarn": "^3.0.0", - "import-lazy": "^4.0.0", - "is-ci": "^3.0.1", - "is-installed-globally": "^0.4.0", - "is-npm": "^6.0.0", - "is-yarn-global": "^0.4.0", - "latest-version": "^7.0.0", - "pupa": "^3.1.0", - "semver": "^7.3.7", - "semver-diff": "^4.0.0", - "xdg-basedir": "^5.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/web-ext": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-7.11.0.tgz", - "integrity": "sha512-EG6YXHITNDJB/h6Rc5FF08eMoN45sZPBBIIlEraBzxJ0RdJZ8Z3xvUUawbDwt+mowfv9X0XRWlLSwdWbRKgojg==", - "dependencies": { - "@babel/runtime": "7.21.0", - "@devicefarmer/adbkit": "3.2.3", - "addons-linter": "6.21.0", - "bunyan": "1.8.15", - "camelcase": "7.0.1", - "chrome-launcher": "0.15.1", - "debounce": "1.2.1", - "decamelize": "6.0.0", - "es6-error": "4.1.1", - "firefox-profile": "4.3.2", - "fs-extra": "11.1.0", - "fx-runner": "1.4.0", - "import-fresh": "3.3.0", - "jose": "4.13.1", - "mkdirp": "1.0.4", - "multimatch": "6.0.0", - "mz": "2.7.0", - "node-fetch": "3.3.1", - "node-notifier": "10.0.1", - "open": "8.4.2", - "parse-json": "6.0.2", - "promise-toolbox": "0.21.0", - "sign-addon": "5.3.0", - "source-map-support": "0.5.21", - "strip-bom": "5.0.0", - "strip-json-comments": "5.0.0", - "tmp": "0.2.1", - "update-notifier": "6.0.2", - "watchpack": "2.4.0", - "ws": "8.13.0", - "yargs": "17.7.1", - "zip-dir": "2.0.0" - }, - "bin": { - "web-ext": "bin/web-ext.js" - }, - "engines": { - "node": ">=14.0.0", - "npm": ">=6.9.0" - } - }, - "node_modules/web-ext/node_modules/strip-json-comments": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.0.tgz", - "integrity": "sha512-V1LGY4UUo0jgwC+ELQ2BNWfPa17TIuwBLg+j1AA/9RPzKINl1lhxVEu2r+ZTTO8aetIsUzE5Qj6LMSBkoGYKKw==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/when": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/when/-/when-3.7.7.tgz", - "integrity": "sha512-9lFZp/KHoqH6bPKjbWqa+3Dg/K/r2v0X/3/G2x4DBGchVS2QX2VXL3cZV994WQVnTM1/PD71Az25nAzryEUugw==" - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", - "dependencies": { - "string-width": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/winreg": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/winreg/-/winreg-0.0.12.tgz", - "integrity": "sha512-typ/+JRmi7RqP1NanzFULK36vczznSNN8kWVA9vIqXyv8GhghUlwhGp1Xj3Nms1FsPcNnsQrJOR10N58/nQ9hQ==" - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "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==", - "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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "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==" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "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/xdg-basedir": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", - "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/xml2js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yaml": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", - "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs/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/yargs/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/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zip-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/zip-dir/-/zip-dir-2.0.0.tgz", - "integrity": "sha512-uhlsJZWz26FLYXOD6WVuq+fIcZ3aBPGo/cFdiLlv3KNwpa52IF3ISV8fLhQLiqVu5No3VhlqlgthN6gehil1Dg==", - "dependencies": { - "async": "^3.2.0", - "jszip": "^3.2.2" - } - } - }, - "dependencies": { - "@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==" - }, - "@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", - "requires": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" - }, - "@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", - "requires": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", - "requires": { - "regenerator-runtime": "^0.13.11" - } - }, - "@devicefarmer/adbkit": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit/-/adbkit-3.2.3.tgz", - "integrity": "sha512-wK9rVrabs4QU0oK8Jnwi+HRBEm+s1x/o63kgthUe0y7K1bfcYmgLuQf41/adsj/5enddlSxzkJavl2EwOu+r1g==", - "requires": { - "@devicefarmer/adbkit-logcat": "^2.1.2", - "@devicefarmer/adbkit-monkey": "~1.2.0", - "bluebird": "~3.7", - "commander": "^9.1.0", - "debug": "~4.3.1", - "node-forge": "^1.3.1", - "split": "~1.0.1" - } - }, - "@devicefarmer/adbkit-logcat": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit-logcat/-/adbkit-logcat-2.1.3.tgz", - "integrity": "sha512-yeaGFjNBc/6+svbDeul1tNHtNChw6h8pSHAt5D+JsedUrMTN7tla7B15WLDyekxsuS2XlZHRxpuC6m92wiwCNw==" - }, - "@devicefarmer/adbkit-monkey": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit-monkey/-/adbkit-monkey-1.2.1.tgz", - "integrity": "sha512-ZzZY/b66W2Jd6NHbAhLyDWOEIBWC11VizGFk7Wx7M61JZRz7HR9Cq5P+65RKWUU7u6wgsE8Lmh9nE4Mz+U2eTg==" - }, - "@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "requires": { - "eslint-visitor-keys": "^3.3.0" - } - }, - "@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==" - }, - "@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - } - }, - "@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==" - }, - "@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==" - }, - "@fluent/syntax": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@fluent/syntax/-/syntax-0.19.0.tgz", - "integrity": "sha512-5D2qVpZrgpjtqU4eNOcWGp1gnUCgjfM+vKGE2y03kKN6z5EBhtx0qdRFbg8QuNNj8wXNoX93KJoYb+NqoxswmQ==" - }, - "@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", - "requires": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" - }, - "@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==" - }, - "@iamtraction/google-translate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@iamtraction/google-translate/-/google-translate-2.0.1.tgz", - "integrity": "sha512-kOTkt23zflxpgxLIe9tLvDU8IvNscXYbgMSXydNkZGWDtJ75YJiU3v7EBz+t7h/gSiY7sT5r4dlFkMrHCl+N6A==", - "requires": { - "undici": "^5.12.0" - } - }, - "@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "requires": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "@mdn/browser-compat-data": { - "version": "5.5.7", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.5.7.tgz", - "integrity": "sha512-DoHTZ/TjtNfUu9eiqJd+x3IcCQrhS+yOYU436TKUnlE36jZwNbK535D1CmTsSYdi/UcdCWNm5KRQZ9g1tlZCPw==" - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@parvineyvazov/json-translator": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@parvineyvazov/json-translator/-/json-translator-3.1.0.tgz", - "integrity": "sha512-lfDnL6lxy92z6/TckJmlmp89Hn5HybmyGGwcisnuD+FDajEYfxUxqVRNx6AwJq6bcJR4Aoq05CmY5xz9JiN8NQ==", - "requires": { - "@iamtraction/google-translate": "^2.0.1", - "@types/bluebird": "^3.5.36", - "@types/filesystem": "^0.0.32", - "@vitalets/google-translate-api": "^9.2.0", - "axios": "^1.2.2", - "bing-translate-api": "^2.8.0", - "bluebird": "^3.7.2", - "commander": "^10.0.1", - "cwait": "^1.1.2", - "figlet": "^1.6.0", - "http-proxy-agent": "^5.0.0", - "inquirer": "^7.0.0", - "loading-cli": "^1.1.0", - "openai": "^4.52.3", - "yaml": "^2.3.2" - }, - "dependencies": { - "commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==" - } - } - }, - "@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "optional": true - }, - "@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==" - }, - "@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "requires": { - "graceful-fs": "4.2.10" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - } - } - }, - "@pnpm/npm-conf": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", - "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", - "requires": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - } - }, - "@sindresorhus/is": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==" - }, - "@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "requires": { - "defer-to-connect": "^2.0.1" - } - }, - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==" - }, - "@types/bluebird": { - "version": "3.5.42", - "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.42.tgz", - "integrity": "sha512-Jhy+MWRlro6UjVi578V/4ZGNfeCOcNCp0YaFNIUGFKlImowqwb1O/22wDVk3FDGMLqxdpOV3qQHD5fPEH4hK6A==" - }, - "@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "requires": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" - } - }, - "@types/filesystem": { - "version": "0.0.32", - "resolved": "https://registry.npmjs.org/@types/filesystem/-/filesystem-0.0.32.tgz", - "integrity": "sha512-Yuf4jR5YYMR2DVgwuCiP11s0xuVRyPKmz8vo6HBY3CGdeMj8af93CFZX+T82+VD1+UqHOxTq31lO7MI7lepBtQ==", - "requires": { - "@types/filewriter": "*" - } - }, - "@types/filewriter": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/filewriter/-/filewriter-0.0.33.tgz", - "integrity": "sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==" - }, - "@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" - }, - "@types/http-errors": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.2.tgz", - "integrity": "sha512-EqX+YQxINb+MeXaIqYDASb6U6FCHbWjkj4a1CKDBks3d/QiB2+PqBLyO72vLDgAO1wUI4O+9gweRcQK11bTL/w==" - }, - "@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "requires": { - "@types/node": "*" - } - }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" - }, - "@types/node": { - "version": "20.10.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.6.tgz", - "integrity": "sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw==", - "requires": { - "undici-types": "~5.26.4" - } - }, - "@types/node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==", - "requires": { - "@types/node": "*", - "form-data": "^4.0.0" - }, - "dependencies": { - "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==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - } - } - }, - "@types/responselike": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", - "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", - "requires": { - "@types/node": "*" - } - }, - "@types/yauzl": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", - "requires": { - "@types/node": "*" - } - }, - "@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" - }, - "@vitalets/google-translate-api": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@vitalets/google-translate-api/-/google-translate-api-9.2.0.tgz", - "integrity": "sha512-w98IPWGuexlGmh8Y19AxF6cgWT0U5JLevVNDKEuFpTWtBC9z3YtDWKTDxF3nPP1k9bWicuB1V7I7YfHoZiDScw==", - "requires": { - "@types/http-errors": "^1.8.2", - "http-errors": "^2.0.0", - "node-fetch": "^2.6.7" - }, - "dependencies": { - "node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "requires": { - "whatwg-url": "^5.0.0" - } - } - } - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==" - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "requires": {} - }, - "addons-linter": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-6.21.0.tgz", - "integrity": "sha512-4GBn14BR16FZE7dog6uz+1HO6V3B+mAVxmbwxRhed2y5eyrwIW832TmEpku+5A5bbovBZ4gilXEtBsl6A1AMmg==", - "requires": { - "@fluent/syntax": "0.19.0", - "@mdn/browser-compat-data": "5.5.7", - "addons-moz-compare": "1.3.0", - "addons-scanner-utils": "9.9.0", - "ajv": "8.12.0", - "chalk": "4.1.2", - "cheerio": "1.0.0-rc.12", - "columnify": "1.6.0", - "common-tags": "1.8.2", - "deepmerge": "4.3.1", - "eslint": "8.56.0", - "eslint-plugin-no-unsanitized": "4.0.2", - "eslint-visitor-keys": "3.4.3", - "espree": "9.6.1", - "esprima": "4.0.1", - "fast-json-patch": "3.1.1", - "glob": "10.3.10", - "image-size": "1.1.1", - "is-mergeable-object": "1.1.1", - "jed": "1.1.1", - "json-merge-patch": "1.0.2", - "os-locale": "5.0.0", - "pino": "8.17.2", - "postcss": "8.4.33", - "relaxed-json": "1.0.3", - "semver": "7.5.4", - "sha.js": "2.4.11", - "source-map-support": "0.5.21", - "tosource": "1.0.0", - "upath": "2.0.1", - "yargs": "17.7.2", - "yauzl": "2.10.0" - }, - "dependencies": { - "addons-scanner-utils": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-9.9.0.tgz", - "integrity": "sha512-YDP10U3sEZMuIgnjXMiAYgUU64jTbxmhpUXMlhi1nKO4Etz+ctGWoTUst7IQRoLWaY9y2r1KZDG3jALxLA1n7Q==", - "requires": { - "@types/yauzl": "2.10.3", - "common-tags": "1.8.2", - "first-chunk-stream": "3.0.0", - "strip-bom-stream": "4.0.0", - "upath": "2.0.1", - "yauzl": "2.10.0" - } - }, - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "requires": { - "balanced-match": "^1.0.0" - } - }, - "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==" - }, - "glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", - "optional": true, - "peer": true, - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "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==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } - } - } - }, - "addons-moz-compare": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/addons-moz-compare/-/addons-moz-compare-1.3.0.tgz", - "integrity": "sha512-/rXpQeaY0nOKhNx00pmZXdk5Mu+KhVlL3/pSBuAYwrxRrNiTvI/9xfQI8Lmm7DMMl+PDhtfAHY/0ibTpdeoQQQ==" - }, - "adm-zip": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz", - "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==" - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", - "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", - "requires": { - "humanize-ms": "^1.2.1" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "requires": { - "string-width": "^4.1.0" - }, - "dependencies": { - "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==" - }, - "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==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" - } - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "array-differ": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-4.0.0.tgz", - "integrity": "sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw==" - }, - "array-union": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", - "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==" - }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" - }, - "async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "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==" - }, - "atomic-sleep": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", - "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" - }, - "aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" - }, - "axios": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz", - "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==", - "requires": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - }, - "dependencies": { - "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==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - } - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bing-translate-api": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/bing-translate-api/-/bing-translate-api-2.10.0.tgz", - "integrity": "sha512-jAxLMMftjB9KizG/IqUz+pyfB6n4Q8zu7LVgbAULeHbBvOy+Enwxm+f2uNrKTeiO4tKhNqi13Kjk29DOc+q/zw==", - "requires": { - "got": "^11.8.6" - }, - "dependencies": { - "@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==" - }, - "@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "requires": { - "defer-to-connect": "^2.0.0" - } - }, - "cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==" - }, - "cacheable-request": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", - "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - } - }, - "got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "requires": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - } - }, - "http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "requires": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" - }, - "p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" - }, - "responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "requires": { - "lowercase-keys": "^2.0.0" - } - } - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "boxen": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", - "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", - "requires": { - "ansi-align": "^3.0.1", - "camelcase": "^7.0.1", - "chalk": "^5.2.0", - "cli-boxes": "^3.0.0", - "string-width": "^5.1.2", - "type-fest": "^2.13.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.1.0" - }, - "dependencies": { - "chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==" - }, - "type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" - }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "bunyan": { - "version": "1.8.15", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", - "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", - "requires": { - "dtrace-provider": "~0.8", - "moment": "^2.19.3", - "mv": "~2", - "safe-json-stringify": "~1" - } - }, - "cacheable-lookup": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==" - }, - "cacheable-request": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", - "requires": { - "@types/http-cache-semantics": "^4.0.2", - "get-stream": "^6.0.1", - "http-cache-semantics": "^4.1.1", - "keyv": "^4.5.3", - "mimic-response": "^4.0.0", - "normalize-url": "^8.0.0", - "responselike": "^3.0.0" - }, - "dependencies": { - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" - } - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "camelcase": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", - "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==" - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" - }, - "cdata": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/cdata/-/cdata-0.1.3.tgz", - "integrity": "sha512-z0R4cT5357OEAVkP1CEFTHz1egpu2gYiWm2WJOY/sQDhojEXUYL4m3v2kYi5wER3PkMRL+GgfDhed2kGzrHSZA==" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - }, - "cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "requires": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - } - }, - "cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "requires": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - } - }, - "chrome-launcher": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.1.tgz", - "integrity": "sha512-UugC8u59/w2AyX5sHLZUHoxBAiSiunUhZa3zZwMH6zPVis0C3dDKiRWyUGIo14tTbZHGVviWxv3PQWZ7taZ4fg==", - "requires": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0" - } - }, - "ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==" - }, - "cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==" - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" - }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "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==" - }, - "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==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "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==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" - }, - "clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "requires": { - "mimic-response": "^1.0.0" - }, - "dependencies": { - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - } - } - }, - "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==", - "requires": { - "color-name": "~1.1.4" - } - }, - "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==" - }, - "colors-cli": { - "version": "1.0.33", - "resolved": "https://registry.npmjs.org/colors-cli/-/colors-cli-1.0.33.tgz", - "integrity": "sha512-PWGsmoJFdOB0t+BeHgmtuoRZUQucOLl5ii81NBzOOGVxlgE04muFNHlR5j8i8MKbOPELBl3243AI6lGBTj5ICQ==" - }, - "columnify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", - "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", - "requires": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - } - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==" - }, - "common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - }, - "dependencies": { - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - } - } - }, - "configstore": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", - "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", - "requires": { - "dot-prop": "^6.0.1", - "graceful-fs": "^4.2.6", - "unique-string": "^3.0.0", - "write-file-atomic": "^3.0.3", - "xdg-basedir": "^5.0.1" - } - }, - "core-js": { - "version": "3.29.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.29.0.tgz", - "integrity": "sha512-VG23vuEisJNkGl6XQmFJd3rEG/so/CNatqeE+7uZAwTSwFeB/qaO0be8xZYUNWprJ/GIwL8aMt9cj1kvbpTZhg==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-random-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", - "requires": { - "type-fest": "^1.0.1" - }, - "dependencies": { - "type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==" - } - } - }, - "css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" - }, - "cwait": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cwait/-/cwait-1.1.2.tgz", - "integrity": "sha512-kIx8zE5jJ1iBgZytTr01aj57HdC+thPsg8W9Tw0gbf30/F7wfRRUS+BiXT90Dn+A0oGtF0xLT5293Ua4w/ZsNA==", - "requires": { - "cdata": "^0.1.1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "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==" - }, - "debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz", - "integrity": "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==" - }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "requires": { - "mimic-response": "^3.1.0" - }, - "dependencies": { - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" - } - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "deepcopy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/deepcopy/-/deepcopy-2.1.0.tgz", - "integrity": "sha512-8cZeTb1ZKC3bdSCP6XOM1IsTczIO73fdqtwa2B0N15eAz7gmyhQo+mc5gnFuulsgN3vIQYmTgbmQVKalH1dKvQ==", - "requires": { - "type-detect": "^4.0.8" - } - }, - "deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==" - }, - "defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "requires": { - "clone": "^1.0.2" - } - }, - "defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" - }, - "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==" - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - } - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" - }, - "domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "requires": { - "domelementtype": "^2.3.0" - } - }, - "domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - } - }, - "dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "requires": { - "is-obj": "^2.0.0" - } - }, - "dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==" - }, - "dtrace-provider": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", - "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", - "optional": true, - "requires": { - "nan": "^2.14.0" - } - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" - }, - "es6-promisify": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-7.0.0.tgz", - "integrity": "sha512-ginqzK3J90Rd4/Yz7qRrqUeIpe3TwSXTPPZtPne7tGBPeAaQiU8qt4fpKApnxHcq1AwtUdHVg5P77x/yrggG8Q==" - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-goat": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", - "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==" - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - } - }, - "eslint-plugin-no-unsanitized": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-4.0.2.tgz", - "integrity": "sha512-Pry0S9YmHoz8NCEMRQh7N0Yexh2MYCNPIlrV52hTmS7qXnTghWsjXouF08bgsrrZqaW9tt1ZiK3j5NEmPE+EjQ==", - "requires": {} - }, - "eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==" - }, - "espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "requires": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "dependencies": { - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "requires": { - "os-tmpdir": "~1.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-json-patch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz", - "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==" - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "fast-redact": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.4.0.tgz", - "integrity": "sha512-2gwPvyna0zwBdxKnng1suu/dTL5s8XEy2ZqH8mwDUwJdDkV8w5kp+JV26mupdK68HmPMbm6yjW9m7/Ys/BHEHg==" - }, - "fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "requires": { - "reusify": "^1.0.4" - } - }, - "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==", - "requires": { - "pend": "~1.2.0" - } - }, - "fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "requires": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - } - }, - "figlet": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.7.0.tgz", - "integrity": "sha512-gO8l3wvqo0V7wEFLXPbkX83b7MVjRrk1oRLfYlZXol8nEpb/ON9pcKLI4qpBv5YtOTfrINtqb7b40iYY2FTWFg==" - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "requires": { - "escape-string-regexp": "^1.0.5" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - } - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "requires": { - "flat-cache": "^3.0.4" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "firefox-profile": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.3.2.tgz", - "integrity": "sha512-/C+Eqa0YgIsQT2p66p7Ygzqe7NlE/GNTbhw2SBCm5V3OsWDPITNdTPEcH2Q2fe7eMpYYNPKdUcuVioZBZiR6kA==", - "requires": { - "adm-zip": "~0.5.x", - "fs-extra": "~9.0.1", - "ini": "~2.0.0", - "minimist": "^1.2.5", - "xml2js": "^0.5.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - } - }, - "universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" - } - } - }, - "first-chunk-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-3.0.0.tgz", - "integrity": "sha512-LNRvR4hr/S8cXXkIY5pTgVP7L3tq6LlYWcg9nWBuW7o1NMxKZo6oOVa/6GIekMGI0Iw7uC+HWimMe9u/VAeKqw==" - }, - "flat-cache": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", - "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", - "requires": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==" - }, - "follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==" - }, - "foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "dependencies": { - "signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" - } - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "form-data-encoder": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==" - }, - "formdata-node": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", - "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", - "requires": { - "node-domexception": "1.0.0", - "web-streams-polyfill": "4.0.0-beta.3" - }, - "dependencies": { - "web-streams-polyfill": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==" - } - } - }, - "formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "requires": { - "fetch-blob": "^3.1.2" - } - }, - "fs-extra": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", - "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "fx-runner": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/fx-runner/-/fx-runner-1.4.0.tgz", - "integrity": "sha512-rci1g6U0rdTg6bAaBboP7XdRu01dzTAaKXxFf+PUqGuCv6Xu7o8NZdY1D5MvKGIjb6EdS1g3VlXOgksir1uGkg==", - "requires": { - "commander": "2.9.0", - "shell-quote": "1.7.3", - "spawn-sync": "1.0.15", - "when": "3.7.7", - "which": "1.2.4", - "winreg": "0.0.12" - }, - "dependencies": { - "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==", - "requires": { - "graceful-readlink": ">= 1.0.0" - } - }, - "isexe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz", - "integrity": "sha512-d2eJzK691yZwPHcv1LbeAOa91yMJ9QmfTgSO1oXB65ezVhXQsxBac2vEB4bMVms9cGzaA99n6V2viHMq82VLDw==" - }, - "which": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/which/-/which-1.2.4.tgz", - "integrity": "sha512-zDRAqDSBudazdfM9zpiI30Fu9ve47htYXcGi3ln0wfKu2a7SmrT6F3VDoYONu//48V8Vz4TdCRNPjtvyRO3yBA==", - "requires": { - "is-absolute": "^0.1.7", - "isexe": "^1.1.1" - } - } - } - }, - "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==" - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "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" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "requires": { - "is-glob": "^4.0.3" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "requires": { - "ini": "2.0.0" - } - }, - "globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "requires": { - "type-fest": "^0.20.2" - } - }, - "got": { - "version": "12.6.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", - "requires": { - "@sindresorhus/is": "^5.2.0", - "@szmarczak/http-timer": "^5.0.1", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", - "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" - }, - "dependencies": { - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" - } - } - }, - "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==" - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==" - }, - "graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==" - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==" - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "has-yarn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", - "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==" - }, - "htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "http2-wrapper": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", - "requires": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - } - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" - }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==" - }, - "image-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz", - "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==", - "requires": { - "queue": "6.0.2" - } - }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==" - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" - }, - "inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "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==" - }, - "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==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "invert-kv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", - "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==" - }, - "is-absolute": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz", - "integrity": "sha512-Xi9/ZSn4NFapG8RP98iNPMOeaV3mXPisxKxzKtHVqr3g56j/fBn+yZmnxSVAA8lmZbl2J9b/a4kJvfU3hqQYgA==", - "requires": { - "is-relative": "^0.1.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "requires": { - "ci-info": "^3.2.0" - } - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "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==" - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "requires": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - } - }, - "is-mergeable-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-mergeable-object/-/is-mergeable-object-1.1.1.tgz", - "integrity": "sha512-CPduJfuGg8h8vW74WOxHtHmtQutyQBzR+3MjQ6iDHIYdbOnm1YC7jv43SqCoU8OPGTJD4nibmiryA4kmogbGrA==" - }, - "is-npm": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", - "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==" - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" - }, - "is-relative": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz", - "integrity": "sha512-wBOr+rNM4gkAZqoLRJI4myw5WzzIdQosFAAbnvfXP5z1LyzgAI3ivOKehC5KfqlQJZoihVhirgtCBj378Eg8GA==" - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==" - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "requires": { - "is-docker": "^2.0.0" - } - }, - "is-yarn-global": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz", - "integrity": "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" - }, - "jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", - "requires": { - "@isaacs/cliui": "^8.0.2", - "@pkgjs/parseargs": "^0.11.0" - } - }, - "jed": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/jed/-/jed-1.1.1.tgz", - "integrity": "sha512-z35ZSEcXHxLW4yumw0dF6L464NT36vmx3wxJw8MDpraBcWuNVgUPZgPJKcu1HekNgwlMFNqol7i/IpSbjhqwqA==" - }, - "jose": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.13.1.tgz", - "integrity": "sha512-MSJQC5vXco5Br38mzaQKiq9mwt7lwj2eXpgpRyQYNHYt2lq1PjkWa7DLXX0WVcQLE9HhMh3jPiufS7fhJf+CLQ==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" - }, - "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==" - }, - "json-merge-patch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-merge-patch/-/json-merge-patch-1.0.2.tgz", - "integrity": "sha512-M6Vp2GN9L7cfuMXiWOmHj9bEFbeC250iVtcKQbqVgEsDVYnIsrNsbU+h/Y/PkbBQCtEa4Bez+Ebv0zfbC8ObLg==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "jsonwebtoken": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", - "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", - "requires": { - "jws": "^3.2.2", - "lodash": "^4.17.21", - "ms": "^2.1.1", - "semver": "^7.3.8" - } - }, - "jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "jszip": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "requires": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "requires": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "requires": { - "json-buffer": "3.0.1" - } - }, - "latest-version": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", - "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", - "requires": { - "package-json": "^8.1.0" - } - }, - "lcid": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", - "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==", - "requires": { - "invert-kv": "^3.0.0" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "requires": { - "immediate": "~3.0.5" - } - }, - "lighthouse-logger": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", - "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", - "requires": { - "debug": "^2.6.9", - "marky": "^1.2.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "lines-and-columns": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", - "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==" - }, - "loading-cli": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/loading-cli/-/loading-cli-1.1.2.tgz", - "integrity": "sha512-M1ntfXHpdGoQxfaqKBOQPwSrTr9EIoTgj664Q9UVSbSnJvAFdribo+Ij//1jvACgrGHaTvfKoD9PG3NOxGj44g==", - "requires": { - "colors-cli": "^1.0.26" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==" - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "requires": { - "p-defer": "^1.0.0" - } - }, - "marky": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", - "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==" - }, - "mem": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/mem/-/mem-5.1.1.tgz", - "integrity": "sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw==", - "requires": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^2.1.0", - "p-is-promise": "^2.1.0" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "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==", - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "mimic-response": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" - }, - "minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - }, - "moment": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", - "optional": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "multimatch": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-6.0.0.tgz", - "integrity": "sha512-I7tSVxHGPlmPN/enE3mS1aOSo6bWBfls+3HmuEeCUBCE7gWnm3cBXCBkpurzFjVRwC6Kld8lLaZ1Iv5vOcjvcQ==", - "requires": { - "@types/minimatch": "^3.0.5", - "array-differ": "^4.0.0", - "array-union": "^3.0.1", - "minimatch": "^3.0.4" - } - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, - "mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", - "optional": true, - "requires": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", - "optional": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "optional": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", - "optional": true, - "requires": { - "glob": "^6.0.1" - } - } - } - }, - "mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "nan": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", - "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", - "optional": true - }, - "nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - }, - "ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", - "optional": true - }, - "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==" - }, - "node-fetch": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz", - "integrity": "sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==", - "requires": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - } - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" - }, - "node-notifier": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.1.tgz", - "integrity": "sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==", - "requires": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.5", - "shellwords": "^0.1.1", - "uuid": "^8.3.2", - "which": "^2.0.2" - } - }, - "normalize-url": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", - "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==" - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "requires": { - "path-key": "^3.0.0" - } - }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "requires": { - "boolbase": "^1.0.0" - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "on-exit-leak-free": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", - "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "openai": { - "version": "4.56.0", - "resolved": "https://registry.npmjs.org/openai/-/openai-4.56.0.tgz", - "integrity": "sha512-zcag97+3bG890MNNa0DQD9dGmmTWL8unJdNkulZzWRXrl+QeD+YkBI4H58rJcwErxqGK6a0jVPZ4ReJjhDGcmw==", - "requires": { - "@types/node": "^18.11.18", - "@types/node-fetch": "^2.6.4", - "abort-controller": "^3.0.0", - "agentkeepalive": "^4.2.1", - "form-data-encoder": "1.7.2", - "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7" - }, - "dependencies": { - "@types/node": { - "version": "18.19.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.45.tgz", - "integrity": "sha512-VZxPKNNhjKmaC1SUYowuXSRSMGyQGmQjvvA1xE4QZ0xce2kLtEhPDS+kqpCPBZYgqblCLQ2DAjSzmgCM5auvhA==", - "requires": { - "undici-types": "~5.26.4" - } - }, - "form-data-encoder": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", - "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==" - }, - "node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "requires": { - "whatwg-url": "^5.0.0" - } - } - } - }, - "optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "requires": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - } - }, - "os-locale": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-5.0.0.tgz", - "integrity": "sha512-tqZcNEDAIZKBEPnHPlVDvKrp7NzgLi7jRmhKiUoa2NUmhl13FtkAGLUVR+ZsYvApBQdBfYm43A4tXXQ4IrYLBA==", - "requires": { - "execa": "^4.0.0", - "lcid": "^3.0.0", - "mem": "^5.0.0" - } - }, - "os-shim": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", - "integrity": "sha512-jd0cvB8qQ5uVt0lvCIexBaROw1KyKm5sbulg2fWOHjETisuCzWyt+eTZKEMs8v6HwzoGs8xik26jg7eCM6pS+A==" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" - }, - "p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==" - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==" - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "requires": { - "p-limit": "^3.0.2" - } - }, - "package-json": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", - "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", - "requires": { - "got": "^12.1.0", - "registry-auth-token": "^5.0.1", - "registry-url": "^6.0.0", - "semver": "^7.3.7" - } - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-6.0.2.tgz", - "integrity": "sha512-SA5aMiaIjXkAiBrW/yPgLgQAQg42f7K3ACO+2l/zOvtQBwX58DMUsFJXelW2fx3yMBmWOVkR6j1MGsdSbCA4UA==", - "requires": { - "@babel/code-frame": "^7.16.0", - "error-ex": "^1.3.2", - "json-parse-even-better-errors": "^2.3.1", - "lines-and-columns": "^2.0.2" - } - }, - "parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "requires": { - "entities": "^4.4.0" - } - }, - "parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "requires": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - } - }, - "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==" - }, - "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==" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "requires": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==" - } - } - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "pino": { - "version": "8.17.2", - "resolved": "https://registry.npmjs.org/pino/-/pino-8.17.2.tgz", - "integrity": "sha512-LA6qKgeDMLr2ux2y/YiUt47EfgQ+S9LznBWOJdN3q1dx2sv0ziDLUBeVpyVv17TEcGCBuWf0zNtg3M5m1NhhWQ==", - "requires": { - "atomic-sleep": "^1.0.0", - "fast-redact": "^3.1.1", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "v1.1.0", - "pino-std-serializers": "^6.0.0", - "process-warning": "^3.0.0", - "quick-format-unescaped": "^4.0.3", - "real-require": "^0.2.0", - "safe-stable-stringify": "^2.3.1", - "sonic-boom": "^3.7.0", - "thread-stream": "^2.0.0" - } - }, - "pino-abstract-transport": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz", - "integrity": "sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==", - "requires": { - "readable-stream": "^4.0.0", - "split2": "^4.0.0" - } - }, - "pino-std-serializers": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", - "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==" - }, - "postcss": { - "version": "8.4.33", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", - "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", - "requires": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "process-warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", - "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==" - }, - "promise-toolbox": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/promise-toolbox/-/promise-toolbox-0.21.0.tgz", - "integrity": "sha512-NV8aTmpwrZv+Iys54sSFOBx3tuVaOBvvrft5PNppnxy9xpU/akHbaWIril22AB22zaPgrgwKdD0KsrM0ptUtpg==", - "requires": { - "make-error": "^1.3.2" - } - }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" - }, - "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==" - }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" - }, - "pupa": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", - "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", - "requires": { - "escape-goat": "^4.0.0" - } - }, - "qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" - }, - "queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "requires": { - "inherits": "~2.0.3" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, - "quick-format-unescaped": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", - "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" - }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" - } - } - }, - "readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", - "requires": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - } - }, - "real-require": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", - "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==" - }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "registry-auth-token": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", - "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", - "requires": { - "@pnpm/npm-conf": "^2.1.0" - } - }, - "registry-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", - "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", - "requires": { - "rc": "1.2.8" - } - }, - "relaxed-json": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/relaxed-json/-/relaxed-json-1.0.3.tgz", - "integrity": "sha512-b7wGPo7o2KE/g7SqkJDDbav6zmrEeP4TK2VpITU72J/M949TLe/23y/ZHJo+pskcGM52xIfFoT9hydwmgr1AEg==", - "requires": { - "chalk": "^2.4.2", - "commander": "^2.6.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - } - } - }, - "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==" - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - }, - "resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - }, - "responselike": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", - "requires": { - "lowercase-keys": "^3.0.0" - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safe-json-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "optional": true - }, - "safe-stable-stringify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sax": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", - "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "semver-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", - "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", - "requires": { - "semver": "^7.3.5" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" - }, - "sign-addon": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/sign-addon/-/sign-addon-5.3.0.tgz", - "integrity": "sha512-7nHlCzhQgVMLBNiXVEgbG/raq48awOW0lYMN5uo1BaB3mp0+k8M8pvDwbfTlr3apcxZJsk9HQsAW1POwoJugpQ==", - "requires": { - "common-tags": "1.8.2", - "core-js": "3.29.0", - "deepcopy": "2.1.0", - "es6-error": "4.1.1", - "es6-promisify": "7.0.0", - "jsonwebtoken": "9.0.0", - "mz": "2.7.0", - "request": "2.88.2", - "source-map-support": "0.5.21", - "stream-to-promise": "3.0.0" - } - }, - "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==" - }, - "sonic-boom": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.0.tgz", - "integrity": "sha512-ybz6OYOUjoQQCQ/i4LU8kaToD8ACtYP+Cj5qd2AO36bwbdewxWJ3ArmJ2cr6AvxlL2o0PqnCcPGUgkILbfkaCA==", - "requires": { - "atomic-sleep": "^1.0.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "spawn-sync": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz", - "integrity": "sha512-9DWBgrgYZzNghseho0JOuh+5fg9u6QWhAWa51QC7+U5rCheZ/j1DrEZnyE0RBBRqZ9uEXGPgSSM0nky6burpVw==", - "requires": { - "concat-stream": "^1.4.7", - "os-shim": "^0.1.2" - } - }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "requires": { - "through": "2" - } - }, - "split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==" - }, - "sshpk": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", - "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - }, - "stream-to-array": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", - "integrity": "sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==", - "requires": { - "any-promise": "^1.1.0" - } - }, - "stream-to-promise": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-to-promise/-/stream-to-promise-3.0.0.tgz", - "integrity": "sha512-h+7wLeFiYegOdgTfTxjRsrT7/Op7grnKEIHWgaO1RTHwcwk7xRreMr3S8XpDfDMesSxzgM2V4CxNCFAGo6ssnA==", - "requires": { - "any-promise": "~1.3.0", - "end-of-stream": "~1.4.1", - "stream-to-array": "~2.3.0" - } - }, - "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==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "string-width-cjs": { - "version": "npm:string-width@4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "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==" - } - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-ansi-cjs": { - "version": "npm:strip-ansi@6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-5.0.0.tgz", - "integrity": "sha512-p+byADHF7SzEcVnLvc/r3uognM1hUhObuHXxJcgLCfD194XAkaLbjq3Wzb0N5G2tgIjH0dgT708Z51QxMeu60A==" - }, - "strip-bom-buf": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-2.0.0.tgz", - "integrity": "sha512-gLFNHucd6gzb8jMsl5QmZ3QgnUJmp7qn4uUSHNwEXumAp7YizoGYw19ZUVfuq4aBOQUtyn2k8X/CwzWB73W2lQ==", - "requires": { - "is-utf8": "^0.2.1" - } - }, - "strip-bom-stream": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-4.0.0.tgz", - "integrity": "sha512-0ApK3iAkHv6WbgLICw/J4nhwHeDZsBxIIsOD+gHgZICL6SeJ0S9f/WZqemka9cjkTyMN5geId6e8U5WGFAn3cQ==", - "requires": { - "first-chunk-stream": "^3.0.0", - "strip-bom-buf": "^2.0.0" - } - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "requires": { - "any-promise": "^1.0.0" - } - }, - "thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "requires": { - "thenify": ">= 3.1.0 < 4" - } - }, - "thread-stream": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.4.1.tgz", - "integrity": "sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg==", - "requires": { - "real-require": "^0.2.0" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "requires": { - "rimraf": "^3.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - }, - "tosource": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tosource/-/tosource-1.0.0.tgz", - "integrity": "sha512-N6g8eQ1eerw6Y1pBhdgkubWIiPFwXa2POSUrlL8jth5CyyEWNWzoGKRkO3CaO7Jx27hlJP54muB3btIAbx4MPg==" - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "undici": { - "version": "5.28.4", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", - "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", - "requires": { - "@fastify/busboy": "^2.0.0" - } - }, - "undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" - }, - "unique-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", - "requires": { - "crypto-random-string": "^4.0.0" - } - }, - "universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==" - }, - "upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==" - }, - "update-notifier": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz", - "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==", - "requires": { - "boxen": "^7.0.0", - "chalk": "^5.0.1", - "configstore": "^6.0.0", - "has-yarn": "^3.0.0", - "import-lazy": "^4.0.0", - "is-ci": "^3.0.1", - "is-installed-globally": "^0.4.0", - "is-npm": "^6.0.0", - "is-yarn-global": "^0.4.0", - "latest-version": "^7.0.0", - "pupa": "^3.1.0", - "semver": "^7.3.7", - "semver-diff": "^4.0.0", - "xdg-basedir": "^5.1.0" - }, - "dependencies": { - "chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==" - } - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "requires": { - "defaults": "^1.0.3" - } - }, - "web-ext": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-7.11.0.tgz", - "integrity": "sha512-EG6YXHITNDJB/h6Rc5FF08eMoN45sZPBBIIlEraBzxJ0RdJZ8Z3xvUUawbDwt+mowfv9X0XRWlLSwdWbRKgojg==", - "requires": { - "@babel/runtime": "7.21.0", - "@devicefarmer/adbkit": "3.2.3", - "addons-linter": "6.21.0", - "bunyan": "1.8.15", - "camelcase": "7.0.1", - "chrome-launcher": "0.15.1", - "debounce": "1.2.1", - "decamelize": "6.0.0", - "es6-error": "4.1.1", - "firefox-profile": "4.3.2", - "fs-extra": "11.1.0", - "fx-runner": "1.4.0", - "import-fresh": "3.3.0", - "jose": "4.13.1", - "mkdirp": "1.0.4", - "multimatch": "6.0.0", - "mz": "2.7.0", - "node-fetch": "3.3.1", - "node-notifier": "10.0.1", - "open": "8.4.2", - "parse-json": "6.0.2", - "promise-toolbox": "0.21.0", - "sign-addon": "5.3.0", - "source-map-support": "0.5.21", - "strip-bom": "5.0.0", - "strip-json-comments": "5.0.0", - "tmp": "0.2.1", - "update-notifier": "6.0.2", - "watchpack": "2.4.0", - "ws": "8.13.0", - "yargs": "17.7.1", - "zip-dir": "2.0.0" - }, - "dependencies": { - "strip-json-comments": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.0.tgz", - "integrity": "sha512-V1LGY4UUo0jgwC+ELQ2BNWfPa17TIuwBLg+j1AA/9RPzKINl1lhxVEu2r+ZTTO8aetIsUzE5Qj6LMSBkoGYKKw==" - } - } - }, - "web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==" - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "when": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/when/-/when-3.7.7.tgz", - "integrity": "sha512-9lFZp/KHoqH6bPKjbWqa+3Dg/K/r2v0X/3/G2x4DBGchVS2QX2VXL3cZV994WQVnTM1/PD71Az25nAzryEUugw==" - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - }, - "widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", - "requires": { - "string-width": "^5.0.1" - } - }, - "winreg": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/winreg/-/winreg-0.0.12.tgz", - "integrity": "sha512-typ/+JRmi7RqP1NanzFULK36vczznSNN8kWVA9vIqXyv8GhghUlwhGp1Xj3Nms1FsPcNnsQrJOR10N58/nQ9hQ==" - }, - "wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" - }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "wrap-ansi-cjs": { - "version": "npm:wrap-ansi@7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "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==" - }, - "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==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "requires": {} - }, - "xdg-basedir": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", - "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==" - }, - "xml2js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - } - }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yaml": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", - "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==" - }, - "yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "dependencies": { - "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==" - }, - "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==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" - }, - "zip-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/zip-dir/-/zip-dir-2.0.0.tgz", - "integrity": "sha512-uhlsJZWz26FLYXOD6WVuq+fIcZ3aBPGo/cFdiLlv3KNwpa52IF3ISV8fLhQLiqVu5No3VhlqlgthN6gehil1Dg==", - "requires": { - "async": "^3.2.0", - "jszip": "^3.2.2" - } - } - } -} diff --git a/package.json b/package.json index 44091e4d..9ed05fdc 100644 --- a/package.json +++ b/package.json @@ -1,41 +1,129 @@ { - "name": "streaming-enhanced", - "version": "1.1.54", - "description": "Automatically skip Ads, Intros, Credits and add Speed Control, etc. on Netflix, Prime video, Disney+ & Hotstar and Crunchyroll.", - "scripts": { - "start": "web-ext run --keep-profile-changes --firefox-profile=test --profile-create-if-missing", - "start-chrome": "web-ext run --source-dir ./chrome/ -t chromium", - "start-android": "adb devices && web-ext run -t firefox-android --firefox-apk org.mozilla.firefox --adb-device 38091FDJH002WH", - "build": "node copyFtoC.js && cd firefox && web-ext build --overwrite-dest && cd ../chrome/ && web-ext build --overwrite-dest && npm run hours", - "zip": "cd firefox && web-ext build --overwrite-dest && cd ../chrome/ && web-ext build --overwrite-dest", - "copy": "node copyFtoC.js", - "transGoogle": "jsontt Publish/translate.json -m google2 -n google2 -fb yes -cl 3 -f en -t de fr es pt it ja pl sv zh-CN ko tr", - "transDeepL": "node deepl.js", - "lint": "web-ext lint", - "esLint": "npx eslint firefox/ chrome/", - "test": "cd firefox && web-ext build --overwrite-dest && cd .. && node refreshXPI.js && python test.py", - "hours": "git hours -since 2018-02-01 -before today -author marvinkrebber@yahoo.de > authorHours.json && node hourstxtToJSON.js" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/Dreamlinerm/Netflix-Prime-Auto-Skip.git" - }, - "author": "Marvin Krebber", - "license": "weaklyProtective", - "bugs": { - "url": "https://github.com/Dreamlinerm/Netflix-Prime-Auto-Skip/issues" - }, - "homepage": "https://github.com/Dreamlinerm/Netflix-Prime-Auto-Skip#readme", - "devDependencies": { - "eslint": "^8.52.0" - }, - "dependencies": { - "@parvineyvazov/json-translator": "^3.1.0", - "dotenv": "^16.4.5", - "web-ext": "^7.11.0" - }, - "webExt": { - "sourceDir": "firefox" - }, - "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" -} \ No newline at end of file + "displayName": "Streaming enhanced Netflix Disney Prime Video", + "description": "Skip ads, intros, credits and add adjust speed, etc. on Netflix, Prime video, Disney+, Crunchyroll and HBO max.", + "name": "streaming-enhanced", + "version": "1.1.55", + "scripts": { + "start": "concurrently \"npm run dev:firefox\" \"web-ext run --source-dir dist/firefox --keep-profile-changes --firefox-profile=test --profile-create-if-missing\"", + "web-ext": "web-ext run", + "firefox": "web-ext run --keep-profile-changes --firefox-profile=test --profile-create-if-missing", + "chrome": "web-ext run --source-dir dist/chrome/ -t chromium", + "start-android": "adb devices && web-ext run --source-dir dist/firefox -t firefox-android --firefox-apk org.mozilla.firefox --adb-device 38091FDJH002WH", + "build": "npm run build:chrome && npm run build:firefox && npm run hours", + "build:chrome": "cross-env NODE_ENV=production vite build -c vite.chrome.config.ts", + "build:firefox": "cross-env NODE_ENV=production vite build -c vite.firefox.config.ts", + "dev": "concurrently \"npm run dev:chrome\" \"npm run dev:firefox\"", + "dev:chrome": "cross-env NODE_ENV=development vite build --mode development --watch -c vite.chrome.config.ts", + "dev:firefox": "cross-env NODE_ENV=development vite build --mode development --watch -c vite.firefox.config.ts", + "format": "prettier --write .", + "launch": "tsx scripts/launch.ts", + "launch:all": "tsx scripts/launch.ts --all", + "lint": "eslint . --fix --cache", + "lint:manifest": "web-ext lint", + "typecheck": "vue-tsc --noEmit", + "transGoogle": "jsontt .translation/deepl.EN.json -m google2 -n google2 -fb yes -cl 3 -f en -t de fr es pt it ja pl sv zh-CN ko tr", + "deepl": "jsontt .translation/deepl.EN.json -m deepl -n deepl -fb yes -cl 3 -f EN -t DE ES FR IT JA KO PL PT SV TR ZH", + "transDeepL": "tsx scripts/deepl.ts", + "hours": "git hours -since 2018-02-01 -before today -author marvinkrebber@yahoo.de > authorHours.json && tsx scripts/hourstxtToJSON.ts", + "copyDocsFtoC": "tsx scripts/copyDocsFtoC.ts" + }, + "dependencies": { + "marked": "^15.0.6", + "notivue": "^2.4.5", + "pinia": "^2.3.0", + "vue": "^3.5.13", + "vue-i18n": "^11.0.1", + "vue-router": "^4.5.0", + "webextension-polyfill": "^0.12.0" + }, + "devDependencies": { + "@parvineyvazov/json-translator": "^3.2.2", + "@crxjs/vite-plugin": "2.0.0-beta.29", + "@eslint/compat": "^1.2.4", + "@eslint/js": "^9.17.0", + "@iconify-json/carbon": "^1.2.5", + "@iconify-json/lucide": "^1.2.21", + "@iconify-json/mdi": "^1.2.2", + "@iconify-json/ph": "^1.2.2", + "@iconify-json/svg-spinners": "^1.2.2", + "@intlify/unplugin-vue-i18n": "^6.0.3", + "@tailwindcss/forms": "^0.5.10", + "@tailwindcss/typography": "^0.5.16", + "@types/eslint": "^9.6.1", + "@types/eslint__js": "~8.42.3", + "@types/node": "^22.10.5", + "@types/webextension-polyfill": "^0.12.1", + "@vitejs/plugin-vue": "^5.2.1", + "@vue/compiler-sfc": "^3.5.13", + "@vueuse/core": "^12.3.0", + "autoprefixer": "^10.4.20", + "chalk": "^5.4.1", + "chrome-types": "^0.1.329", + "commander": "^12.1.0", + "concurrently": "^9.1.2", + "cross-env": "^7.0.3", + "daisyui": "^4.12.23", + "dotenv": "^16.4.7", + "eslint": "^9.17.0", + "eslint-plugin-vue": "^9.32.0", + "get-installed-browsers": "^0.1.7", + "globals": "^15.14.0", + "postcss": "^8.4.49", + "prettier": "^3.4.2", + "prettier-plugin-tailwindcss": "^0.6.9", + "sass": "^1.83.1", + "tailwindcss": "^3.4.17", + "terser": "^5.37.0", + "tsx": "^4.19.2", + "typescript": "^5.7.2", + "typescript-eslint": "^8.19.1", + "unplugin-auto-import": "^0.19.0", + "unplugin-icons": "^0.22.0", + "unplugin-imagemin": "^0.6.5", + "unplugin-turbo-console": "^1.11.1", + "unplugin-vue-components": "^0.28.0", + "unplugin-vue-router": "^0.10.9", + "vite": "^6.0.7", + "vite-plugin-html": "^3.2.2", + "vite-plugin-vue-devtools": "^7.7.0", + "vite-plugin-zip-pack": "^1.2.4", + "vue-tsc": "^2.2.0", + "vuefire": "^3.2.1", + "web-ext": "^8.3.0", + "webext-bridge": "^6.0.1" + }, + "overrides": { + "@crxjs/vite-plugin": "$@crxjs/vite-plugin" + }, + "pnpm": { + "overrides": {}, + "peerDependencyRules": { + "allowAny": [], + "allowedDeprecatedVersions": { + "sourcemap-codec": "1.4.8" + }, + "allowedVersions": { + "node-fetch": "*" + }, + "ignoreMissing": [] + } + }, + "private": true, + "repository": { + "type": "git", + "url": "git+https://github.com/Dreamlinerm/Netflix-Prime-Auto-Skip.git" + }, + "type": "module", + "optionalDependencies": { + "win-node-env": "^0.6.1" + }, + "author": "Marvin Krebber", + "license": "weaklyProtective", + "bugs": { + "url": "https://github.com/Dreamlinerm/Netflix-Prime-Auto-Skip/issues" + }, + "homepage": "https://github.com/Dreamlinerm/Netflix-Prime-Auto-Skip#readme", + "webExt": { + "sourceDir": "dist/firefox" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 00000000..2ca39689 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,9902 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + marked: + specifier: ^15.0.6 + version: 15.0.6 + notivue: + specifier: ^2.4.5 + version: 2.4.5(@nuxt/kit@3.13.0(rollup@4.30.1))(@nuxt/schema@3.13.0(rollup@4.30.1))(defu@6.1.4) + pinia: + specifier: ^2.3.0 + version: 2.3.0(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)) + vue: + specifier: ^3.5.13 + version: 3.5.13(typescript@5.7.2) + vue-i18n: + specifier: ^11.0.1 + version: 11.0.1(vue@3.5.13(typescript@5.7.2)) + vue-router: + specifier: ^4.5.0 + version: 4.5.0(vue@3.5.13(typescript@5.7.2)) + webextension-polyfill: + specifier: ^0.12.0 + version: 0.12.0 + optionalDependencies: + win-node-env: + specifier: ^0.6.1 + version: 0.6.1 + devDependencies: + '@crxjs/vite-plugin': + specifier: 2.0.0-beta.29 + version: 2.0.0-beta.29 + '@eslint/compat': + specifier: ^1.2.4 + version: 1.2.4(eslint@9.17.0(jiti@2.4.2)) + '@eslint/js': + specifier: ^9.17.0 + version: 9.17.0 + '@iconify-json/carbon': + specifier: ^1.2.5 + version: 1.2.5 + '@iconify-json/lucide': + specifier: ^1.2.21 + version: 1.2.21 + '@iconify-json/mdi': + specifier: ^1.2.2 + version: 1.2.2 + '@iconify-json/ph': + specifier: ^1.2.2 + version: 1.2.2 + '@iconify-json/svg-spinners': + specifier: ^1.2.2 + version: 1.2.2 + '@intlify/unplugin-vue-i18n': + specifier: ^6.0.3 + version: 6.0.3(@vue/compiler-dom@3.5.13)(eslint@9.17.0(jiti@2.4.2))(rollup@4.30.1)(typescript@5.7.2)(vue-i18n@11.0.1(vue@3.5.13(typescript@5.7.2)))(vue@3.5.13(typescript@5.7.2)) + '@parvineyvazov/json-translator': + specifier: ^3.2.2 + version: 3.2.2 + '@tailwindcss/forms': + specifier: ^0.5.10 + version: 0.5.10(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.7.2))) + '@tailwindcss/typography': + specifier: ^0.5.16 + version: 0.5.16(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.7.2))) + '@types/eslint': + specifier: ^9.6.1 + version: 9.6.1 + '@types/eslint__js': + specifier: ~8.42.3 + version: 8.42.3 + '@types/node': + specifier: ^22.10.5 + version: 22.10.5 + '@types/webextension-polyfill': + specifier: ^0.12.1 + version: 0.12.1 + '@vitejs/plugin-vue': + specifier: ^5.2.1 + version: 5.2.1(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)) + '@vue/compiler-sfc': + specifier: ^3.5.13 + version: 3.5.13 + '@vueuse/core': + specifier: ^12.3.0 + version: 12.3.0(typescript@5.7.2) + autoprefixer: + specifier: ^10.4.20 + version: 10.4.20(postcss@8.4.49) + chalk: + specifier: ^5.4.1 + version: 5.4.1 + chrome-types: + specifier: ^0.1.329 + version: 0.1.329 + commander: + specifier: ^12.1.0 + version: 12.1.0 + concurrently: + specifier: ^9.1.2 + version: 9.1.2 + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + daisyui: + specifier: ^4.12.23 + version: 4.12.23(postcss@8.4.49) + dotenv: + specifier: ^16.4.7 + version: 16.4.7 + eslint: + specifier: ^9.17.0 + version: 9.17.0(jiti@2.4.2) + eslint-plugin-vue: + specifier: ^9.32.0 + version: 9.32.0(eslint@9.17.0(jiti@2.4.2)) + get-installed-browsers: + specifier: ^0.1.7 + version: 0.1.7 + globals: + specifier: ^15.14.0 + version: 15.14.0 + postcss: + specifier: ^8.4.49 + version: 8.4.49 + prettier: + specifier: ^3.4.2 + version: 3.4.2 + prettier-plugin-tailwindcss: + specifier: ^0.6.9 + version: 0.6.9(prettier@3.4.2) + sass: + specifier: ^1.83.1 + version: 1.83.1 + tailwindcss: + specifier: ^3.4.17 + version: 3.4.17(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.7.2)) + terser: + specifier: ^5.37.0 + version: 5.37.0 + tsx: + specifier: ^4.19.2 + version: 4.19.2 + typescript: + specifier: ^5.7.2 + version: 5.7.2 + typescript-eslint: + specifier: ^8.19.1 + version: 8.19.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + unplugin-auto-import: + specifier: ^0.19.0 + version: 0.19.0(@nuxt/kit@3.13.0(rollup@4.30.1))(@vueuse/core@12.3.0(typescript@5.7.2))(rollup@4.30.1) + unplugin-icons: + specifier: ^0.22.0 + version: 0.22.0(@vue/compiler-sfc@3.5.13)(vue-template-compiler@2.7.14) + unplugin-imagemin: + specifier: ^0.6.5 + version: 0.6.5(rollup@4.30.1) + unplugin-turbo-console: + specifier: ^1.11.1 + version: 1.11.1(@nuxt/kit@3.13.0(rollup@4.30.1))(@nuxt/schema@3.13.0(rollup@4.30.1))(esbuild@0.24.2)(rollup@4.30.1)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)) + unplugin-vue-components: + specifier: ^0.28.0 + version: 0.28.0(@babel/parser@7.26.3)(@nuxt/kit@3.13.0(rollup@4.30.1))(rollup@4.30.1)(vue@3.5.13(typescript@5.7.2)) + unplugin-vue-router: + specifier: ^0.10.9 + version: 0.10.9(rollup@4.30.1)(vue-router@4.5.0(vue@3.5.13(typescript@5.7.2)))(vue@3.5.13(typescript@5.7.2)) + vite: + specifier: ^6.0.7 + version: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + vite-plugin-html: + specifier: ^3.2.2 + version: 3.2.2(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + vite-plugin-vue-devtools: + specifier: ^7.7.0 + version: 7.7.0(@nuxt/kit@3.13.0(rollup@4.30.1))(rollup@4.30.1)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)) + vite-plugin-zip-pack: + specifier: ^1.2.4 + version: 1.2.4(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + vue-tsc: + specifier: ^2.2.0 + version: 2.2.0(typescript@5.7.2) + vuefire: + specifier: ^3.2.1 + version: 3.2.1(consola@3.3.3)(firebase@10.14.0)(vue@3.5.13(typescript@5.7.2)) + web-ext: + specifier: ^8.3.0 + version: 8.3.0 + webext-bridge: + specifier: ^6.0.1 + version: 6.0.1 + +packages: + + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@antfu/install-pkg@0.4.1': + resolution: {integrity: sha512-T7yB5QNG29afhWVkVq7XeIMBa5U/vs9mX69YqayXypPRmYzUmzwnYltplHmPtZ4HPCn+sQKeXW8I47wCbuBOjw==} + + '@antfu/install-pkg@0.5.0': + resolution: {integrity: sha512-dKnk2xlAyC7rvTkpkHmu+Qy/2Zc3Vm/l8PtNyIOGDBtXPY3kThfU4ORNEp3V7SXw5XSOb+tOJaUYpfquPzL/Tg==} + + '@antfu/utils@0.7.10': + resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.3': + resolution: {integrity: sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.0': + resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.26.3': + resolution: {integrity: sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.25.9': + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.25.9': + resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.25.9': + resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-member-expression-to-functions@7.25.9': + resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.25.9': + resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.25.9': + resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-replace-supers@7.25.9': + resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.26.0': + resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.26.3': + resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-proposal-decorators@7.25.9': + resolution: {integrity: sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-decorators@7.25.9': + resolution: {integrity: sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.26.0': + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.25.9': + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.25.9': + resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typescript@7.26.3': + resolution: {integrity: sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime@7.25.6': + resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} + engines: {node: '>=6.9.0'} + + '@babel/standalone@7.26.4': + resolution: {integrity: sha512-SF+g7S2mhTT1b7CHyfNjDkPU1corxg4LPYsyP0x5KuCl+EbtBQHRLqr9N3q7e7+x7NQ5LYxQf8mJ2PmzebLr0A==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.25.9': + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.26.4': + resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.3': + resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} + engines: {node: '>=6.9.0'} + + '@crxjs/vite-plugin@2.0.0-beta.29': + resolution: {integrity: sha512-BavhDs/WvuBuS0WR3K1IIPgDt1/Pr+wqaQ0ID2/JeyNexokTxVoXXTH8DShtqpjByomBc+5w6sW8OI95vTO2nw==} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@devicefarmer/adbkit-logcat@2.1.3': + resolution: {integrity: sha512-yeaGFjNBc/6+svbDeul1tNHtNChw6h8pSHAt5D+JsedUrMTN7tla7B15WLDyekxsuS2XlZHRxpuC6m92wiwCNw==} + engines: {node: '>= 4'} + + '@devicefarmer/adbkit-monkey@1.2.1': + resolution: {integrity: sha512-ZzZY/b66W2Jd6NHbAhLyDWOEIBWC11VizGFk7Wx7M61JZRz7HR9Cq5P+65RKWUU7u6wgsE8Lmh9nE4Mz+U2eTg==} + engines: {node: '>= 0.10.4'} + + '@devicefarmer/adbkit@3.2.6': + resolution: {integrity: sha512-8lO1hSeTgtxcOHhp4tTWq/JaOysp5KNbbyFoxNEBnwkCDZu/Bji3ZfOaG++Riv9jN6c9bgdLBOZqJTC5VJPRKQ==} + engines: {node: '>= 0.10.4'} + hasBin: true + + '@esbuild/aix-ppc64@0.23.1': + resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.24.2': + resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.23.1': + resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.24.2': + resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.23.1': + resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.24.2': + resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.23.1': + resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.24.2': + resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.23.1': + resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.24.2': + resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.23.1': + resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.24.2': + resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.23.1': + resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.24.2': + resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.23.1': + resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.24.2': + resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.23.1': + resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.24.2': + resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.23.1': + resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.24.2': + resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.23.1': + resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.24.2': + resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.23.1': + resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.24.2': + resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.23.1': + resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.24.2': + resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.23.1': + resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.24.2': + resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.23.1': + resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.24.2': + resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.23.1': + resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.24.2': + resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.23.1': + resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.24.2': + resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.24.2': + resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.23.1': + resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.24.2': + resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.23.1': + resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-arm64@0.24.2': + resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.23.1': + resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.24.2': + resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.23.1': + resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.24.2': + resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.23.1': + resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.24.2': + resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.23.1': + resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.24.2': + resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.23.1': + resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.24.2': + resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/compat@1.2.4': + resolution: {integrity: sha512-S8ZdQj/N69YAtuqFt7653jwcvuUj131+6qGLUyDqfDg1OIoBQ66OCuXC473YQfO2AaxITTutiRQiDwoo7ZLYyg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^9.10.0 + peerDependenciesMeta: + eslint: + optional: true + + '@eslint/config-array@0.19.1': + resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.9.1': + resolution: {integrity: sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/eslintrc@3.2.0': + resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@9.17.0': + resolution: {integrity: sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.5': + resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.4': + resolution: {integrity: sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@fastify/busboy@2.1.1': + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + + '@firebase/analytics-compat@0.2.14': + resolution: {integrity: sha512-unRVY6SvRqfNFIAA/kwl4vK+lvQAL2HVcgu9zTrUtTyYDmtIt/lOuHJynBMYEgLnKm39YKBDhtqdapP2e++ASw==} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/analytics-types@0.8.2': + resolution: {integrity: sha512-EnzNNLh+9/sJsimsA/FGqzakmrAUKLeJvjRHlg8df1f97NLUlFidk9600y0ZgWOp3CAxn6Hjtk+08tixlUOWyw==} + + '@firebase/analytics@0.10.8': + resolution: {integrity: sha512-CVnHcS4iRJPqtIDc411+UmFldk0ShSK3OB+D0bKD8Ck5Vro6dbK5+APZpkuWpbfdL359DIQUnAaMLE+zs/PVyA==} + peerDependencies: + '@firebase/app': 0.x + + '@firebase/app-check-compat@0.3.15': + resolution: {integrity: sha512-zFIvIFFNqDXpOT2huorz9cwf56VT3oJYRFjSFYdSbGYEJYEaXjLJbfC79lx/zjx4Fh+yuN8pry3TtvwaevrGbg==} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/app-check-interop-types@0.3.2': + resolution: {integrity: sha512-LMs47Vinv2HBMZi49C09dJxp0QT5LwDzFaVGf/+ITHe3BlIhUiLNttkATSXplc89A2lAaeTqjgqVkiRfUGyQiQ==} + + '@firebase/app-check-types@0.5.2': + resolution: {integrity: sha512-FSOEzTzL5bLUbD2co3Zut46iyPWML6xc4x+78TeaXMSuJap5QObfb+rVvZJtla3asN4RwU7elaQaduP+HFizDA==} + + '@firebase/app-check@0.8.8': + resolution: {integrity: sha512-O49RGF1xj7k6BuhxGpHmqOW5hqBIAEbt2q6POW0lIywx7emYtzPDeQI+ryQpC4zbKX646SoVZ711TN1DBLNSOQ==} + peerDependencies: + '@firebase/app': 0.x + + '@firebase/app-compat@0.2.42': + resolution: {integrity: sha512-vPI0Aksk8ZuHywigyTxrx/oWbuD41kHxajfxRly7urHOFRiXKxf/q2ftgmcMVPfIeg0K02LzYNBmoh2PWzERpg==} + + '@firebase/app-types@0.9.2': + resolution: {integrity: sha512-oMEZ1TDlBz479lmABwWsWjzHwheQKiAgnuKxE0pz0IXCVx7/rtlkx1fQ6GfgK24WCrxDKMplZrT50Kh04iMbXQ==} + + '@firebase/app@0.10.12': + resolution: {integrity: sha512-fgBqe5j7GKv7/eMfyU4N1FdiW6O1EyrrVbMa8rJOT5MYNpCXqdL/5NNcLDStS1l6CN7h65a7jUNXmMnMSWo0sw==} + + '@firebase/auth-compat@0.5.14': + resolution: {integrity: sha512-2eczCSqBl1KUPJacZlFpQayvpilg3dxXLy9cSMTKtQMTQSmondUtPI47P3ikH3bQAXhzKLOE+qVxJ3/IRtu9pw==} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/auth-interop-types@0.2.3': + resolution: {integrity: sha512-Fc9wuJGgxoxQeavybiuwgyi+0rssr76b+nHpj+eGhXFYAdudMWyfBHvFL/I5fEHniUM/UQdFzi9VXJK2iZF7FQ==} + + '@firebase/auth-types@0.12.2': + resolution: {integrity: sha512-qsEBaRMoGvHO10unlDJhaKSuPn4pyoTtlQuP1ghZfzB6rNQPuhp/N/DcFZxm9i4v0SogjCbf9reWupwIvfmH6w==} + peerDependencies: + '@firebase/app-types': 0.x + '@firebase/util': 1.x + + '@firebase/auth@1.7.9': + resolution: {integrity: sha512-yLD5095kVgDw965jepMyUrIgDklD6qH/BZNHeKOgvu7pchOKNjVM+zQoOVYJIKWMWOWBq8IRNVU6NXzBbozaJg==} + peerDependencies: + '@firebase/app': 0.x + '@react-native-async-storage/async-storage': ^1.18.1 + peerDependenciesMeta: + '@react-native-async-storage/async-storage': + optional: true + + '@firebase/component@0.6.9': + resolution: {integrity: sha512-gm8EUEJE/fEac86AvHn8Z/QW8BvR56TBw3hMW0O838J/1mThYQXAIQBgUv75EqlCZfdawpWLrKt1uXvp9ciK3Q==} + + '@firebase/data-connect@0.1.0': + resolution: {integrity: sha512-vSe5s8dY13ilhLnfY0eYRmQsdTbH7PUFZtBbqU6JVX/j8Qp9A6G5gG6//ulbX9/1JFOF1IWNOne9c8S/DOCJaQ==} + peerDependencies: + '@firebase/app': 0.x + + '@firebase/database-compat@1.0.8': + resolution: {integrity: sha512-OpeWZoPE3sGIRPBKYnW9wLad25RaWbGyk7fFQe4xnJQKRzlynWeFBSRRAoLE2Old01WXwskUiucNqUUVlFsceg==} + + '@firebase/database-types@1.0.5': + resolution: {integrity: sha512-fTlqCNwFYyq/C6W7AJ5OCuq5CeZuBEsEwptnVxlNPkWCo5cTTyukzAHRSO/jaQcItz33FfYrrFk1SJofcu2AaQ==} + + '@firebase/database@1.0.8': + resolution: {integrity: sha512-dzXALZeBI1U5TXt6619cv0+tgEhJiwlUtQ55WNZY7vGAjv7Q1QioV969iYwt1AQQ0ovHnEW0YW9TiBfefLvErg==} + + '@firebase/firestore-compat@0.3.38': + resolution: {integrity: sha512-GoS0bIMMkjpLni6StSwRJarpu2+S5m346Na7gr9YZ/BZ/W3/8iHGNr9PxC+f0rNZXqS4fGRn88pICjrZEgbkqQ==} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/firestore-types@3.0.2': + resolution: {integrity: sha512-wp1A+t5rI2Qc/2q7r2ZpjUXkRVPtGMd6zCLsiWurjsQpqPgFin3AhNibKcIzoF2rnToNa/XYtyWXuifjOOwDgg==} + peerDependencies: + '@firebase/app-types': 0.x + '@firebase/util': 1.x + + '@firebase/firestore@4.7.3': + resolution: {integrity: sha512-NwVU+JPZ/3bhvNSJMCSzfcBZZg8SUGyzZ2T0EW3/bkUeefCyzMISSt/TTIfEHc8cdyXGlMqfGe3/62u9s74UEg==} + engines: {node: '>=10.10.0'} + peerDependencies: + '@firebase/app': 0.x + + '@firebase/functions-compat@0.3.14': + resolution: {integrity: sha512-dZ0PKOKQFnOlMfcim39XzaXonSuPPAVuzpqA4ONTIdyaJK/OnBaIEVs/+BH4faa1a2tLeR+Jy15PKqDRQoNIJw==} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/functions-types@0.6.2': + resolution: {integrity: sha512-0KiJ9lZ28nS2iJJvimpY4nNccV21rkQyor5Iheu/nq8aKXJqtJdeSlZDspjPSBBiHRzo7/GMUttegnsEITqR+w==} + + '@firebase/functions@0.11.8': + resolution: {integrity: sha512-Lo2rTPDn96naFIlSZKVd1yvRRqqqwiJk7cf9TZhUerwnPKgBzXy+aHE22ry+6EjCaQusUoNai6mU6p+G8QZT1g==} + peerDependencies: + '@firebase/app': 0.x + + '@firebase/installations-compat@0.2.9': + resolution: {integrity: sha512-2lfdc6kPXR7WaL4FCQSQUhXcPbI7ol3wF+vkgtU25r77OxPf8F/VmswQ7sgIkBBWtymn5ZF20TIKtnOj9rjb6w==} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/installations-types@0.5.2': + resolution: {integrity: sha512-que84TqGRZJpJKHBlF2pkvc1YcXrtEDOVGiDjovP/a3s6W4nlbohGXEsBJo0JCeeg/UG9A+DEZVDUV9GpklUzA==} + peerDependencies: + '@firebase/app-types': 0.x + + '@firebase/installations@0.6.9': + resolution: {integrity: sha512-hlT7AwCiKghOX3XizLxXOsTFiFCQnp/oj86zp1UxwDGmyzsyoxtX+UIZyVyH/oBF5+XtblFG9KZzZQ/h+dpy+Q==} + peerDependencies: + '@firebase/app': 0.x + + '@firebase/logger@0.4.2': + resolution: {integrity: sha512-Q1VuA5M1Gjqrwom6I6NUU4lQXdo9IAQieXlujeHZWvRt1b7qQ0KwBaNAjgxG27jgF9/mUwsNmO8ptBCGVYhB0A==} + + '@firebase/messaging-compat@0.2.11': + resolution: {integrity: sha512-2NCkfE1L9jSn5OC+2n5rGAz5BEAQreK2lQGdPYQEJlAbKB2efoF+2FdiQ+LD8SlioSXz66REfeaEdesoLPFQcw==} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/messaging-interop-types@0.2.2': + resolution: {integrity: sha512-l68HXbuD2PPzDUOFb3aG+nZj5KA3INcPwlocwLZOzPp9rFM9yeuI9YLl6DQfguTX5eAGxO0doTR+rDLDvQb5tA==} + + '@firebase/messaging@0.12.11': + resolution: {integrity: sha512-zn5zGhF46BmiZ7W9yAUoHlqzJGakmWn1FNp//roXHN62dgdEFIKfXY7IODA2iQiXpmUO3sBdI/Tf+Hsft1mVkw==} + peerDependencies: + '@firebase/app': 0.x + + '@firebase/performance-compat@0.2.9': + resolution: {integrity: sha512-dNl95IUnpsu3fAfYBZDCVhXNkASE0uo4HYaEPd2/PKscfTvsgqFAOxfAXzBEDOnynDWiaGUnb5M1O00JQ+3FXA==} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/performance-types@0.2.2': + resolution: {integrity: sha512-gVq0/lAClVH5STrIdKnHnCo2UcPLjJlDUoEB/tB4KM+hAeHUxWKnpT0nemUPvxZ5nbdY/pybeyMe8Cs29gEcHA==} + + '@firebase/performance@0.6.9': + resolution: {integrity: sha512-PnVaak5sqfz5ivhua+HserxTJHtCar/7zM0flCX6NkzBNzJzyzlH4Hs94h2Il0LQB99roBqoE5QT1JqWqcLJHQ==} + peerDependencies: + '@firebase/app': 0.x + + '@firebase/remote-config-compat@0.2.9': + resolution: {integrity: sha512-AxzGpWfWFYejH2twxfdOJt5Cfh/ATHONegTd/a0p5flEzsD5JsxXgfkFToop+mypEL3gNwawxrxlZddmDoNxyA==} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/remote-config-types@0.3.2': + resolution: {integrity: sha512-0BC4+Ud7y2aPTyhXJTMTFfrGGLqdYXrUB9sJVAB8NiqJswDTc4/2qrE/yfUbnQJhbSi6ZaTTBKyG3n1nplssaA==} + + '@firebase/remote-config@0.4.9': + resolution: {integrity: sha512-EO1NLCWSPMHdDSRGwZ73kxEEcTopAxX1naqLJFNApp4hO8WfKfmEpmjxmP5TrrnypjIf2tUkYaKsfbEA7+AMmA==} + peerDependencies: + '@firebase/app': 0.x + + '@firebase/storage-compat@0.3.12': + resolution: {integrity: sha512-hA4VWKyGU5bWOll+uwzzhEMMYGu9PlKQc1w4DWxB3aIErWYzonrZjF0icqNQZbwKNIdh8SHjZlFeB2w6OSsjfg==} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/storage-types@0.8.2': + resolution: {integrity: sha512-0vWu99rdey0g53lA7IShoA2Lol1jfnPovzLDUBuon65K7uKG9G+L5uO05brD9pMw+l4HRFw23ah3GwTGpEav6g==} + peerDependencies: + '@firebase/app-types': 0.x + '@firebase/util': 1.x + + '@firebase/storage@0.13.2': + resolution: {integrity: sha512-fxuJnHshbhVwuJ4FuISLu+/76Aby2sh+44ztjF2ppoe0TELIDxPW6/r1KGlWYt//AD0IodDYYA8ZTN89q8YqUw==} + peerDependencies: + '@firebase/app': 0.x + + '@firebase/util@1.10.0': + resolution: {integrity: sha512-xKtx4A668icQqoANRxyDLBLz51TAbDP9KRfpbKGxiCAW346d0BeJe5vN6/hKxxmWwnZ0mautyv39JxviwwQMOQ==} + + '@firebase/vertexai-preview@0.0.4': + resolution: {integrity: sha512-EBSqyu9eg8frQlVU9/HjKtHN7odqbh9MtAcVz3WwHj4gLCLOoN9F/o+oxlq3CxvFrd3CNTZwu6d2mZtVlEInng==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@firebase/app': 0.x + '@firebase/app-types': 0.x + + '@firebase/webchannel-wrapper@1.0.1': + resolution: {integrity: sha512-jmEnr/pk0yVkA7mIlHNnxCi+wWzOFUg0WyIotgkKAb2u1J7fAeDBcVNSTjTihbAYNusCLQdW5s9IJ5qwnEufcQ==} + + '@fluent/syntax@0.19.0': + resolution: {integrity: sha512-5D2qVpZrgpjtqU4eNOcWGp1gnUCgjfM+vKGE2y03kKN6z5EBhtx0qdRFbg8QuNNj8wXNoX93KJoYb+NqoxswmQ==} + engines: {node: '>=14.0.0', npm: '>=7.0.0'} + + '@grpc/grpc-js@1.9.15': + resolution: {integrity: sha512-nqE7Hc0AzI+euzUwDAy0aY5hCp10r734gMGRdU+qOPX0XSceI2ULrcXB5U2xSc5VkWwalCj4M7GzCAygZl2KoQ==} + engines: {node: ^8.13.0 || >=10.10.0} + + '@grpc/proto-loader@0.7.13': + resolution: {integrity: sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==} + engines: {node: '>=6'} + hasBin: true + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.1': + resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} + engines: {node: '>=18.18'} + + '@iamtraction/google-translate@2.0.1': + resolution: {integrity: sha512-kOTkt23zflxpgxLIe9tLvDU8IvNscXYbgMSXydNkZGWDtJ75YJiU3v7EBz+t7h/gSiY7sT5r4dlFkMrHCl+N6A==} + engines: {node: '>=16.0.0'} + + '@iconify-json/carbon@1.2.5': + resolution: {integrity: sha512-aI3TEzOrUDGhs74zIT3ym/ZQBUEziyu8JifntX2Hb4siVzsP5sQ/QEfVdmcCUj37kQUYT3TYBSeAw2vTfCJx9w==} + + '@iconify-json/lucide@1.2.21': + resolution: {integrity: sha512-Oi9bVtaDaiUg4DpmuFWO4bihwXvxFW47KYFUWEGRsqAWijnODTXIO24F2YNlz+k9WvdIr3RsOFiuNIoEzMPsRQ==} + + '@iconify-json/mdi@1.2.2': + resolution: {integrity: sha512-84aznJXzfGdbOXGe8xB7E5uNAb7Yo5IABwTgq2X3kczb819qZeS9eL31bTVn7wJdCLK5ieaoUc2GTS3QYIkJ6g==} + + '@iconify-json/ph@1.2.2': + resolution: {integrity: sha512-PgkEZNtqa8hBGjHXQa4pMwZa93hmfu8FUSjs/nv4oUU6yLsgv+gh9nu28Kqi8Fz9CCVu4hj1MZs9/60J57IzFw==} + + '@iconify-json/svg-spinners@1.2.2': + resolution: {integrity: sha512-DIErwfBWWzLfmAG2oQnbUOSqZhDxlXvr8941itMCrxQoMB0Hiv8Ww6Bln/zIgxwjDvSem2dKJtap+yKKwsB/2A==} + + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@iconify/utils@2.2.1': + resolution: {integrity: sha512-0/7J7hk4PqXmxo5PDBDxmnecw5PxklZJfNjIVG9FM0mEfVrvfudS22rYWsqVk6gR3UJ/mSYS90X4R3znXnqfNA==} + + '@intlify/bundle-utils@10.0.0': + resolution: {integrity: sha512-BR5yLOkF2dzrARTbAg7RGAIPcx9Aark7p1K/0O285F7rfzso9j2dsa+S4dA67clZ0rToZ10NSSTfbyUptVu7Bg==} + engines: {node: '>= 18'} + peerDependencies: + petite-vue-i18n: '*' + vue-i18n: '*' + peerDependenciesMeta: + petite-vue-i18n: + optional: true + vue-i18n: + optional: true + + '@intlify/core-base@11.0.1': + resolution: {integrity: sha512-NAmhw1l/llM0HZRpagR/ChJTNymW4ll6/4EDSJML5c8L5Hl/+k6UyF8EIgE6DeHpfheQujkSRngauViHqq6jJQ==} + engines: {node: '>= 16'} + + '@intlify/message-compiler@11.0.0-rc.1': + resolution: {integrity: sha512-TGw2uBfuTFTegZf/BHtUQBEKxl7Q/dVGLoqRIdw8lFsp9g/53sYn5iD+0HxIzdYjbWL6BTJMXCPUHp9PxDTRPw==} + engines: {node: '>= 16'} + + '@intlify/message-compiler@11.0.1': + resolution: {integrity: sha512-5RFH8x+Mn3mbjcHXnb6KCXGiczBdiQkWkv99iiA0JpKrNuTAQeW59Pjq/uObMB0eR0shnKYGTkIJxum+DbL3sw==} + engines: {node: '>= 16'} + + '@intlify/shared@11.0.0-rc.1': + resolution: {integrity: sha512-8tR1xe7ZEbkabTuE/tNhzpolygUn9OaYp9yuYAF4MgDNZg06C3Qny80bes2/e9/Wm3aVkPUlCw6WgU7mQd0yEg==} + engines: {node: '>= 16'} + + '@intlify/shared@11.0.1': + resolution: {integrity: sha512-lH164+aDDptHZ3dBDbIhRa1dOPQUp+83iugpc+1upTOWCnwyC1PVis6rSWNMMJ8VQxvtHQB9JMib48K55y0PvQ==} + engines: {node: '>= 16'} + + '@intlify/unplugin-vue-i18n@6.0.3': + resolution: {integrity: sha512-9ZDjBlhUHtgjRl23TVcgfJttgu8cNepwVhWvOv3mUMRDAhjW0pur1mWKEUKr1I8PNwE4Gvv2IQ1xcl4RL0nG0g==} + engines: {node: '>= 18'} + peerDependencies: + petite-vue-i18n: '*' + vue: ^3.2.25 + vue-i18n: '*' + peerDependenciesMeta: + petite-vue-i18n: + optional: true + vue-i18n: + optional: true + + '@intlify/vue-i18n-extensions@8.0.0': + resolution: {integrity: sha512-w0+70CvTmuqbskWfzeYhn0IXxllr6mU+IeM2MU0M+j9OW64jkrvqY+pYFWrUnIIC9bEdij3NICruicwd5EgUuQ==} + engines: {node: '>= 18'} + peerDependencies: + '@intlify/shared': ^9.0.0 || ^10.0.0 || ^11.0.0 + '@vue/compiler-dom': ^3.0.0 + vue: ^3.0.0 + vue-i18n: ^9.0.0 || ^10.0.0 || ^11.0.0 + peerDependenciesMeta: + '@intlify/shared': + optional: true + '@vue/compiler-dom': + optional: true + vue: + optional: true + vue-i18n: + optional: true + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@mdn/browser-compat-data@5.6.0': + resolution: {integrity: sha512-xArvLyzuk0r2m6hFVjTMYoLvhWwys3h7W8pO15tjSAea+U39cErWDNfoUs4g2C08HVg6bDHyDMBc0LC6FKRpVw==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@nuxt/kit@3.13.0': + resolution: {integrity: sha512-gbhSbDvYfkGQ0R2ztqTLQLHRMv+7g50kAKKuN6mbF4tL9jg7NPnQ8bAarn2I4Qx8xtmwO+qY1ABkmYMn5S1CpA==} + engines: {node: ^14.18.0 || >=16.10.0} + + '@nuxt/schema@3.13.0': + resolution: {integrity: sha512-JBGSjF9Hd8guvTV2312eM1RulCMJc50yR3CeMZPLDsI02A8TXQnABS8EbgvGRvxD43q/ITjj21B2ffG1wEVrnQ==} + engines: {node: ^14.18.0 || >=16.10.0} + + '@oxc-parser/binding-darwin-arm64@0.40.1': + resolution: {integrity: sha512-Y8liZVQ6gT0gt2i8EhfhXzMe+wWyFUk2DQdJw3oM9DNgKB9aPINie/IJsTb1VYOudOXUXgWt3DSiFMyWJVdYeA==} + cpu: [arm64] + os: [darwin] + + '@oxc-parser/binding-darwin-x64@0.40.1': + resolution: {integrity: sha512-m5xEhvPZDtHunP+qOFvwsX5ywtYVHwkZNilP5q5aZk9S8HwIT7WVvwkijVLqC+qqx2vYpJPjlZOJi6tHGTEwcw==} + cpu: [x64] + os: [darwin] + + '@oxc-parser/binding-linux-arm64-gnu@0.40.1': + resolution: {integrity: sha512-bIH/pYRrti1cB/y8Xc0bQgDZqOWi4UKmK6Dz3MjjUAjW+8xs+P+mVoTV8ZBl/Fi1ATgVHEFRzMM133PxvVC3uA==} + cpu: [arm64] + os: [linux] + + '@oxc-parser/binding-linux-arm64-musl@0.40.1': + resolution: {integrity: sha512-PiO4p2sufi2rdm0m7bcJseQ+WGJ9clrqGXkNDy5QIIcKHRS1+9gII5nUq6knBsseACT5dp2DidgLh2wopNl0+g==} + cpu: [arm64] + os: [linux] + + '@oxc-parser/binding-linux-x64-gnu@0.40.1': + resolution: {integrity: sha512-AvIpUxuCzRsPxHua3DYE/uMLFMG3ie1pofHduHv55gVWpjxUEoQC+1/RcMAefC2bPOE9Q4nauPXMqYMC7Oy+DA==} + cpu: [x64] + os: [linux] + + '@oxc-parser/binding-linux-x64-musl@0.40.1': + resolution: {integrity: sha512-6GfUSnCxbfxT5eJl5dZTVVwEiD7amSt84jZIq81L7JTnc9n0U1FZI9WT7KfTA/rjeFvAb8DRKEBp0jHXrR0ajQ==} + cpu: [x64] + os: [linux] + + '@oxc-parser/binding-win32-arm64-msvc@0.40.1': + resolution: {integrity: sha512-busM0lUeCW87eDcBTObH70h8Q1NDSCH3lsn3RRq64/wgIqSPyBYfhHu8C5CoqVOVJjd7Sb7/yQMF211Rscv0DQ==} + cpu: [arm64] + os: [win32] + + '@oxc-parser/binding-win32-x64-msvc@0.40.1': + resolution: {integrity: sha512-uuPSt7vYjIw8p8Kdc5I+7bqPRF1WFzu6Pk3zrSM98FjV9COsyKXY6Er6qQ8nfU37TC/Hlyc3FB+qxTFzqZkuwg==} + cpu: [x64] + os: [win32] + + '@oxc-project/types@0.40.1': + resolution: {integrity: sha512-jhJXVcly+LREGeLskOt76bxPTxkF4RV7xDDGBO+H1CwK5grjMBWLlNnicI+ljSq3PkZEEU6dQrES9HMsRuk2HA==} + + '@parcel/watcher-android-arm64@2.5.0': + resolution: {integrity: sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.5.0': + resolution: {integrity: sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.0': + resolution: {integrity: sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.0': + resolution: {integrity: sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.5.0': + resolution: {integrity: sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm-musl@2.5.0': + resolution: {integrity: sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm64-glibc@2.5.0': + resolution: {integrity: sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-arm64-musl@2.5.0': + resolution: {integrity: sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-x64-glibc@2.5.0': + resolution: {integrity: sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-linux-x64-musl@2.5.0': + resolution: {integrity: sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-win32-arm64@2.5.0': + resolution: {integrity: sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.5.0': + resolution: {integrity: sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.5.0': + resolution: {integrity: sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.5.0': + resolution: {integrity: sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==} + engines: {node: '>= 10.0.0'} + + '@parvineyvazov/json-translator@3.2.2': + resolution: {integrity: sha512-gO6lEpqpc+LYcApdr1g8KJtHX4qmSAtWW+1B5VLQBnmbIY6ZxmfVoBkgusQKpvw7rmXxefkkouW0obVeKiT1Eg==} + engines: {node: '>=16'} + hasBin: true + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@pnpm/config.env-replace@1.1.0': + resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} + engines: {node: '>=12.22.0'} + + '@pnpm/network.ca-file@1.0.2': + resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} + engines: {node: '>=12.22.0'} + + '@pnpm/npm-conf@2.3.1': + resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} + engines: {node: '>=12'} + + '@polka/url@1.0.0-next.28': + resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} + + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.4': + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + + '@protobufjs/eventemitter@1.1.0': + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + + '@protobufjs/fetch@1.1.0': + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.0': + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.0': + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + + '@rollup/pluginutils@4.2.1': + resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} + engines: {node: '>= 8.0.0'} + + '@rollup/pluginutils@5.1.4': + resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.30.1': + resolution: {integrity: sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.30.1': + resolution: {integrity: sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.30.1': + resolution: {integrity: sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.30.1': + resolution: {integrity: sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.30.1': + resolution: {integrity: sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.30.1': + resolution: {integrity: sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.30.1': + resolution: {integrity: sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.30.1': + resolution: {integrity: sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.30.1': + resolution: {integrity: sha512-hqVyueGxAj3cBKrAI4aFHLV+h0Lv5VgWZs9CUGqr1z0fZtlADVV1YPOij6AhcK5An33EXaxnDLmJdQikcn5NEw==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.30.1': + resolution: {integrity: sha512-i4Ab2vnvS1AE1PyOIGp2kXni69gU2DAUVt6FSXeIqUCPIR3ZlheMW3oP2JkukDfu3PsexYRbOiJrY+yVNSk9oA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.30.1': + resolution: {integrity: sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.30.1': + resolution: {integrity: sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.30.1': + resolution: {integrity: sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.30.1': + resolution: {integrity: sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.30.1': + resolution: {integrity: sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.30.1': + resolution: {integrity: sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.30.1': + resolution: {integrity: sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.30.1': + resolution: {integrity: sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.30.1': + resolution: {integrity: sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og==} + cpu: [x64] + os: [win32] + + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + + '@sindresorhus/is@4.6.0': + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} + + '@sindresorhus/merge-streams@2.3.0': + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + engines: {node: '>=18'} + + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + + '@szmarczak/http-timer@4.0.6': + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} + engines: {node: '>=10'} + + '@tailwindcss/forms@0.5.10': + resolution: {integrity: sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==} + peerDependencies: + tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1' + + '@tailwindcss/typography@0.5.16': + resolution: {integrity: sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' + + '@tootallnate/once@2.0.0': + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + + '@trysound/sax@0.2.0': + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@types/bluebird@3.5.42': + resolution: {integrity: sha512-Jhy+MWRlro6UjVi578V/4ZGNfeCOcNCp0YaFNIUGFKlImowqwb1O/22wDVk3FDGMLqxdpOV3qQHD5fPEH4hK6A==} + + '@types/cacheable-request@6.0.3': + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + + '@types/eslint__js@8.42.3': + resolution: {integrity: sha512-alfG737uhmPdnvkrLdZLcEKJ/B8s9Y4hrZ+YAdzUeoArBlSUERA2E87ROfOaS4jd/C45fzOoZzidLc1IPwLqOw==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/filesystem@0.0.32': + resolution: {integrity: sha512-Yuf4jR5YYMR2DVgwuCiP11s0xuVRyPKmz8vo6HBY3CGdeMj8af93CFZX+T82+VD1+UqHOxTq31lO7MI7lepBtQ==} + + '@types/filewriter@0.0.33': + resolution: {integrity: sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==} + + '@types/http-cache-semantics@4.0.4': + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + + '@types/http-errors@1.8.2': + resolution: {integrity: sha512-EqX+YQxINb+MeXaIqYDASb6U6FCHbWjkj4a1CKDBks3d/QiB2+PqBLyO72vLDgAO1wUI4O+9gweRcQK11bTL/w==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/keyv@3.1.4': + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + + '@types/minimatch@3.0.5': + resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} + + '@types/node-fetch@2.6.12': + resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} + + '@types/node@18.19.70': + resolution: {integrity: sha512-RE+K0+KZoEpDUbGGctnGdkrLFwi1eYKTlIHNl2Um98mUkGsm1u2Ff6Ltd0e8DktTtC98uy7rSj+hO8t/QuLoVQ==} + + '@types/node@22.10.5': + resolution: {integrity: sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==} + + '@types/responselike@1.0.3': + resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} + + '@types/web-bluetooth@0.0.20': + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + + '@types/webextension-polyfill@0.12.1': + resolution: {integrity: sha512-xPTFWwQ8BxPevPF2IKsf4hpZNss4LxaOLZXypQH4E63BDLmcwX/RMGdI4tB4VO4Nb6xDBH3F/p4gz4wvof1o9w==} + + '@types/webextension-polyfill@0.8.3': + resolution: {integrity: sha512-GN+Hjzy9mXjWoXKmaicTegv3FJ0WFZ3aYz77Wk8TMp1IY3vEzvzj1vnsa0ggV7vMI1i+PUxe4qqnIJKCzf9aTg==} + + '@types/yauzl@2.10.3': + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + + '@typescript-eslint/eslint-plugin@8.19.1': + resolution: {integrity: sha512-tJzcVyvvb9h/PB96g30MpxACd9IrunT7GF9wfA9/0TJ1LxGOJx1TdPzSbBBnNED7K9Ka8ybJsnEpiXPktolTLg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/parser@8.19.1': + resolution: {integrity: sha512-67gbfv8rAwawjYx3fYArwldTQKoYfezNUT4D5ioWetr/xCrxXxvleo3uuiFuKfejipvq+og7mjz3b0G2bVyUCw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/scope-manager@8.19.1': + resolution: {integrity: sha512-60L9KIuN/xgmsINzonOcMDSB8p82h95hoBfSBtXuO4jlR1R9L1xSkmVZKgCPVfavDlXihh4ARNjXhh1gGnLC7Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.19.1': + resolution: {integrity: sha512-Rp7k9lhDKBMRJB/nM9Ksp1zs4796wVNyihG9/TU9R6KCJDNkQbc2EOKjrBtLYh3396ZdpXLtr/MkaSEmNMtykw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/types@8.19.1': + resolution: {integrity: sha512-JBVHMLj7B1K1v1051ZaMMgLW4Q/jre5qGK0Ew6UgXz1Rqh+/xPzV1aW581OM00X6iOfyr1be+QyW8LOUf19BbA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.19.1': + resolution: {integrity: sha512-jk/TZwSMJlxlNnqhy0Eod1PNEvCkpY6MXOXE/WLlblZ6ibb32i2We4uByoKPv1d0OD2xebDv4hbs3fm11SMw8Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/utils@8.19.1': + resolution: {integrity: sha512-IxG5gLO0Ne+KaUc8iW1A+XuKLd63o4wlbI1Zp692n1xojCl/THvgIKXJXBZixTh5dd5+yTJ/VXH7GJaaw21qXA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/visitor-keys@8.19.1': + resolution: {integrity: sha512-fzmjU8CHK853V/avYZAvuVut3ZTfwN5YtMaoi+X9Y9MA9keaWNHC3zEQ9zvyX/7Hj+5JkNyK1l7TOR2hevHB6Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@ungap/structured-clone@1.2.1': + resolution: {integrity: sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==} + + '@vitalets/google-translate-api@9.2.0': + resolution: {integrity: sha512-w98IPWGuexlGmh8Y19AxF6cgWT0U5JLevVNDKEuFpTWtBC9z3YtDWKTDxF3nPP1k9bWicuB1V7I7YfHoZiDScw==} + engines: {node: '>=14'} + + '@vitejs/plugin-vue@5.2.1': + resolution: {integrity: sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 + vue: ^3.2.25 + + '@volar/language-core@2.4.11': + resolution: {integrity: sha512-lN2C1+ByfW9/JRPpqScuZt/4OrUUse57GLI6TbLgTIqBVemdl1wNcZ1qYGEo2+Gw8coYLgCy7SuKqn6IrQcQgg==} + + '@volar/source-map@2.4.11': + resolution: {integrity: sha512-ZQpmafIGvaZMn/8iuvCFGrW3smeqkq/IIh9F1SdSx9aUl0J4Iurzd6/FhmjNO5g2ejF3rT45dKskgXWiofqlZQ==} + + '@volar/typescript@2.4.11': + resolution: {integrity: sha512-2DT+Tdh88Spp5PyPbqhyoYavYCPDsqbHLFwcUI9K1NlY1YgUJvujGdrqUp0zWxnW7KWNTr3xSpMuv2WnaTKDAw==} + + '@vue-macros/common@1.15.1': + resolution: {integrity: sha512-O0ZXaladWXwHplQnSjxLbB/G1KpdWCUNJPNYVHIxHonGex1BGpoB4fBZZLgddHgAiy18VZG/Iu5L0kwG+SV7JQ==} + engines: {node: '>=16.14.0'} + peerDependencies: + vue: ^2.7.0 || ^3.2.25 + peerDependenciesMeta: + vue: + optional: true + + '@vue/babel-helper-vue-transform-on@1.2.5': + resolution: {integrity: sha512-lOz4t39ZdmU4DJAa2hwPYmKc8EsuGa2U0L9KaZaOJUt0UwQNjNA3AZTq6uEivhOKhhG1Wvy96SvYBoFmCg3uuw==} + + '@vue/babel-plugin-jsx@1.2.5': + resolution: {integrity: sha512-zTrNmOd4939H9KsRIGmmzn3q2zvv1mjxkYZHgqHZgDrXz5B1Q3WyGEjO2f+JrmKghvl1JIRcvo63LgM1kH5zFg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + peerDependenciesMeta: + '@babel/core': + optional: true + + '@vue/babel-plugin-resolve-type@1.2.5': + resolution: {integrity: sha512-U/ibkQrf5sx0XXRnUZD1mo5F7PkpKyTbfXM3a3rC4YnUz6crHEz9Jg09jzzL6QYlXNto/9CePdOg/c87O4Nlfg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@vue/compiler-core@3.5.13': + resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} + + '@vue/compiler-dom@3.5.13': + resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} + + '@vue/compiler-sfc@3.5.13': + resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} + + '@vue/compiler-ssr@3.5.13': + resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} + + '@vue/compiler-vue2@2.7.16': + resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} + + '@vue/devtools-api@6.6.4': + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + + '@vue/devtools-core@7.7.0': + resolution: {integrity: sha512-tSO3pghV5RZGSonZ87S2fOGru3X93epmar5IjZOWjHxH6XSwnK5UbR2aW5puZV+LgLoVYrcNou3krSo5k1F31g==} + peerDependencies: + vue: ^3.0.0 + + '@vue/devtools-kit@7.7.0': + resolution: {integrity: sha512-5cvZ+6SA88zKC8XiuxUfqpdTwVjJbvYnQZY5NReh7qlSGPvVDjjzyEtW+gdzLXNSd8tStgOjAdMCpvDQamUXtA==} + + '@vue/devtools-shared@7.7.0': + resolution: {integrity: sha512-jtlQY26R5thQxW9YQTpXbI0HoK0Wf9Rd4ekidOkRvSy7ChfK0kIU6vvcBtjj87/EcpeOSK49fZAicaFNJcoTcQ==} + + '@vue/language-core@2.2.0': + resolution: {integrity: sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@vue/reactivity@3.5.13': + resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} + + '@vue/runtime-core@3.5.13': + resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==} + + '@vue/runtime-dom@3.5.13': + resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==} + + '@vue/server-renderer@3.5.13': + resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==} + peerDependencies: + vue: 3.5.13 + + '@vue/shared@3.5.13': + resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} + + '@vueuse/core@12.3.0': + resolution: {integrity: sha512-cnV8QDKZrsyKC7tWjPbeEUz2cD9sa9faxF2YkR8QqNwfofgbOhmfIgvSYmkp+ttSvfOw4E6hLcQx15mRPr0yBA==} + + '@vueuse/metadata@12.3.0': + resolution: {integrity: sha512-M/iQHHjMffOv2npsw2ihlUx1CTiBwPEgb7DzByLq7zpg1+Ke8r7s9p5ybUWc5OIeGewtpY4Xy0R2cKqFqM8hFg==} + + '@vueuse/shared@12.3.0': + resolution: {integrity: sha512-X3YD35GUeW0d5Gajcwv9jdLAJTV2Jdb/Ll6Ii2JIYcKLYZqv5wxyLeKtiQkqWmHg3v0J0ZWjDUMVOw2E7RCXfA==} + + '@webcomponents/custom-elements@1.6.0': + resolution: {integrity: sha512-CqTpxOlUCPWRNUPZDxT5v2NnHXA4oox612iUGnmTUGQFhZ1Gkj8kirtl/2wcF6MqX7+PqqicZzOCBKKfIn0dww==} + + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + + addons-linter@7.1.0: + resolution: {integrity: sha512-UmkUB3dZSpf8bqhlulGDbpoxBwcfOk8JvaJTRvJ+AAXKHvTjqeNlFC+GRMqa0EjJJh/0yqpBaJzyaUIx+fjl+A==} + engines: {node: '>=18.0.0'} + hasBin: true + + addons-moz-compare@1.3.0: + resolution: {integrity: sha512-/rXpQeaY0nOKhNx00pmZXdk5Mu+KhVlL3/pSBuAYwrxRrNiTvI/9xfQI8Lmm7DMMl+PDhtfAHY/0ibTpdeoQQQ==} + + addons-scanner-utils@9.11.0: + resolution: {integrity: sha512-X95V8ymnue9EHmOLz3zJTGHvHDFlWKiavlH+kJKOlv2sJDWFvD3TWeJMHJgxS9GKOqT/545mOXvX3vuuGGum+g==} + peerDependencies: + body-parser: 1.20.2 + express: 4.19.2 + node-fetch: 2.6.11 + safe-compare: 1.1.4 + peerDependenciesMeta: + body-parser: + optional: true + express: + optional: true + node-fetch: + optional: true + safe-compare: + optional: true + + adm-zip@0.5.16: + resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==} + engines: {node: '>=12.0'} + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + engines: {node: '>= 14'} + + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + alien-signals@0.4.12: + resolution: {integrity: sha512-Og0PgAihxlp1R22bsoBsyhhMG4+qhU+fkkLPoGBQkYVc3qt9rYnrwYTf+M6kqUqUZpf3rXDnpL90iKa0QcSVVg==} + + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-differ@4.0.0: + resolution: {integrity: sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + array-union@3.0.1: + resolution: {integrity: sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==} + engines: {node: '>=12'} + + ast-kit@1.3.2: + resolution: {integrity: sha512-gdvX700WVC6sHCJQ7bJGfDvtuKAh6Sa6weIZROxfzUZKP7BjvB8y0SMlM/o4omSQ3L60PQSJROBJsb0vEViVnA==} + engines: {node: '>=16.14.0'} + + ast-walker-scope@0.6.2: + resolution: {integrity: sha512-1UWOyC50xI3QZkRuDj6PqDtpm1oHWtYs+NQGwqL/2R11eN3Q81PHAHPM0SWW3BNQm53UDwS//Jv8L4CCVLM1bQ==} + engines: {node: '>=16.14.0'} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + + atomically@2.0.3: + resolution: {integrity: sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==} + + autoprefixer@10.4.20: + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + axios@1.7.9: + resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + big-integer@1.6.52: + resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} + engines: {node: '>=0.6'} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bing-translate-api@2.10.0: + resolution: {integrity: sha512-jAxLMMftjB9KizG/IqUz+pyfB6n4Q8zu7LVgbAULeHbBvOy+Enwxm+f2uNrKTeiO4tKhNqi13Kjk29DOc+q/zw==} + + birpc@0.2.19: + resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==} + + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + boxen@8.0.1: + resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} + engines: {node: '>=18'} + + bplist-parser@0.2.0: + resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} + engines: {node: '>= 5.10.0'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.24.3: + resolution: {integrity: sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bundle-name@3.0.0: + resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} + engines: {node: '>=12'} + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + + c12@1.11.2: + resolution: {integrity: sha512-oBs8a4uvSDO9dm8b7OCFW7+dgtVrwmwnrVXYzLm43ta7ep2jCn/0MhoUFygIWtxhyy6+/MG7/agvpY0U1Iemew==} + peerDependencies: + magicast: ^0.3.4 + peerDependenciesMeta: + magicast: + optional: true + + cacheable-lookup@5.0.4: + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} + + cacheable-request@7.0.4: + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} + engines: {node: '>=8'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + + camelcase@8.0.0: + resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} + engines: {node: '>=16'} + + caniuse-lite@1.0.30001690: + resolution: {integrity: sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==} + + cdata@0.1.3: + resolution: {integrity: sha512-z0R4cT5357OEAVkP1CEFTHz1egpu2gYiWm2WJOY/sQDhojEXUYL4m3v2kYi5wER3PkMRL+GgfDhed2kGzrHSZA==} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + cheerio-select@2.1.0: + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} + + cheerio@1.0.0: + resolution: {integrity: sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==} + engines: {node: '>=18.17'} + + cheerio@1.0.0-rc.12: + resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==} + engines: {node: '>= 6'} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + chrome-launcher@1.1.2: + resolution: {integrity: sha512-YclTJey34KUm5jB1aEJCq807bSievi7Nb/TU4Gu504fUYi3jw3KCIaH6L7nFWQhdEgH3V+wCh+kKD1P5cXnfxw==} + engines: {node: '>=12.13.0'} + hasBin: true + + chrome-types@0.1.329: + resolution: {integrity: sha512-QcUZ1UyYMeeoWG5wE7AbmfHcYPvAYkKYBcal/h2CHcNg8koup7/EzPLpHPBhWfxYLU4jFgwDCTTKZaHstbtXrw==} + + citty@0.1.6: + resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} + + clean-css@5.3.3: + resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} + engines: {node: '>= 10.0'} + + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone-response@1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + colors-cli@1.0.33: + resolution: {integrity: sha512-PWGsmoJFdOB0t+BeHgmtuoRZUQucOLl5ii81NBzOOGVxlgE04muFNHlR5j8i8MKbOPELBl3243AI6lGBTj5ICQ==} + hasBin: true + + columnify@1.6.0: + resolution: {integrity: sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==} + engines: {node: '>=8.0.0'} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@2.9.0: + resolution: {integrity: sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==} + engines: {node: '>= 0.6.x'} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + + commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + + common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + + compatx@0.1.8: + resolution: {integrity: sha512-jcbsEAR81Bt5s1qOFymBufmCbXCXbk0Ql+K5ouj6gCyx2yHlu6AgmGIi9HxfKixpUDO5bCFJUHQ5uM6ecbTebw==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + concat-stream@1.6.2: + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} + engines: {'0': node >= 0.8} + + concurrently@9.1.2: + resolution: {integrity: sha512-H9MWcoPsYddwbOGM6difjVwVZHl63nwMEwDJG/L7VGtuaJhb12h2caPG2tVPWs7emuYix252iGfqOyrz1GczTQ==} + engines: {node: '>=18'} + hasBin: true + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + config-chain@1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + + configstore@7.0.0: + resolution: {integrity: sha512-yk7/5PN5im4qwz0WFZW3PXnzHgPu9mX29Y8uZ3aefe2lBPC1FYttWZRcaW9fKkT0pBCJyuQ2HfbmPVaODi9jcQ==} + engines: {node: '>=18'} + + connect-history-api-fallback@1.6.0: + resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==} + engines: {node: '>=0.8'} + + consola@2.15.3: + resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==} + + consola@3.3.3: + resolution: {integrity: sha512-Qil5KwghMzlqd51UXM0b6fyaGHtOC22scxrwrz4A2882LyUMwQjnvaedN1HAeXzphspQ6CpHkzMAWxBTUruDLg==} + engines: {node: ^14.18.0 || >=16.10.0} + + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie-es@1.2.2: + resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} + + copy-anything@3.0.5: + resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} + engines: {node: '>=12.13'} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cross-env@7.0.3: + resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} + engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} + hasBin: true + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + crossws@0.2.4: + resolution: {integrity: sha512-DAxroI2uSOgUKLz00NX6A8U/8EE3SZHmIND+10jkVSaypvyt57J5JEOxAQOL6lQxyzi/wZbTIwssU1uy69h5Vg==} + peerDependencies: + uWebSockets.js: '*' + peerDependenciesMeta: + uWebSockets.js: + optional: true + + css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + + css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + + css-selector-tokenizer@0.8.0: + resolution: {integrity: sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==} + + css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + culori@3.3.0: + resolution: {integrity: sha512-pHJg+jbuFsCjz9iclQBqyL3B2HLCBF71BwVNujUYEvCeQMvV97R59MNK3R2+jgJ3a1fcZgI9B3vYgz8lzr/BFQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + cwait@1.1.2: + resolution: {integrity: sha512-kIx8zE5jJ1iBgZytTr01aj57HdC+thPsg8W9Tw0gbf30/F7wfRRUS+BiXT90Dn+A0oGtF0xLT5293Ua4w/ZsNA==} + + daisyui@4.12.23: + resolution: {integrity: sha512-EM38duvxutJ5PD65lO/AFMpcw+9qEy6XAZrTpzp7WyaPeO/l+F/Qiq0ECHHmFNcFXh5aVoALY4MGrrxtCiaQCQ==} + engines: {node: '>=16.9.0'} + + de-indent@1.0.2: + resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + + debounce@1.2.1: + resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@6.0.0: + resolution: {integrity: sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + default-browser-id@3.0.0: + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} + engines: {node: '>=12'} + + default-browser-id@5.0.0: + resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} + engines: {node: '>=18'} + + default-browser@4.0.0: + resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} + engines: {node: '>=14.16'} + + default-browser@5.2.1: + resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} + engines: {node: '>=18'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + destr@2.0.3: + resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==} + + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + + dot-prop@9.0.0: + resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==} + engines: {node: '>=18'} + + dotenv-expand@8.0.3: + resolution: {integrity: sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg==} + engines: {node: '>=12'} + + dotenv@16.4.7: + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} + engines: {node: '>=12'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + + electron-to-chromium@1.5.78: + resolution: {integrity: sha512-UmwIt7HRKN1rsJfddG5UG7rCTCTAKoS9JeOy/R0zSenAyaZ8SU3RuXlwcratxhdxGRNpk03iq8O7BA3W7ibLVw==} + + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + encoding-sniffer@0.2.0: + resolution: {integrity: sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + error-stack-parser-es@0.1.5: + resolution: {integrity: sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==} + + es-module-lexer@0.10.5: + resolution: {integrity: sha512-+7IwY/kiGAacQfY+YBhKMvEmyAJnw5grTUgjG85Pe7vcUI/6b7pZjZG8nQ7+48YhzEAEqrEgD2dCz/JIK+AYvw==} + + es6-error@4.1.1: + resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} + + esbuild@0.23.1: + resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} + engines: {node: '>=18'} + hasBin: true + + esbuild@0.24.2: + resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-goat@4.0.0: + resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==} + engines: {node: '>=12'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + + eslint-plugin-no-unsanitized@4.0.2: + resolution: {integrity: sha512-Pry0S9YmHoz8NCEMRQh7N0Yexh2MYCNPIlrV52hTmS7qXnTghWsjXouF08bgsrrZqaW9tt1ZiK3j5NEmPE+EjQ==} + peerDependencies: + eslint: ^6 || ^7 || ^8 + + eslint-plugin-vue@9.32.0: + resolution: {integrity: sha512-b/Y05HYmnB/32wqVcjxjHZzNpwxj1onBOvqW89W+V+XNG1dRuaFbNd3vT9CLbr2LXjEoq+3vn8DanWf7XU22Ug==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-scope@8.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.0.0: + resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + + eslint@9.17.0: + resolution: {integrity: sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.1.0: + resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + execa@4.1.0: + resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} + engines: {node: '>=10'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + + execa@9.5.2: + resolution: {integrity: sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==} + engines: {node: ^18.19.0 || >=20.5.0} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-patch@3.1.1: + resolution: {integrity: sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-redact@3.5.0: + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} + engines: {node: '>=6'} + + fast-uri@3.0.5: + resolution: {integrity: sha512-5JnBCWpFlMo0a3ciDy/JckMzzv1U9coZrIhedq+HXxxUfDTAiS0LA8OKVao4G9BxmCVck/jtA5r3KAtRWEyD8Q==} + + fastparse@1.1.2: + resolution: {integrity: sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==} + + fastq@1.18.0: + resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==} + + faye-websocket@0.11.4: + resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} + engines: {node: '>=0.8.0'} + + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + + figlet@1.8.0: + resolution: {integrity: sha512-chzvGjd+Sp7KUvPHZv6EXV5Ir3Q7kYNpCr4aHrRW79qFtTefmQZNny+W1pW9kf5zeE6dikku2W50W/wAH2xWgw==} + engines: {node: '>= 0.4.0'} + hasBin: true + + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + firebase@10.14.0: + resolution: {integrity: sha512-/yB/OE4bfBbmtfku0DCdW6nWMHYVayN6xWKw68ztedxqGevfYDoPoygBXiLmvBHdWdBa+IlhJDkdUUiEEpcAUw==} + + firefox-profile@4.7.0: + resolution: {integrity: sha512-aGApEu5bfCNbA4PGUZiRJAIU6jKmghV2UVdklXAofnNtiDjqYw0czLS46W7IfFqVKgKhFB8Ao2YoNGHY4BoIMQ==} + engines: {node: '>=18'} + hasBin: true + + first-chunk-stream@3.0.0: + resolution: {integrity: sha512-LNRvR4hr/S8cXXkIY5pTgVP7L3tq6LlYWcg9nWBuW7o1NMxKZo6oOVa/6GIekMGI0Iw7uC+HWimMe9u/VAeKqw==} + engines: {node: '>=8'} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.2: + resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + form-data-encoder@1.7.2: + resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} + + form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} + engines: {node: '>= 6'} + + formdata-node@4.4.1: + resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} + engines: {node: '>= 12.20'} + + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + fx-runner@1.4.0: + resolution: {integrity: sha512-rci1g6U0rdTg6bAaBboP7XdRu01dzTAaKXxFf+PUqGuCv6Xu7o8NZdY1D5MvKGIjb6EdS1g3VlXOgksir1uGkg==} + hasBin: true + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.3.0: + resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} + engines: {node: '>=18'} + + get-installed-browsers@0.1.7: + resolution: {integrity: sha512-gxGDcxaOpA9QNk/REyILnXJVmYS9Se33HTfFN7u03Pxpkn9R/ogsYIFRwyzvc5fCoZ548RAzGk4YSF0xLM4BUw==} + + get-port-please@3.1.2: + resolution: {integrity: sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ==} + + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} + + get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} + + giget@1.2.3: + resolution: {integrity: sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==} + hasBin: true + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + global-directory@4.0.1: + resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} + engines: {node: '>=18'} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@15.14.0: + resolution: {integrity: sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==} + engines: {node: '>=18'} + + globby@14.0.2: + resolution: {integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==} + engines: {node: '>=18'} + + got@11.8.6: + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} + + graceful-fs@4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graceful-readlink@1.0.1: + resolution: {integrity: sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + growly@1.3.0: + resolution: {integrity: sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==} + + h3@1.12.0: + resolution: {integrity: sha512-Zi/CcNeWBXDrFNlV0hUBJQR9F7a96RjMeAZweW/ZWkR9fuXrMcvKnSA63f/zZ9l0GgQOZDVHGvXivNN9PWOwhA==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + hash-sum@2.0.0: + resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + + html-minifier-terser@6.1.0: + resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} + engines: {node: '>=12'} + hasBin: true + + html-tags@3.3.1: + resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} + engines: {node: '>=8'} + + htmlparser2@8.0.2: + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + + htmlparser2@9.1.0: + resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} + + http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + http-parser-js@0.5.8: + resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} + + http-proxy-agent@5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + + http2-wrapper@1.0.3: + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + human-signals@1.1.1: + resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} + engines: {node: '>=8.12.0'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + + human-signals@8.0.0: + resolution: {integrity: sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==} + engines: {node: '>=18.18.0'} + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + idb@7.1.1: + resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + image-size@1.1.1: + resolution: {integrity: sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==} + engines: {node: '>=16.x'} + hasBin: true + + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + + immutable@5.0.3: + resolution: {integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inflight@1.0.6: + resolution: {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. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + ini@4.1.1: + resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + ini@4.1.3: + resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + inquirer@7.3.3: + resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} + engines: {node: '>=8.0.0'} + + invert-kv@3.0.1: + resolution: {integrity: sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==} + engines: {node: '>=8'} + + iron-webcrypto@1.2.1: + resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} + + is-absolute@0.1.7: + resolution: {integrity: sha512-Xi9/ZSn4NFapG8RP98iNPMOeaV3mXPisxKxzKtHVqr3g56j/fBn+yZmnxSVAA8lmZbl2J9b/a4kJvfU3hqQYgA==} + engines: {node: '>=0.10.0'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-in-ci@1.0.0: + resolution: {integrity: sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==} + engines: {node: '>=18'} + hasBin: true + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-installed-globally@1.0.0: + resolution: {integrity: sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==} + engines: {node: '>=18'} + + is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + + is-npm@6.0.0: + resolution: {integrity: sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-path-inside@4.0.0: + resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} + engines: {node: '>=12'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-relative@0.1.3: + resolution: {integrity: sha512-wBOr+rNM4gkAZqoLRJI4myw5WzzIdQosFAAbnvfXP5z1LyzgAI3ivOKehC5KfqlQJZoihVhirgtCBj378Eg8GA==} + engines: {node: '>=0.10.0'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} + + is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + + is-utf8@0.2.1: + resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} + + is-what@4.1.16: + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} + engines: {node: '>=12.13'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isexe@1.1.2: + resolution: {integrity: sha512-d2eJzK691yZwPHcv1LbeAOa91yMJ9QmfTgSO1oXB65ezVhXQsxBac2vEB4bMVms9cGzaA99n6V2viHMq82VLDw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true + + jed@1.1.1: + resolution: {integrity: sha512-z35ZSEcXHxLW4yumw0dF6L464NT36vmx3wxJw8MDpraBcWuNVgUPZgPJKcu1HekNgwlMFNqol7i/IpSbjhqwqA==} + + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + hasBin: true + + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + + jose@5.9.2: + resolution: {integrity: sha512-ILI2xx/I57b20sd7rHZvgiiQrmp2mcotwsAH+5ajbpFQbrYVQdNHYlQhoA5cFb78CgtBOxtC05TeA+mcgkuCqQ==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-merge-patch@1.0.2: + resolution: {integrity: sha512-M6Vp2GN9L7cfuMXiWOmHj9bEFbeC250iVtcKQbqVgEsDVYnIsrNsbU+h/Y/PkbBQCtEa4Bez+Ebv0zfbC8ObLg==} + + json-parse-even-better-errors@3.0.2: + resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-eslint-parser@2.4.0: + resolution: {integrity: sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jszip@3.10.1: + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + klona@2.0.6: + resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} + engines: {node: '>= 8'} + + knitwork@1.2.0: + resolution: {integrity: sha512-xYSH7AvuQ6nXkq42x0v5S8/Iry+cfulBz/DJQzhIyESdLD7425jXsPy4vn5cCXU+HhRN2kVw51Vd1K6/By4BQg==} + + kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + + ky@1.7.4: + resolution: {integrity: sha512-zYEr/gh7uLW2l4su11bmQ2M9xLgQLjyvx58UyNM/6nuqyWFHPX5ktMjvpev3F8QWdjSsHUpnWew4PBCswBNuMQ==} + engines: {node: '>=18'} + + latest-version@9.0.0: + resolution: {integrity: sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==} + engines: {node: '>=18'} + + launch-editor@2.9.1: + resolution: {integrity: sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==} + + lcid@3.1.1: + resolution: {integrity: sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==} + engines: {node: '>=8'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lie@3.3.0: + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + + lighthouse-logger@2.0.1: + resolution: {integrity: sha512-ioBrW3s2i97noEmnXxmUq7cjIcVRjT5HBpAYy8zE11CxU9HqlWHHeRxfeN1tn8F7OEMVPIC9x1f8t3Z7US9ehQ==} + + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + lines-and-columns@2.0.4: + resolution: {integrity: sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + loading-cli@1.1.2: + resolution: {integrity: sha512-M1ntfXHpdGoQxfaqKBOQPwSrTr9EIoTgj664Q9UVSbSnJvAFdribo+Ij//1jvACgrGHaTvfKoD9PG3NOxGj44g==} + + local-pkg@0.5.1: + resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} + engines: {node: '>=14'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.castarray@4.4.0: + resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@6.0.0: + resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} + engines: {node: '>=18'} + + long@5.2.3: + resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + lowercase-keys@2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + magic-string-ast@0.6.3: + resolution: {integrity: sha512-C9sgUzVZtUtzCBoMdYtwrIRQ4IucGRFGgdhkjL7PXsVfPYmTuWtewqzk7dlipaCMWH/gOYehW9rgMoa4Oebtpw==} + engines: {node: '>=16.14.0'} + + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + map-age-cleaner@0.1.3: + resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==} + engines: {node: '>=6'} + + marked@15.0.6: + resolution: {integrity: sha512-Y07CUOE+HQXbVDCGl3LXggqJDbXDP2pArc2C1N1RRMN0ONiShoSsIInMd5Gsxupe7fKLpgimTV+HOJ9r7bA+pg==} + engines: {node: '>= 18'} + hasBin: true + + marky@1.2.5: + resolution: {integrity: sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==} + + mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + + mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + + mem@5.1.1: + resolution: {integrity: sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw==} + engines: {node: '>=8'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + mimic-response@1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + + mini-svg-data-uri@1.4.4: + resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==} + hasBin: true + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + mlly@1.7.3: + resolution: {integrity: sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==} + + mrmime@2.0.0: + resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} + engines: {node: '>=10'} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + + multimatch@6.0.0: + resolution: {integrity: sha512-I7tSVxHGPlmPN/enE3mS1aOSo6bWBfls+3HmuEeCUBCE7gWnm3cBXCBkpurzFjVRwC6Kld8lLaZ1Iv5vOcjvcQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoevents@6.0.2: + resolution: {integrity: sha512-FRS2otuFcPPYDPYViNWQ42+1iZqbXydinkRHTHFxrF4a1CpBfmydR9zkI44WSXAXCyPrkcGtPk5CnpW6Y3lFKQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + nanoid@5.0.9: + resolution: {integrity: sha512-Aooyr6MXU6HpvvWXKoVoXwKMs/KyVakWwg7xQfv5/S/RIgJMy0Ifa45H9qqYy7pTCszrHzP21Uk4PZq2HpEM8Q==} + engines: {node: ^18 || >=20} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + + node-fetch-native@1.6.4: + resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-forge@1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + + node-html-parser@5.4.2: + resolution: {integrity: sha512-RaBPP3+51hPne/OolXxcz89iYvQvKOydaqoePpOgXcrOKZhjVIzmpKZz+Hd/RBO2/zN2q6CNJhQzucVz+u3Jyw==} + + node-notifier@10.0.1: + resolution: {integrity: sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==} + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + + notivue@2.4.5: + resolution: {integrity: sha512-7yBdaKesUZIwdcQP3nv1oWYyisI2bURkZ+D9KfLgeNqguHUzkQ1WdhGcTj59PBZa8mqa1/K5Mh8YsphSToMKcQ==} + peerDependencies: + '@nuxt/kit': '>=3.5.0' + '@nuxt/schema': '>=3.5.0' + defu: '>=6' + peerDependenciesMeta: + '@nuxt/kit': + optional: true + '@nuxt/schema': + optional: true + defu: + optional: true + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + npm-run-path@6.0.0: + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + engines: {node: '>=18'} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + nypm@0.3.12: + resolution: {integrity: sha512-D3pzNDWIvgA+7IORhD/IuWzEk4uXv6GsgOxiid4UU3h9oq5IqV1KtPDi63n4sZJ/xcWlr88c0QM2RgN5VbOhFA==} + engines: {node: ^14.16.0 || >=16.10.0} + hasBin: true + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + ohash@1.1.4: + resolution: {integrity: sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==} + + on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + open@10.1.0: + resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} + engines: {node: '>=18'} + + open@9.1.0: + resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} + engines: {node: '>=14.16'} + + openai@4.78.1: + resolution: {integrity: sha512-drt0lHZBd2lMyORckOXFPQTmnGLWSLt8VK0W9BhOKWpMFBEoHMoz5gxMPmVq5icp+sOrsbMnsmZTVHUlKvD1Ow==} + hasBin: true + peerDependencies: + zod: ^3.23.8 + peerDependenciesMeta: + zod: + optional: true + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + ora@8.1.1: + resolution: {integrity: sha512-YWielGi1XzG1UTvOaCFaNgEnuhZVMSHYkW/FQ7UX8O26PtlpdM84c0f7wLPlkvx2RfiQmnzd61d/MGxmpQeJPw==} + engines: {node: '>=18'} + + os-locale@5.0.0: + resolution: {integrity: sha512-tqZcNEDAIZKBEPnHPlVDvKrp7NzgLi7jRmhKiUoa2NUmhl13FtkAGLUVR+ZsYvApBQdBfYm43A4tXXQ4IrYLBA==} + engines: {node: '>=10'} + + os-shim@0.1.3: + resolution: {integrity: sha512-jd0cvB8qQ5uVt0lvCIexBaROw1KyKm5sbulg2fWOHjETisuCzWyt+eTZKEMs8v6HwzoGs8xik26jg7eCM6pS+A==} + engines: {node: '>= 0.4.0'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + oxc-parser@0.40.1: + resolution: {integrity: sha512-uN+yvg3rJX6SDtWq4unomdlhafjj0X82yT3DS64XGSG8+bNEBe4ktA95K/WRFH/0l7/pB2xcvo40tFfEqDx+hQ==} + + p-cancelable@2.1.1: + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} + + p-defer@1.0.0: + resolution: {integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==} + engines: {node: '>=4'} + + p-is-promise@2.1.0: + resolution: {integrity: sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + package-json@10.0.1: + resolution: {integrity: sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==} + engines: {node: '>=18'} + + package-manager-detector@0.2.8: + resolution: {integrity: sha512-ts9KSdroZisdvKMWVAVCXiKqnqNfXz4+IbrBG8/BWx/TR5le+jfenvoBuIZ6UWM9nz47W7AbD9qYfAwfWMIwzA==} + + pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + + param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@7.1.1: + resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==} + engines: {node: '>=16'} + + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} + + parse5-htmlparser2-tree-adapter@7.1.0: + resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} + + parse5-parser-stream@7.1.2: + resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} + + parse5@7.2.1: + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + + pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-type@5.0.0: + resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} + engines: {node: '>=12'} + + pathe@0.2.0: + resolution: {integrity: sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pinia@2.3.0: + resolution: {integrity: sha512-ohZj3jla0LL0OH5PlLTDMzqKiVw2XARmC1XYLdLWIPBMdhDW/123ZWr4zVAhtJm+aoSkFa13pYXskAvAscIkhQ==} + peerDependencies: + typescript: '>=4.4.4' + vue: ^2.7.0 || ^3.5.11 + peerDependenciesMeta: + typescript: + optional: true + + pino-abstract-transport@1.2.0: + resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==} + + pino-std-serializers@6.2.2: + resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==} + + pino-std-serializers@7.0.0: + resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} + + pino@8.20.0: + resolution: {integrity: sha512-uhIfMj5TVp+WynVASaVEJFTncTUe4dHBq6CWplu/vBgvGHhvBvQfxz+vcOrnnBQdORH3izaGEurLfNlq3YxdFQ==} + hasBin: true + + pino@9.4.0: + resolution: {integrity: sha512-nbkQb5+9YPhQRz/BeQmrWpEknAaqjpAqRK8NwJpmrX/JHu7JuZC5G1CeAwJDJfGes4h+YihC6in3Q2nGb+Y09w==} + hasBin: true + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + pkg-types@1.3.0: + resolution: {integrity: sha512-kS7yWjVFCkIw9hqdJBoMxDdzEngmkr5FXeWZZfQ6GoYacjVnsW6l2CcYW/0ThD0vF4LPJgVYnrg4d0uuhwYQbg==} + + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-selector-parser@6.0.10: + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + engines: {node: '>=4'} + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-plugin-tailwindcss@0.6.9: + resolution: {integrity: sha512-r0i3uhaZAXYP0At5xGfJH876W3HHGHDp+LCRUJrs57PBeQ6mYHMwr25KH8NPX44F2yGTvdnH7OqCshlQx183Eg==} + engines: {node: '>=14.21.3'} + peerDependencies: + '@ianvs/prettier-plugin-sort-imports': '*' + '@prettier/plugin-pug': '*' + '@shopify/prettier-plugin-liquid': '*' + '@trivago/prettier-plugin-sort-imports': '*' + '@zackad/prettier-plugin-twig-melody': '*' + prettier: ^3.0 + prettier-plugin-astro: '*' + prettier-plugin-css-order: '*' + prettier-plugin-import-sort: '*' + prettier-plugin-jsdoc: '*' + prettier-plugin-marko: '*' + prettier-plugin-multiline-arrays: '*' + prettier-plugin-organize-attributes: '*' + prettier-plugin-organize-imports: '*' + prettier-plugin-sort-imports: '*' + prettier-plugin-style-order: '*' + prettier-plugin-svelte: '*' + peerDependenciesMeta: + '@ianvs/prettier-plugin-sort-imports': + optional: true + '@prettier/plugin-pug': + optional: true + '@shopify/prettier-plugin-liquid': + optional: true + '@trivago/prettier-plugin-sort-imports': + optional: true + '@zackad/prettier-plugin-twig-melody': + optional: true + prettier-plugin-astro: + optional: true + prettier-plugin-css-order: + optional: true + prettier-plugin-import-sort: + optional: true + prettier-plugin-jsdoc: + optional: true + prettier-plugin-marko: + optional: true + prettier-plugin-multiline-arrays: + optional: true + prettier-plugin-organize-attributes: + optional: true + prettier-plugin-organize-imports: + optional: true + prettier-plugin-sort-imports: + optional: true + prettier-plugin-style-order: + optional: true + prettier-plugin-svelte: + optional: true + + prettier@3.4.2: + resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} + engines: {node: '>=14'} + hasBin: true + + pretty-ms@9.2.0: + resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} + engines: {node: '>=18'} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + process-warning@3.0.0: + resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} + + process-warning@4.0.1: + resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + promise-toolbox@0.21.0: + resolution: {integrity: sha512-NV8aTmpwrZv+Iys54sSFOBx3tuVaOBvvrft5PNppnxy9xpU/akHbaWIril22AB22zaPgrgwKdD0KsrM0ptUtpg==} + engines: {node: '>=6'} + + proto-list@1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + + protobufjs@7.4.0: + resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==} + engines: {node: '>=12.0.0'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + pupa@3.1.0: + resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==} + engines: {node: '>=12.20'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + queue@6.0.2: + resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} + + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + + radix3@1.1.2: + resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} + + rc9@2.1.2: + resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + react-refresh@0.13.0: + resolution: {integrity: sha512-XP8A9BT0CpRBD+NYLLeIhld/RqG9+gktUjW1FkE+Vm7OCinbG1SshcK5tb9ls4kzvjZr9mOQc7HYgBngEyPAXg==} + engines: {node: '>=0.10.0'} + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@4.7.0: + resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + readdirp@4.0.2: + resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} + engines: {node: '>= 14.16.0'} + + real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + registry-auth-token@5.0.3: + resolution: {integrity: sha512-1bpc9IyC+e+CNFRaWyn77tk4xGG4PPUyfakSmA6F6cvUDjrm58dfyJ3II+9yb10EDkHoy1LaPSmHaWLOH3m6HA==} + engines: {node: '>=14'} + + registry-url@6.0.1: + resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} + engines: {node: '>=12'} + + relateurl@0.2.7: + resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} + engines: {node: '>= 0.10'} + + relaxed-json@1.0.3: + resolution: {integrity: sha512-b7wGPo7o2KE/g7SqkJDDbav6zmrEeP4TK2VpITU72J/M949TLe/23y/ZHJo+pskcGM52xIfFoT9hydwmgr1AEg==} + engines: {node: '>= 0.10.0'} + hasBin: true + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + responselike@2.0.1: + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rollup@2.79.2: + resolution: {integrity: sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==} + engines: {node: '>=10.0.0'} + hasBin: true + + rollup@4.30.1: + resolution: {integrity: sha512-mlJ4glW020fPuLi7DkM/lN97mYEZGWeqBnrljzN0gs7GLctqX3lNWxKQ7Gl712UAX+6fog/L3jh4gb7R6aVi3w==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-applescript@5.0.0: + resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} + engines: {node: '>=12'} + + run-applescript@7.0.0: + resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} + engines: {node: '>=18'} + + run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@6.6.7: + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} + + rxjs@7.5.7: + resolution: {integrity: sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sass@1.83.1: + resolution: {integrity: sha512-EVJbDaEs4Rr3F0glJzFSOvtg2/oy2V/YrGFPqPY24UqcLDWcI9ZY5sN+qyO3c/QCZwzgfirvhXvINiJCE/OLcA==} + engines: {node: '>=14.0.0'} + hasBin: true + + sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + + scule@1.3.0: + resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + serialize-error@9.1.1: + resolution: {integrity: sha512-6uZQLGyUkNA4N+Zii9fYukmNu9PEA1F5rqcwXzN/3LtBjwl2dFBbVZ1Zyn08/CGkB4H440PIemdOQBt1Wvjbrg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shell-quote@1.7.3: + resolution: {integrity: sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==} + + shell-quote@1.8.2: + resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} + engines: {node: '>= 0.4'} + + shellwords@0.1.1: + resolution: {integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + sirv@3.0.0: + resolution: {integrity: sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==} + engines: {node: '>=18'} + + slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + + sonic-boom@3.8.1: + resolution: {integrity: sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==} + + sonic-boom@4.2.0: + resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + spawn-sync@1.0.15: + resolution: {integrity: sha512-9DWBgrgYZzNghseho0JOuh+5fg9u6QWhAWa51QC7+U5rCheZ/j1DrEZnyE0RBBRqZ9uEXGPgSSM0nky6burpVw==} + + speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + + split@1.0.1: + resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==} + + squoosh-next@0.1.2: + resolution: {integrity: sha512-4BByP5BQWr850IxPezDTI8nIrIC41VZwLAj6JRUavbA0Ss5C2B2Jshp/WlZ764dUEzT7mUFGrYpWuBWmLvWDsw==} + engines: {node: ' ^12.5.0 || ^14.0.0 || ^16.0.0 '} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + std-env@3.8.0: + resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} + + stdin-discarder@0.2.2: + resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} + engines: {node: '>=18'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom-buf@2.0.0: + resolution: {integrity: sha512-gLFNHucd6gzb8jMsl5QmZ3QgnUJmp7qn4uUSHNwEXumAp7YizoGYw19ZUVfuq4aBOQUtyn2k8X/CwzWB73W2lQ==} + engines: {node: '>=8'} + + strip-bom-stream@4.0.0: + resolution: {integrity: sha512-0ApK3iAkHv6WbgLICw/J4nhwHeDZsBxIIsOD+gHgZICL6SeJ0S9f/WZqemka9cjkTyMN5geId6e8U5WGFAn3cQ==} + engines: {node: '>=8'} + + strip-bom@5.0.0: + resolution: {integrity: sha512-p+byADHF7SzEcVnLvc/r3uognM1hUhObuHXxJcgLCfD194XAkaLbjq3Wzb0N5G2tgIjH0dgT708Z51QxMeu60A==} + engines: {node: '>=12'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-final-newline@4.0.0: + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} + engines: {node: '>=18'} + + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + strip-json-comments@5.0.1: + resolution: {integrity: sha512-0fk9zBqO67Nq5M/m45qHCJxylV/DhBlIOVExqgOMiCCrzrhU6tCibRXNqE3jwJLftzE9SNuZtYbpzcO+i9FiKw==} + engines: {node: '>=14.16'} + + strip-literal@2.1.1: + resolution: {integrity: sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==} + + stubborn-fs@1.2.5: + resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + superjson@2.2.2: + resolution: {integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==} + engines: {node: '>=16'} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + svg-tags@1.0.0: + resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} + + svgo@3.3.2: + resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==} + engines: {node: '>=14.0.0'} + hasBin: true + + tailwindcss@3.4.17: + resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} + engines: {node: '>=14.0.0'} + hasBin: true + + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + + terser@5.37.0: + resolution: {integrity: sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==} + engines: {node: '>=10'} + hasBin: true + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + thread-stream@2.7.0: + resolution: {integrity: sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==} + + thread-stream@3.1.0: + resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tiny-uid@1.1.2: + resolution: {integrity: sha512-0beRFXR+fv4C40ND2PqgNjq6iyB1dKXciKJjslLw0kPYCcR82aNd2b+Tt2yy06LimIlvtoehgvrm/fUZCutSfg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + titleize@3.0.0: + resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} + engines: {node: '>=12'} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + tmp@0.2.3: + resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} + engines: {node: '>=14.14'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + ts-api-utils@2.0.0: + resolution: {integrity: sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsx@4.19.2: + resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} + engines: {node: '>=18.0.0'} + hasBin: true + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + + type-fest@3.13.1: + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} + engines: {node: '>=14.16'} + + type-fest@4.31.0: + resolution: {integrity: sha512-yCxltHW07Nkhv/1F6wWBr8kz+5BGMfP+RbRSYFnegVb0qV/UMT0G0ElBloPVerqn4M2ZV80Ir1FtCcYv1cT6vQ==} + engines: {node: '>=16'} + + typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + + typescript-eslint@8.19.1: + resolution: {integrity: sha512-LKPUQpdEMVOeKluHi8md7rwLcoXHhwvWp3x+sJkMuq3gGm9yaYJtPo8sRZSblMFJ5pcOGCAak/scKf1mvZDlQw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + typescript@5.7.2: + resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} + engines: {node: '>=14.17'} + hasBin: true + + ufo@1.5.4: + resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} + + uncrypto@0.1.3: + resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} + + unctx@2.4.1: + resolution: {integrity: sha512-AbaYw0Nm4mK4qjhns67C+kgxR2YWiwlDBPzxrN8h8C6VtAdCgditAY5Dezu3IJy4XVqAnbrXt9oQJvsn3fyozg==} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + + undici@5.28.4: + resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} + engines: {node: '>=14.0'} + + undici@6.19.7: + resolution: {integrity: sha512-HR3W/bMGPSr90i8AAp2C4DM3wChFdJPLrWYpIS++LxS8K+W535qftjt+4MyjNYHeWabMj1nvtmLIi7l++iq91A==} + engines: {node: '>=18.17'} + + undici@6.21.0: + resolution: {integrity: sha512-BUgJXc752Kou3oOIuU1i+yZZypyZRqNPW0vqoMPl8VaoalSfeR0D8/t4iAS3yirs79SSMTxTag+ZC86uswv+Cw==} + engines: {node: '>=18.17'} + + unenv@1.10.0: + resolution: {integrity: sha512-wY5bskBQFL9n3Eca5XnhH6KbUo/tfvkwm9OpcdCvLaeA7piBNbavbOKJySEwQ1V0RH6HvNlSAFRTpvTqgKRQXQ==} + + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + + unimport@3.14.5: + resolution: {integrity: sha512-tn890SwFFZxqaJSKQPPd+yygfKSATbM8BZWW1aCR2TJBTs1SDrmLamBueaFtYsGjHtQaRgqEbQflOjN2iW12gA==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unplugin-auto-import@0.19.0: + resolution: {integrity: sha512-W97gTDEWu/L1EcKCXY5Ni8bsMW1E9kv12wYQv3mYpd7zcFctXYlLKsqeva6sbCQbzS8t9AG/XdU5/WkEJKPlFw==} + engines: {node: '>=14'} + peerDependencies: + '@nuxt/kit': ^3.2.2 + '@vueuse/core': '*' + peerDependenciesMeta: + '@nuxt/kit': + optional: true + '@vueuse/core': + optional: true + + unplugin-icons@0.22.0: + resolution: {integrity: sha512-CP+iZq5U7doOifer5bcM0jQ9t3Is7EGybIYt3myVxceI8Zuk8EZEpe1NPtJvh7iqMs1VdbK0L41t9+um9VuuLw==} + peerDependencies: + '@svgr/core': '>=7.0.0' + '@svgx/core': ^1.0.1 + '@vue/compiler-sfc': ^3.0.2 || ^2.7.0 + svelte: ^3.0.0 || ^4.0.0 || ^5.0.0 + vue-template-compiler: ^2.6.12 + vue-template-es2015-compiler: ^1.9.0 + peerDependenciesMeta: + '@svgr/core': + optional: true + '@svgx/core': + optional: true + '@vue/compiler-sfc': + optional: true + svelte: + optional: true + vue-template-compiler: + optional: true + vue-template-es2015-compiler: + optional: true + + unplugin-imagemin@0.6.5: + resolution: {integrity: sha512-h+Wzg5wHUGkcQKMuQzXxoNUYQhOIWLDnmi1sFQNc/ZVjDDZTskJS7zTJYSaibkf5VQCVWRBI8Q/HaLA23aE1Cw==} + engines: {node: '>=14'} + + unplugin-turbo-console@1.11.1: + resolution: {integrity: sha512-SJJDxlY0niJfwYHQkf6JP1gfBYkO/vC5Gl8rv187h2RgM+twxmbL+FXf/hskgFU8LRl6Osl1WVEV8ectUZrDww==} + peerDependencies: + '@farmfe/core': '>=1' + '@nuxt/kit': '>=3' + '@nuxt/schema': '>=3' + astro: '>=3' + esbuild: '*' + rollup: '>=3' + vite: '>=3' + vue: '>=2.7 || >=3.2.13' + webpack: ^4 || ^5 + peerDependenciesMeta: + '@farmfe/core': + optional: true + '@nuxt/kit': + optional: true + '@nuxt/schema': + optional: true + astro: + optional: true + esbuild: + optional: true + rollup: + optional: true + vite: + optional: true + vue: + optional: true + webpack: + optional: true + + unplugin-vue-components@0.28.0: + resolution: {integrity: sha512-jiTGtJ3JsRFBjgvyilfrX7yUoGKScFgbdNw+6p6kEXU+Spf/rhxzgvdfuMcvhCcLmflB/dY3pGQshYBVGOUx7Q==} + engines: {node: '>=14'} + peerDependencies: + '@babel/parser': ^7.15.8 + '@nuxt/kit': ^3.2.2 + vue: 2 || 3 + peerDependenciesMeta: + '@babel/parser': + optional: true + '@nuxt/kit': + optional: true + + unplugin-vue-router@0.10.9: + resolution: {integrity: sha512-DXmC0GMcROOnCmN56GRvi1bkkG1BnVs4xJqNvucBUeZkmB245URvtxOfbo3H6q4SOUQQbLPYWd6InzvjRh363A==} + peerDependencies: + vue-router: ^4.4.0 + peerDependenciesMeta: + vue-router: + optional: true + + unplugin@1.16.0: + resolution: {integrity: sha512-5liCNPuJW8dqh3+DM6uNM2EI3MLLpCKp/KY+9pB5M2S2SR2qvvDHhKgBOaTWEbZTAws3CXfB0rKTIolWKL05VQ==} + engines: {node: '>=14.0.0'} + + unplugin@2.0.0-beta.1: + resolution: {integrity: sha512-2qzQo5LN2DmUZXkWDHvGKLF5BP0WN+KthD6aPnPJ8plRBIjv4lh5O07eYcSxgO2znNw9s4MNhEO1sB+JDllDbQ==} + engines: {node: '>=18.12.0'} + + unplugin@2.1.2: + resolution: {integrity: sha512-Q3LU0e4zxKfRko1wMV2HmP8lB9KWislY7hxXpxd+lGx0PRInE4vhMBVEZwpdVYHvtqzhSrzuIfErsob6bQfCzw==} + engines: {node: '>=18.12.0'} + + untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + + untyped@1.5.2: + resolution: {integrity: sha512-eL/8PlhLcMmlMDtNPKhyyz9kEBDS3Uk4yMu/ewlkT2WFbtzScjHWPJLdQLmaGPUKjXzwe9MumOtOgc4Fro96Kg==} + hasBin: true + + upath@2.0.1: + resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==} + engines: {node: '>=4'} + + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + update-notifier@7.3.1: + resolution: {integrity: sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==} + engines: {node: '>=18'} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + vite-hot-client@0.2.4: + resolution: {integrity: sha512-a1nzURqO7DDmnXqabFOliz908FRmIppkBKsJthS8rbe8hBEXwEwe4C3Pp33Z1JoFCYfVL4kTOMLKk0ZZxREIeA==} + peerDependencies: + vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 + + vite-plugin-html@3.2.2: + resolution: {integrity: sha512-vb9C9kcdzcIo/Oc3CLZVS03dL5pDlOFuhGlZYDCJ840BhWl/0nGeZWf3Qy7NlOayscY4Cm/QRgULCQkEZige5Q==} + peerDependencies: + vite: '>=2.0.0' + + vite-plugin-inspect@0.8.9: + resolution: {integrity: sha512-22/8qn+LYonzibb1VeFZmISdVao5kC22jmEKm24vfFE8siEn47EpVcCLYMv6iKOYMJfjSvSJfueOwcFCkUnV3A==} + engines: {node: '>=14'} + peerDependencies: + '@nuxt/kit': '*' + vite: ^3.1.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.1 + peerDependenciesMeta: + '@nuxt/kit': + optional: true + + vite-plugin-vue-devtools@7.7.0: + resolution: {integrity: sha512-1dWiREwIl4JELwXGHXih80hIgjcViMcZGr3j0edo6NQ9kNzAOxMIUgFqc/TO1ary4ZroJUxoB0YDI6jnDf13iQ==} + engines: {node: '>=v14.21.3'} + peerDependencies: + vite: ^3.1.0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 + + vite-plugin-vue-inspector@5.3.1: + resolution: {integrity: sha512-cBk172kZKTdvGpJuzCCLg8lJ909wopwsu3Ve9FsL1XsnLBiRT9U3MePcqrgGHgCX2ZgkqZmAGR8taxw+TV6s7A==} + peerDependencies: + vite: ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 + + vite-plugin-zip-pack@1.2.4: + resolution: {integrity: sha512-QgZEeiWayE2ZvMbkvcqWf94p/Z5YeNHZlkwXWIkkoISjePiWVXKRX2xCGmsURe9acGVdkobZ31dFJuCp3j1hMg==} + peerDependencies: + vite: '>=2.x' + + vite@6.0.7: + resolution: {integrity: sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vscode-uri@3.0.8: + resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} + + vue-demi@0.14.10: + resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} + engines: {node: '>=12'} + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + vue-eslint-parser@9.4.3: + resolution: {integrity: sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + + vue-i18n@11.0.1: + resolution: {integrity: sha512-pWAT8CusK8q9/EpN7V3oxwHwxWm6+Kp2PeTZmRGvdZTkUzMQDpbbmHp0TwQ8xw04XKm23cr6B4GL72y3W8Yekg==} + engines: {node: '>= 16'} + peerDependencies: + vue: ^3.0.0 + + vue-router@4.5.0: + resolution: {integrity: sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==} + peerDependencies: + vue: ^3.2.0 + + vue-template-compiler@2.7.14: + resolution: {integrity: sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==} + + vue-tsc@2.2.0: + resolution: {integrity: sha512-gtmM1sUuJ8aSb0KoAFmK9yMxb8TxjewmxqTJ1aKphD5Cbu0rULFY6+UQT51zW7SpUcenfPUuflKyVwyx9Qdnxg==} + hasBin: true + peerDependencies: + typescript: '>=5.0.0' + + vue@3.5.13: + resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + vuefire@3.2.1: + resolution: {integrity: sha512-APj/iFdEec9kO71Lsiv/7opo9xL0D43l7cjwh84rJ5WMzrmpi9z774zzN+PPhBpD6bXyueLcfg0VlOUhI9/jUA==} + engines: {node: '>=18'} + peerDependencies: + '@vue/composition-api': '*' + consola: ^3.2.3 + firebase: ^9.0.0 || ^10.0.0 || ^11.0.0 + vue: ^2.7.0 || ^3.2.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + consola: + optional: true + firebase: + optional: true + + wasm-feature-detect@1.8.0: + resolution: {integrity: sha512-zksaLKM2fVlnB5jQQDqKXXwYHLQUVH9es+5TOOHwGOVJOCeRBCiPjwSg+3tN2AdTCzjgli4jijCH290kXb/zWQ==} + + watchpack@2.4.2: + resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} + engines: {node: '>=10.13.0'} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + web-ext@8.3.0: + resolution: {integrity: sha512-mXSOiDtmm3n0KNpSuQ65fJpypAoNLAmZv3QkdlVbJ6etn0BK+hl/k+tjHefSIKdbzGUIeFbhn2oxWMe9Tdyrdg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + + web-streams-polyfill@4.0.0-beta.3: + resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} + engines: {node: '>= 14'} + + webext-bridge@6.0.1: + resolution: {integrity: sha512-GruIrN+vNwbxVCi8UW4Dqk5YkcGA9V0ZfJ57jXP9JXHbrsDs5k2N6NNYQR5e+wSCnQpGYOGAGihwUpKlhg8QIw==} + + webextension-polyfill@0.12.0: + resolution: {integrity: sha512-97TBmpoWJEE+3nFBQ4VocyCdLKfw54rFaJ6EVQYLBCXqCIpLSZkwGgASpv4oPt9gdKCJ80RJlcmNzNn008Ag6Q==} + + webextension-polyfill@0.9.0: + resolution: {integrity: sha512-LTtHb0yR49xa9irkstDxba4GATDAcDw3ncnFH9RImoFwDlW47U95ME5sn5IiQX2ghfaECaf6xyXM8yvClIBkkw==} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + + websocket-driver@0.7.4: + resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} + engines: {node: '>=0.8.0'} + + websocket-extensions@0.1.4: + resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} + engines: {node: '>=0.8.0'} + + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + when-exit@2.1.3: + resolution: {integrity: sha512-uVieSTccFIr/SFQdFWN/fFaQYmV37OKtuaGphMAzi4DmmUlrvRBJW5WSLkHyjNQY/ePJMz3LoiX9R3yy1Su6Hw==} + + when@3.7.7: + resolution: {integrity: sha512-9lFZp/KHoqH6bPKjbWqa+3Dg/K/r2v0X/3/G2x4DBGchVS2QX2VXL3cZV994WQVnTM1/PD71Az25nAzryEUugw==} + + which@1.2.4: + resolution: {integrity: sha512-zDRAqDSBudazdfM9zpiI30Fu9ve47htYXcGi3ln0wfKu2a7SmrT6F3VDoYONu//48V8Vz4TdCRNPjtvyRO3yBA==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + widest-line@5.0.0: + resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} + engines: {node: '>=18'} + + win-node-env@0.6.1: + resolution: {integrity: sha512-oR+MLQ6jdvwqkLEkKBYxRvBOYbTlQV9dJKn8vLzjA4HCzcqdlCE6H1oOvA7lAdCgNXiOX0xfjl/Y47ZcZN6FDA==} + os: [win32] + hasBin: true + + winreg@0.0.12: + resolution: {integrity: sha512-typ/+JRmi7RqP1NanzFULK36vczznSNN8kWVA9vIqXyv8GhghUlwhGp1Xj3Nms1FsPcNnsQrJOR10N58/nQ9hQ==} + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + 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 + + xdg-basedir@5.1.0: + resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} + engines: {node: '>=12'} + + xml-name-validator@4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} + + xml2js@0.6.2: + resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} + engines: {node: '>=4.0.0'} + + xmlbuilder@11.0.1: + resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} + engines: {node: '>=4.0'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml-eslint-parser@1.2.3: + resolution: {integrity: sha512-4wZWvE398hCP7O8n3nXKu/vdq1HcH01ixYlCREaJL5NUMwQ0g3MaGFUBNSlmBtKmhbtVG/Cm6lyYmSVTEVil8A==} + engines: {node: ^14.17.0 || >=16.0.0} + + yaml@2.7.0: + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} + engines: {node: '>= 14'} + hasBin: true + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yoctocolors@2.1.1: + resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} + engines: {node: '>=18'} + + zip-dir@2.0.0: + resolution: {integrity: sha512-uhlsJZWz26FLYXOD6WVuq+fIcZ3aBPGo/cFdiLlv3KNwpa52IF3ISV8fLhQLiqVu5No3VhlqlgthN6gehil1Dg==} + +snapshots: + + '@alloc/quick-lru@5.2.0': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@antfu/install-pkg@0.4.1': + dependencies: + package-manager-detector: 0.2.8 + tinyexec: 0.3.2 + + '@antfu/install-pkg@0.5.0': + dependencies: + package-manager-detector: 0.2.8 + tinyexec: 0.3.2 + + '@antfu/utils@0.7.10': {} + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.3': {} + + '@babel/core@7.26.0': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.3 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helpers': 7.26.0 + '@babel/parser': 7.26.3 + '@babel/template': 7.25.9 + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.3': + dependencies: + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.25.9': + dependencies: + '@babel/types': 7.26.3 + + '@babel/helper-compilation-targets@7.25.9': + dependencies: + '@babel/compat-data': 7.26.3 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.3 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/traverse': 7.26.4 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-member-expression-to-functions@7.25.9': + dependencies: + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.25.9': + dependencies: + '@babel/types': 7.26.3 + + '@babel/helper-plugin-utils@7.25.9': {} + + '@babel/helper-replace-supers@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/traverse': 7.26.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + dependencies: + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.26.0': + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.26.3 + + '@babel/parser@7.26.3': + dependencies: + '@babel/types': 7.26.3 + + '@babel/plugin-proposal-decorators@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-typescript@7.26.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + + '@babel/runtime@7.25.6': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/standalone@7.26.4': + optional: true + + '@babel/template@7.25.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 + + '@babel/traverse@7.26.4': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.3 + '@babel/parser': 7.26.3 + '@babel/template': 7.25.9 + '@babel/types': 7.26.3 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.3': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@crxjs/vite-plugin@2.0.0-beta.29': + dependencies: + '@rollup/pluginutils': 4.2.1 + '@webcomponents/custom-elements': 1.6.0 + acorn-walk: 8.3.4 + cheerio: 1.0.0 + convert-source-map: 1.9.0 + debug: 4.4.0 + es-module-lexer: 0.10.5 + fast-glob: 3.3.3 + fs-extra: 10.1.0 + jsesc: 3.1.0 + magic-string: 0.30.17 + picocolors: 1.1.1 + react-refresh: 0.13.0 + rollup: 2.79.2 + rxjs: 7.5.7 + transitivePeerDependencies: + - supports-color + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + optional: true + + '@devicefarmer/adbkit-logcat@2.1.3': {} + + '@devicefarmer/adbkit-monkey@1.2.1': {} + + '@devicefarmer/adbkit@3.2.6': + dependencies: + '@devicefarmer/adbkit-logcat': 2.1.3 + '@devicefarmer/adbkit-monkey': 1.2.1 + bluebird: 3.7.2 + commander: 9.5.0 + debug: 4.3.7 + node-forge: 1.3.1 + split: 1.0.1 + transitivePeerDependencies: + - supports-color + + '@esbuild/aix-ppc64@0.23.1': + optional: true + + '@esbuild/aix-ppc64@0.24.2': + optional: true + + '@esbuild/android-arm64@0.23.1': + optional: true + + '@esbuild/android-arm64@0.24.2': + optional: true + + '@esbuild/android-arm@0.23.1': + optional: true + + '@esbuild/android-arm@0.24.2': + optional: true + + '@esbuild/android-x64@0.23.1': + optional: true + + '@esbuild/android-x64@0.24.2': + optional: true + + '@esbuild/darwin-arm64@0.23.1': + optional: true + + '@esbuild/darwin-arm64@0.24.2': + optional: true + + '@esbuild/darwin-x64@0.23.1': + optional: true + + '@esbuild/darwin-x64@0.24.2': + optional: true + + '@esbuild/freebsd-arm64@0.23.1': + optional: true + + '@esbuild/freebsd-arm64@0.24.2': + optional: true + + '@esbuild/freebsd-x64@0.23.1': + optional: true + + '@esbuild/freebsd-x64@0.24.2': + optional: true + + '@esbuild/linux-arm64@0.23.1': + optional: true + + '@esbuild/linux-arm64@0.24.2': + optional: true + + '@esbuild/linux-arm@0.23.1': + optional: true + + '@esbuild/linux-arm@0.24.2': + optional: true + + '@esbuild/linux-ia32@0.23.1': + optional: true + + '@esbuild/linux-ia32@0.24.2': + optional: true + + '@esbuild/linux-loong64@0.23.1': + optional: true + + '@esbuild/linux-loong64@0.24.2': + optional: true + + '@esbuild/linux-mips64el@0.23.1': + optional: true + + '@esbuild/linux-mips64el@0.24.2': + optional: true + + '@esbuild/linux-ppc64@0.23.1': + optional: true + + '@esbuild/linux-ppc64@0.24.2': + optional: true + + '@esbuild/linux-riscv64@0.23.1': + optional: true + + '@esbuild/linux-riscv64@0.24.2': + optional: true + + '@esbuild/linux-s390x@0.23.1': + optional: true + + '@esbuild/linux-s390x@0.24.2': + optional: true + + '@esbuild/linux-x64@0.23.1': + optional: true + + '@esbuild/linux-x64@0.24.2': + optional: true + + '@esbuild/netbsd-arm64@0.24.2': + optional: true + + '@esbuild/netbsd-x64@0.23.1': + optional: true + + '@esbuild/netbsd-x64@0.24.2': + optional: true + + '@esbuild/openbsd-arm64@0.23.1': + optional: true + + '@esbuild/openbsd-arm64@0.24.2': + optional: true + + '@esbuild/openbsd-x64@0.23.1': + optional: true + + '@esbuild/openbsd-x64@0.24.2': + optional: true + + '@esbuild/sunos-x64@0.23.1': + optional: true + + '@esbuild/sunos-x64@0.24.2': + optional: true + + '@esbuild/win32-arm64@0.23.1': + optional: true + + '@esbuild/win32-arm64@0.24.2': + optional: true + + '@esbuild/win32-ia32@0.23.1': + optional: true + + '@esbuild/win32-ia32@0.24.2': + optional: true + + '@esbuild/win32-x64@0.23.1': + optional: true + + '@esbuild/win32-x64@0.24.2': + optional: true + + '@eslint-community/eslint-utils@4.4.1(eslint@8.57.1)': + dependencies: + eslint: 8.57.1 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/eslint-utils@4.4.1(eslint@9.17.0(jiti@2.4.2))': + dependencies: + eslint: 9.17.0(jiti@2.4.2) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/compat@1.2.4(eslint@9.17.0(jiti@2.4.2))': + optionalDependencies: + eslint: 9.17.0(jiti@2.4.2) + + '@eslint/config-array@0.19.1': + dependencies: + '@eslint/object-schema': 2.1.5 + debug: 4.4.0 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/core@0.9.1': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.4.0 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/eslintrc@3.2.0': + dependencies: + ajv: 6.12.6 + debug: 4.4.0 + espree: 10.3.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.57.1': {} + + '@eslint/js@9.17.0': {} + + '@eslint/object-schema@2.1.5': {} + + '@eslint/plugin-kit@0.2.4': + dependencies: + levn: 0.4.1 + + '@fastify/busboy@2.1.1': {} + + '@firebase/analytics-compat@0.2.14(@firebase/app-compat@0.2.42)(@firebase/app@0.10.12)': + dependencies: + '@firebase/analytics': 0.10.8(@firebase/app@0.10.12) + '@firebase/analytics-types': 0.8.2 + '@firebase/app-compat': 0.2.42 + '@firebase/component': 0.6.9 + '@firebase/util': 1.10.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@firebase/app' + optional: true + + '@firebase/analytics-types@0.8.2': + optional: true + + '@firebase/analytics@0.10.8(@firebase/app@0.10.12)': + dependencies: + '@firebase/app': 0.10.12 + '@firebase/component': 0.6.9 + '@firebase/installations': 0.6.9(@firebase/app@0.10.12) + '@firebase/logger': 0.4.2 + '@firebase/util': 1.10.0 + tslib: 2.8.1 + optional: true + + '@firebase/app-check-compat@0.3.15(@firebase/app-compat@0.2.42)(@firebase/app@0.10.12)': + dependencies: + '@firebase/app-check': 0.8.8(@firebase/app@0.10.12) + '@firebase/app-check-types': 0.5.2 + '@firebase/app-compat': 0.2.42 + '@firebase/component': 0.6.9 + '@firebase/logger': 0.4.2 + '@firebase/util': 1.10.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@firebase/app' + optional: true + + '@firebase/app-check-interop-types@0.3.2': + optional: true + + '@firebase/app-check-types@0.5.2': + optional: true + + '@firebase/app-check@0.8.8(@firebase/app@0.10.12)': + dependencies: + '@firebase/app': 0.10.12 + '@firebase/component': 0.6.9 + '@firebase/logger': 0.4.2 + '@firebase/util': 1.10.0 + tslib: 2.8.1 + optional: true + + '@firebase/app-compat@0.2.42': + dependencies: + '@firebase/app': 0.10.12 + '@firebase/component': 0.6.9 + '@firebase/logger': 0.4.2 + '@firebase/util': 1.10.0 + tslib: 2.8.1 + optional: true + + '@firebase/app-types@0.9.2': + optional: true + + '@firebase/app@0.10.12': + dependencies: + '@firebase/component': 0.6.9 + '@firebase/logger': 0.4.2 + '@firebase/util': 1.10.0 + idb: 7.1.1 + tslib: 2.8.1 + optional: true + + '@firebase/auth-compat@0.5.14(@firebase/app-compat@0.2.42)(@firebase/app-types@0.9.2)(@firebase/app@0.10.12)': + dependencies: + '@firebase/app-compat': 0.2.42 + '@firebase/auth': 1.7.9(@firebase/app@0.10.12) + '@firebase/auth-types': 0.12.2(@firebase/app-types@0.9.2)(@firebase/util@1.10.0) + '@firebase/component': 0.6.9 + '@firebase/util': 1.10.0 + tslib: 2.8.1 + undici: 6.19.7 + transitivePeerDependencies: + - '@firebase/app' + - '@firebase/app-types' + - '@react-native-async-storage/async-storage' + optional: true + + '@firebase/auth-interop-types@0.2.3': + optional: true + + '@firebase/auth-types@0.12.2(@firebase/app-types@0.9.2)(@firebase/util@1.10.0)': + dependencies: + '@firebase/app-types': 0.9.2 + '@firebase/util': 1.10.0 + optional: true + + '@firebase/auth@1.7.9(@firebase/app@0.10.12)': + dependencies: + '@firebase/app': 0.10.12 + '@firebase/component': 0.6.9 + '@firebase/logger': 0.4.2 + '@firebase/util': 1.10.0 + tslib: 2.8.1 + undici: 6.19.7 + optional: true + + '@firebase/component@0.6.9': + dependencies: + '@firebase/util': 1.10.0 + tslib: 2.8.1 + optional: true + + '@firebase/data-connect@0.1.0(@firebase/app@0.10.12)': + dependencies: + '@firebase/app': 0.10.12 + '@firebase/auth-interop-types': 0.2.3 + '@firebase/component': 0.6.9 + '@firebase/logger': 0.4.2 + '@firebase/util': 1.10.0 + tslib: 2.8.1 + optional: true + + '@firebase/database-compat@1.0.8': + dependencies: + '@firebase/component': 0.6.9 + '@firebase/database': 1.0.8 + '@firebase/database-types': 1.0.5 + '@firebase/logger': 0.4.2 + '@firebase/util': 1.10.0 + tslib: 2.8.1 + optional: true + + '@firebase/database-types@1.0.5': + dependencies: + '@firebase/app-types': 0.9.2 + '@firebase/util': 1.10.0 + optional: true + + '@firebase/database@1.0.8': + dependencies: + '@firebase/app-check-interop-types': 0.3.2 + '@firebase/auth-interop-types': 0.2.3 + '@firebase/component': 0.6.9 + '@firebase/logger': 0.4.2 + '@firebase/util': 1.10.0 + faye-websocket: 0.11.4 + tslib: 2.8.1 + optional: true + + '@firebase/firestore-compat@0.3.38(@firebase/app-compat@0.2.42)(@firebase/app-types@0.9.2)(@firebase/app@0.10.12)': + dependencies: + '@firebase/app-compat': 0.2.42 + '@firebase/component': 0.6.9 + '@firebase/firestore': 4.7.3(@firebase/app@0.10.12) + '@firebase/firestore-types': 3.0.2(@firebase/app-types@0.9.2)(@firebase/util@1.10.0) + '@firebase/util': 1.10.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@firebase/app' + - '@firebase/app-types' + optional: true + + '@firebase/firestore-types@3.0.2(@firebase/app-types@0.9.2)(@firebase/util@1.10.0)': + dependencies: + '@firebase/app-types': 0.9.2 + '@firebase/util': 1.10.0 + optional: true + + '@firebase/firestore@4.7.3(@firebase/app@0.10.12)': + dependencies: + '@firebase/app': 0.10.12 + '@firebase/component': 0.6.9 + '@firebase/logger': 0.4.2 + '@firebase/util': 1.10.0 + '@firebase/webchannel-wrapper': 1.0.1 + '@grpc/grpc-js': 1.9.15 + '@grpc/proto-loader': 0.7.13 + tslib: 2.8.1 + undici: 6.19.7 + optional: true + + '@firebase/functions-compat@0.3.14(@firebase/app-compat@0.2.42)(@firebase/app@0.10.12)': + dependencies: + '@firebase/app-compat': 0.2.42 + '@firebase/component': 0.6.9 + '@firebase/functions': 0.11.8(@firebase/app@0.10.12) + '@firebase/functions-types': 0.6.2 + '@firebase/util': 1.10.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@firebase/app' + optional: true + + '@firebase/functions-types@0.6.2': + optional: true + + '@firebase/functions@0.11.8(@firebase/app@0.10.12)': + dependencies: + '@firebase/app': 0.10.12 + '@firebase/app-check-interop-types': 0.3.2 + '@firebase/auth-interop-types': 0.2.3 + '@firebase/component': 0.6.9 + '@firebase/messaging-interop-types': 0.2.2 + '@firebase/util': 1.10.0 + tslib: 2.8.1 + undici: 6.19.7 + optional: true + + '@firebase/installations-compat@0.2.9(@firebase/app-compat@0.2.42)(@firebase/app-types@0.9.2)(@firebase/app@0.10.12)': + dependencies: + '@firebase/app-compat': 0.2.42 + '@firebase/component': 0.6.9 + '@firebase/installations': 0.6.9(@firebase/app@0.10.12) + '@firebase/installations-types': 0.5.2(@firebase/app-types@0.9.2) + '@firebase/util': 1.10.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@firebase/app' + - '@firebase/app-types' + optional: true + + '@firebase/installations-types@0.5.2(@firebase/app-types@0.9.2)': + dependencies: + '@firebase/app-types': 0.9.2 + optional: true + + '@firebase/installations@0.6.9(@firebase/app@0.10.12)': + dependencies: + '@firebase/app': 0.10.12 + '@firebase/component': 0.6.9 + '@firebase/util': 1.10.0 + idb: 7.1.1 + tslib: 2.8.1 + optional: true + + '@firebase/logger@0.4.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@firebase/messaging-compat@0.2.11(@firebase/app-compat@0.2.42)(@firebase/app@0.10.12)': + dependencies: + '@firebase/app-compat': 0.2.42 + '@firebase/component': 0.6.9 + '@firebase/messaging': 0.12.11(@firebase/app@0.10.12) + '@firebase/util': 1.10.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@firebase/app' + optional: true + + '@firebase/messaging-interop-types@0.2.2': + optional: true + + '@firebase/messaging@0.12.11(@firebase/app@0.10.12)': + dependencies: + '@firebase/app': 0.10.12 + '@firebase/component': 0.6.9 + '@firebase/installations': 0.6.9(@firebase/app@0.10.12) + '@firebase/messaging-interop-types': 0.2.2 + '@firebase/util': 1.10.0 + idb: 7.1.1 + tslib: 2.8.1 + optional: true + + '@firebase/performance-compat@0.2.9(@firebase/app-compat@0.2.42)(@firebase/app@0.10.12)': + dependencies: + '@firebase/app-compat': 0.2.42 + '@firebase/component': 0.6.9 + '@firebase/logger': 0.4.2 + '@firebase/performance': 0.6.9(@firebase/app@0.10.12) + '@firebase/performance-types': 0.2.2 + '@firebase/util': 1.10.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@firebase/app' + optional: true + + '@firebase/performance-types@0.2.2': + optional: true + + '@firebase/performance@0.6.9(@firebase/app@0.10.12)': + dependencies: + '@firebase/app': 0.10.12 + '@firebase/component': 0.6.9 + '@firebase/installations': 0.6.9(@firebase/app@0.10.12) + '@firebase/logger': 0.4.2 + '@firebase/util': 1.10.0 + tslib: 2.8.1 + optional: true + + '@firebase/remote-config-compat@0.2.9(@firebase/app-compat@0.2.42)(@firebase/app@0.10.12)': + dependencies: + '@firebase/app-compat': 0.2.42 + '@firebase/component': 0.6.9 + '@firebase/logger': 0.4.2 + '@firebase/remote-config': 0.4.9(@firebase/app@0.10.12) + '@firebase/remote-config-types': 0.3.2 + '@firebase/util': 1.10.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@firebase/app' + optional: true + + '@firebase/remote-config-types@0.3.2': + optional: true + + '@firebase/remote-config@0.4.9(@firebase/app@0.10.12)': + dependencies: + '@firebase/app': 0.10.12 + '@firebase/component': 0.6.9 + '@firebase/installations': 0.6.9(@firebase/app@0.10.12) + '@firebase/logger': 0.4.2 + '@firebase/util': 1.10.0 + tslib: 2.8.1 + optional: true + + '@firebase/storage-compat@0.3.12(@firebase/app-compat@0.2.42)(@firebase/app-types@0.9.2)(@firebase/app@0.10.12)': + dependencies: + '@firebase/app-compat': 0.2.42 + '@firebase/component': 0.6.9 + '@firebase/storage': 0.13.2(@firebase/app@0.10.12) + '@firebase/storage-types': 0.8.2(@firebase/app-types@0.9.2)(@firebase/util@1.10.0) + '@firebase/util': 1.10.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@firebase/app' + - '@firebase/app-types' + optional: true + + '@firebase/storage-types@0.8.2(@firebase/app-types@0.9.2)(@firebase/util@1.10.0)': + dependencies: + '@firebase/app-types': 0.9.2 + '@firebase/util': 1.10.0 + optional: true + + '@firebase/storage@0.13.2(@firebase/app@0.10.12)': + dependencies: + '@firebase/app': 0.10.12 + '@firebase/component': 0.6.9 + '@firebase/util': 1.10.0 + tslib: 2.8.1 + undici: 6.19.7 + optional: true + + '@firebase/util@1.10.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@firebase/vertexai-preview@0.0.4(@firebase/app-types@0.9.2)(@firebase/app@0.10.12)': + dependencies: + '@firebase/app': 0.10.12 + '@firebase/app-check-interop-types': 0.3.2 + '@firebase/app-types': 0.9.2 + '@firebase/component': 0.6.9 + '@firebase/logger': 0.4.2 + '@firebase/util': 1.10.0 + tslib: 2.8.1 + optional: true + + '@firebase/webchannel-wrapper@1.0.1': + optional: true + + '@fluent/syntax@0.19.0': {} + + '@grpc/grpc-js@1.9.15': + dependencies: + '@grpc/proto-loader': 0.7.13 + '@types/node': 22.10.5 + optional: true + + '@grpc/proto-loader@0.7.13': + dependencies: + lodash.camelcase: 4.3.0 + long: 5.2.3 + protobufjs: 7.4.0 + yargs: 17.7.2 + optional: true + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 + + '@humanwhocodes/config-array@0.13.0': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.4.0 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.3': {} + + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.1': {} + + '@iamtraction/google-translate@2.0.1': + dependencies: + undici: 5.28.4 + + '@iconify-json/carbon@1.2.5': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify-json/lucide@1.2.21': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify-json/mdi@1.2.2': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify-json/ph@1.2.2': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify-json/svg-spinners@1.2.2': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify/types@2.0.0': {} + + '@iconify/utils@2.2.1': + dependencies: + '@antfu/install-pkg': 0.4.1 + '@antfu/utils': 0.7.10 + '@iconify/types': 2.0.0 + debug: 4.4.0 + globals: 15.14.0 + kolorist: 1.8.0 + local-pkg: 0.5.1 + mlly: 1.7.3 + transitivePeerDependencies: + - supports-color + + '@intlify/bundle-utils@10.0.0(vue-i18n@11.0.1(vue@3.5.13(typescript@5.7.2)))': + dependencies: + '@intlify/message-compiler': 11.0.0-rc.1 + '@intlify/shared': 11.0.0-rc.1 + acorn: 8.14.0 + escodegen: 2.1.0 + estree-walker: 2.0.2 + jsonc-eslint-parser: 2.4.0 + mlly: 1.7.3 + source-map-js: 1.2.1 + yaml-eslint-parser: 1.2.3 + optionalDependencies: + vue-i18n: 11.0.1(vue@3.5.13(typescript@5.7.2)) + + '@intlify/core-base@11.0.1': + dependencies: + '@intlify/message-compiler': 11.0.1 + '@intlify/shared': 11.0.1 + + '@intlify/message-compiler@11.0.0-rc.1': + dependencies: + '@intlify/shared': 11.0.0-rc.1 + source-map-js: 1.2.1 + + '@intlify/message-compiler@11.0.1': + dependencies: + '@intlify/shared': 11.0.1 + source-map-js: 1.2.1 + + '@intlify/shared@11.0.0-rc.1': {} + + '@intlify/shared@11.0.1': {} + + '@intlify/unplugin-vue-i18n@6.0.3(@vue/compiler-dom@3.5.13)(eslint@9.17.0(jiti@2.4.2))(rollup@4.30.1)(typescript@5.7.2)(vue-i18n@11.0.1(vue@3.5.13(typescript@5.7.2)))(vue@3.5.13(typescript@5.7.2))': + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2)) + '@intlify/bundle-utils': 10.0.0(vue-i18n@11.0.1(vue@3.5.13(typescript@5.7.2))) + '@intlify/shared': 11.0.1 + '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.0.1)(@vue/compiler-dom@3.5.13)(vue-i18n@11.0.1(vue@3.5.13(typescript@5.7.2)))(vue@3.5.13(typescript@5.7.2)) + '@rollup/pluginutils': 5.1.4(rollup@4.30.1) + '@typescript-eslint/scope-manager': 8.19.1 + '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.7.2) + debug: 4.4.0 + fast-glob: 3.3.3 + js-yaml: 4.1.0 + json5: 2.2.3 + pathe: 1.1.2 + picocolors: 1.1.1 + source-map-js: 1.2.1 + unplugin: 1.16.0 + vue: 3.5.13(typescript@5.7.2) + optionalDependencies: + vue-i18n: 11.0.1(vue@3.5.13(typescript@5.7.2)) + transitivePeerDependencies: + - '@vue/compiler-dom' + - eslint + - rollup + - supports-color + - typescript + + '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.0.1)(@vue/compiler-dom@3.5.13)(vue-i18n@11.0.1(vue@3.5.13(typescript@5.7.2)))(vue@3.5.13(typescript@5.7.2))': + dependencies: + '@babel/parser': 7.26.3 + optionalDependencies: + '@intlify/shared': 11.0.1 + '@vue/compiler-dom': 3.5.13 + vue: 3.5.13(typescript@5.7.2) + vue-i18n: 11.0.1(vue@3.5.13(typescript@5.7.2)) + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + optional: true + + '@mdn/browser-compat-data@5.6.0': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.18.0 + + '@nuxt/kit@3.13.0(rollup@4.30.1)': + dependencies: + '@nuxt/schema': 3.13.0(rollup@4.30.1) + c12: 1.11.2 + consola: 3.3.3 + defu: 6.1.4 + destr: 2.0.3 + globby: 14.0.2 + hash-sum: 2.0.0 + ignore: 5.3.2 + jiti: 1.21.7 + klona: 2.0.6 + knitwork: 1.2.0 + mlly: 1.7.3 + pathe: 1.1.2 + pkg-types: 1.3.0 + scule: 1.3.0 + semver: 7.6.3 + ufo: 1.5.4 + unctx: 2.4.1 + unimport: 3.14.5(rollup@4.30.1) + untyped: 1.5.2 + transitivePeerDependencies: + - magicast + - rollup + - supports-color + optional: true + + '@nuxt/schema@3.13.0(rollup@4.30.1)': + dependencies: + compatx: 0.1.8 + consola: 3.3.3 + defu: 6.1.4 + hookable: 5.5.3 + pathe: 1.1.2 + pkg-types: 1.3.0 + scule: 1.3.0 + std-env: 3.8.0 + ufo: 1.5.4 + uncrypto: 0.1.3 + unimport: 3.14.5(rollup@4.30.1) + untyped: 1.5.2 + transitivePeerDependencies: + - rollup + - supports-color + optional: true + + '@oxc-parser/binding-darwin-arm64@0.40.1': + optional: true + + '@oxc-parser/binding-darwin-x64@0.40.1': + optional: true + + '@oxc-parser/binding-linux-arm64-gnu@0.40.1': + optional: true + + '@oxc-parser/binding-linux-arm64-musl@0.40.1': + optional: true + + '@oxc-parser/binding-linux-x64-gnu@0.40.1': + optional: true + + '@oxc-parser/binding-linux-x64-musl@0.40.1': + optional: true + + '@oxc-parser/binding-win32-arm64-msvc@0.40.1': + optional: true + + '@oxc-parser/binding-win32-x64-msvc@0.40.1': + optional: true + + '@oxc-project/types@0.40.1': {} + + '@parcel/watcher-android-arm64@2.5.0': + optional: true + + '@parcel/watcher-darwin-arm64@2.5.0': + optional: true + + '@parcel/watcher-darwin-x64@2.5.0': + optional: true + + '@parcel/watcher-freebsd-x64@2.5.0': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.5.0': + optional: true + + '@parcel/watcher-linux-arm-musl@2.5.0': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.5.0': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.5.0': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.5.0': + optional: true + + '@parcel/watcher-linux-x64-musl@2.5.0': + optional: true + + '@parcel/watcher-win32-arm64@2.5.0': + optional: true + + '@parcel/watcher-win32-ia32@2.5.0': + optional: true + + '@parcel/watcher-win32-x64@2.5.0': + optional: true + + '@parcel/watcher@2.5.0': + dependencies: + detect-libc: 1.0.3 + is-glob: 4.0.3 + micromatch: 4.0.8 + node-addon-api: 7.1.1 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.0 + '@parcel/watcher-darwin-arm64': 2.5.0 + '@parcel/watcher-darwin-x64': 2.5.0 + '@parcel/watcher-freebsd-x64': 2.5.0 + '@parcel/watcher-linux-arm-glibc': 2.5.0 + '@parcel/watcher-linux-arm-musl': 2.5.0 + '@parcel/watcher-linux-arm64-glibc': 2.5.0 + '@parcel/watcher-linux-arm64-musl': 2.5.0 + '@parcel/watcher-linux-x64-glibc': 2.5.0 + '@parcel/watcher-linux-x64-musl': 2.5.0 + '@parcel/watcher-win32-arm64': 2.5.0 + '@parcel/watcher-win32-ia32': 2.5.0 + '@parcel/watcher-win32-x64': 2.5.0 + optional: true + + '@parvineyvazov/json-translator@3.2.2': + dependencies: + '@iamtraction/google-translate': 2.0.1 + '@types/bluebird': 3.5.42 + '@types/filesystem': 0.0.32 + '@vitalets/google-translate-api': 9.2.0 + axios: 1.7.9 + bing-translate-api: 2.10.0 + bluebird: 3.7.2 + commander: 10.0.1 + cwait: 1.1.2 + figlet: 1.8.0 + http-proxy-agent: 5.0.0 + inquirer: 7.3.3 + loading-cli: 1.1.2 + openai: 4.78.1 + yaml: 2.7.0 + transitivePeerDependencies: + - debug + - encoding + - supports-color + - zod + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@pnpm/config.env-replace@1.1.0': {} + + '@pnpm/network.ca-file@1.0.2': + dependencies: + graceful-fs: 4.2.10 + + '@pnpm/npm-conf@2.3.1': + dependencies: + '@pnpm/config.env-replace': 1.1.0 + '@pnpm/network.ca-file': 1.0.2 + config-chain: 1.1.13 + + '@polka/url@1.0.0-next.28': {} + + '@protobufjs/aspromise@1.1.2': + optional: true + + '@protobufjs/base64@1.1.2': + optional: true + + '@protobufjs/codegen@2.0.4': + optional: true + + '@protobufjs/eventemitter@1.1.0': + optional: true + + '@protobufjs/fetch@1.1.0': + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + optional: true + + '@protobufjs/float@1.0.2': + optional: true + + '@protobufjs/inquire@1.1.0': + optional: true + + '@protobufjs/path@1.1.2': + optional: true + + '@protobufjs/pool@1.1.0': + optional: true + + '@protobufjs/utf8@1.1.0': + optional: true + + '@rollup/pluginutils@4.2.1': + dependencies: + estree-walker: 2.0.2 + picomatch: 2.3.1 + + '@rollup/pluginutils@5.1.4(rollup@4.30.1)': + dependencies: + '@types/estree': 1.0.6 + estree-walker: 2.0.2 + picomatch: 4.0.2 + optionalDependencies: + rollup: 4.30.1 + + '@rollup/rollup-android-arm-eabi@4.30.1': + optional: true + + '@rollup/rollup-android-arm64@4.30.1': + optional: true + + '@rollup/rollup-darwin-arm64@4.30.1': + optional: true + + '@rollup/rollup-darwin-x64@4.30.1': + optional: true + + '@rollup/rollup-freebsd-arm64@4.30.1': + optional: true + + '@rollup/rollup-freebsd-x64@4.30.1': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.30.1': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.30.1': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.30.1': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.30.1': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.30.1': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.30.1': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.30.1': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.30.1': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.30.1': + optional: true + + '@rollup/rollup-linux-x64-musl@4.30.1': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.30.1': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.30.1': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.30.1': + optional: true + + '@sec-ant/readable-stream@0.4.1': {} + + '@sindresorhus/is@4.6.0': {} + + '@sindresorhus/merge-streams@2.3.0': + optional: true + + '@sindresorhus/merge-streams@4.0.0': {} + + '@szmarczak/http-timer@4.0.6': + dependencies: + defer-to-connect: 2.0.1 + + '@tailwindcss/forms@0.5.10(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.7.2)))': + dependencies: + mini-svg-data-uri: 1.4.4 + tailwindcss: 3.4.17(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.7.2)) + + '@tailwindcss/typography@0.5.16(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.7.2)))': + dependencies: + lodash.castarray: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + postcss-selector-parser: 6.0.10 + tailwindcss: 3.4.17(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.7.2)) + + '@tootallnate/once@2.0.0': {} + + '@trysound/sax@0.2.0': {} + + '@tsconfig/node10@1.0.11': + optional: true + + '@tsconfig/node12@1.0.11': + optional: true + + '@tsconfig/node14@1.0.3': + optional: true + + '@tsconfig/node16@1.0.4': + optional: true + + '@types/bluebird@3.5.42': {} + + '@types/cacheable-request@6.0.3': + dependencies: + '@types/http-cache-semantics': 4.0.4 + '@types/keyv': 3.1.4 + '@types/node': 22.10.5 + '@types/responselike': 1.0.3 + + '@types/eslint@9.6.1': + dependencies: + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + + '@types/eslint__js@8.42.3': + dependencies: + '@types/eslint': 9.6.1 + + '@types/estree@1.0.6': {} + + '@types/filesystem@0.0.32': + dependencies: + '@types/filewriter': 0.0.33 + + '@types/filewriter@0.0.33': {} + + '@types/http-cache-semantics@4.0.4': {} + + '@types/http-errors@1.8.2': {} + + '@types/json-schema@7.0.15': {} + + '@types/keyv@3.1.4': + dependencies: + '@types/node': 22.10.5 + + '@types/minimatch@3.0.5': {} + + '@types/node-fetch@2.6.12': + dependencies: + '@types/node': 22.10.5 + form-data: 4.0.1 + + '@types/node@18.19.70': + dependencies: + undici-types: 5.26.5 + + '@types/node@22.10.5': + dependencies: + undici-types: 6.20.0 + + '@types/responselike@1.0.3': + dependencies: + '@types/node': 22.10.5 + + '@types/web-bluetooth@0.0.20': {} + + '@types/webextension-polyfill@0.12.1': {} + + '@types/webextension-polyfill@0.8.3': {} + + '@types/yauzl@2.10.3': + dependencies: + '@types/node': 22.10.5 + + '@typescript-eslint/eslint-plugin@8.19.1(@typescript-eslint/parser@8.19.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.19.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/scope-manager': 8.19.1 + '@typescript-eslint/type-utils': 8.19.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/utils': 8.19.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 8.19.1 + eslint: 9.17.0(jiti@2.4.2) + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 2.0.0(typescript@5.7.2) + typescript: 5.7.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.19.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': + dependencies: + '@typescript-eslint/scope-manager': 8.19.1 + '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 8.19.1 + debug: 4.4.0 + eslint: 9.17.0(jiti@2.4.2) + typescript: 5.7.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.19.1': + dependencies: + '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/visitor-keys': 8.19.1 + + '@typescript-eslint/type-utils@8.19.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': + dependencies: + '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.7.2) + '@typescript-eslint/utils': 8.19.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + debug: 4.4.0 + eslint: 9.17.0(jiti@2.4.2) + ts-api-utils: 2.0.0(typescript@5.7.2) + typescript: 5.7.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.19.1': {} + + '@typescript-eslint/typescript-estree@8.19.1(typescript@5.7.2)': + dependencies: + '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/visitor-keys': 8.19.1 + debug: 4.4.0 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 2.0.0(typescript@5.7.2) + typescript: 5.7.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.19.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.19.1 + '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.7.2) + eslint: 9.17.0(jiti@2.4.2) + typescript: 5.7.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.19.1': + dependencies: + '@typescript-eslint/types': 8.19.1 + eslint-visitor-keys: 4.2.0 + + '@ungap/structured-clone@1.2.1': {} + + '@vitalets/google-translate-api@9.2.0': + dependencies: + '@types/http-errors': 1.8.2 + http-errors: 2.0.0 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + '@vitejs/plugin-vue@5.2.1(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2))': + dependencies: + vite: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + vue: 3.5.13(typescript@5.7.2) + + '@volar/language-core@2.4.11': + dependencies: + '@volar/source-map': 2.4.11 + + '@volar/source-map@2.4.11': {} + + '@volar/typescript@2.4.11': + dependencies: + '@volar/language-core': 2.4.11 + path-browserify: 1.0.1 + vscode-uri: 3.0.8 + + '@vue-macros/common@1.15.1(rollup@4.30.1)(vue@3.5.13(typescript@5.7.2))': + dependencies: + '@babel/types': 7.26.3 + '@rollup/pluginutils': 5.1.4(rollup@4.30.1) + '@vue/compiler-sfc': 3.5.13 + ast-kit: 1.3.2 + local-pkg: 0.5.1 + magic-string-ast: 0.6.3 + optionalDependencies: + vue: 3.5.13(typescript@5.7.2) + transitivePeerDependencies: + - rollup + + '@vue/babel-helper-vue-transform-on@1.2.5': {} + + '@vue/babel-plugin-jsx@1.2.5(@babel/core@7.26.0)': + dependencies: + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/template': 7.25.9 + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 + '@vue/babel-helper-vue-transform-on': 1.2.5 + '@vue/babel-plugin-resolve-type': 1.2.5(@babel/core@7.26.0) + html-tags: 3.3.1 + svg-tags: 1.0.0 + optionalDependencies: + '@babel/core': 7.26.0 + transitivePeerDependencies: + - supports-color + + '@vue/babel-plugin-resolve-type@1.2.5(@babel/core@7.26.0)': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/parser': 7.26.3 + '@vue/compiler-sfc': 3.5.13 + transitivePeerDependencies: + - supports-color + + '@vue/compiler-core@3.5.13': + dependencies: + '@babel/parser': 7.26.3 + '@vue/shared': 3.5.13 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.13': + dependencies: + '@vue/compiler-core': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/compiler-sfc@3.5.13': + dependencies: + '@babel/parser': 7.26.3 + '@vue/compiler-core': 3.5.13 + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 + estree-walker: 2.0.2 + magic-string: 0.30.17 + postcss: 8.4.49 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.13': + dependencies: + '@vue/compiler-dom': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/compiler-vue2@2.7.16': + dependencies: + de-indent: 1.0.2 + he: 1.2.0 + + '@vue/devtools-api@6.6.4': {} + + '@vue/devtools-core@7.7.0(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2))': + dependencies: + '@vue/devtools-kit': 7.7.0 + '@vue/devtools-shared': 7.7.0 + mitt: 3.0.1 + nanoid: 5.0.9 + pathe: 1.1.2 + vite-hot-client: 0.2.4(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + vue: 3.5.13(typescript@5.7.2) + transitivePeerDependencies: + - vite + + '@vue/devtools-kit@7.7.0': + dependencies: + '@vue/devtools-shared': 7.7.0 + birpc: 0.2.19 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + superjson: 2.2.2 + + '@vue/devtools-shared@7.7.0': + dependencies: + rfdc: 1.4.1 + + '@vue/language-core@2.2.0(typescript@5.7.2)': + dependencies: + '@volar/language-core': 2.4.11 + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-vue2': 2.7.16 + '@vue/shared': 3.5.13 + alien-signals: 0.4.12 + minimatch: 9.0.5 + muggle-string: 0.4.1 + path-browserify: 1.0.1 + optionalDependencies: + typescript: 5.7.2 + + '@vue/reactivity@3.5.13': + dependencies: + '@vue/shared': 3.5.13 + + '@vue/runtime-core@3.5.13': + dependencies: + '@vue/reactivity': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/runtime-dom@3.5.13': + dependencies: + '@vue/reactivity': 3.5.13 + '@vue/runtime-core': 3.5.13 + '@vue/shared': 3.5.13 + csstype: 3.1.3 + + '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.7.2))': + dependencies: + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 + vue: 3.5.13(typescript@5.7.2) + + '@vue/shared@3.5.13': {} + + '@vueuse/core@12.3.0(typescript@5.7.2)': + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 12.3.0 + '@vueuse/shared': 12.3.0(typescript@5.7.2) + vue: 3.5.13(typescript@5.7.2) + transitivePeerDependencies: + - typescript + + '@vueuse/metadata@12.3.0': {} + + '@vueuse/shared@12.3.0(typescript@5.7.2)': + dependencies: + vue: 3.5.13(typescript@5.7.2) + transitivePeerDependencies: + - typescript + + '@webcomponents/custom-elements@1.6.0': {} + + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + + acorn-jsx@5.3.2(acorn@8.14.0): + dependencies: + acorn: 8.14.0 + + acorn-walk@8.3.4: + dependencies: + acorn: 8.14.0 + + acorn@8.14.0: {} + + addons-linter@7.1.0: + dependencies: + '@fluent/syntax': 0.19.0 + '@mdn/browser-compat-data': 5.6.0 + addons-moz-compare: 1.3.0 + addons-scanner-utils: 9.11.0 + ajv: 8.17.1 + chalk: 4.1.2 + cheerio: 1.0.0-rc.12 + columnify: 1.6.0 + common-tags: 1.8.2 + deepmerge: 4.3.1 + eslint: 8.57.1 + eslint-plugin-no-unsanitized: 4.0.2(eslint@8.57.1) + eslint-visitor-keys: 4.0.0 + espree: 10.1.0 + esprima: 4.0.1 + fast-json-patch: 3.1.1 + image-size: 1.1.1 + jed: 1.1.1 + json-merge-patch: 1.0.2 + os-locale: 5.0.0 + pino: 8.20.0 + relaxed-json: 1.0.3 + semver: 7.6.3 + source-map-support: 0.5.21 + upath: 2.0.1 + yargs: 17.7.2 + yauzl: 2.10.0 + transitivePeerDependencies: + - body-parser + - express + - node-fetch + - safe-compare + - supports-color + + addons-moz-compare@1.3.0: {} + + addons-scanner-utils@9.11.0: + dependencies: + '@types/yauzl': 2.10.3 + common-tags: 1.8.2 + first-chunk-stream: 3.0.0 + strip-bom-stream: 4.0.0 + upath: 2.0.1 + yauzl: 2.10.0 + + adm-zip@0.5.16: {} + + agent-base@6.0.2: + dependencies: + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + agent-base@7.1.3: {} + + agentkeepalive@4.6.0: + dependencies: + humanize-ms: 1.2.1 + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.5 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + alien-signals@0.4.12: {} + + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + arg@4.1.3: + optional: true + + arg@5.0.2: {} + + argparse@2.0.1: {} + + array-differ@4.0.0: {} + + array-union@3.0.1: {} + + ast-kit@1.3.2: + dependencies: + '@babel/parser': 7.26.3 + pathe: 1.1.2 + + ast-walker-scope@0.6.2: + dependencies: + '@babel/parser': 7.26.3 + ast-kit: 1.3.2 + + async@3.2.6: {} + + asynckit@0.4.0: {} + + atomic-sleep@1.0.0: {} + + atomically@2.0.3: + dependencies: + stubborn-fs: 1.2.5 + when-exit: 2.1.3 + + autoprefixer@10.4.20(postcss@8.4.49): + dependencies: + browserslist: 4.24.3 + caniuse-lite: 1.0.30001690 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + axios@1.7.9: + dependencies: + follow-redirects: 1.15.9 + form-data: 4.0.1 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + balanced-match@1.0.2: {} + + base64-js@1.5.1: {} + + big-integer@1.6.52: {} + + binary-extensions@2.3.0: {} + + bing-translate-api@2.10.0: + dependencies: + got: 11.8.6 + + birpc@0.2.19: {} + + bluebird@3.7.2: {} + + boolbase@1.0.0: {} + + boxen@8.0.1: + dependencies: + ansi-align: 3.0.1 + camelcase: 8.0.0 + chalk: 5.4.1 + cli-boxes: 3.0.0 + string-width: 7.2.0 + type-fest: 4.31.0 + widest-line: 5.0.0 + wrap-ansi: 9.0.0 + + bplist-parser@0.2.0: + dependencies: + big-integer: 1.6.52 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.24.3: + dependencies: + caniuse-lite: 1.0.30001690 + electron-to-chromium: 1.5.78 + node-releases: 2.0.19 + update-browserslist-db: 1.1.1(browserslist@4.24.3) + + buffer-crc32@0.2.13: {} + + buffer-from@1.1.2: {} + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bundle-name@3.0.0: + dependencies: + run-applescript: 5.0.0 + + bundle-name@4.1.0: + dependencies: + run-applescript: 7.0.0 + + c12@1.11.2: + dependencies: + chokidar: 3.6.0 + confbox: 0.1.8 + defu: 6.1.4 + dotenv: 16.4.7 + giget: 1.2.3 + jiti: 1.21.7 + mlly: 1.7.3 + ohash: 1.1.4 + pathe: 1.1.2 + perfect-debounce: 1.0.0 + pkg-types: 1.3.0 + rc9: 2.1.2 + optional: true + + cacheable-lookup@5.0.4: {} + + cacheable-request@7.0.4: + dependencies: + clone-response: 1.0.3 + get-stream: 5.2.0 + http-cache-semantics: 4.1.1 + keyv: 4.5.4 + lowercase-keys: 2.0.0 + normalize-url: 6.1.0 + responselike: 2.0.1 + + callsites@3.1.0: {} + + camel-case@4.1.2: + dependencies: + pascal-case: 3.1.2 + tslib: 2.8.1 + + camelcase-css@2.0.1: {} + + camelcase@8.0.0: {} + + caniuse-lite@1.0.30001690: {} + + cdata@0.1.3: {} + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.3.0: {} + + chalk@5.4.1: {} + + chardet@0.7.0: {} + + cheerio-select@2.1.0: + dependencies: + boolbase: 1.0.0 + css-select: 5.1.0 + css-what: 6.1.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + + cheerio@1.0.0: + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.2.2 + encoding-sniffer: 0.2.0 + htmlparser2: 9.1.0 + parse5: 7.2.1 + parse5-htmlparser2-tree-adapter: 7.1.0 + parse5-parser-stream: 7.1.2 + undici: 6.21.0 + whatwg-mimetype: 4.0.0 + + cheerio@1.0.0-rc.12: + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.2.2 + htmlparser2: 8.0.2 + parse5: 7.2.1 + parse5-htmlparser2-tree-adapter: 7.1.0 + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chokidar@4.0.3: + dependencies: + readdirp: 4.0.2 + + chownr@2.0.0: + optional: true + + chrome-launcher@1.1.2: + dependencies: + '@types/node': 22.10.5 + escape-string-regexp: 4.0.0 + is-wsl: 2.2.0 + lighthouse-logger: 2.0.1 + transitivePeerDependencies: + - supports-color + + chrome-types@0.1.329: {} + + citty@0.1.6: + dependencies: + consola: 3.3.3 + optional: true + + clean-css@5.3.3: + dependencies: + source-map: 0.6.1 + + cli-boxes@3.0.0: {} + + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-spinners@2.9.2: {} + + cli-width@3.0.0: {} + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clone-response@1.0.3: + dependencies: + mimic-response: 1.0.1 + + clone@1.0.4: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + colorette@2.0.20: {} + + colors-cli@1.0.33: {} + + columnify@1.6.0: + dependencies: + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@10.0.1: {} + + commander@12.1.0: {} + + commander@2.20.3: {} + + commander@2.9.0: + dependencies: + graceful-readlink: 1.0.1 + + commander@4.1.1: {} + + commander@7.2.0: {} + + commander@8.3.0: {} + + commander@9.5.0: {} + + common-tags@1.8.2: {} + + compatx@0.1.8: + optional: true + + concat-map@0.0.1: {} + + concat-stream@1.6.2: + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 2.3.8 + typedarray: 0.0.6 + + concurrently@9.1.2: + dependencies: + chalk: 4.1.2 + lodash: 4.17.21 + rxjs: 7.8.1 + shell-quote: 1.8.2 + supports-color: 8.1.1 + tree-kill: 1.2.2 + yargs: 17.7.2 + + confbox@0.1.8: {} + + config-chain@1.1.13: + dependencies: + ini: 1.3.8 + proto-list: 1.2.4 + + configstore@7.0.0: + dependencies: + atomically: 2.0.3 + dot-prop: 9.0.0 + graceful-fs: 4.2.11 + xdg-basedir: 5.1.0 + + connect-history-api-fallback@1.6.0: {} + + consola@2.15.3: {} + + consola@3.3.3: {} + + convert-source-map@1.9.0: {} + + convert-source-map@2.0.0: {} + + cookie-es@1.2.2: {} + + copy-anything@3.0.5: + dependencies: + is-what: 4.1.16 + + core-util-is@1.0.3: {} + + create-require@1.1.1: + optional: true + + cross-env@7.0.3: + dependencies: + cross-spawn: 7.0.6 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + crossws@0.2.4: {} + + css-select@4.3.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + + css-select@5.1.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + + css-selector-tokenizer@0.8.0: + dependencies: + cssesc: 3.0.0 + fastparse: 1.1.2 + + css-tree@2.2.1: + dependencies: + mdn-data: 2.0.28 + source-map-js: 1.2.1 + + css-tree@2.3.1: + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.2.1 + + css-what@6.1.0: {} + + cssesc@3.0.0: {} + + csso@5.0.5: + dependencies: + css-tree: 2.2.1 + + csstype@3.1.3: {} + + culori@3.3.0: {} + + cwait@1.1.2: + dependencies: + cdata: 0.1.3 + + daisyui@4.12.23(postcss@8.4.49): + dependencies: + css-selector-tokenizer: 0.8.0 + culori: 3.3.0 + picocolors: 1.1.1 + postcss-js: 4.0.1(postcss@8.4.49) + transitivePeerDependencies: + - postcss + + de-indent@1.0.2: {} + + debounce@1.2.1: {} + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@4.3.7: + dependencies: + ms: 2.1.3 + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + decamelize@6.0.0: {} + + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + + deep-extend@0.6.0: {} + + deep-is@0.1.4: {} + + deepmerge@4.3.1: {} + + default-browser-id@3.0.0: + dependencies: + bplist-parser: 0.2.0 + untildify: 4.0.0 + + default-browser-id@5.0.0: {} + + default-browser@4.0.0: + dependencies: + bundle-name: 3.0.0 + default-browser-id: 3.0.0 + execa: 7.2.0 + titleize: 3.0.0 + + default-browser@5.2.1: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.0 + + defaults@1.0.4: + dependencies: + clone: 1.0.4 + + defer-to-connect@2.0.1: {} + + define-lazy-prop@3.0.0: {} + + defu@6.1.4: {} + + delayed-stream@1.0.0: {} + + depd@2.0.0: {} + + destr@2.0.3: {} + + detect-libc@1.0.3: + optional: true + + didyoumean@1.2.2: {} + + diff@4.0.2: + optional: true + + dlv@1.1.3: {} + + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + dom-serializer@1.4.1: + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@4.3.1: + dependencies: + domelementtype: 2.3.0 + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@2.8.0: + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + dot-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + + dot-prop@9.0.0: + dependencies: + type-fest: 4.31.0 + + dotenv-expand@8.0.3: {} + + dotenv@16.4.7: {} + + eastasianwidth@0.2.0: {} + + ejs@3.1.10: + dependencies: + jake: 10.9.2 + + electron-to-chromium@1.5.78: {} + + emoji-regex@10.4.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + encoding-sniffer@0.2.0: + dependencies: + iconv-lite: 0.6.3 + whatwg-encoding: 3.1.1 + + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + + entities@2.2.0: {} + + entities@4.5.0: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + error-stack-parser-es@0.1.5: {} + + es-module-lexer@0.10.5: {} + + es6-error@4.1.1: {} + + esbuild@0.23.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.23.1 + '@esbuild/android-arm': 0.23.1 + '@esbuild/android-arm64': 0.23.1 + '@esbuild/android-x64': 0.23.1 + '@esbuild/darwin-arm64': 0.23.1 + '@esbuild/darwin-x64': 0.23.1 + '@esbuild/freebsd-arm64': 0.23.1 + '@esbuild/freebsd-x64': 0.23.1 + '@esbuild/linux-arm': 0.23.1 + '@esbuild/linux-arm64': 0.23.1 + '@esbuild/linux-ia32': 0.23.1 + '@esbuild/linux-loong64': 0.23.1 + '@esbuild/linux-mips64el': 0.23.1 + '@esbuild/linux-ppc64': 0.23.1 + '@esbuild/linux-riscv64': 0.23.1 + '@esbuild/linux-s390x': 0.23.1 + '@esbuild/linux-x64': 0.23.1 + '@esbuild/netbsd-x64': 0.23.1 + '@esbuild/openbsd-arm64': 0.23.1 + '@esbuild/openbsd-x64': 0.23.1 + '@esbuild/sunos-x64': 0.23.1 + '@esbuild/win32-arm64': 0.23.1 + '@esbuild/win32-ia32': 0.23.1 + '@esbuild/win32-x64': 0.23.1 + + esbuild@0.24.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.24.2 + '@esbuild/android-arm': 0.24.2 + '@esbuild/android-arm64': 0.24.2 + '@esbuild/android-x64': 0.24.2 + '@esbuild/darwin-arm64': 0.24.2 + '@esbuild/darwin-x64': 0.24.2 + '@esbuild/freebsd-arm64': 0.24.2 + '@esbuild/freebsd-x64': 0.24.2 + '@esbuild/linux-arm': 0.24.2 + '@esbuild/linux-arm64': 0.24.2 + '@esbuild/linux-ia32': 0.24.2 + '@esbuild/linux-loong64': 0.24.2 + '@esbuild/linux-mips64el': 0.24.2 + '@esbuild/linux-ppc64': 0.24.2 + '@esbuild/linux-riscv64': 0.24.2 + '@esbuild/linux-s390x': 0.24.2 + '@esbuild/linux-x64': 0.24.2 + '@esbuild/netbsd-arm64': 0.24.2 + '@esbuild/netbsd-x64': 0.24.2 + '@esbuild/openbsd-arm64': 0.24.2 + '@esbuild/openbsd-x64': 0.24.2 + '@esbuild/sunos-x64': 0.24.2 + '@esbuild/win32-arm64': 0.24.2 + '@esbuild/win32-ia32': 0.24.2 + '@esbuild/win32-x64': 0.24.2 + + escalade@3.2.0: {} + + escape-goat@4.0.0: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + escape-string-regexp@5.0.0: {} + + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + + eslint-plugin-no-unsanitized@4.0.2(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + + eslint-plugin-vue@9.32.0(eslint@9.17.0(jiti@2.4.2)): + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2)) + eslint: 9.17.0(jiti@2.4.2) + globals: 13.24.0 + natural-compare: 1.4.0 + nth-check: 2.1.1 + postcss-selector-parser: 6.1.2 + semver: 7.6.3 + vue-eslint-parser: 9.4.3(eslint@9.17.0(jiti@2.4.2)) + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - supports-color + + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-scope@8.2.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.0.0: {} + + eslint-visitor-keys@4.2.0: {} + + eslint@8.57.1: + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + '@eslint-community/regexpp': 4.12.1 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.1 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + eslint@9.17.0(jiti@2.4.2): + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.1 + '@eslint/core': 0.9.1 + '@eslint/eslintrc': 3.2.0 + '@eslint/js': 9.17.0 + '@eslint/plugin-kit': 0.2.4 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.1 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0 + escape-string-regexp: 4.0.0 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.4.2 + transitivePeerDependencies: + - supports-color + + espree@10.1.0: + dependencies: + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.0.0 + + espree@10.3.0: + dependencies: + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 + + espree@9.6.1: + dependencies: + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 3.4.3 + + esprima@4.0.1: {} + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + estree-walker@2.0.2: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.6 + + esutils@2.0.3: {} + + event-target-shim@5.0.1: {} + + events@3.3.0: {} + + execa@4.1.0: + dependencies: + cross-spawn: 7.0.6 + get-stream: 5.2.0 + human-signals: 1.1.1 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + execa@7.2.0: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 4.3.1 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + + execa@8.0.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + optional: true + + execa@9.5.2: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.6 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.0 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.2.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.1.1 + + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-patch@3.1.1: {} + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fast-redact@3.5.0: {} + + fast-uri@3.0.5: {} + + fastparse@1.1.2: {} + + fastq@1.18.0: + dependencies: + reusify: 1.0.4 + + faye-websocket@0.11.4: + dependencies: + websocket-driver: 0.7.4 + optional: true + + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + + figlet@1.8.0: {} + + figures@3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + + figures@6.1.0: + dependencies: + is-unicode-supported: 2.1.0 + + file-entry-cache@6.0.1: + dependencies: + flat-cache: 3.2.0 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + firebase@10.14.0: + dependencies: + '@firebase/analytics': 0.10.8(@firebase/app@0.10.12) + '@firebase/analytics-compat': 0.2.14(@firebase/app-compat@0.2.42)(@firebase/app@0.10.12) + '@firebase/app': 0.10.12 + '@firebase/app-check': 0.8.8(@firebase/app@0.10.12) + '@firebase/app-check-compat': 0.3.15(@firebase/app-compat@0.2.42)(@firebase/app@0.10.12) + '@firebase/app-compat': 0.2.42 + '@firebase/app-types': 0.9.2 + '@firebase/auth': 1.7.9(@firebase/app@0.10.12) + '@firebase/auth-compat': 0.5.14(@firebase/app-compat@0.2.42)(@firebase/app-types@0.9.2)(@firebase/app@0.10.12) + '@firebase/data-connect': 0.1.0(@firebase/app@0.10.12) + '@firebase/database': 1.0.8 + '@firebase/database-compat': 1.0.8 + '@firebase/firestore': 4.7.3(@firebase/app@0.10.12) + '@firebase/firestore-compat': 0.3.38(@firebase/app-compat@0.2.42)(@firebase/app-types@0.9.2)(@firebase/app@0.10.12) + '@firebase/functions': 0.11.8(@firebase/app@0.10.12) + '@firebase/functions-compat': 0.3.14(@firebase/app-compat@0.2.42)(@firebase/app@0.10.12) + '@firebase/installations': 0.6.9(@firebase/app@0.10.12) + '@firebase/installations-compat': 0.2.9(@firebase/app-compat@0.2.42)(@firebase/app-types@0.9.2)(@firebase/app@0.10.12) + '@firebase/messaging': 0.12.11(@firebase/app@0.10.12) + '@firebase/messaging-compat': 0.2.11(@firebase/app-compat@0.2.42)(@firebase/app@0.10.12) + '@firebase/performance': 0.6.9(@firebase/app@0.10.12) + '@firebase/performance-compat': 0.2.9(@firebase/app-compat@0.2.42)(@firebase/app@0.10.12) + '@firebase/remote-config': 0.4.9(@firebase/app@0.10.12) + '@firebase/remote-config-compat': 0.2.9(@firebase/app-compat@0.2.42)(@firebase/app@0.10.12) + '@firebase/storage': 0.13.2(@firebase/app@0.10.12) + '@firebase/storage-compat': 0.3.12(@firebase/app-compat@0.2.42)(@firebase/app-types@0.9.2)(@firebase/app@0.10.12) + '@firebase/util': 1.10.0 + '@firebase/vertexai-preview': 0.0.4(@firebase/app-types@0.9.2)(@firebase/app@0.10.12) + transitivePeerDependencies: + - '@react-native-async-storage/async-storage' + optional: true + + firefox-profile@4.7.0: + dependencies: + adm-zip: 0.5.16 + fs-extra: 11.2.0 + ini: 4.1.3 + minimist: 1.2.8 + xml2js: 0.6.2 + + first-chunk-stream@3.0.0: {} + + flat-cache@3.2.0: + dependencies: + flatted: 3.3.2 + keyv: 4.5.4 + rimraf: 3.0.2 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.2 + keyv: 4.5.4 + + flatted@3.3.2: {} + + follow-redirects@1.15.9: {} + + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + form-data-encoder@1.7.2: {} + + form-data@4.0.1: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + formdata-node@4.4.1: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 4.0.0-beta.3 + + fraction.js@4.3.7: {} + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-extra@11.2.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-minipass@2.1.0: + dependencies: + minipass: 3.3.6 + optional: true + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + fx-runner@1.4.0: + dependencies: + commander: 2.9.0 + shell-quote: 1.7.3 + spawn-sync: 1.0.15 + when: 3.7.7 + which: 1.2.4 + winreg: 0.0.12 + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-east-asian-width@1.3.0: {} + + get-installed-browsers@0.1.7: {} + + get-port-please@3.1.2: {} + + get-stream@5.2.0: + dependencies: + pump: 3.0.2 + + get-stream@6.0.1: {} + + get-stream@8.0.1: + optional: true + + get-stream@9.0.1: + dependencies: + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 + + get-tsconfig@4.8.1: + dependencies: + resolve-pkg-maps: 1.0.0 + + giget@1.2.3: + dependencies: + citty: 0.1.6 + consola: 3.3.3 + defu: 6.1.4 + node-fetch-native: 1.6.4 + nypm: 0.3.12 + ohash: 1.1.4 + pathe: 1.1.2 + tar: 6.2.1 + optional: true + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob-to-regexp@0.4.1: {} + + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + global-directory@4.0.1: + dependencies: + ini: 4.1.1 + + globals@11.12.0: {} + + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + + globals@14.0.0: {} + + globals@15.14.0: {} + + globby@14.0.2: + dependencies: + '@sindresorhus/merge-streams': 2.3.0 + fast-glob: 3.3.3 + ignore: 5.3.2 + path-type: 5.0.0 + slash: 5.1.0 + unicorn-magic: 0.1.0 + optional: true + + got@11.8.6: + dependencies: + '@sindresorhus/is': 4.6.0 + '@szmarczak/http-timer': 4.0.6 + '@types/cacheable-request': 6.0.3 + '@types/responselike': 1.0.3 + cacheable-lookup: 5.0.4 + cacheable-request: 7.0.4 + decompress-response: 6.0.0 + http2-wrapper: 1.0.3 + lowercase-keys: 2.0.0 + p-cancelable: 2.1.1 + responselike: 2.0.1 + + graceful-fs@4.2.10: {} + + graceful-fs@4.2.11: {} + + graceful-readlink@1.0.1: {} + + graphemer@1.4.0: {} + + growly@1.3.0: {} + + h3@1.12.0: + dependencies: + cookie-es: 1.2.2 + crossws: 0.2.4 + defu: 6.1.4 + destr: 2.0.3 + iron-webcrypto: 1.2.1 + ohash: 1.1.4 + radix3: 1.1.2 + ufo: 1.5.4 + uncrypto: 0.1.3 + unenv: 1.10.0 + transitivePeerDependencies: + - uWebSockets.js + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + hash-sum@2.0.0: + optional: true + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + hookable@5.5.3: {} + + html-minifier-terser@6.1.0: + dependencies: + camel-case: 4.1.2 + clean-css: 5.3.3 + commander: 8.3.0 + he: 1.2.0 + param-case: 3.0.4 + relateurl: 0.2.7 + terser: 5.37.0 + + html-tags@3.3.1: {} + + htmlparser2@8.0.2: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 4.5.0 + + htmlparser2@9.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 4.5.0 + + http-cache-semantics@4.1.1: {} + + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + http-parser-js@0.5.8: + optional: true + + http-proxy-agent@5.0.0: + dependencies: + '@tootallnate/once': 2.0.0 + agent-base: 6.0.2 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + http2-wrapper@1.0.3: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + human-signals@1.1.1: {} + + human-signals@2.1.0: {} + + human-signals@4.3.1: {} + + human-signals@5.0.0: + optional: true + + human-signals@8.0.0: {} + + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + idb@7.1.1: + optional: true + + ieee754@1.2.1: {} + + ignore@5.3.2: {} + + image-size@1.1.1: + dependencies: + queue: 6.0.2 + + immediate@3.0.6: {} + + immutable@5.0.3: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + ini@1.3.8: {} + + ini@4.1.1: {} + + ini@4.1.3: {} + + inquirer@7.3.3: + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + run-async: 2.4.1 + rxjs: 6.6.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + + invert-kv@3.0.1: {} + + iron-webcrypto@1.2.1: {} + + is-absolute@0.1.7: + dependencies: + is-relative: 0.1.3 + + is-arrayish@0.2.1: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-docker@2.2.1: {} + + is-docker@3.0.0: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-in-ci@1.0.0: {} + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-installed-globally@1.0.0: + dependencies: + global-directory: 4.0.1 + is-path-inside: 4.0.0 + + is-interactive@2.0.0: {} + + is-npm@6.0.0: {} + + is-number@7.0.0: {} + + is-path-inside@3.0.3: {} + + is-path-inside@4.0.0: {} + + is-plain-obj@4.1.0: {} + + is-relative@0.1.3: {} + + is-stream@2.0.1: {} + + is-stream@3.0.0: {} + + is-stream@4.0.1: {} + + is-unicode-supported@1.3.0: {} + + is-unicode-supported@2.1.0: {} + + is-utf8@0.2.1: {} + + is-what@4.1.16: {} + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + + isarray@1.0.0: {} + + isexe@1.1.2: {} + + isexe@2.0.0: {} + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jake@10.9.2: + dependencies: + async: 3.2.6 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + + jed@1.1.1: {} + + jiti@1.21.7: {} + + jiti@2.4.2: + optional: true + + jose@5.9.2: {} + + js-tokens@4.0.0: {} + + js-tokens@9.0.1: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-merge-patch@1.0.2: + dependencies: + fast-deep-equal: 3.1.3 + + json-parse-even-better-errors@3.0.2: {} + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@2.2.3: {} + + jsonc-eslint-parser@2.4.0: + dependencies: + acorn: 8.14.0 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + semver: 7.6.3 + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + jszip@3.10.1: + dependencies: + lie: 3.3.0 + pako: 1.0.11 + readable-stream: 2.3.8 + setimmediate: 1.0.5 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + klona@2.0.6: + optional: true + + knitwork@1.2.0: + optional: true + + kolorist@1.8.0: {} + + ky@1.7.4: {} + + latest-version@9.0.0: + dependencies: + package-json: 10.0.1 + + launch-editor@2.9.1: + dependencies: + picocolors: 1.1.1 + shell-quote: 1.8.2 + + lcid@3.1.1: + dependencies: + invert-kv: 3.0.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lie@3.3.0: + dependencies: + immediate: 3.0.6 + + lighthouse-logger@2.0.1: + dependencies: + debug: 2.6.9 + marky: 1.2.5 + transitivePeerDependencies: + - supports-color + + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} + + lines-and-columns@2.0.4: {} + + loading-cli@1.1.2: + dependencies: + colors-cli: 1.0.33 + + local-pkg@0.5.1: + dependencies: + mlly: 1.7.3 + pkg-types: 1.3.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.camelcase@4.3.0: + optional: true + + lodash.castarray@4.4.0: {} + + lodash.isplainobject@4.0.6: {} + + lodash.merge@4.6.2: {} + + lodash@4.17.21: {} + + log-symbols@6.0.0: + dependencies: + chalk: 5.4.1 + is-unicode-supported: 1.3.0 + + long@5.2.3: + optional: true + + lower-case@2.0.2: + dependencies: + tslib: 2.8.1 + + lowercase-keys@2.0.0: {} + + lru-cache@10.4.3: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + magic-string-ast@0.6.3: + dependencies: + magic-string: 0.30.17 + + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + make-error@1.3.6: {} + + map-age-cleaner@0.1.3: + dependencies: + p-defer: 1.0.0 + + marked@15.0.6: {} + + marky@1.2.5: {} + + mdn-data@2.0.28: {} + + mdn-data@2.0.30: {} + + mem@5.1.1: + dependencies: + map-age-cleaner: 0.1.3 + mimic-fn: 2.1.0 + p-is-promise: 2.1.0 + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@3.0.0: {} + + mimic-fn@2.1.0: {} + + mimic-fn@4.0.0: {} + + mimic-function@5.0.1: {} + + mimic-response@1.0.1: {} + + mimic-response@3.1.0: {} + + mini-svg-data-uri@1.4.4: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + optional: true + + minipass@5.0.0: + optional: true + + minipass@7.1.2: {} + + minizlib@2.1.2: + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + optional: true + + mitt@3.0.1: {} + + mkdirp@1.0.4: + optional: true + + mlly@1.7.3: + dependencies: + acorn: 8.14.0 + pathe: 1.1.2 + pkg-types: 1.3.0 + ufo: 1.5.4 + + mrmime@2.0.0: {} + + ms@2.0.0: {} + + ms@2.1.3: {} + + muggle-string@0.4.1: {} + + multimatch@6.0.0: + dependencies: + '@types/minimatch': 3.0.5 + array-differ: 4.0.0 + array-union: 3.0.1 + minimatch: 3.1.2 + + mute-stream@0.0.8: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nanoevents@6.0.2: {} + + nanoid@3.3.8: {} + + nanoid@5.0.9: {} + + natural-compare@1.4.0: {} + + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.8.1 + + node-addon-api@7.1.1: + optional: true + + node-domexception@1.0.0: {} + + node-fetch-native@1.6.4: {} + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-forge@1.3.1: {} + + node-html-parser@5.4.2: + dependencies: + css-select: 4.3.0 + he: 1.2.0 + + node-notifier@10.0.1: + dependencies: + growly: 1.3.0 + is-wsl: 2.2.0 + semver: 7.6.3 + shellwords: 0.1.1 + uuid: 8.3.2 + which: 2.0.2 + + node-releases@2.0.19: {} + + normalize-path@3.0.0: {} + + normalize-range@0.1.2: {} + + normalize-url@6.1.0: {} + + notivue@2.4.5(@nuxt/kit@3.13.0(rollup@4.30.1))(@nuxt/schema@3.13.0(rollup@4.30.1))(defu@6.1.4): + optionalDependencies: + '@nuxt/kit': 3.13.0(rollup@4.30.1) + '@nuxt/schema': 3.13.0(rollup@4.30.1) + defu: 6.1.4 + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + + npm-run-path@6.0.0: + dependencies: + path-key: 4.0.0 + unicorn-magic: 0.3.0 + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + nypm@0.3.12: + dependencies: + citty: 0.1.6 + consola: 3.3.3 + execa: 8.0.1 + pathe: 1.1.2 + pkg-types: 1.3.0 + ufo: 1.5.4 + optional: true + + object-assign@4.1.1: {} + + object-hash@3.0.0: {} + + ohash@1.1.4: {} + + on-exit-leak-free@2.1.2: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + + open@10.1.0: + dependencies: + default-browser: 5.2.1 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 3.1.0 + + open@9.1.0: + dependencies: + default-browser: 4.0.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 2.2.0 + + openai@4.78.1: + dependencies: + '@types/node': 18.19.70 + '@types/node-fetch': 2.6.12 + abort-controller: 3.0.0 + agentkeepalive: 4.6.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + ora@8.1.1: + dependencies: + chalk: 5.4.1 + cli-cursor: 5.0.0 + cli-spinners: 2.9.2 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 6.0.0 + stdin-discarder: 0.2.2 + string-width: 7.2.0 + strip-ansi: 7.1.0 + + os-locale@5.0.0: + dependencies: + execa: 4.1.0 + lcid: 3.1.1 + mem: 5.1.1 + + os-shim@0.1.3: {} + + os-tmpdir@1.0.2: {} + + oxc-parser@0.40.1: + dependencies: + '@oxc-project/types': 0.40.1 + optionalDependencies: + '@oxc-parser/binding-darwin-arm64': 0.40.1 + '@oxc-parser/binding-darwin-x64': 0.40.1 + '@oxc-parser/binding-linux-arm64-gnu': 0.40.1 + '@oxc-parser/binding-linux-arm64-musl': 0.40.1 + '@oxc-parser/binding-linux-x64-gnu': 0.40.1 + '@oxc-parser/binding-linux-x64-musl': 0.40.1 + '@oxc-parser/binding-win32-arm64-msvc': 0.40.1 + '@oxc-parser/binding-win32-x64-msvc': 0.40.1 + + p-cancelable@2.1.1: {} + + p-defer@1.0.0: {} + + p-is-promise@2.1.0: {} + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + package-json-from-dist@1.0.1: {} + + package-json@10.0.1: + dependencies: + ky: 1.7.4 + registry-auth-token: 5.0.3 + registry-url: 6.0.1 + semver: 7.6.3 + + package-manager-detector@0.2.8: {} + + pako@1.0.11: {} + + param-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.8.1 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@7.1.1: + dependencies: + '@babel/code-frame': 7.26.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 3.0.2 + lines-and-columns: 2.0.4 + type-fest: 3.13.1 + + parse-ms@4.0.0: {} + + parse5-htmlparser2-tree-adapter@7.1.0: + dependencies: + domhandler: 5.0.3 + parse5: 7.2.1 + + parse5-parser-stream@7.1.2: + dependencies: + parse5: 7.2.1 + + parse5@7.2.1: + dependencies: + entities: 4.5.0 + + pascal-case@3.1.2: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + + path-browserify@1.0.1: {} + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-type@5.0.0: + optional: true + + pathe@0.2.0: {} + + pathe@1.1.2: {} + + pend@1.2.0: {} + + perfect-debounce@1.0.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.2: {} + + pify@2.3.0: {} + + pinia@2.3.0(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.13(typescript@5.7.2) + vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.2)) + optionalDependencies: + typescript: 5.7.2 + transitivePeerDependencies: + - '@vue/composition-api' + + pino-abstract-transport@1.2.0: + dependencies: + readable-stream: 4.7.0 + split2: 4.2.0 + + pino-std-serializers@6.2.2: {} + + pino-std-serializers@7.0.0: {} + + pino@8.20.0: + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.5.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 1.2.0 + pino-std-serializers: 6.2.2 + process-warning: 3.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.5.0 + sonic-boom: 3.8.1 + thread-stream: 2.7.0 + + pino@9.4.0: + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.5.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 1.2.0 + pino-std-serializers: 7.0.0 + process-warning: 4.0.1 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.5.0 + sonic-boom: 4.2.0 + thread-stream: 3.1.0 + + pirates@4.0.6: {} + + pkg-types@1.3.0: + dependencies: + confbox: 0.1.8 + mlly: 1.7.3 + pathe: 1.1.2 + + postcss-import@15.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.10 + + postcss-js@4.0.1(postcss@8.4.49): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.49 + + postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.7.2)): + dependencies: + lilconfig: 3.1.3 + yaml: 2.7.0 + optionalDependencies: + postcss: 8.4.49 + ts-node: 10.9.2(@types/node@22.10.5)(typescript@5.7.2) + + postcss-nested@6.2.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 + + postcss-selector-parser@6.0.10: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.4.49: + dependencies: + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + prettier-plugin-tailwindcss@0.6.9(prettier@3.4.2): + dependencies: + prettier: 3.4.2 + + prettier@3.4.2: {} + + pretty-ms@9.2.0: + dependencies: + parse-ms: 4.0.0 + + process-nextick-args@2.0.1: {} + + process-warning@3.0.0: {} + + process-warning@4.0.1: {} + + process@0.11.10: {} + + promise-toolbox@0.21.0: + dependencies: + make-error: 1.3.6 + + proto-list@1.2.4: {} + + protobufjs@7.4.0: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/node': 22.10.5 + long: 5.2.3 + optional: true + + proxy-from-env@1.1.0: {} + + pump@3.0.2: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + + punycode@2.3.1: {} + + pupa@3.1.0: + dependencies: + escape-goat: 4.0.0 + + queue-microtask@1.2.3: {} + + queue@6.0.2: + dependencies: + inherits: 2.0.4 + + quick-format-unescaped@4.0.4: {} + + quick-lru@5.1.1: {} + + radix3@1.1.2: {} + + rc9@2.1.2: + dependencies: + defu: 6.1.4 + destr: 2.0.3 + optional: true + + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + + react-refresh@0.13.0: {} + + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readable-stream@4.7.0: + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + readdirp@4.0.2: {} + + real-require@0.2.0: {} + + regenerator-runtime@0.14.1: {} + + registry-auth-token@5.0.3: + dependencies: + '@pnpm/npm-conf': 2.3.1 + + registry-url@6.0.1: + dependencies: + rc: 1.2.8 + + relateurl@0.2.7: {} + + relaxed-json@1.0.3: + dependencies: + chalk: 2.4.2 + commander: 2.20.3 + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + resolve-alpn@1.2.1: {} + + resolve-from@4.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + responselike@2.0.1: + dependencies: + lowercase-keys: 2.0.0 + + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + + reusify@1.0.4: {} + + rfdc@1.4.1: {} + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + rollup@2.79.2: + optionalDependencies: + fsevents: 2.3.3 + + rollup@4.30.1: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.30.1 + '@rollup/rollup-android-arm64': 4.30.1 + '@rollup/rollup-darwin-arm64': 4.30.1 + '@rollup/rollup-darwin-x64': 4.30.1 + '@rollup/rollup-freebsd-arm64': 4.30.1 + '@rollup/rollup-freebsd-x64': 4.30.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.30.1 + '@rollup/rollup-linux-arm-musleabihf': 4.30.1 + '@rollup/rollup-linux-arm64-gnu': 4.30.1 + '@rollup/rollup-linux-arm64-musl': 4.30.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.30.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.30.1 + '@rollup/rollup-linux-riscv64-gnu': 4.30.1 + '@rollup/rollup-linux-s390x-gnu': 4.30.1 + '@rollup/rollup-linux-x64-gnu': 4.30.1 + '@rollup/rollup-linux-x64-musl': 4.30.1 + '@rollup/rollup-win32-arm64-msvc': 4.30.1 + '@rollup/rollup-win32-ia32-msvc': 4.30.1 + '@rollup/rollup-win32-x64-msvc': 4.30.1 + fsevents: 2.3.3 + + run-applescript@5.0.0: + dependencies: + execa: 5.1.1 + + run-applescript@7.0.0: {} + + run-async@2.4.1: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs@6.6.7: + dependencies: + tslib: 1.14.1 + + rxjs@7.5.7: + dependencies: + tslib: 2.8.1 + + rxjs@7.8.1: + dependencies: + tslib: 2.8.1 + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + safe-stable-stringify@2.5.0: {} + + safer-buffer@2.1.2: {} + + sass@1.83.1: + dependencies: + chokidar: 4.0.3 + immutable: 5.0.3 + source-map-js: 1.2.1 + optionalDependencies: + '@parcel/watcher': 2.5.0 + + sax@1.4.1: {} + + scule@1.3.0: {} + + semver@6.3.1: {} + + semver@7.6.3: {} + + serialize-error@9.1.1: + dependencies: + type-fest: 2.19.0 + + setimmediate@1.0.5: {} + + setprototypeof@1.2.0: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + shell-quote@1.7.3: {} + + shell-quote@1.8.2: {} + + shellwords@0.1.1: {} + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + sirv@3.0.0: + dependencies: + '@polka/url': 1.0.0-next.28 + mrmime: 2.0.0 + totalist: 3.0.1 + + slash@5.1.0: + optional: true + + sonic-boom@3.8.1: + dependencies: + atomic-sleep: 1.0.0 + + sonic-boom@4.2.0: + dependencies: + atomic-sleep: 1.0.0 + + source-map-js@1.2.1: {} + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + spawn-sync@1.0.15: + dependencies: + concat-stream: 1.6.2 + os-shim: 0.1.3 + + speakingurl@14.0.1: {} + + split2@4.2.0: {} + + split@1.0.1: + dependencies: + through: 2.3.8 + + squoosh-next@0.1.2: + dependencies: + wasm-feature-detect: 1.8.0 + web-streams-polyfill: 3.3.3 + + statuses@2.0.1: {} + + std-env@3.8.0: + optional: true + + stdin-discarder@0.2.2: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string-width@7.2.0: + dependencies: + emoji-regex: 10.4.0 + get-east-asian-width: 1.3.0 + strip-ansi: 7.1.0 + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-bom-buf@2.0.0: + dependencies: + is-utf8: 0.2.1 + + strip-bom-stream@4.0.0: + dependencies: + first-chunk-stream: 3.0.0 + strip-bom-buf: 2.0.0 + + strip-bom@5.0.0: {} + + strip-final-newline@2.0.0: {} + + strip-final-newline@3.0.0: {} + + strip-final-newline@4.0.0: {} + + strip-json-comments@2.0.1: {} + + strip-json-comments@3.1.1: {} + + strip-json-comments@5.0.1: {} + + strip-literal@2.1.1: + dependencies: + js-tokens: 9.0.1 + + stubborn-fs@1.2.5: {} + + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + commander: 4.1.1 + glob: 10.4.5 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + + superjson@2.2.2: + dependencies: + copy-anything: 3.0.5 + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + svg-tags@1.0.0: {} + + svgo@3.3.2: + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 5.1.0 + css-tree: 2.3.1 + css-what: 6.1.0 + csso: 5.0.5 + picocolors: 1.1.1 + + tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.7.2)): + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.3 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.7 + lilconfig: 3.1.3 + micromatch: 4.0.8 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.4.49 + postcss-import: 15.1.0(postcss@8.4.49) + postcss-js: 4.0.1(postcss@8.4.49) + postcss-load-config: 4.0.2(postcss@8.4.49)(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.7.2)) + postcss-nested: 6.2.0(postcss@8.4.49) + postcss-selector-parser: 6.1.2 + resolve: 1.22.10 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + + tar@6.2.1: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + optional: true + + terser@5.37.0: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.14.0 + commander: 2.20.3 + source-map-support: 0.5.21 + + text-table@0.2.0: {} + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + thread-stream@2.7.0: + dependencies: + real-require: 0.2.0 + + thread-stream@3.1.0: + dependencies: + real-require: 0.2.0 + + through@2.3.8: {} + + tiny-uid@1.1.2: {} + + tinyexec@0.3.2: {} + + titleize@3.0.0: {} + + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + + tmp@0.2.3: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.1: {} + + totalist@3.0.1: {} + + tr46@0.0.3: {} + + tree-kill@1.2.2: {} + + ts-api-utils@2.0.0(typescript@5.7.2): + dependencies: + typescript: 5.7.2 + + ts-interface-checker@0.1.13: {} + + ts-node@10.9.2(@types/node@22.10.5)(typescript@5.7.2): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 22.10.5 + acorn: 8.14.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.7.2 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optional: true + + tslib@1.14.1: {} + + tslib@2.8.1: {} + + tsx@4.19.2: + dependencies: + esbuild: 0.23.1 + get-tsconfig: 4.8.1 + optionalDependencies: + fsevents: 2.3.3 + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-fest@0.20.2: {} + + type-fest@0.21.3: {} + + type-fest@2.19.0: {} + + type-fest@3.13.1: {} + + type-fest@4.31.0: {} + + typedarray@0.0.6: {} + + typescript-eslint@8.19.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2): + dependencies: + '@typescript-eslint/eslint-plugin': 8.19.1(@typescript-eslint/parser@8.19.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/parser': 8.19.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/utils': 8.19.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + eslint: 9.17.0(jiti@2.4.2) + typescript: 5.7.2 + transitivePeerDependencies: + - supports-color + + typescript@5.7.2: {} + + ufo@1.5.4: {} + + uncrypto@0.1.3: {} + + unctx@2.4.1: + dependencies: + acorn: 8.14.0 + estree-walker: 3.0.3 + magic-string: 0.30.17 + unplugin: 2.1.2 + optional: true + + undici-types@5.26.5: {} + + undici-types@6.20.0: {} + + undici@5.28.4: + dependencies: + '@fastify/busboy': 2.1.1 + + undici@6.19.7: + optional: true + + undici@6.21.0: {} + + unenv@1.10.0: + dependencies: + consola: 3.3.3 + defu: 6.1.4 + mime: 3.0.0 + node-fetch-native: 1.6.4 + pathe: 1.1.2 + + unicorn-magic@0.1.0: + optional: true + + unicorn-magic@0.3.0: {} + + unimport@3.14.5(rollup@4.30.1): + dependencies: + '@rollup/pluginutils': 5.1.4(rollup@4.30.1) + acorn: 8.14.0 + escape-string-regexp: 5.0.0 + estree-walker: 3.0.3 + fast-glob: 3.3.3 + local-pkg: 0.5.1 + magic-string: 0.30.17 + mlly: 1.7.3 + pathe: 1.1.2 + picomatch: 4.0.2 + pkg-types: 1.3.0 + scule: 1.3.0 + strip-literal: 2.1.1 + unplugin: 1.16.0 + transitivePeerDependencies: + - rollup + + universalify@2.0.1: {} + + unplugin-auto-import@0.19.0(@nuxt/kit@3.13.0(rollup@4.30.1))(@vueuse/core@12.3.0(typescript@5.7.2))(rollup@4.30.1): + dependencies: + '@antfu/utils': 0.7.10 + '@rollup/pluginutils': 5.1.4(rollup@4.30.1) + local-pkg: 0.5.1 + magic-string: 0.30.17 + picomatch: 4.0.2 + unimport: 3.14.5(rollup@4.30.1) + unplugin: 2.1.2 + optionalDependencies: + '@nuxt/kit': 3.13.0(rollup@4.30.1) + '@vueuse/core': 12.3.0(typescript@5.7.2) + transitivePeerDependencies: + - rollup + + unplugin-icons@0.22.0(@vue/compiler-sfc@3.5.13)(vue-template-compiler@2.7.14): + dependencies: + '@antfu/install-pkg': 0.5.0 + '@antfu/utils': 0.7.10 + '@iconify/utils': 2.2.1 + debug: 4.4.0 + kolorist: 1.8.0 + local-pkg: 0.5.1 + unplugin: 2.1.2 + optionalDependencies: + '@vue/compiler-sfc': 3.5.13 + vue-template-compiler: 2.7.14 + transitivePeerDependencies: + - supports-color + + unplugin-imagemin@0.6.5(rollup@4.30.1): + dependencies: + '@rollup/pluginutils': 5.1.4(rollup@4.30.1) + chalk: 5.3.0 + ora: 8.1.1 + squoosh-next: 0.1.2 + svgo: 3.3.2 + unplugin: 2.1.2 + transitivePeerDependencies: + - rollup + + unplugin-turbo-console@1.11.1(@nuxt/kit@3.13.0(rollup@4.30.1))(@nuxt/schema@3.13.0(rollup@4.30.1))(esbuild@0.24.2)(rollup@4.30.1)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)): + dependencies: + '@rollup/pluginutils': 5.1.4(rollup@4.30.1) + estree-walker: 3.0.3 + get-port-please: 3.1.2 + h3: 1.12.0 + launch-editor: 2.9.1 + magic-string: 0.30.17 + oxc-parser: 0.40.1 + pathe: 1.1.2 + unplugin: 2.1.2 + optionalDependencies: + '@nuxt/kit': 3.13.0(rollup@4.30.1) + '@nuxt/schema': 3.13.0(rollup@4.30.1) + esbuild: 0.24.2 + rollup: 4.30.1 + vite: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + vue: 3.5.13(typescript@5.7.2) + transitivePeerDependencies: + - uWebSockets.js + + unplugin-vue-components@0.28.0(@babel/parser@7.26.3)(@nuxt/kit@3.13.0(rollup@4.30.1))(rollup@4.30.1)(vue@3.5.13(typescript@5.7.2)): + dependencies: + '@antfu/utils': 0.7.10 + '@rollup/pluginutils': 5.1.4(rollup@4.30.1) + chokidar: 3.6.0 + debug: 4.4.0 + fast-glob: 3.3.3 + local-pkg: 0.5.1 + magic-string: 0.30.17 + minimatch: 9.0.5 + mlly: 1.7.3 + unplugin: 2.1.2 + vue: 3.5.13(typescript@5.7.2) + optionalDependencies: + '@babel/parser': 7.26.3 + '@nuxt/kit': 3.13.0(rollup@4.30.1) + transitivePeerDependencies: + - rollup + - supports-color + + unplugin-vue-router@0.10.9(rollup@4.30.1)(vue-router@4.5.0(vue@3.5.13(typescript@5.7.2)))(vue@3.5.13(typescript@5.7.2)): + dependencies: + '@babel/types': 7.26.3 + '@rollup/pluginutils': 5.1.4(rollup@4.30.1) + '@vue-macros/common': 1.15.1(rollup@4.30.1)(vue@3.5.13(typescript@5.7.2)) + ast-walker-scope: 0.6.2 + chokidar: 3.6.0 + fast-glob: 3.3.3 + json5: 2.2.3 + local-pkg: 0.5.1 + magic-string: 0.30.17 + mlly: 1.7.3 + pathe: 1.1.2 + scule: 1.3.0 + unplugin: 2.0.0-beta.1 + yaml: 2.7.0 + optionalDependencies: + vue-router: 4.5.0(vue@3.5.13(typescript@5.7.2)) + transitivePeerDependencies: + - rollup + - vue + + unplugin@1.16.0: + dependencies: + acorn: 8.14.0 + webpack-virtual-modules: 0.6.2 + + unplugin@2.0.0-beta.1: + dependencies: + acorn: 8.14.0 + webpack-virtual-modules: 0.6.2 + + unplugin@2.1.2: + dependencies: + acorn: 8.14.0 + webpack-virtual-modules: 0.6.2 + + untildify@4.0.0: {} + + untyped@1.5.2: + dependencies: + '@babel/core': 7.26.0 + '@babel/standalone': 7.26.4 + '@babel/types': 7.26.3 + citty: 0.1.6 + defu: 6.1.4 + jiti: 2.4.2 + knitwork: 1.2.0 + scule: 1.3.0 + transitivePeerDependencies: + - supports-color + optional: true + + upath@2.0.1: {} + + update-browserslist-db@1.1.1(browserslist@4.24.3): + dependencies: + browserslist: 4.24.3 + escalade: 3.2.0 + picocolors: 1.1.1 + + update-notifier@7.3.1: + dependencies: + boxen: 8.0.1 + chalk: 5.4.1 + configstore: 7.0.0 + is-in-ci: 1.0.0 + is-installed-globally: 1.0.0 + is-npm: 6.0.0 + latest-version: 9.0.0 + pupa: 3.1.0 + semver: 7.6.3 + xdg-basedir: 5.1.0 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + util-deprecate@1.0.2: {} + + uuid@8.3.2: {} + + v8-compile-cache-lib@3.0.1: + optional: true + + vite-hot-client@0.2.4(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)): + dependencies: + vite: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + + vite-plugin-html@3.2.2(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)): + dependencies: + '@rollup/pluginutils': 4.2.1 + colorette: 2.0.20 + connect-history-api-fallback: 1.6.0 + consola: 2.15.3 + dotenv: 16.4.7 + dotenv-expand: 8.0.3 + ejs: 3.1.10 + fast-glob: 3.3.3 + fs-extra: 10.1.0 + html-minifier-terser: 6.1.0 + node-html-parser: 5.4.2 + pathe: 0.2.0 + vite: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + + vite-plugin-inspect@0.8.9(@nuxt/kit@3.13.0(rollup@4.30.1))(rollup@4.30.1)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)): + dependencies: + '@antfu/utils': 0.7.10 + '@rollup/pluginutils': 5.1.4(rollup@4.30.1) + debug: 4.4.0 + error-stack-parser-es: 0.1.5 + fs-extra: 11.2.0 + open: 10.1.0 + perfect-debounce: 1.0.0 + picocolors: 1.1.1 + sirv: 3.0.0 + vite: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + optionalDependencies: + '@nuxt/kit': 3.13.0(rollup@4.30.1) + transitivePeerDependencies: + - rollup + - supports-color + + vite-plugin-vue-devtools@7.7.0(@nuxt/kit@3.13.0(rollup@4.30.1))(rollup@4.30.1)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)): + dependencies: + '@vue/devtools-core': 7.7.0(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)) + '@vue/devtools-kit': 7.7.0 + '@vue/devtools-shared': 7.7.0 + execa: 9.5.2 + sirv: 3.0.0 + vite: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + vite-plugin-inspect: 0.8.9(@nuxt/kit@3.13.0(rollup@4.30.1))(rollup@4.30.1)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + vite-plugin-vue-inspector: 5.3.1(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + transitivePeerDependencies: + - '@nuxt/kit' + - rollup + - supports-color + - vue + + vite-plugin-vue-inspector@5.3.1(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)): + dependencies: + '@babel/core': 7.26.0 + '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.0) + '@babel/plugin-transform-typescript': 7.26.3(@babel/core@7.26.0) + '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.26.0) + '@vue/compiler-dom': 3.5.13 + kolorist: 1.8.0 + magic-string: 0.30.17 + vite: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + transitivePeerDependencies: + - supports-color + + vite-plugin-zip-pack@1.2.4(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)): + dependencies: + jszip: 3.10.1 + vite: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + + vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0): + dependencies: + esbuild: 0.24.2 + postcss: 8.4.49 + rollup: 4.30.1 + optionalDependencies: + '@types/node': 22.10.5 + fsevents: 2.3.3 + jiti: 2.4.2 + sass: 1.83.1 + terser: 5.37.0 + tsx: 4.19.2 + yaml: 2.7.0 + + vscode-uri@3.0.8: {} + + vue-demi@0.14.10(vue@3.5.13(typescript@5.7.2)): + dependencies: + vue: 3.5.13(typescript@5.7.2) + + vue-eslint-parser@9.4.3(eslint@9.17.0(jiti@2.4.2)): + dependencies: + debug: 4.4.0 + eslint: 9.17.0(jiti@2.4.2) + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.6.0 + lodash: 4.17.21 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + + vue-i18n@11.0.1(vue@3.5.13(typescript@5.7.2)): + dependencies: + '@intlify/core-base': 11.0.1 + '@intlify/shared': 11.0.1 + '@vue/devtools-api': 6.6.4 + vue: 3.5.13(typescript@5.7.2) + + vue-router@4.5.0(vue@3.5.13(typescript@5.7.2)): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.13(typescript@5.7.2) + + vue-template-compiler@2.7.14: + dependencies: + de-indent: 1.0.2 + he: 1.2.0 + optional: true + + vue-tsc@2.2.0(typescript@5.7.2): + dependencies: + '@volar/typescript': 2.4.11 + '@vue/language-core': 2.2.0(typescript@5.7.2) + typescript: 5.7.2 + + vue@3.5.13(typescript@5.7.2): + dependencies: + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-sfc': 3.5.13 + '@vue/runtime-dom': 3.5.13 + '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.7.2)) + '@vue/shared': 3.5.13 + optionalDependencies: + typescript: 5.7.2 + + vuefire@3.2.1(consola@3.3.3)(firebase@10.14.0)(vue@3.5.13(typescript@5.7.2)): + dependencies: + vue: 3.5.13(typescript@5.7.2) + vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.2)) + optionalDependencies: + consola: 3.3.3 + firebase: 10.14.0 + + wasm-feature-detect@1.8.0: {} + + watchpack@2.4.2: + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + + web-ext@8.3.0: + dependencies: + '@babel/runtime': 7.25.6 + '@devicefarmer/adbkit': 3.2.6 + addons-linter: 7.1.0 + camelcase: 8.0.0 + chrome-launcher: 1.1.2 + debounce: 1.2.1 + decamelize: 6.0.0 + es6-error: 4.1.1 + firefox-profile: 4.7.0 + fx-runner: 1.4.0 + https-proxy-agent: 7.0.6 + jose: 5.9.2 + jszip: 3.10.1 + multimatch: 6.0.0 + node-notifier: 10.0.1 + open: 9.1.0 + parse-json: 7.1.1 + pino: 9.4.0 + promise-toolbox: 0.21.0 + source-map-support: 0.5.21 + strip-bom: 5.0.0 + strip-json-comments: 5.0.1 + tmp: 0.2.3 + update-notifier: 7.3.1 + watchpack: 2.4.2 + ws: 8.18.0 + yargs: 17.7.2 + zip-dir: 2.0.0 + transitivePeerDependencies: + - body-parser + - bufferutil + - express + - node-fetch + - safe-compare + - supports-color + - utf-8-validate + + web-streams-polyfill@3.3.3: {} + + web-streams-polyfill@4.0.0-beta.3: {} + + webext-bridge@6.0.1: + dependencies: + '@types/webextension-polyfill': 0.8.3 + nanoevents: 6.0.2 + serialize-error: 9.1.1 + tiny-uid: 1.1.2 + webextension-polyfill: 0.9.0 + + webextension-polyfill@0.12.0: {} + + webextension-polyfill@0.9.0: {} + + webidl-conversions@3.0.1: {} + + webpack-virtual-modules@0.6.2: {} + + websocket-driver@0.7.4: + dependencies: + http-parser-js: 0.5.8 + safe-buffer: 5.2.1 + websocket-extensions: 0.1.4 + optional: true + + websocket-extensions@0.1.4: + optional: true + + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + + whatwg-mimetype@4.0.0: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + when-exit@2.1.3: {} + + when@3.7.7: {} + + which@1.2.4: + dependencies: + is-absolute: 0.1.7 + isexe: 1.1.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + widest-line@5.0.0: + dependencies: + string-width: 7.2.0 + + win-node-env@0.6.1: + optional: true + + winreg@0.0.12: {} + + word-wrap@1.2.5: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrap-ansi@9.0.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 7.2.0 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + ws@8.18.0: {} + + xdg-basedir@5.1.0: {} + + xml-name-validator@4.0.0: {} + + xml2js@0.6.2: + dependencies: + sax: 1.4.1 + xmlbuilder: 11.0.1 + + xmlbuilder@11.0.1: {} + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yallist@4.0.0: + optional: true + + yaml-eslint-parser@1.2.3: + dependencies: + eslint-visitor-keys: 3.4.3 + lodash: 4.17.21 + yaml: 2.7.0 + + yaml@2.7.0: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + + yn@3.1.1: + optional: true + + yocto-queue@0.1.0: {} + + yoctocolors@2.1.1: {} + + zip-dir@2.0.0: + dependencies: + async: 3.2.6 + jszip: 3.10.1 diff --git a/postcss.config.cjs b/postcss.config.cjs new file mode 100644 index 00000000..1b69d43b --- /dev/null +++ b/postcss.config.cjs @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/public/.gitkeep b/public/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/refreshXPI.js b/refreshXPI.js deleted file mode 100644 index 37442eaa..00000000 --- a/refreshXPI.js +++ /dev/null @@ -1,14 +0,0 @@ -/* global require */ -const fs = require("fs"); -const path = require("path"); - -// copy zip form web-ext-artifacts to home folder as a xpi file -const source = path.join("firefox", "web-ext-artifacts"); -const target = ""; -const files = fs.readdirSync(source); -// pick last file -const file = files[files.length - 1]; -console.log(file); -if (file.endsWith(".zip")) { - fs.copyFileSync(path.join(source, file), path.join(target, "NetflixPrime@Autoskip.io.xpi")); -} diff --git a/scripts/copyDocsFtoC.ts b/scripts/copyDocsFtoC.ts new file mode 100644 index 00000000..63d87a2d --- /dev/null +++ b/scripts/copyDocsFtoC.ts @@ -0,0 +1,33 @@ +import fs from "fs" +import path from "path" + +// Copy markdown translation files +// copy zip form web-ext-artifacts to home folder as a xpi file +const storeDescriptionsPath = path.join("docs", "storeDescriptions") +const ChromeStoreDescriptionsPath = path.join("docs", "ChromeStoreDescriptions") +const storeDescriptions = fs.readdirSync(storeDescriptionsPath) +const replacesForDescription = [ + [/.*ul>\r?\n/g, ""], + ["
  • ", " • "], + // only /li in line + [/\n<\/li>\r?\n/g, ""], + ["
  • ", ""], + // change link to markdown + [/(.*)<\/a>/g, "[$2]($1)"], + [/(.*)<\/a>/g, "[$2]($1)"], +] +// pick last file +storeDescriptions.forEach((file) => { + console.log(ChromeStoreDescriptionsPath + "\\" + file) + fs.readFile(path.join(storeDescriptionsPath, file), "utf8", function (err, data) { + if (err) return console.log(err) + for (const replace of replacesForDescription) { + data = data.replaceAll(replace[0], replace[1] as string) + } + fs.writeFile(path.join(ChromeStoreDescriptionsPath, file), data, "utf8", function (err) { + if (err) return console.log(err) + }) + }) +}) + +console.log("\n") diff --git a/scripts/deepl.ts b/scripts/deepl.ts new file mode 100644 index 00000000..82caa1a4 --- /dev/null +++ b/scripts/deepl.ts @@ -0,0 +1,56 @@ +#!/usr/bin/env node +import { config } from "dotenv" +import { exec } from "child_process" +import fs from "fs" +import path from "path" + +config() +if (process.argv.length === 2) { + exec( + "jsontt .translation/deepl.EN.json -m deepl -n deepl -fb yes -cl 3 -f EN -t DE ES FR IT JA KO PL PT SV TR ZH", + (error, stdout, stderr) => { + if (error) { + console.error(`Error: ${error.message}`) + return + } + if (stderr) { + console.error(`Stderr: ${stderr}`) + return + } + console.log(`Output: ${stdout}`) + }, + ) +} + +if (process.argv.length === 3) { + console.log("Update the language files") + // read the deepl.Lang.json files and copy the new keys into the language files in the folder firefox _locales + + const localesPath = "src\\locales" + + // Step 1: Read the deepl.Lang.json file + const deepLang = ["DE", "EN", "ES", "FR", "IT", "JA", "KO", "PL", "PT", "PT", "SV", "TR", "ZH"] + // const locales = fs.readdirSync(localesPath); + const firefoxLocales = ["de", "en", "es", "fr", "it", "ja", "ko", "pl", "pt", "pt_BR", "sv", "tr", "zh_CN"] + deepLang.forEach((trans, index) => { + fs.readFile(path.join(".translation\\", "deepl." + trans + ".json"), "utf8", function (err, newKeys) { + console.log("lang:", trans) + if (err) return console.log(err) + + // Append the new keys to the language files + console.log(firefoxLocales[index]) + fs.readFile(localesPath + "\\" + firefoxLocales[index] + ".json", "utf8", function (err, oldKeys) { + if (err) return console.log(err) + const newTranslation = { ...JSON.parse(oldKeys), ...JSON.parse(newKeys) } + fs.writeFile( + localesPath + "\\" + firefoxLocales[index] + ".json", + JSON.stringify(newTranslation, null, 2), + "utf8", + function (err) { + if (err) return console.log(err) + }, + ) + }) + }) + }) +} diff --git a/scripts/getInstalledBrowsers.ts b/scripts/getInstalledBrowsers.ts new file mode 100644 index 00000000..79036cde --- /dev/null +++ b/scripts/getInstalledBrowsers.ts @@ -0,0 +1,318 @@ +/* eslint-disable no-empty */ +import { homedir } from "os" +import { resolve } from "path" +import { existsSync } from "fs" +import { execSync } from "child_process" + +export interface BrowserPaths { + name: string + type: "chrome" | "firefox" | "safari" | "other" + path: Record +} + +export interface BrowserPath { + name: string + type: "chrome" | "firefox" | "safari" | "other" + path: string +} + +interface BrowserInfo { + name: string + type: string + command: string +} + +type BinaryType = "flatpak" | "snap" | "native" + +const getWinPaths = (subdir: string) => { + const sysDrive = process.env["SystemDrive"] || "C:" + const programFiles = process.env["ProgramFiles"] || resolve(sysDrive, "Program Files") + const programFilesX86 = process.env["ProgramFiles(x86)"] || resolve(sysDrive, "Program Files (x86)") + const localAppData = process.env["LocalAppData"] || resolve(homedir(), "AppData\\Local") + const appData = process.env["AppData"] || resolve(homedir(), "AppData\\Roaming") + const knownPaths = [ + resolve(localAppData, subdir), + resolve(appData, subdir), + resolve(programFiles, subdir), + resolve(programFilesX86, subdir), + ] + return knownPaths +} + +const getDarwinPaths = (subdir: string) => { + const home = homedir() + const knownPaths = [resolve(home, "Applications", subdir), resolve("/Applications", subdir)] + return knownPaths +} + +const getLinuxPaths = (subdir: string) => { + return [ + `/usr/bin/${subdir}`, + `/usr/local/bin/${subdir}`, + `/snap/bin/${subdir}`, + `/var/lib/flatpak/exports/bin/${subdir}`, + resolve(homedir(), `.local/share/flatpak/exports/bin/${subdir}`), + ] +} + +const checkBinaryType = (path: string): BinaryType => { + const platform = process.platform + + if (existsSync(path)) return "native" + + if (platform === "linux") { + try { + const flatpakResult = execSync(`flatpak list --app | grep ${path}`).toString().trim() + + if (flatpakResult) return "flatpak" + } catch {} + + try { + const snapResult = execSync(`snap list | grep ${path}`).toString().trim() + + if (snapResult) return "snap" + } catch {} + } + + return "native" +} + +function getCommand(name: string, type: string, path: string) { + const binaryType = checkBinaryType(path) + + switch (binaryType) { + case "flatpak": + return `flatpak run ${path} --no-input --browser-console --devtools` + + case "snap": + return `snap run ${path} --no-input --browser-console --devtools` + + case "native": + if (type === "chrome") { + return `web-ext run --target chromium --chromium-binary ${path} --source-dir dist/chrome --no-input --browser-console --devtools` + } + if (type === "firefox") { + return `web-ext run --firefox=${path} --source-dir dist/firefox --no-input --browser-console --devtools` + } + break + + default: + break + } +} + +export function GetInstalledBrowsers(): { [name: string]: BrowserInfo } { + const platform = process.platform + const installedBrowsers: { [name: string]: BrowserInfo } = {} + + for (const browser of Browsers) { + if (!browser.path[platform]) continue + + for (const path of browser.path[platform]) { + const command = getCommand(browser.name, browser.type, path) + + if (!command) { + continue + } + + installedBrowsers[browser.name] = { + name: browser.name, + type: browser.type, + command, + } + } + } + return installedBrowsers +} + +const emptyPlatform = { + aix: [], + android: [], + cygwin: [], + darwin: [], + freebsd: [], + haiku: [], + linux: [], + netbsd: [], + openbsd: [], + sunos: [], + win32: [], +} +export const Browsers: BrowserPaths[] = [ + { + name: "Arc", + type: "chrome", + path: { + ...emptyPlatform, + darwin: getDarwinPaths("Arc.app/Contents/MacOS/Arc"), + }, + }, + { + name: "Brave", + type: "chrome", + path: { + ...emptyPlatform, + win32: getWinPaths("BraveSoftware\\Brave-Browser\\Application\\brave.exe"), + darwin: getDarwinPaths("Brave Browser.app/Contents/MacOS/Brave Browser"), + linux: [...getLinuxPaths("brave-browser"), ...getLinuxPaths("com.brave.Browser")], + }, + }, + { + name: "Chrome", + type: "chrome", + path: { + ...emptyPlatform, + win32: getWinPaths("Google\\Chrome\\Application\\chrome.exe"), + darwin: getDarwinPaths("Google Chrome.app/Contents/MacOS/Google Chrome"), + linux: [...getLinuxPaths("google-chrome"), ...getLinuxPaths("google-chrome-stable")], + }, + }, + { + name: "Chrome Beta", + type: "chrome", + path: { + ...emptyPlatform, + win32: getWinPaths("Google\\Chrome Beta\\Application\\chrome.exe"), + darwin: getDarwinPaths("Google Chrome Beta.app/Contents/MacOS/Google Chrome Beta"), + linux: [...getLinuxPaths("google-chrome-beta")], + }, + }, + { + name: "Chrome Canary", + type: "chrome", + path: { + ...emptyPlatform, + win32: getWinPaths("Google\\Chrome Canary\\Application\\chrome.exe"), + darwin: getDarwinPaths("Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary"), + linux: [...getLinuxPaths("google-chrome-canary")], + }, + }, + { + name: "Chromium", + type: "chrome", + path: { + ...emptyPlatform, + win32: getWinPaths("Chromium\\Application\\chrome.exe"), + darwin: getDarwinPaths("Chromium.app/Contents/MacOS/Chromium"), + linux: [...getLinuxPaths("chromium"), ...getLinuxPaths("org.chromium.Chromium")], + }, + }, + { + name: "Edge", + type: "chrome", + path: { + ...emptyPlatform, + win32: getWinPaths("Microsoft\\Edge\\Application\\msedge.exe"), + darwin: getDarwinPaths("Microsoft Edge.app/Contents/MacOS/Microsoft Edge"), + linux: [...getLinuxPaths("microsoft-edge"), ...getLinuxPaths("com.microsoft.Edge")], + }, + }, + { + name: "Sidekick", + type: "chrome", + path: { + ...emptyPlatform, + win32: getWinPaths("Sidekick\\Application\\sidekick.exe"), + darwin: getDarwinPaths("Sidekick.app/Contents/MacOS/Sidekick"), + linux: [...getLinuxPaths("sidekick-browser-stable")], + }, + }, + { + name: "Vivaldi", + type: "chrome", + path: { + ...emptyPlatform, + win32: getWinPaths("Vivaldi\\Application\\vivaldi.exe"), + darwin: getDarwinPaths("Vivaldi.app/Contents/MacOS/Vivaldi"), + linux: [...getLinuxPaths("vivaldi-stable"), ...getLinuxPaths("com.vivaldi.Vivaldi")], + }, + }, + { + name: "Firefox", + type: "firefox", + path: { + ...emptyPlatform, + win32: getWinPaths("Mozilla Firefox\\firefox.exe"), + darwin: getDarwinPaths("Firefox.app/Contents/MacOS/Firefox"), + linux: [...getLinuxPaths("firefox"), ...getLinuxPaths("org.mozilla.firefox")], + }, + }, + { + name: "Firefox Nightly", + type: "firefox", + path: { + ...emptyPlatform, + win32: getWinPaths("Firefox Nightly\\firefox.exe"), + darwin: getDarwinPaths("Firefox Nightly.app/Contents/MacOS/Firefox"), + linux: [...getLinuxPaths("firefox-nightly"), ...getLinuxPaths("org.mozilla.firefox-nightly")], + }, + }, + { + name: "Firefox Developer Edition", + type: "firefox", + path: { + ...emptyPlatform, + win32: getWinPaths("Firefox Developer Edition\\firefox.exe"), + darwin: getDarwinPaths("Firefox Developer Edition.app/Contents/MacOS/Firefox"), + linux: [...getLinuxPaths("firefox-dev"), ...getLinuxPaths("org.mozilla.firefox.dev")], + }, + }, + { + name: "Safari", + type: "safari", + path: { + ...emptyPlatform, + darwin: getDarwinPaths("Safari.app/Contents/MacOS/Safari"), + }, + }, + { + name: "Safari Technical Preview", + type: "safari", + path: { + ...emptyPlatform, + darwin: getDarwinPaths("Safari Technical Preview.app/Contents/MacOS/Safari Technical Preview"), + }, + }, + { + name: "Safari beta", + type: "safari", + path: { + ...emptyPlatform, + darwin: getDarwinPaths("Safari beta.app/Contents/MacOS/Safari beta"), + }, + }, + { + name: "Orion", + type: "safari", + path: { + ...emptyPlatform, + darwin: getDarwinPaths("Orion.app/Contents/MacOS/Orion"), + }, + }, + { + name: "Epiphany", + type: "safari", + path: { + ...emptyPlatform, + linux: ["epiphany-browser", "org.gnome.Epiphany"], + }, + }, + { + name: "Opera", + type: "chrome", + path: { + ...emptyPlatform, + win32: getWinPaths("Opera\\opera.exe"), + darwin: getDarwinPaths("Opera.app/Contents/MacOS/Opera"), + linux: [...getLinuxPaths("opera"), ...getLinuxPaths("opera-stable")], + }, + }, + { + name: "IE", + type: "other", + path: { + ...emptyPlatform, + win32: getWinPaths("Internet Explorer\\iexplore.exe"), + }, + }, +] diff --git a/scripts/hourstxtToJSON.ts b/scripts/hourstxtToJSON.ts new file mode 100644 index 00000000..09763418 --- /dev/null +++ b/scripts/hourstxtToJSON.ts @@ -0,0 +1,14 @@ +/* global require */ +/* global process */ +// requires https://github.com/lazypic/git-hours to be installed globally +import fs from "fs" +import path from "path" +// open AuthorHours.txt and write time into JSON file + +const authorHoursFilePath = "authorHours.json" +const hours = fs.readFileSync(authorHoursFilePath, "utf8") +const json = { time: hours.split("\n")[0].split(": ")[1] } + +fs.writeFile(authorHoursFilePath, JSON.stringify(json), "utf8", function (err) { + if (err) return console.log(err) +}) diff --git a/scripts/launch.ts b/scripts/launch.ts new file mode 100644 index 00000000..690be6e7 --- /dev/null +++ b/scripts/launch.ts @@ -0,0 +1,113 @@ +import { exec } from "node:child_process" +import { GetInstalledBrowsers } from "./getInstalledBrowsers" +import concurrently, { type ConcurrentlyCommandInput } from "concurrently" +import { program } from "commander" + +program + .option("-a, --all", "Launch All Supported Browsers", false) + .option("-c, --chrome", "Launch Chrome only", true) + .option("-f, --firefox", "Launch Firefox only", false) + .option("-e, --edge", "Launch Edge only", false) + .option("-v, --vite-chrome-config ", "Path to Vite Chrome config", "vite.chrome.config.ts") + .option("-x, --vite-firefox-config ", "Path to Vite Firefox config", "vite.firefox.config.ts") + +program.parse(process.argv) + +const options = program.opts<{ + all: boolean + chrome: boolean + firefox: boolean + edge: boolean + viteChromeConfig: string + viteFirefoxConfig: string +}>() + +async function runViteDev() { + return new Promise((resolve) => { + console.info("Starting Vite dev servers...") + + const viteChrome = exec(`vite dev --config ${options.viteChromeConfig}`) + const viteFirefox = exec(`vite dev --config ${options.viteFirefoxConfig}`) + + viteChrome.stdout?.pipe(process.stdout) + viteChrome.stderr?.pipe(process.stderr) + + viteFirefox.stdout?.pipe(process.stdout) + viteFirefox.stderr?.pipe(process.stderr) + + viteChrome.on("exit", (code) => { + console.info(`Vite Chrome process exited with code ${code}`) + }) + + viteFirefox.on("exit", (code) => { + console.info(`Vite Firefox process exited with code ${code}`) + }) + + setTimeout(() => { + resolve() + }, 1000) + }) +} + +async function launchBrowsers() { + console.info("Detecting installed browsers...") + + const installedBrowsers = GetInstalledBrowsers() + const commands: Array = [] + + if (options.chrome || options.all) { + if (installedBrowsers.Chrome) { + commands.push({ + command: installedBrowsers.Chrome.command, + name: installedBrowsers.Chrome.name, + }) + } else { + console.error("Chrome is not installed.") + } + } + + if (options.firefox || options.all) { + if (installedBrowsers.Firefox) { + commands.push({ + command: installedBrowsers.Firefox.command, + name: installedBrowsers.Firefox.name, + }) + } else { + console.error("Firefox is not installed.") + } + } + + if (options.edge || options.all) { + if (installedBrowsers.Edge) { + commands.push({ + command: installedBrowsers.Edge.command, + name: installedBrowsers.Edge.name, + }) + } else { + console.error("Edge is not installed.") + } + } + + if (commands.length > 0) { + console.info("Launching browsers...") + + concurrently(commands, { + killOthers: ["failure", "success"], + restartTries: 1, + }) + } else { + console.error("No compatible browsers found or selected.") + } +} + +process.on("SIGINT", () => { + console.info("Received SIGINT. Shutting down...") + process.exit() +}) + +process.on("SIGTERM", () => { + console.info("Received SIGTERM. Shutting down...") + process.exit() +}) + +runViteDev().then(launchBrowsers) diff --git a/chrome/icons/NetflixAmazon Auto-Skip--128.png b/src/assets/Logo/NetflixAmazon Auto-Skip--128.png similarity index 100% rename from chrome/icons/NetflixAmazon Auto-Skip--128.png rename to src/assets/Logo/NetflixAmazon Auto-Skip--128.png diff --git a/chrome/icons/NetflixAmazon Auto-Skip--16.png b/src/assets/Logo/NetflixAmazon Auto-Skip--16.png similarity index 100% rename from chrome/icons/NetflixAmazon Auto-Skip--16.png rename to src/assets/Logo/NetflixAmazon Auto-Skip--16.png diff --git a/chrome/icons/NetflixAmazon Auto-Skip--400.png b/src/assets/Logo/NetflixAmazon Auto-Skip--400.png similarity index 100% rename from chrome/icons/NetflixAmazon Auto-Skip--400.png rename to src/assets/Logo/NetflixAmazon Auto-Skip--400.png diff --git a/chrome/icons/NetflixAmazon Auto-Skip--48.png b/src/assets/Logo/NetflixAmazon Auto-Skip--48.png similarity index 100% rename from chrome/icons/NetflixAmazon Auto-Skip--48.png rename to src/assets/Logo/NetflixAmazon Auto-Skip--48.png diff --git a/chrome/icons/NetflixAmazon Auto-Skip--96.png b/src/assets/Logo/NetflixAmazon Auto-Skip--96.png similarity index 100% rename from chrome/icons/NetflixAmazon Auto-Skip--96.png rename to src/assets/Logo/NetflixAmazon Auto-Skip--96.png diff --git a/chrome/icons/NetflixAmazon Auto-Skip.svg b/src/assets/Logo/NetflixAmazon Auto-Skip.svg similarity index 100% rename from chrome/icons/NetflixAmazon Auto-Skip.svg rename to src/assets/Logo/NetflixAmazon Auto-Skip.svg diff --git a/src/assets/TMDB.svg b/src/assets/TMDB.svg new file mode 100644 index 00000000..562d7b61 --- /dev/null +++ b/src/assets/TMDB.svg @@ -0,0 +1,21 @@ + + + + + + + + + + Asset 5 + + + + + + \ No newline at end of file diff --git a/src/assets/base.scss b/src/assets/base.scss new file mode 100644 index 00000000..a8f89160 --- /dev/null +++ b/src/assets/base.scss @@ -0,0 +1,48 @@ +// required for vue-devtools +// @use "/node_modules/vite-plugin-vue-devtools/src/overlay/devtools-overlay.css"; +@use "tailwindcss/base"; +@use "tailwindcss/components"; +@use "tailwindcss/utilities"; + +.description { + @apply text-base p-[10px_80px_20px_20px]; +} + +h1, +h2, +h3, +p { + @apply m-0 text-primary-content; +} + +hr { + @apply my-1; +} +h1 { + @apply text-2xl font-bold; +} +h2 { + @apply text-xl font-semibold; +} +h3 { + @apply text-lg; +} + +.btn { + @apply text-xl h-9 leading-9; +} + +p { + @apply text-2xl; +} + +/* WebKit and Chromiums */ +::-webkit-scrollbar { + width: 8px; + height: 8px; + background-color: #212121; +} +::-webkit-scrollbar-thumb { + background: grey; + border-radius: 5px; +} diff --git a/src/assets/logo.png b/src/assets/logo.png new file mode 100644 index 00000000..68663d24 Binary files /dev/null and b/src/assets/logo.png differ diff --git a/src/background/index.ts b/src/background/index.ts new file mode 100644 index 00000000..39acf203 --- /dev/null +++ b/src/background/index.ts @@ -0,0 +1,151 @@ +// Sample code if using extensionpay.com +// import { extPay } from '@/utils/payment/extPay' +// extPay.startBackground() +const is_DEV = process.env.NODE_ENV === "development" + +chrome.runtime.onInstalled.addListener(async (opt) => { + // await chrome.storage.sync.clear() + // Check if reason is install or update. Eg: opt.reason === 'install' // If extension is installed. + if (opt.reason === "install") { + // await chrome.storage.local.clear() + chrome.tabs.create({ + active: true, + // Open the setup page and append `?type=install` to the URL so frontend + // can know if we need to show the install page or update page. + url: chrome.runtime.getURL("src/ui/options-page/index.html#/options-page/install"), + }) + } + + if (opt.reason === "update" && is_DEV) { + chrome.tabs.create({ + active: true, + // url: chrome.runtime.getURL("src/ui/options-page/index.html#/options-page"), + url: chrome.runtime.getURL("src/ui/options-page/index.html#/options-page/install"), + }) + } +}) + +self.onerror = function (message, source, lineno, colno, error) { + console.info("Error: " + message) + console.info("Source: " + source) + console.info("Line: " + lineno) + console.info("Column: " + colno) + console.info("Error object: " + error) +} + +import { onMessage } from "webext-bridge/background" +console.log("background loaded") + +const Badges: { [key: string]: string | number } = {} +const isMobile = /Android/i.test(navigator.userAgent) +const isFirefox = !!browser?.webRequest +// Increases Badge by 1 +async function increaseBadge(tabId: number) { + if (Badges?.[tabId] === undefined || typeof Badges[tabId] !== "number") { + Badges[tabId] = 0 + } + Badges[tabId]++ + if (isFirefox) browser.browserAction.setBadgeText({ text: Badges[tabId].toString(), tabId }) + else chrome.action.setBadgeText({ text: Badges[tabId].toString(), tabId }) +} +// Set Badge to a specific value +async function setBadgeText(text: string, tabId: number) { + Badges[tabId] = text + if (isFirefox) browser.browserAction.setBadgeText({ text, tabId }) + else chrome.action.setBadgeText({ text, tabId }) +} + +// onMessage +onMessage("updateUrl", async (message: { sender: any; data: { url: string } }) => { + const { sender, data } = message + if (sender?.tabId) { + console.log("updateUrl") + chrome.tabs.update(sender.tabId, { url: data.url }) + } +}) +onMessage("fetch", async (message: { data: { url: string } }) => { + const { data } = message + try { + const response = await fetch(data.url, { + method: "GET", + headers: { + accept: "application/json", + Authorization: + "Bearer eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiI5OWQyMWUxMmYzNjU1MjM4NzdhNTAwODVhMmVjYThiZiIsInN1YiI6IjY1M2E3Mjg3MjgxMWExMDBlYTA4NjI5OCIsInNjb3BlcyI6WyJhcGlfcmVhZCJdLCJ2ZXJzaW9uIjoxfQ.x_EaVXQkg1_plk0NVSBnoNUl4QlGytdeO613nXIsP3w", + }, + }) + const responseData = await response.json() + return responseData + } catch (error) { + console.error(error) + return { error: (error as Error).message } + } +}) +// allowWindowMessaging is security risk thats why we are not using it and using chrome.message instead +// receive message from content script with the badgeText and set it in the badge +chrome.runtime.onMessage.addListener(function (message: { type: string }, sender: any, sendResponse: () => void) { + if (message.type === "fullscreen") { + console.log("fullscreen") + if (sender?.tab?.windowId) chrome.windows.update(sender.tab.windowId, { state: "fullscreen" }) + } else if (message.type === "exitFullscreen") { + console.log("exitFullscreen") + if (sender?.tab?.windowId) chrome.windows.update(sender.tab.windowId, { state: "normal" }) + } + return false +}) +onMessage("setBadgeText", async (message: { sender: any; data: { text: string } }) => { + const { sender, data } = message + if (sender?.tabId) setBadgeText(data.text, sender.tabId) +}) +onMessage("increaseBadge", async (message: { sender: any }) => { + const { sender } = message + if (sender?.tabId) increaseBadge(sender.tabId) +}) +onMessage("resetBadge", async (message: { sender: any }) => { + const { sender } = message + if (sender?.tabId) { + if (Badges[sender.tabId]) delete Badges[sender.tabId] + if (isFirefox) browser.browserAction.setBadgeText({ text: "", tabId: sender.tabId }) + else chrome.action.setBadgeText({ text: "", tabId: sender.tabId }) + } +}) +if (isFirefox && isMobile) { + // mobile section + const { data: settings, promise } = useBrowserSyncStorage("settings", defaultSettings) + ChangeUserAgent() + + const newUa = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0 streamingEnhanced" + function ReplaceUserAgent(details: any) { + if (settings.value.Video.userAgent) { + for (const header of details.requestHeaders) { + if (header.name === "User-Agent") { + header.value = newUa + break + } + } + } + return { requestHeaders: details.requestHeaders } + } + + async function ChangeUserAgent() { + await promise + browser.webRequest.onBeforeSendHeaders.addListener( + ReplaceUserAgent, + { + urls: [ + "*://*.disneyplus.com/*", + "*://*.starplus.com/*", + "*://*.max.com/*", + "*://*.hbomax.com/*", + // these are only the prime video urls + "*://*.primevideo.com/*", + "*://*.amazon.com/gp/video/*", + "*://*.amazon.co.jp/gp/video/*", + "*://*.amazon.de/gp/video/*", + "*://*.amazon.co.uk/gp/video/*", + ], + }, + ["blocking", "requestHeaders"], + ) + } +} diff --git a/src/components/AppHeader.vue b/src/components/AppHeader.vue new file mode 100644 index 00000000..9b0461f4 --- /dev/null +++ b/src/components/AppHeader.vue @@ -0,0 +1,101 @@ + + + + + diff --git a/src/components/LocaleSwitch.vue b/src/components/LocaleSwitch.vue new file mode 100644 index 00000000..968a3502 --- /dev/null +++ b/src/components/LocaleSwitch.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/components/OpenSettingsButton.vue b/src/components/OpenSettingsButton.vue new file mode 100644 index 00000000..59115ba9 --- /dev/null +++ b/src/components/OpenSettingsButton.vue @@ -0,0 +1,15 @@ + + diff --git a/src/components/OptionalPermission.vue b/src/components/OptionalPermission.vue new file mode 100644 index 00000000..a161d754 --- /dev/null +++ b/src/components/OptionalPermission.vue @@ -0,0 +1,48 @@ + + diff --git a/src/components/RouterLinkUp.vue b/src/components/RouterLinkUp.vue new file mode 100644 index 00000000..2fd42c67 --- /dev/null +++ b/src/components/RouterLinkUp.vue @@ -0,0 +1,24 @@ + + + + + diff --git a/src/components/Switch.vue b/src/components/Switch.vue new file mode 100644 index 00000000..9b13c6c5 --- /dev/null +++ b/src/components/Switch.vue @@ -0,0 +1,80 @@ + + + + + diff --git a/src/components/ThemeSwitch.vue b/src/components/ThemeSwitch.vue new file mode 100644 index 00000000..3ebe4c25 --- /dev/null +++ b/src/components/ThemeSwitch.vue @@ -0,0 +1,17 @@ + + + diff --git a/src/components/options-page/SettingsTable.vue b/src/components/options-page/SettingsTable.vue new file mode 100644 index 00000000..0f322932 --- /dev/null +++ b/src/components/options-page/SettingsTable.vue @@ -0,0 +1,466 @@ + + + + + diff --git a/src/components/shared-pages/Amazon.vue b/src/components/shared-pages/Amazon.vue new file mode 100644 index 00000000..8976e9e1 --- /dev/null +++ b/src/components/shared-pages/Amazon.vue @@ -0,0 +1,44 @@ + + + diff --git a/src/components/shared-pages/Crunchyroll.vue b/src/components/shared-pages/Crunchyroll.vue new file mode 100644 index 00000000..65211fe9 --- /dev/null +++ b/src/components/shared-pages/Crunchyroll.vue @@ -0,0 +1,57 @@ + + + diff --git a/src/components/shared-pages/Disney.vue b/src/components/shared-pages/Disney.vue new file mode 100644 index 00000000..b974b7bf --- /dev/null +++ b/src/components/shared-pages/Disney.vue @@ -0,0 +1,32 @@ + + + diff --git a/src/components/shared-pages/Netflix.vue b/src/components/shared-pages/Netflix.vue new file mode 100644 index 00000000..8e1098a0 --- /dev/null +++ b/src/components/shared-pages/Netflix.vue @@ -0,0 +1,51 @@ + + + diff --git a/src/components/shared-pages/Statistics.vue b/src/components/shared-pages/Statistics.vue new file mode 100644 index 00000000..81ea60d1 --- /dev/null +++ b/src/components/shared-pages/Statistics.vue @@ -0,0 +1,93 @@ + + + diff --git a/src/components/state/DisplayError.vue b/src/components/state/DisplayError.vue new file mode 100644 index 00000000..c6a67ff3 --- /dev/null +++ b/src/components/state/DisplayError.vue @@ -0,0 +1,18 @@ + + + diff --git a/src/components/state/LoadingSpinner.vue b/src/components/state/LoadingSpinner.vue new file mode 100644 index 00000000..b18bea10 --- /dev/null +++ b/src/components/state/LoadingSpinner.vue @@ -0,0 +1,14 @@ + + + diff --git a/src/components/state/tailwind-empty-state.vue b/src/components/state/tailwind-empty-state.vue new file mode 100644 index 00000000..a58b2c58 --- /dev/null +++ b/src/components/state/tailwind-empty-state.vue @@ -0,0 +1,49 @@ + + + + + diff --git a/src/composables/useBrowserStorage.ts b/src/composables/useBrowserStorage.ts new file mode 100644 index 00000000..79948458 --- /dev/null +++ b/src/composables/useBrowserStorage.ts @@ -0,0 +1,90 @@ +import { ref, watch, nextTick } from "vue" +function mergeDeep(defaults: any, source: any): any { + // Merge the default options with the stored options + const output = { ...defaults } // Start with defaults + + Object.keys(defaults).forEach((key) => { + const defaultValue = defaults[key] + const sourceValue = source?.[key] + + if (isObject(defaultValue) && sourceValue != null) { + // Recursively merge nested objects + output[key] = mergeDeep(defaultValue, sourceValue) + } else if (checkType(defaultValue, sourceValue)) { + output[key] = sourceValue + } else { + // If the type is different, use the default value + output[key] = defaultValue + console.log("Type mismatch", key, sourceValue) + } + }) + + return output +} + +function checkType(defaultValue: any, value: any): boolean { + // Check if the value type is the same type as the default value or null + // there are only strings, booleans, nulls and arrays as types left + return (typeof value === typeof defaultValue && Array.isArray(value) == Array.isArray(defaultValue)) || value === null +} +function isObject(value: any): boolean { + return value !== null && value instanceof Object && !Array.isArray(value) +} + +export function useBrowserSyncStorage(key: string, defaultValue: T) { + return useBrowserStorage(key, defaultValue, "sync") +} + +export function useBrowserLocalStorage(key: string, defaultValue: T) { + return useBrowserStorage(key, defaultValue, "local") +} + +function useBrowserStorage(key: string, defaultValue: T, storageType: "sync" | "local" = "sync") { + const data = ref(defaultValue) + let isUpdatingFromStorage = true + const isObjectc = isObject(defaultValue) + // check if the data is ready to be used and not just the default value + if (isObjectc) data.value.$ready = false + // Initialize storage with the value from chrome.storage.local + const promise = new Promise((resolve) => { + chrome.storage[storageType].get(key, async (result) => { + if (result?.[key] !== undefined) { + if (isObjectc && isObject(result[key])) { + data.value = mergeDeep(defaultValue, result[key]) + } else if (checkType(defaultValue, result[key])) { + data.value = result[key] + } + } + if (isObjectc) data.value.$ready = true + await nextTick() + isUpdatingFromStorage = false + resolve(true) + }) + }) + + // Watch for changes in the storage and update chrome.storage.local + watch( + data, + (newValue) => { + if (!isUpdatingFromStorage) { + if (checkType(defaultValue, newValue)) { + chrome.storage[storageType].set({ [key]: toRaw(newValue) }) + } else { + console.error("not updating " + key + ": type mismatch") + } + } + }, + { deep: true, flush: "post" }, + ) + // Add the onChanged listener here + chrome.storage[storageType].onChanged.addListener(async function (changes) { + if (changes?.[key]) { + isUpdatingFromStorage = true + const { oldValue, newValue } = changes[key] + data.value = newValue + await nextTick() + isUpdatingFromStorage = false + } + }) + return { data, promise } +} diff --git a/src/composables/useLocale.ts b/src/composables/useLocale.ts new file mode 100644 index 00000000..5a111aae --- /dev/null +++ b/src/composables/useLocale.ts @@ -0,0 +1,21 @@ +import { watch } from "vue" +import { useBrowserLocalStorage } from "./useBrowserStorage" +import { i18n } from "@/utils/i18n" // Adjust the import path according to your project structure + +export function useLocale() { + const defaultLocale = "en" + const localeKey = "user-locale" + + // Use the useBrowserLocalStorage composable to persist the locale + const { data: currentLocale } = useBrowserLocalStorage(localeKey, defaultLocale) + + // Initialize the locale from i18n + // currentLocale.value = i18n.global.locale.value + + // Watch for changes in the locale and update i18n + watch(currentLocale, (newLocale) => { + i18n.global.locale.value = newLocale + }) + + return currentLocale +} diff --git a/src/composables/useTheme.ts b/src/composables/useTheme.ts new file mode 100644 index 00000000..b0a98af8 --- /dev/null +++ b/src/composables/useTheme.ts @@ -0,0 +1,23 @@ +import type { BasicColorSchema } from "@vueuse/core" +import { useBrowserLocalStorage } from "./useBrowserStorage" + +export function useTheme() { + const { data: colorSchema } = useBrowserLocalStorage("mode", "auto") + + const isDark = useDark({ + initialValue: colorSchema, + onChanged(isDark, defaultHandler, mode) { + // load initial value + colorSchema.value = mode + defaultHandler(mode) + document.body.setAttribute("data-theme", mode) + }, + }) + + const toggleDark = useToggle(isDark) + + return { + isDark, + toggleDark, + } +} diff --git a/src/content-script/amazon.ts b/src/content-script/amazon.ts new file mode 100644 index 00000000..356a7e73 --- /dev/null +++ b/src/content-script/amazon.ts @@ -0,0 +1,373 @@ +import { sendMessage, onMessage } from "webext-bridge/content-script" +import { startSharedFunctions, parseAdTime, createSlider, Platforms } from "@/content-script/shared-functions" +// Global Variables + +const { data: settings, promise } = useBrowserSyncStorage("settings", defaultSettings) +const ua = navigator.userAgent +const isMobile = /mobile|streamingEnhanced/i.test(ua) +let lastAdTimeText: number | string = 0 +const videoSpeed: Ref = ref(1) +const url = window.location.href +const hostname = window.location.hostname +const title = document.title +const isPrimeVideo = /amazon|primevideo/i.test(hostname) && (/video/i.test(title) || /video/i.test(url)) +const config = { attributes: true, childList: true, subtree: true } +async function logStartOfAddon() { + console.log("%cStreaming enhanced", "color: #00aeef;font-size: 2em;") + console.log("Settings", settings.value) +} +type StatisticsKey = + | "AmazonAdTimeSkipped" + | "NetflixAdTimeSkipped" + | "DisneyAdTimeSkipped" + | "IntroTimeSkipped" + | "RecapTimeSkipped" + | "SegmentsSkipped" +async function addSkippedTime(startTime: number, endTime: number, key: StatisticsKey) { + if (typeof startTime === "number" && typeof endTime === "number" && endTime > startTime) { + console.log(key, endTime - startTime) + settings.value.Statistics[key] += endTime - startTime + increaseBadge() + } +} + +if (isPrimeVideo) { + startSharedFunctions(Platforms.Amazon) + startAmazon() +} + +async function startAmazon() { + await promise + logStartOfAddon() + AmazonSkipIntroObserver.observe(document, AmazonSkipIntroConfig) + if (settings.value?.Video?.doubleClick) Amazon_doubleClick() + AmazonObserver.observe(document, config) + if (settings.value.Amazon?.selfAd) Amazon_selfAdTimeout() + if (settings.value.Amazon?.skipAd) { + // timeout of 100 ms because the ad is not loaded fast enough and the video will crash + setTimeout(function () { + Amazon_FreeveeTimeout() + }, 1000) + } + if (settings.value.Amazon?.continuePosition) setTimeout(() => Amazon_continuePosition(), 500) + if (settings.value.Video?.userAgent && isMobile) Amazon_customizeMobileView() +} + +// #region Amazon +// Amazon Observers +const AmazonVideoClass = ".dv-player-fullscreen video" +const AmazonObserver = new MutationObserver(Amazon) + +function Amazon() { + if (settings.value.Amazon?.filterPaid) Amazon_FilterPaid() + const video = document.querySelector(AmazonVideoClass) as HTMLVideoElement + if (settings.value.Amazon?.skipCredits) Amazon_Credits() + if (settings.value.Amazon?.watchCredits) Amazon_Watch_Credits() + if (settings.value.Amazon?.speedSlider) Amazon_SpeedSlider(video) + if (settings.value.Amazon?.xray) Amazon_xray() + if (settings.value.Video?.scrollVolume) Amazon_scrollVolume() +} +const AmazonSkipIntroConfig = { + attributes: true, + attributeFilter: [".skipelement"], + subtree: true, + childList: true, + attributeOldValue: false, +} +const AmazonSkipIntroObserver = new MutationObserver(Amazon_Intro) + +async function Amazon_scrollVolume() { + const volumeControl = document.querySelector('[aria-label="Volume"]:not(.enhanced)') as HTMLElement + if (volumeControl) { + volumeControl.classList.add("enhanced") + volumeControl?.addEventListener("wheel", (event: WheelEvent) => { + const video = document.querySelector(AmazonVideoClass) as HTMLVideoElement + if (!video) return + let volume = video.volume + if (event.deltaY < 0) volume = Math.min(1, volume + 0.1) + else volume = Math.max(0, volume - 0.1) + video.volume = volume + }) + } +} +let lastIntroTime = -1 +function resetLastIntroTime() { + setTimeout(() => { + lastIntroTime = -1 + }, 5000) +} +function Amazon_Intro() { + if (settings.value.Amazon?.skipIntro) { + // skips intro and recap + // recap on lucifer season 3 episode 3 + // intro lucifer season 3 episode 4 + const button = document.querySelector("[class*=skipelement]") as HTMLButtonElement + if (button) { + const video = document.querySelector(AmazonVideoClass) as HTMLVideoElement + const time = video?.currentTime ?? 0 + if (typeof time === "number" && lastIntroTime != time) { + lastIntroTime = time + resetLastIntroTime() + button.click() + console.log("Intro skipped", button) + //delay where the video is loaded + setTimeout(function () { + AmazonGobackbutton(video, time, video.currentTime) + addSkippedTime(time, video.currentTime, "IntroTimeSkipped") + }, 50) + } + } + } +} +let reverseButton = false +async function AmazonGobackbutton(video: HTMLVideoElement, startTime: number, endTime: number) { + if (!reverseButton) { + reverseButton = true + // go back button + const button = document.createElement("button") + button.style.cssText = "padding: 0px 22px; line-height: normal; min-width: 0px; z-index: 999; pointer-events: all;" + button.setAttribute( + "class", + "fqye4e3 f1ly7q5u fk9c3ap fz9ydgy f1xrlb00 f1hy0e6n fgbpje3 f1uteees f1h2a8xb f1cg7427 fiqc9rt fg426ew f1ekwadg", + ) + button.setAttribute("data-uia", "reverse-button") + button.textContent = browser.i18n.getMessage("WatchSkippedButton") + document.querySelector(".atvwebplayersdk-action-buttons")?.appendChild(button) + const buttonInHTML = document.querySelector('[data-uia="reverse-button"]') + if (buttonInHTML) { + function goBack() { + video.currentTime = startTime + if (buttonInHTML) buttonInHTML.remove() + console.log("stopped observing| Intro") + AmazonSkipIntroObserver.disconnect() + const waitTime = endTime - startTime + 2 + setTimeout(function () { + console.log("restarted observing| Intro") + AmazonSkipIntroObserver.observe(document, AmazonSkipIntroConfig) + }, waitTime * 1000) + } + buttonInHTML.addEventListener("click", goBack) + setTimeout(() => { + buttonInHTML.remove() + reverseButton = false + }, 5000) + } + } +} +async function Amazon_Credits() { + const button = document.querySelector("[class*=nextupcard-button]") as HTMLElement + if (button) { + // only skipping to next episode not an entirely new series + const newEpNumber = document.querySelector("[class*=nextupcard-episode]") as HTMLElement + if ( + newEpNumber && + !/(? { + deletePaidCategory(a as HTMLElement) + }) + } +} +async function deletePaidCategory(a: HTMLElement) { + // if the section is mostly paid content delete it + // -2 because sometimes there are title banners + if ( + a.children.length - a.querySelectorAll('[data-hidden="true"]').length - 2 <= + a.querySelectorAll("[data-testid='card-overlay'] svg.NbhXwl").length + ) { + const section = a.closest('[class="+OSZzQ"]') + console.log("Filtered paid category", section) + section?.remove() + settings.value.Statistics.SegmentsSkipped++ + sendMessage("increaseBadge", {}, "background") + } + // remove individual paid elements + else { + a.querySelectorAll("li:has(svg.NbhXwl)").forEach((b) => { + console.log("Filtered paid Element", b) + b.remove() + settings.value.Statistics.SegmentsSkipped++ + sendMessage("increaseBadge", {}, "background") + }) + } +} +function Amazon_FreeveeTimeout() { + // set loop every 1 sec and check if ad is there + const AdInterval = setInterval(function () { + if (!settings.value.Amazon.skipAd) { + console.log("stopped observing| FreeVee Ad") + clearInterval(AdInterval) + return + } + const video = document.querySelector(AmazonVideoClass) as HTMLVideoElement + if (video && !video.paused && video.currentTime > 0) { + // && !video.paused + skipAd(video) + } + }, 100) +} +async function skipAd(video: HTMLVideoElement) { + // Series grimm + // there area multiple adtime texts, the dv-player-fullscreen is the correct one + const adTimeText = document.querySelector(".dv-player-fullscreen .atvwebplayersdk-ad-timer-text") + if (adTimeText?.checkVisibility()) { + let adTime + adTime = parseAdTime(adTimeText?.childNodes?.[0]?.textContent) + if (!adTime) adTime = parseAdTime(adTimeText?.childNodes?.[1]?.textContent) + // !document.querySelector(".fu4rd6c.f1cw2swo") so it doesn't try to skip when the self ad is playing + if (!document.querySelector(".fu4rd6c.f1cw2swo") && typeof adTime == "number" && adTime > 1 && !lastAdTimeText) { + lastAdTimeText = adTime + // biggest skiptime before crashing on amazon.com, can be little higher than 90 but 90 to be safe + const bigTime = 90 + resetLastATimeText(adTime > bigTime ? 3000 : 1000) + const skipTime = adTime > bigTime ? bigTime : adTime - 1 + video.currentTime += skipTime + console.log("FreeVee Ad skipped, length:", skipTime, "s") + settings.value.Statistics.AmazonAdTimeSkipped += skipTime + settings.value.Statistics.SegmentsSkipped++ + sendMessage("increaseBadge", {}, "background") + } + } +} +async function resetLastATimeText(time = 1000) { + // timeout of 1 second to make sure the button is not pressed too fast, it will crash or slow the website otherwise + setTimeout(() => { + lastAdTimeText = 0 + }, time) +} +async function Amazon_selfAdTimeout() { + // set loop every 1 sec and check if ad is there + const AdInterval = setInterval(function () { + if (!settings.value.Amazon.selfAd) { + console.log("stopped observing| Self Ad") + clearInterval(AdInterval) + return + } + const video = document.querySelector(AmazonVideoClass) as HTMLVideoElement + if (video) { + video.onplay = function () { + // if video is playing + const dvWebPlayer = document.querySelector("#dv-web-player") + if (dvWebPlayer && getComputedStyle(dvWebPlayer).display != "none") { + const button = document.querySelector(".fu4rd6c.f1cw2swo") as HTMLElement + if (button) { + // only getting the time after :08 + const adTime = parseInt( + /:\d+/ + .exec(document.querySelector(".atvwebplayersdk-adtimeindicator-text")?.innerHTML ?? "")?.[0] + ?.substring(1) ?? "", + ) + // wait for 100ms before skipping to make sure the button is not pressed too fast, or there will be infinite loading + setTimeout(() => { + button.click() + if (typeof adTime === "number") settings.value.Statistics.AmazonAdTimeSkipped += adTime + settings.value.Statistics.SegmentsSkipped++ + sendMessage("increaseBadge", {}, "background") + console.log("Self Ad skipped, length:", adTime, button) + }, 150) + } + } + } + } + }, 100) +} + +async function Amazon_customizeMobileView() { + console.log("customizeMobileView") + // customize mobile view for desktop website + // /gp/video/detail/ is the film description page otherwise looks weird + if (!url.includes("/gp/video/detail/")) { + // add to head + const meta = document.createElement("meta") + meta.name = "viewport" + meta.content = "width=device-width, initial-scale=1" + document.head.appendChild(meta) + + // make amazon more mobile friendly + const navBelt = document.querySelector("#nav-belt") as HTMLElement + if (navBelt) { + navBelt.style.width = "100vw" + navBelt.style.display = "flex" + navBelt.style.flexDirection = "column" + navBelt.style.height = "fit-content" + } + const navMain = document.querySelector("#nav-main") as HTMLElement + if (navMain) navMain.style.display = "none" + } +} +async function Amazon_xray() { + document.querySelector(".xrayQuickViewList")?.remove() + // remove bad background hue which is annoying + const b = document.querySelector(".fkpovp9.f8hspre:not(.enhanced)") as HTMLElement + if (b) { + b.classList.add("enhanced") + b.style.backgroundColor = "transparent" + b.style.background = "transparent" + } +} + +async function Amazon_doubleClick() { + if (settings.value.Video?.doubleClick) { + // event listener for double click + document.ondblclick = function () { + const button = document.querySelector(".dv-player-fullscreen button[class*=fullscreen-button]") as HTMLElement + button?.click() + } + } else { + document.ondblclick = null + } +} +// #endregion diff --git a/src/content-script/crunchyroll.ts b/src/content-script/crunchyroll.ts new file mode 100644 index 00000000..72dc23f3 --- /dev/null +++ b/src/content-script/crunchyroll.ts @@ -0,0 +1,311 @@ +import { sendMessage } from "webext-bridge/content-script" +import { startSharedFunctions, Platforms } from "@/content-script/shared-functions" +startSharedFunctions(Platforms.Crunchyroll) +// Global Variables + +const { data: settings, promise } = useBrowserSyncStorage("settings", defaultSettings) +const url = window.location.href +const date = new Date() +const config = { attributes: true, childList: true, subtree: true } +async function logStartOfAddon() { + console.log("%cStreaming enhanced", "color: #00aeef;font-size: 2em;") + console.log("Settings", settings.value) +} + +async function startCrunchyroll() { + // watch ready state + await promise + logStartOfAddon() + if (settings.value.Crunchyroll.releaseCalendar) Crunchyroll_ReleaseCalendar() + if (settings.value.Crunchyroll.profile) { + const pickInterval = setInterval(function () { + Crunchyroll_AutoPickProfile() + }, 100) + setTimeout(function () { + if (settings.value.Crunchyroll?.bigPlayer) Crunchyroll_bigPlayerStyle() + }, 1000) + // only click on profile on page load not when switching profiles + setTimeout(function () { + clearInterval(pickInterval) + }, 2000) + CrunchyrollObserver.observe(document, config) + } +} +// #region Crunchyroll +// Crunchyroll functions + +type displayType = "block" | "none" +function filterQueued(display: displayType) { + document.querySelectorAll("div.queue-flag:not(.queued)").forEach((element) => { + // if not on premiere + if (element?.parentElement?.parentElement?.parentElement) { + element.parentElement.parentElement.parentElement.style.display = element.parentElement.parentElement + .querySelector(".premiere-flag") + ?.checkVisibility() + ? "block" + : display + } + }) + if (display == "block" && settings.value.General.filterDub) filterDub("none") +} + +function filterDub(display: displayType) { + const list = document.querySelectorAll("cite[itemprop='name']") + list.forEach((element) => { + if ( + (element?.textContent?.includes("Dub") || element?.textContent?.includes("Audio")) && + element?.parentElement?.parentElement?.parentElement?.parentElement?.parentElement + ) + element.parentElement.parentElement.parentElement.parentElement.parentElement.style.display = display + }) + if (display == "block" && settings.value.General.filterQueued) filterQueued("none") +} +type FilterFunction = (display: displayType) => void +function createFilterElement( + filterType: "filterQueued" | "filterDub", + filterText: string, + settingsValue: boolean, + filterFunction: FilterFunction, +) { + const label = document.createElement("label") + const span = document.createElement("span") + span.style.display = "flex" + span.style.alignItems = "center" + const input = document.createElement("input") + input.type = "checkbox" + input.checked = settingsValue + input.id = filterType + input.onclick = function () { + settings.value.General[filterType] = input.checked + console.log("input.checked", input.checked) + filterFunction(input.checked ? "none" : "block") + //setStorage() + } + const p = document.createElement("p") + p.style.width = "100px" + p.textContent = filterText + label.appendChild(span) + span.appendChild(input) + span.appendChild(p) + return label +} +function addButtons() { + const toggleForm = document.querySelector("#filter_toggle_form") as HTMLElement + if (!toggleForm?.firstElementChild) return + toggleForm.style.display = "flex" + toggleForm.firstElementChild.appendChild( + createFilterElement("filterQueued", "Show Playlist only", settings.value.General.filterQueued, filterQueued), + ) + toggleForm.firstElementChild.appendChild( + createFilterElement("filterDub", "Filter Dub", settings.value.General.filterDub, filterDub), + ) +} +// start of add CrunchyList to Crunchyroll +function addShowsToList(position: HTMLElement, list: CrunchyList) { + list.forEach((element) => { + const article = document.createElement("article") + article.className = "release js-release" + + const time = document.createElement("time") + time.className = "available-time" + time.textContent = new Date(element.time).toLocaleString([], { hour: "2-digit", minute: "2-digit" }) + + const div1 = document.createElement("div") + const div2 = document.createElement("div") + div2.className = "queue-flag queued enhanced" + + const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg") + svg.setAttribute("viewBox", "0 0 48 48") + + const use = document.createElementNS("http://www.w3.org/2000/svg", "use") + use.setAttributeNS( + "http://www.w3.org/1999/xlink", + "xlink:href", + "/i/svg/simulcastcalendar/calendar_icons.svg#cr_bookmark", + ) + + svg.appendChild(use) + div2.appendChild(svg) + + const h1 = document.createElement("h1") + h1.className = "season-name" + + const a = document.createElement("a") + a.className = "js-season-name-link" + a.href = element?.href || "" + a.setAttribute("itemprop", "url") + + const cite = document.createElement("cite") + cite.setAttribute("itemprop", "name") + cite.textContent = element?.name || "" + + a.appendChild(cite) + h1.appendChild(a) + + div1.appendChild(div2) + div1.appendChild(h1) + + article.appendChild(time) + article.appendChild(div1) + position.appendChild(article) + }) +} +function clickOnCurrentDay() { + const days = document.querySelectorAll(".specific-date [datetime]") + // @ts-expect-error days is a NodeList + for (const day of days) { + const dateOnPage = new Date(day.getAttribute("datetime")) + // if the day of the week is the same as today click on it, like if its Monday click on Monday + if (date.getDay() == dateOnPage.getDay()) { + // need timeout because the page is not fully loaded + setTimeout(() => { + day.click() + }, 1000) + // isCurrentWeek + return date.toLocaleDateString() == dateOnPage.toLocaleDateString() + } + } + return false +} +function createLocalList() { + const localList: CrunchyList = [] + document.querySelectorAll("div.queue-flag.queued:not(.enhanced)").forEach((element) => { + const h1 = element.nextElementSibling?.firstChild?.nextSibling as HTMLAnchorElement + const name = h1?.firstChild?.nextSibling?.textContent + if (!name?.includes("Dub")) { + const href = h1?.href + const time = element.parentElement?.parentElement?.firstElementChild?.getAttribute("datetime") ?? "" + localList.push({ href, name, time }) + } + }) + return localList +} +function filterOldList(isCurrentWeek: boolean, localList: CrunchyList) { + let oldList = settings.value.General.savedCrunchyList || [] + const lastElement = localList[localList.length - 1] + if (!lastElement?.time) return oldList + const lastTime = new Date(lastElement.time) + const [lastDay, lastHr, lastMin] = [lastTime.getDay(), lastTime.getHours(), lastTime.getMinutes()] + // delete all previous weekdays from oldList + if (!isCurrentWeek) { + oldList = [] + } else { + oldList = oldList + .filter((item) => { + return shiftSunday(date.getDay()) - shiftSunday(new Date(item.time).getDay()) <= 0 + }) + // delete all items from same weekday before lastElement time + .filter((item) => { + const itemTime = new Date(item.time) + const itemHr = itemTime.getHours() + // no shows today yet + const itemDay = itemTime.getDay() + return ( + lastDay != itemDay || + itemDay != date.getDay() || + itemHr > lastHr || + (itemHr == lastHr && itemTime.getMinutes() > lastMin) + ) + }) + } + return oldList +} +const shiftSunday = (a: number) => (a + 6) % 7 +function addSavedCrunchyList() { + const localList = createLocalList() + const isCurrentWeek = clickOnCurrentDay() + const oldList = + localList.length > 0 ? filterOldList(isCurrentWeek, localList) : settings.value.General.savedCrunchyList || [] + settings.value.General.savedCrunchyList = localList.concat(oldList) + //setStorage() + if (isCurrentWeek && !document.querySelector("div.queue-flag.queued.enhanced")) { + // now add the old list to the website list + document.querySelectorAll("section.calendar-day").forEach((element) => { + const datetime = element.querySelector("time")?.getAttribute("datetime") ?? "" + const weekday = new Date(datetime).getDay() + // remove Schedule Coming Soon text + if (shiftSunday(date.getDay()) - shiftSunday(weekday) < 0) + element?.children?.[1]?.firstChild?.nextSibling?.remove() + addShowsToList( + element.children[1] as HTMLElement, + oldList.filter((item) => new Date(item.time).getDay() == weekday), + ) + }) + } +} +async function Crunchyroll_ReleaseCalendar() { + if (url.includes("simulcastcalendar")) { + // Show playlist only + filterQueued(settings.value.General.filterQueued ? "none" : "block") + filterDub(settings.value.General.filterDub ? "none" : "block") + if (!document.querySelector("#filterQueued")) addButtons() + // add saved CrunchyList and click on current day + addSavedCrunchyList() + } +} +const CrunchyrollObserver = new MutationObserver(Crunchyroll) +async function Crunchyroll() { + if (settings.value.Crunchyroll?.profile) Crunchyroll_profile() +} +async function Crunchyroll_profile() { + // save profile + const img = document.querySelector(".avatar-wrapper img") as HTMLImageElement + if (img && img.src !== settings.value.General.Crunchyroll_profilePicture) { + settings.value.General.Crunchyroll_profilePicture = img.src + //setStorage() + console.log("Profile switched to", img.src) + } +} +async function Crunchyroll_AutoPickProfile() { + // click on profile picture + if (document.querySelector(".profile-item-name")) { + document.querySelectorAll(".erc-profile-item img")?.forEach((element) => { + const img = element as HTMLImageElement + if (img.src === settings.value.General.Crunchyroll_profilePicture) { + img.click() + console.log("Profile automatically chosen:", img.src) + settings.value.Statistics.SegmentsSkipped++ + sendMessage("increaseBadge", {}, "background") + } + }) + } +} +async function Crunchyroll_bigPlayerStyle() { + if (document.querySelector(".video-player-wrapper")) { + // show header on hover + const style = document.createElement("style") + const parentDiv = document.querySelector('[class^="app-layout__header"]')?.classList?.[0] + const styles = ` + .video-player-wrapper{ + max-Height: calc(100vw / 1.7777); + height: 100vh; + } + .${parentDiv} { + position: absolute; + top: 0; + width: 100%; + height: 3.75rem; + z-index: 999; + } + .erc-large-header { + position: absolute; + top: 0; + width: 100%; + height: 3.75rem; + z-index: 999; + } + .erc-large-header .header-content { + position: absolute; + top: -3.75rem; + transition: top 0.4s, top 0.4s; + } + .erc-large-header:hover .header-content { + top: 0; + } + ` + style.appendChild(document.createTextNode(styles)) + document.head.appendChild(style) + } +} +// #endregion +startCrunchyroll() diff --git a/src/content-script/disney.ts b/src/content-script/disney.ts new file mode 100644 index 00000000..ce86b229 --- /dev/null +++ b/src/content-script/disney.ts @@ -0,0 +1,290 @@ +import { sendMessage } from "webext-bridge/content-script" +import { startSharedFunctions, parseAdTime, createSlider, Platforms } from "@/content-script/shared-functions" +startSharedFunctions(Platforms.Disney) +// Global Variables + +const { data: settings, promise } = useBrowserSyncStorage("settings", defaultSettings) +const hostname = window.location.hostname +const isDisney = /disneyplus|starplus/i.test(hostname) +const isHotstar = /hotstar/i.test(hostname) +const isStarPlus = /starplus/i.test(hostname) +let lastAdTimeText: number | string = 0 +const config = { attributes: true, childList: true, subtree: true } +async function logStartOfAddon() { + console.log("%cStreaming enhanced", "color: #00aeef;font-size: 2em;") + console.log("Settings", settings.value) +} +type StatisticsKey = + | "AmazonAdTimeSkipped" + | "NetflixAdTimeSkipped" + | "DisneyAdTimeSkipped" + | "IntroTimeSkipped" + | "RecapTimeSkipped" + | "SegmentsSkipped" +async function addSkippedTime(startTime: number, endTime: number, key: StatisticsKey) { + if (typeof startTime === "number" && typeof endTime === "number" && endTime > startTime) { + console.log(key, endTime - startTime) + settings.value.Statistics[key] += endTime - startTime + increaseBadge() + } +} + +async function resetLastATimeText(time = 1000) { + // timeout of 1 second to make sure the button is not pressed too fast, it will crash or slow the website otherwise + setTimeout(() => { + lastAdTimeText = 0 + }, time) +} +const videoSpeed: Ref = ref(1) +async function startDisney() { + await promise + logStartOfAddon() + if (isHotstar) Hotstar_doubleClick() + DisneyObserver.observe(document, config) + setInterval(function () { + const video = Array.from(document.querySelectorAll("video")).find((v) => v.checkVisibility()) as HTMLVideoElement + if (settings.value.Disney?.skipAd) Disney_skipAd(video) + }, 300) +} + +// #region Disney +// Disney Observers +const DisneyObserver = new MutationObserver(Disney) +function Disney() { + // first ad not first video + const video = Array.from(document.querySelectorAll("video")).find((v) => v.checkVisibility()) as HTMLVideoElement + const time = video?.currentTime + if (settings.value.Disney?.skipIntro) Disney_Intro(video, time) + Disney_skipCredits(time) + if (settings.value.Disney?.watchCredits) Disney_Watch_Credits() + if (settings.value.Disney?.speedSlider) Disney_SpeedSlider(video) + if (isDisney) { + Disney_addHomeButton() + if (settings.value.Disney?.selfAd) Disney_selfAd(video, time) + } + if (settings.value.Video?.scrollVolume) Disney_scrollVolume(video) +} +async function Disney_skipAd(video: HTMLVideoElement) { + if (video) { + const adTimeText = document.querySelector("div.overlay_interstitials__content_time_display") + if (adTimeText) { + const adTime = parseAdTime(adTimeText?.textContent) + if (adTime && adTime >= 1 && lastAdTimeText != video.currentTime) { + if (lastAdTimeText == 0) { + console.log("Disney Ad skipped, length:", adTime, "s") + settings.value.Statistics.DisneyAdTimeSkipped += adTime + settings.value.Statistics.SegmentsSkipped++ + sendMessage("increaseBadge", {}, "background") + } + lastAdTimeText = video.currentTime + video.currentTime += adTime + } + } else lastAdTimeText = 0 + // remove das video wird nach der pause fortgesetzt text after skipping ad + const continueText = document.querySelector("p.toast-notification__text[aria-hidden='true']") + if (continueText?.checkVisibility()) { + continueText.remove() + settings.value.Statistics.SegmentsSkipped++ + sendMessage("increaseBadge", {}, "background") + } + } +} +async function Disney_scrollVolume(video: HTMLVideoElement) { + const volumeControl = document.querySelector("div.audio-control:not(.enhanced)") as HTMLElement + if (volumeControl) { + volumeControl.classList.add("enhanced") + volumeControl.addEventListener("wheel", (event: WheelEvent) => { + console.log("wheel") + let volume = video.volume + if (event.deltaY < 0) volume = Math.min(1, volume + 0.1) + else volume = Math.max(0, volume - 0.1) + video.volume = volume + const sliderContainer = volumeControl.querySelector(".slider-container") + const sliderChildren = (sliderContainer?.firstChild as HTMLElement)?.children + if (sliderChildren.length > 2) { + const firstChild = sliderChildren[1] as HTMLElement + const secondChild = sliderChildren[2] as HTMLElement + firstChild.style.strokeDashoffset = 100 - volume * 100 + "px" + firstChild.style.height = volume * 100 + "%" + secondChild.style.height = volume * 100 + "%" + } + }) + } +} + +async function Disney_Intro(video: HTMLVideoElement, time: number) { + // intro star wars andor Season 1 episode 2 + // Recap Criminal Minds Season 1 Episode 2 + let button: HTMLElement | undefined + if (isDisney) { + button = isStarPlus + ? (document.querySelector('[data-gv2elementkey="playNext"]') as HTMLElement) + : (document.querySelector(".skip__button") as HTMLElement) + } else + button = document + .evaluate("//span[contains(., 'Skip Intro')]", document, null, XPathResult.ANY_TYPE, null) + ?.iterateNext()?.parentElement as HTMLElement + if (button && !document.querySelector('[data-testid="icon-restart"]')?.parentElement) { + button.click() + console.log("Intro/Recap skipped", button) + setTimeout(function () { + addSkippedTime(time, video?.currentTime, "IntroTimeSkipped") + }, 600) + } +} +async function Disney_skipCredits(currentTime: number) { + let button: HTMLElement + if (isStarPlus) button = document.querySelector('[data-gv2elementkey="playNext"]') as HTMLElement + else if (isDisney) button = document.querySelector('[data-testid="icon-restart"]')?.parentElement as HTMLElement + else + button = document + .evaluate("//span[contains(., 'Next Episode')]", document, null, XPathResult.ANY_TYPE, null) + ?.iterateNext()?.parentElement as HTMLElement + if (button) { + // time is to avoid clicking too fast + const time = currentTime + if (time && lastAdTimeText != time) { + const videoFullscreen = document.fullscreenElement !== null + lastAdTimeText = time + if (settings.value.Disney?.skipCredits) { + button.click() + console.log("Credits skipped", button) + settings.value.Statistics.SegmentsSkipped++ + sendMessage("increaseBadge", {}, "background") + resetLastATimeText() + } + if (!isHotstar) { + // keep video fullscreen + setTimeout(function () { + if (videoFullscreen && document.fullscreenElement == null) { + chrome.runtime.sendMessage({ type: "fullscreen" }) + function resetFullscreen() { + chrome.runtime.sendMessage({ type: "exitFullscreen" }) + console.log("exitFullscreen") + removeEventListener("fullscreenchange", resetFullscreen) + } + addEventListener("fullscreenchange", resetFullscreen) + document.onkeydown = function (evt) { + if ("key" in evt && (evt.key === "Escape" || evt.key === "Esc")) { + chrome.runtime.sendMessage({ type: "exitFullscreen" }) + } + } + console.log("fullscreen") + } + }, 1000) + } + } + } +} +async function Disney_addHomeButton() { + // add home button to the end of the credits + const buttonDiv = document.querySelector('[data-testid="browser-action-button"]')?.parentElement + if (buttonDiv && !document.querySelector("#homeButton")) { + const homeButton = document.createElement("button") + homeButton.textContent = browser.i18n.getMessage("HomeButton") + homeButton.id = "homeButton" + homeButton.style.cssText = + 'color: white;background-color: #40424A;border: rgb(64, 66, 74);border-radius: 5px;padding: 0 2px 0 2px;height: 56px;padding-left: 24px;padding-right: 24px;letter-spacing: 1.76px;font-size: 15px; text-transform: uppercase;cursor: pointer;font-family:"Avenir-World-for-Disney-Demi", sans-serif;' + // add hover effect + homeButton.onmouseover = function () { + homeButton.style.backgroundColor = "#474a53" + } + homeButton.onmouseout = function () { + homeButton.style.backgroundColor = "#40424A" + } + homeButton.onclick = function () { + window.location.href = "/" + } + buttonDiv.appendChild(homeButton) + } +} +async function Disney_Watch_Credits() { + let button: Element | null | undefined + if (isStarPlus) button = document.querySelector('[data-gv2elementkey="playNext"]') + else if (isDisney && !document.querySelector('[data-testid="playback-action-button"]')) + button = document.querySelector('[data-testid="icon-restart"]')?.parentElement + else + button = document + .evaluate("//span[contains(., 'Next Episode')]", document, null, XPathResult.ANY_TYPE, null) + ?.iterateNext()?.parentElement as HTMLElement + if (button) { + // only skip if the next video is the next episode of a series (there is a timer) + let time + if (isDisney) time = /\d+/.exec(button?.textContent ?? "")?.[0] + if ( + (isHotstar && + !document + .evaluate("//span[contains(., 'My Space')]", document, null, XPathResult.ANY_TYPE, null) + ?.iterateNext()) || + (time && lastAdTimeText != time) + ) { + const video = Array.from(document.querySelectorAll("video")).find((v) => v.checkVisibility()) as HTMLVideoElement + if (video) { + video.click() + lastAdTimeText = time ?? 0 + console.log("Credits Watched", button) + settings.value.Statistics.SegmentsSkipped++ + sendMessage("increaseBadge", {}, "background") + resetLastATimeText() + } + } + } +} + +const DisneySliderStyle = "pointer-events: auto;background: rgb(221, 221, 221);display: none;width:200px;" +const DisneySpeedStyle = + "height:10px;min-width:40px;color:#f9f9f9;pointer-events: auto;position: relative;bottom: 8px;padding: 0 5px;" +async function Disney_SpeedSlider(video: HTMLVideoElement) { + if (video) { + const alreadySlider: HTMLInputElement | null = document.querySelector("#videoSpeedSlider") + if (!alreadySlider) { + // infobar position for the slider to be added + let position: HTMLElement | null + if (isDisney) position = document.querySelector(".controls__right") + else + position = document.querySelector(".icon-player-landscape")?.parentElement?.parentElement?.parentElement + ?.parentElement as HTMLElement + if (position) createSlider(video, videoSpeed, position, DisneySliderStyle, DisneySpeedStyle) + } else { + // need to resync the slider with the video sometimes + const speed = document.querySelector("#videoSpeed") + if (video.playbackRate !== parseFloat(alreadySlider.value) / 10) { + video.playbackRate = parseFloat(alreadySlider.value) / 10 + } + alreadySlider.oninput = function () { + const sliderValue = parseFloat(alreadySlider.value) + if (speed) speed.textContent = (sliderValue / 10).toFixed(1) + "x" + video.playbackRate = sliderValue / 10 + videoSpeed.value = sliderValue / 10 + } + } + } +} + +async function Disney_selfAd(video: HTMLVideoElement, time: number) { + if (isDisney) { + const button: HTMLElement | null = document.querySelector(".overlay_interstitials__promo_skip_button") + if (button) { + button.click() + console.log("SelfAd skipped", button) + setTimeout(function () { + addSkippedTime(time, video?.currentTime, "DisneyAdTimeSkipped") + }, 600) + } + } +} + +async function Hotstar_doubleClick() { + if (settings.value.Video?.doubleClick) { + // event listener for double click + document.ondblclick = function () { + document.querySelector(".icon-player-landscape")?.closest("button")?.click() + document.querySelector(".icon-player-portrait")?.closest("button")?.click() + } + } else { + document.ondblclick = null + } +} +// #endregion + +startDisney() diff --git a/src/content-script/iframe.ts b/src/content-script/iframe.ts new file mode 100644 index 00000000..0cd5dd33 --- /dev/null +++ b/src/content-script/iframe.ts @@ -0,0 +1,60 @@ +import { sendMessage } from "webext-bridge/content-script" +const { data: settings, promise } = useBrowserSyncStorage("settings", defaultSettings) +// This import scss file is used to style the iframe that is injected into the page +import "./index.scss" + +startIframe() + +const src = chrome.runtime.getURL("/src/ui/iframe-page/index.html") + +const iframe = new DOMParser().parseFromString(``, "text/html").body + .firstElementChild + +const affiliateTag = "?tag=dreamliner05-20" +const affiliatePages = [ + "https://www.amazon.de/amazonprime?language=pl_PL", + "http://www.amazon.de/primegratistesten", + "https://www.amazon.co.uk/tryprimefree", + + // "http://www.amazon.es/prime", + // "https://www.amazon.fr/prime", + // "http://www.amazon.it/amazonprime", + // "https://www.amazon.nl/prime", +] +const url = document.URL + +function isOnAffiliatePage(url: string) { + return ( + (affiliatePages.some((page) => url.includes(page)) || url.includes("/amazonprime")) && !url.includes(affiliateTag) + ) +} + +window.addEventListener("message", function (event) { + if (event?.data?.type === "applyPrimeAffiliateLink") { + // Handle the message from the iframe + console.log("applyPrimeAffiliateLink") + const url = window.location.href + affiliateTag + sendMessage("updateUrl", { url }, "background") + } else if (event?.data?.type === "removeIframe") { + // Handle the message from the iframe + console.log("removeIframe") + iframe?.remove() + } +}) + +async function startIframe() { + await promise + if (iframe && isOnAffiliatePage(url) && settings.value?.General?.affiliate) { + document.body?.append(iframe) + } +} + +self.onerror = function (message, source, lineno, colno, error) { + console.info("Error: " + message) + console.info("Source: " + source) + console.info("Line: " + lineno) + console.info("Column: " + colno) + console.info("Error object: " + error) +} + +console.log("hello world from content-script") diff --git a/src/content-script/index.scss b/src/content-script/index.scss new file mode 100644 index 00000000..f9bc08c1 --- /dev/null +++ b/src/content-script/index.scss @@ -0,0 +1,16 @@ +// This file is used to style the iframe that is injected into the page +.crx-iframe { + border: none; + border-radius: 8px; + box-shadow: + 0 2px 4px rgba(0, 0, 0, 0.2), + 0 -1px 0px rgba(0, 0, 0, 0.02); + background-color: #fff; + margin: 2em; + position: fixed; + top: 0; + right: 0; + width: 420px; + z-index: 999999999; + // min-height: 340px; +} diff --git a/src/content-script/index.ts b/src/content-script/index.ts new file mode 100644 index 00000000..34bd0fdf --- /dev/null +++ b/src/content-script/index.ts @@ -0,0 +1,21 @@ +// This import scss file is used to style the iframe that is injected into the page +import "./index.scss" + +const src = chrome.runtime.getURL("src/ui/content-script-iframe/index.html") + +const iframe = new DOMParser().parseFromString(``, "text/html").body + .firstElementChild + +if (iframe) { + document.body?.append(iframe) +} + +self.onerror = function (message, source, lineno, colno, error) { + console.info("Error: " + message) + console.info("Source: " + source) + console.info("Line: " + lineno) + console.info("Column: " + colno) + console.info("Error object: " + error) +} + +console.log("hello world from content-script") diff --git a/src/content-script/max.ts b/src/content-script/max.ts new file mode 100644 index 00000000..4d3cf097 --- /dev/null +++ b/src/content-script/max.ts @@ -0,0 +1,95 @@ +import { startSharedFunctions, createSlider, Platforms } from "@/content-script/shared-functions" +import { sendMessage } from "webext-bridge/content-script" +// Global Variables + +const { data: settings, promise } = useBrowserSyncStorage("settings", defaultSettings) +const videoSpeed: Ref = ref(1) +let lastAdTimeText: number = 0 +const config = { attributes: true, childList: true, subtree: true } +async function logStartOfAddon() { + console.log("%cStreaming enhanced", "color: #00aeef;font-size: 2em;") + console.log("Settings", settings.value) +} +async function startHBO() { + await promise + logStartOfAddon() + startSharedFunctions(Platforms.HBO) + HBOObserver.observe(document, config) +} +type StatisticsKey = + | "AmazonAdTimeSkipped" + | "NetflixAdTimeSkipped" + | "DisneyAdTimeSkipped" + | "IntroTimeSkipped" + | "RecapTimeSkipped" + | "SegmentsSkipped" +async function addSkippedTime(startTime: number, endTime: number, key: StatisticsKey) { + if (typeof startTime === "number" && typeof endTime === "number" && endTime > startTime) { + console.log(key, endTime - startTime) + settings.value.Statistics[key] += endTime - startTime + increaseBadge() + } +} + +// #region HBO +// HBO functions +const HBOObserver = new MutationObserver(HBO) +async function HBO() { + const video: HTMLVideoElement = document.querySelector("video") as HTMLVideoElement + const time = video?.currentTime + if (settings.value.HBO?.skipIntro) HBO_Intro(video, time) + if (settings.value.HBO?.skipCredits) HBO_Credits(time) + if (settings.value.HBO?.watchCredits) HBO_Watch_Credits(video) + if (settings.value.HBO?.speedSlider) HBO_SpeedSlider(video) +} +function HBO_Intro(video: HTMLVideoElement, time: number) { + const button = document.querySelector('[class*="SkipButton-Beam-Web-Ent"]') as HTMLElement + if (button?.checkVisibility({ visibilityProperty: true })) { + button.click() + console.log("Intro skipped", button) + setTimeout(function () { + addSkippedTime(time, video?.currentTime, "IntroTimeSkipped") + }, 600) + } +} +function HBO_Credits(time: number) { + const button = document.querySelector('[class*="UpNextButton-Beam-Web-Ent"]') as HTMLElement + if (button && lastAdTimeText < time - 1) { + lastAdTimeText = time + button.click() + settings.value.Statistics.SegmentsSkipped++ + sendMessage("increaseBadge", {}, "background") + console.log("Credits skipped", button) + } +} +function HBO_Watch_Credits(video: HTMLVideoElement) { + let button = document.querySelector('[class*="DismissButton-Beam-Web-Ent"]') as HTMLElement + if (button) { + button.click() + settings.value.Statistics.SegmentsSkipped++ + sendMessage("increaseBadge", {}, "background") + console.log("Watched Credits", button) + } + // is movie + button = document.querySelector(".player-shrink-transition-enter-done") as HTMLElement + if (video && button) { + video.click() + settings.value.Statistics.SegmentsSkipped++ + sendMessage("increaseBadge", {}, "background") + console.log("Watched Credits", button) + } +} +const HBOSliderStyle = "height: 1em;background: rgb(221, 221, 221);display: none;width:200px;" +const HBOSpeedStyle = "font-size: 1.5em;color:#b2b2b2;" +const HBODivStyle = "height:48px;display: flex;align-items: center;" +async function HBO_SpeedSlider(video: HTMLVideoElement) { + const alreadySlider = document.querySelector("#videoSpeedSlider") + if (!alreadySlider) { + // infobar position for the slider to be added + const position = document.querySelector('[class*="ControlsFooterBottomRight-Beam-Web-Ent"]') as HTMLElement + if (position) createSlider(video, videoSpeed, position, HBOSliderStyle, HBOSpeedStyle, HBODivStyle) + } +} +// #endregion + +startHBO() diff --git a/src/content-script/netflix.ts b/src/content-script/netflix.ts new file mode 100644 index 00000000..ec22d073 --- /dev/null +++ b/src/content-script/netflix.ts @@ -0,0 +1,225 @@ +import { sendMessage } from "webext-bridge/content-script" +import { startSharedFunctions, createSlider, Platforms } from "@/content-script/shared-functions" + +startSharedFunctions(Platforms.Netflix) +// Global Variables + +const { data: settings, promise } = useBrowserSyncStorage("settings", defaultSettings) +const ua = navigator.userAgent +let lastAdTimeText: number | string = 0 +const videoSpeed: Ref = ref(1) +const isEdge = /edg/i.test(ua) +const config = { attributes: true, childList: true, subtree: true } +async function logStartOfAddon() { + console.log("%cStreaming enhanced", "color: #00aeef;font-size: 2em;") + console.log("Settings", settings.value) +} +type StatisticsKey = + | "AmazonAdTimeSkipped" + | "NetflixAdTimeSkipped" + | "DisneyAdTimeSkipped" + | "IntroTimeSkipped" + | "RecapTimeSkipped" + | "SegmentsSkipped" +async function addSkippedTime(startTime: number, endTime: number, key: StatisticsKey) { + if (typeof startTime === "number" && typeof endTime === "number" && endTime > startTime) { + console.log(key, endTime - startTime) + settings.value.Statistics[key] += endTime - startTime + increaseBadge() + } +} + +async function resetLastATimeText(time = 1000) { + // timeout of 1 second to make sure the button is not pressed too fast, it will crash or slow the website otherwise + setTimeout(() => { + lastAdTimeText = 0 + }, time) +} + +async function startNetflix() { + await promise + logStartOfAddon() + if (settings.value.Netflix?.profile) AutoPickProfile() + if (settings.value.Netflix?.skipAd) Netflix_SkipAdInterval() + NetflixObserver.observe(document, config) +} + +// #region Netflix +// Netflix Observer +const NetflixObserver = new MutationObserver(Netflix) +function Netflix() { + const video = document.querySelector("video") + const NSettings = settings.value.Netflix + if (NSettings?.profile) Netflix_profile() + if (NSettings?.skipIntro) { + if (Netflix_General('[data-uia="player-skip-intro"]', "Intro skipped", false)) { + if (video) { + const time = video?.currentTime + setTimeout(function () { + addSkippedTime(time, video?.currentTime, "IntroTimeSkipped") + }, 600) + } + } + } + if (NSettings?.skipRecap) { + if ( + Netflix_General('[data-uia="player-skip-recap"]', "Recap skipped", false) || + Netflix_General('[data-uia="player-skip-preplay"]', "Recap skipped", false) + ) { + if (video) { + const time = video?.currentTime + setTimeout(function () { + addSkippedTime(time, video?.currentTime, "RecapTimeSkipped") + }, 600) + } + } + } + if (NSettings?.skipCredits) Netflix_General('[data-uia="next-episode-seamless-button"]', "Credits skipped") + if (NSettings?.watchCredits) Netflix_General('[data-uia="watch-credits-seamless-button"]', "Credits watched") + if (NSettings?.skipBlocked) Netflix_General('[data-uia="interrupt-autoplay-continue"]', "Blocked skipped") + if (NSettings?.speedSlider && video) Netflix_SpeedSlider(video) + if (settings.value.Video?.scrollVolume && video) Netflix_scrollVolume(video) +} +async function Netflix_scrollVolume(video: HTMLVideoElement) { + const volumeControl = document.querySelector('[data-uia*="control-volume"]:not(.enhanced)') as HTMLElement + if (volumeControl) { + volumeControl.classList.add("enhanced") + const handleVolumeControl = (event: WheelEvent) => { + let volume = video.volume + if (event.deltaY < 0) volume = Math.min(1, volume + 0.05) + else volume = Math.max(0, volume - 0.05) + video.volume = volume + } + removeEventListener("wheel", handleVolumeControl) + volumeControl?.addEventListener("wheel", handleVolumeControl) + } +} +// to parse html umlaut symbols like ä to ä +function decodeHtmlEntities(str: string) { + return new DOMParser().parseFromString("" + str, "text/html").body.textContent +} +function Netflix_profile() { + // AutoPickProfile(); + const currentProfile = document.querySelector("[href*='/YourAccount']") + if (currentProfile) { + // there is a space before the - thats why slice -1 + const currentProfileName = decodeHtmlEntities( + currentProfile?.getAttribute("aria-label")?.split("–")?.[0].split("-")?.[0].slice(0, -1) ?? "", + ) + if (currentProfileName && currentProfileName !== settings.value.General.profileName) { + // small profile picture + settings.value.General.profilePicture = (currentProfile?.firstChild?.firstChild as HTMLImageElement)?.src + console.log("Profile switched to", currentProfileName, settings.value.General?.profilePicture) + settings.value.General.profileName = currentProfileName + console.log("Profile switched to", currentProfileName) + } + } +} +function AutoPickProfile() { + if (!window.location.pathname.includes("Profile") && !window.location.pathname.includes("profile")) { + const profileButtons = document.querySelectorAll(".profile-name") + profileButtons.forEach((button) => { + if (button.textContent === settings.value.General.profileName) { + // big profile picture + // slice(4, -1) to remove the url(" ") from the string + settings.value.General.profilePicture = ( + button?.parentElement?.firstChild?.firstChild as HTMLElement + )?.style?.backgroundImage?.slice(5, -2) + button?.parentElement?.click() + console.log("Profile automatically chosen:", settings.value.General.profileName) + settings.value.Statistics.SegmentsSkipped++ + sendMessage("increaseBadge", {}, "background") + } + }) + } +} +function Netflix_General(selector: string, name: string, incBadge = true) { + const button = document.querySelector(selector) as HTMLElement + if (button) { + console.log(name, button) + button.click() + if (incBadge) settings.value.Statistics.SegmentsSkipped++ + sendMessage("increaseBadge", {}, "background") + return true + } + return false +} +function Netflix_SkipAdInterval() { + const AdInterval = setInterval(() => { + if (!settings.value.Netflix?.skipAd) { + console.log("stopped observing| Ad") + clearInterval(AdInterval) + return + } + const video = document.querySelector("video") + // .default-ltr-cache-mmvz9h or ltr-mmvz9h + const adLength = Number(document.querySelector('span[class*="mmvz9h"]')?.textContent) + // 16 max but too fast + if (video) { + let playBackRate = 8 + if (isEdge) playBackRate = 3 + if ((adLength || lastAdTimeText) && video.paused) { + video.play() + } + if (adLength > 8 && video.playbackRate != playBackRate) { + console.log("Ad skipped, length:", adLength, "s") + settings.value.Statistics.NetflixAdTimeSkipped += adLength + settings.value.Statistics.SegmentsSkipped++ + sendMessage("increaseBadge", {}, "background") + if (settings.value.Video.epilepsy) video.style.opacity = "0" + video.muted = true + video.playbackRate = playBackRate + lastAdTimeText = adLength + } else if (adLength > 2 && video.playbackRate < 2) { + video.playbackRate = adLength / 2 + lastAdTimeText = adLength + } // added lastAdTimeText because other speedsliders are not working anymore + else if (adLength <= 2 || (!adLength && lastAdTimeText)) { + // videospeed is speedSlider value + video.muted = false + video.playbackRate = videoSpeed.value + lastAdTimeText = 0 + if (settings.value.Video.epilepsy) video.style.opacity = "1" + } + } + // pause video shows ad + // sherlock show comes alot. + const div = document.querySelector('div[data-uia="pause-ad-title-display"]') + const button = document.querySelector('button[data-uia="pause-ad-expand-button"]') as HTMLElement + if ( + button && + div?.checkVisibility({ opacityProperty: true }) && + (!video || (video.paused && lastAdTimeText != video.currentTime / 10)) + ) { + if (video) lastAdTimeText = video.currentTime / 10 + resetLastATimeText() + button.click() + console.log("Remove Video Paused ad", button) + settings.value.Statistics.SegmentsSkipped++ + sendMessage("increaseBadge", {}, "background") + setTimeout(() => { + // not always a video is showing on next episode apparently + const v = video || document.querySelector("video") + v?.pause() + }, 100) + } + }, 100) +} +const NetflixSliderStyle = "display: none;width:200px;" +const NetflixSpeedStyle = "font-size: 3em;padding: 0 5px;margin: unset;align-content: center;" +function Netflix_SpeedSlider(video: HTMLVideoElement) { + // only add speed slider on lowest subscription tier + // && !document.querySelector('[data-uia="control-speed"]') + const alreadySlider = document.querySelector("#videoSpeedSlider") + if (!alreadySlider) { + const p = (document.querySelector('[data-uia="controls-standard"]')?.firstChild as HTMLElement)?.children + if (p) { + // infobar position for the slider to be added + const position = p[p.length - 2]?.firstChild?.lastChild as HTMLElement + if (position) createSlider(video, videoSpeed, position, NetflixSliderStyle, NetflixSpeedStyle) + } + } +} +// #endregion + +startNetflix() diff --git a/src/content-script/shared-functions.ts b/src/content-script/shared-functions.ts new file mode 100644 index 00000000..a6c3f6e4 --- /dev/null +++ b/src/content-script/shared-functions.ts @@ -0,0 +1,526 @@ +/* eslint-disable no-console */ +import { sendMessage } from "webext-bridge/content-script" +console.log("shared-functions loaded") +// Global Variables + +const { data: settings, promise } = useBrowserSyncStorage("settings", defaultSettings) +export const date = new Date() +const today = date.toISOString().split("T")[0] + +const ua = navigator.userAgent +const isMobile = /mobile|streamingEnhanced/i.test(ua) +let url = window.location.href +const hostname = window.location.hostname +const title = document.title +const isPrimeVideo = /amazon|primevideo/i.test(hostname) && (/video/i.test(title) || /video/i.test(url)) +let isNetflix = /netflix/i.test(hostname) +let isDisney = /disneyplus|starplus/i.test(hostname) +const isHotstar = /hotstar/i.test(hostname) +let isHBO = /max.com/i.test(hostname) +const htmlLang = document.documentElement.lang + +const AmazonVideoClass = ".dv-player-fullscreen video" +let DBCache: DBCache = {} + +export enum Platforms { + Netflix = "netflix", + Amazon = "amazon", + StarPlus = "starplus", + Disney = "disney", + Hotstar = "hotstar", + Crunchyroll = "crunchyroll", + HBO = "hbo", +} + +export async function startSharedFunctions(platform: Platforms) { + // if(platform == Platforms.Amazon) isPrimeVideo = true, because should only be called on amazon prime video + if (platform == Platforms.Netflix) isNetflix = true + if (platform == Platforms.Disney) isDisney = true + if (platform == Platforms.HBO) isHBO = true + + await promise + if (settings.value.Video.playOnFullScreen) startPlayOnFullScreen() + getDBCache() +} + +type MovieInfo = { + id: number + title: string + score: number + vote_count: number + release_date: string + media_type: string + date: string + db: string +} +type DBCache = { + [title: string]: MovieInfo +} +async function getDBCache() { + chrome.storage.local.get("DBCache", function (result) { + DBCache = result?.DBCache + if (typeof DBCache !== "object") { + console.log("DBCache not found, creating new one", DBCache) + try { + chrome.storage.local.set({ DBCache: {} }) + } catch (error) { + console.log(error) + } + DBCache = {} + } + if (isNetflix && settings.value.Netflix?.showRating) startShowRatingInterval() + else if (isDisney || isHotstar) { + if (settings.value.Disney?.showRating) startShowRatingInterval() + } else if (isPrimeVideo && settings.value.Amazon?.showRating) startShowRatingInterval() + else if (isHBO && settings.value.HBO?.showRating) startShowRatingInterval() + if (getDiffInDays(settings.value.General.GCdate, date) >= GCdiff) garbageCollection() + }) + chrome.storage.local.onChanged.addListener(function (changes) { + if (changes?.DBCache) DBCache = changes.DBCache.newValue + }) +} +// set DB Cache if cache size under 5MB +async function setDBCache() { + const size = new TextEncoder().encode(JSON.stringify(DBCache)).length + const kiloBytes = size / 1024 + const megaBytes = kiloBytes / 1024 + if (megaBytes < 5) { + console.log("updateDBCache size:", megaBytes.toFixed(4) + " MB") + chrome.storage.local.set({ DBCache }) + } else { + console.log("DBCache cleared", megaBytes) + DBCache = {} + chrome.storage.local.set({ DBCache }) + } +} + +// how long a record should be kept in the cache +const GCdiff = 30 +async function garbageCollection() { + // clear every rating older than 30 days + // clear every rating where db != tmdb + console.log("garbageCollection started, deleting old ratings:") + const keys = Object.keys(DBCache) + for (const key of keys) { + if (getDiffInDays(DBCache[key].date, date) >= GCdiff || DBCache[key].db != "tmdb") { + console.log(DBCache[key].date, key) + delete DBCache[key] + } + } + settings.value.General.GCdate = today + setDBCache() +} +// #region exported functions +// parse string time to seconds e.g. 1:30 -> 90 +export function parseAdTime(adTimeText: string | null) { + if (!adTimeText) return false + const adTime: number = + parseInt(/:\d+/.exec(adTimeText ?? "")?.[0].substring(1) ?? "") + + parseInt(/\d+/.exec(adTimeText ?? "")?.[0] ?? "") * 60 + if (isNaN(adTime)) return false + return adTime +} + +export function createSlider( + video: HTMLVideoElement, + videoSpeed: Ref, + position: HTMLElement, + sliderStyle: string, + speedStyle: string, + divStyle = "", +) { + videoSpeed.value = videoSpeed.value || video.playbackRate + + const slider = document.createElement("input") + slider.id = "videoSpeedSlider" + slider.type = "range" + slider.min = settings.value.General.sliderMin.toString() + slider.max = settings.value.General.sliderMax.toString() + slider.value = (videoSpeed.value * 10).toString() + slider.step = settings.value.General.sliderSteps.toString() + slider.style.cssText = sliderStyle + + const speed = document.createElement("p") + speed.id = "videoSpeed" + speed.textContent = videoSpeed.value ? videoSpeed.value.toFixed(1) + "x" : "1.0x" + speed.style.cssText = speedStyle + if (divStyle) { + const div = document.createElement("div") + div.style.cssText = divStyle + div.appendChild(slider) + div.appendChild(speed) + position.prepend(div) + } else position.prepend(slider, speed) + + if (videoSpeed.value) video.playbackRate = videoSpeed.value + speed.onclick = function () { + slider.style.display = slider.style.display === "block" ? "none" : "block" + } + slider.oninput = function () { + const sliderValue = parseFloat(slider.value) + speed.textContent = (sliderValue / 10).toFixed(1) + "x" + video.playbackRate = sliderValue / 10 + videoSpeed.value = sliderValue / 10 + } + + return { slider, speed } +} +// #endregion + +// #region startSharedFuncs +type TMDBMovie = { + adult: boolean + backdrop_path: string + genre_ids: Array + id: number + original_language: string + original_title: string + original_name: string + overview: string + popularity: number + poster_path: string + release_date: string + first_air_date: string + title: string + name: string + video: boolean + vote_average: number + vote_count: number + media_type: string +} +type TMDBResponse = { + page: number + results: Array + total_pages: number + total_results: number +} + +async function getMovieInfo( + title: string, + card: HTMLElement, + media_type: string | null = null, + year: string | null = null, +) { + const locale = htmlLang || navigator?.language || "en-US" + const queryType = media_type ?? "multi" + let url = `https://api.themoviedb.org/3/search/${queryType}?query=${encodeURI(title)}&include_adult=false&language=${locale}&page=1` + if (year) url += `&year=${year}` + const data: TMDBResponse = await sendMessage("fetch", { url }, "background") + if (data != undefined) { + // themoviedb + const movie = data?.results?.[0] + const compiledData: MovieInfo = { + id: movie?.id, + media_type: queryType == "multi" ? movie?.media_type : queryType, + score: movie?.vote_average, + vote_count: movie?.vote_count, + release_date: movie?.release_date || movie?.first_air_date, + title: movie?.title || movie?.original_title || movie?.name || movie?.original_name, + date: today, + db: "tmdb", + } + DBCache[title] = compiledData + setRatingOnCard(card, compiledData, title) + } +} + +// show rating depending on page +const uuidRegex = /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/g +function showRating() { + if (isDisney) { + url = window.location.href + // disable search and suggested movies + if (url.includes("search")) return false + if (url.includes("entity")) { + const SelectedTab = document.querySelector('[aria-selected="true"]') + return ( + uuidRegex.test(SelectedTab?.id?.split("_control")?.[0] ?? "") && + SelectedTab?.getAttribute("aria-label") != "EXTRAS" + ) + } + return true + } else if (isPrimeVideo) { + // suggested movies + if (window.location.href.includes("detail")) { + return document.querySelector('[data-testid="btf-related-tab"]')?.getAttribute("tabIndex") == "0" + } + return true + } else return true +} +async function startShowRatingInterval() { + if (showRating()) addRating() + const RatingInterval = setInterval(function () { + if ( + (isNetflix && !settings.value.Netflix?.showRating) || + (isPrimeVideo && !settings.value.Amazon?.showRating) || + ((isDisney || isHotstar) && !settings.value.Disney?.showRating) || + (isHBO && !settings.value.HBO?.showRating) + ) { + console.log("stopped adding Rating") + clearInterval(RatingInterval) + return + } + if (showRating()) addRating() + }, 1000) +} +function getDiffInDays(firstDate: string, secondDate: Date) { + if (!firstDate || !secondDate) return 31 + return Math.round(Math.abs(new Date(secondDate).getTime() - new Date(firstDate).getTime()) / (1000 * 60 * 60 * 24)) +} +function useDBCache(title: string, card: HTMLElement, media_type: string | null) { + if (!DBCache[title]?.date) DBCache[title].date = today + const vote_count = DBCache[title]?.vote_count || 100 + const diffInReleaseDate = + // vote count is under 80 inaccurate rating + vote_count < 100 && + // did not refresh rating in the last 0 days + getDiffInDays(DBCache[title].date, date) > 0 && + // release date is in the last 50 days after not many people will + getDiffInDays(DBCache[title]?.release_date, date) <= 50 + + // refresh rating if older than 30 days or release date is in last month and vote count is under 100 + if (getDiffInDays(DBCache[title].date, date) >= GCdiff || diffInReleaseDate) { + if (diffInReleaseDate) + console.log( + "update recent movie:", + title, + ",Age:", + getDiffInDays(DBCache[title]?.release_date, date), + "Vote count:", + vote_count, + ) + else console.log("update old rating:", title, ",Age:", getDiffInDays(DBCache[title].date, date)) + getMovieInfo(title, card, media_type) + } else { + setRatingOnCard(card, DBCache[title], title) + } +} +function getMediaType(type: string) { + if (!type) return null + if (type.toLowerCase().includes("tv")) return "tv" + if (type.toLowerCase().includes("movie")) return "movie" + return null +} +async function addRating() { + url = window.location.href + let AllTitleCardsTypes: Array> = [] + if (isNetflix) AllTitleCardsTypes = [document.querySelectorAll(".title-card .boxart-container:not(.imdb)")] + else if (isDisney) AllTitleCardsTypes = [document.querySelectorAll("a[data-testid='set-item']:not(.imdb)")] + else if (isHotstar) AllTitleCardsTypes = [document.querySelectorAll(".swiper-slide img:not(.imdb)")] + else if (isHBO) + AllTitleCardsTypes = [document.querySelectorAll("a[class*='StyledTileLinkNormal-Beam-Web-Ent']:not(.imdb)")] + else if (isPrimeVideo) + AllTitleCardsTypes = [ + document.querySelectorAll( + "li:not(.imdb) article[data-card-title]:not([data-card-entity-type='EVENT']):not([data-card-title='Live-TV'])", + ), + document.querySelectorAll("article[data-testid*='-card']:not(.imdb):not(:has(a#rating))"), + ] + // on disney there are multiple images for the same title so only use the first one + let lastTitle = "" + // for each is not going in order on chrome + let updateDBCache = false + for (let type = 0; type < AllTitleCardsTypes.length; type++) { + const titleCards = AllTitleCardsTypes[type] + let media_type = null + for (let i = 0; i < titleCards.length; i++) { + const card = titleCards[i] as HTMLElement + // add seen class + if (isNetflix || isDisney || isHotstar || isHBO) card.classList.add("imdb") + else if (isPrimeVideo) { + if (type == 0) card?.closest("li")?.classList.add("imdb") + else if (type == 1) card?.classList.add("imdb") + } + let title: string | undefined + if (isNetflix) { + title = card?.parentElement?.getAttribute("aria-label")?.split(" (")[0] + if (url.includes("genre/83")) media_type = "tv" + else if (url.includes("genre/34399")) media_type = "movie" + } else if (isDisney) { + title = card?.getAttribute("aria-label")?.replace(" Disney+ Original", "")?.replace(" STAR Original", "") + // no section Extras on disney shows + if (url.includes("entity")) { + const SelectedTabId = document.querySelector('[aria-selected="true"]')?.id.split("_control")[0] + if (SelectedTabId != card.closest('div[role="tabpanel"]')?.id) title = "" + } + if (url.includes("browse/series")) media_type = "tv" + else if (url.includes("browse/movies")) media_type = "movie" + else if (/(Staffel)|(Nummer)|(Season)|(Episod)|(Number)/g.test(title ?? "")) media_type = "tv" + // german translation + if (htmlLang == "de") { + title = title + ?.replace(/Nummer \d* /, "") + .split(" Für Details")[0] + .split(" Staffel")[0] + .split("Staffel")[0] + .split(" Neue")[0] + .split(" Alle")[0] + .split(" Demnächst")[0] + .split(" Altersfreigabe")[0] + .split(" Mach dich bereit")[0] // deadpool + //did not find translation + .split(" Jeden")[0] + .split(" Noch")[0] + .split(" Premiere")[0] + } else if (htmlLang == "en") { + title = title + ?.replace(/Number \d* /, "") + .replace(" Select for details on this title.", "") + .split(" Season")[0] + .split("Season")[0] + .split(" New ")[0] + .split(" All Episodes")[0] + .split(" Coming")[0] + .split(" Two-Episode")[0] + .split(" Rated")[0] + .split(" Prepare for")[0] // deadpool + //did not find translation + .split(" Streaming ")[0] + //did not find translation + .replace(/ \d+ minutes remaining/g, "") + } + } else if (isHotstar) title = card?.getAttribute("alt")?.replace(/(S\d+\sE\d+)/g, "") + else if (isPrimeVideo) { + function fixTitle(title: string | undefined) { + return ( + title + ?.split(" - ")[0] + ?.split(" – ")[0] + ?.replace(/(S\d+)/g, "") + ?.replace(/ \[.*\]/g, "") + ?.replace(/\s\(.*\)/g, "") + ?.replace(/:?\sStaffel-?\s\d+/g, "") + ?.replace(/:?\sSeason-?\s\d+/g, "") + ?.replace(/ \/ \d/g, "") + ?.split(": Die komplette")[0] + // nicht sicher + ?.split(": The complete")[0] + ) + } + // detail means not live shows + if (card.querySelector("a")?.href?.includes("detail")) { + if (type == 0) title = fixTitle(card.getAttribute("data-card-title") ?? "") + else if (type == 1) title = fixTitle(card.querySelector("a")?.getAttribute("aria-label") ?? "") + } + if (url.includes("video/tv")) media_type = "tv" + else if (url.includes("video/movie")) media_type = "movie" + else media_type = getMediaType(card.getAttribute("data-card-entity-type") ?? "") + } else if (isHBO) title = card.querySelector("p[class*='md_strong-Beam-Web-Ent']")?.textContent ?? "" + // for the static Pixar Disney, Starplus etc. cards + if (!isDisney || !card?.classList.contains("_1p76x1y4")) { + // sometimes more than one image is loaded for the same title + if (title && lastTitle != title && !title.includes("Netflix") && !title.includes("Prime Video")) { + lastTitle = title + if ( + (DBCache[title]?.score || getDiffInDays(DBCache[title]?.date, date) <= 7) && + (!media_type || DBCache[title]?.media_type == media_type) + ) { + useDBCache(title, card, media_type) + } else { + getMovieInfo(title, card, media_type) + updateDBCache = true + } + } + } + } + } + if (updateDBCache) { + setTimeout(function () { + setDBCache() + }, 5000) + } +} +function getColorForRating(rating: number, lowVoteCount: boolean) { + // I want a color gradient from red to green with yellow in the middle + // the ratings are between 0 and 10 + // the average rating is 6.5 + // https://distributionofthings.com/imdb-movie-ratings/ + if (!rating || lowVoteCount) return "grey" + if (rating <= 5.5) return "red" + if (rating <= 7) return "rgb(245, 197, 24)" //#f5c518 + return "rgb(0, 166, 0)" +} +function getTMDBUrl(id: string | number, media_type: string) { + return `https://www.themoviedb.org/${media_type}/${id}` +} + +async function setRatingOnCard(card: HTMLElement, data: MovieInfo, title: string) { + let div + if (data?.id) { + div = document.createElement("a") + div.href = getTMDBUrl(data.id, data.media_type) + div.target = "_blank" + } else div = document.createElement("div") + const vote_count = data?.vote_count || 100 + // right: 1.5vw; + div.id = "rating" + Object.assign(div.style, { + position: "absolute", + bottom: "0", + color: "black", + textDecoration: "none", + background: getColorForRating(data?.score, vote_count < 50), + borderRadius: "5px", + padding: "0 2px 0 2px", + right: isNetflix ? "0.2vw" : "0", + zIndex: isDisney ? "" : "9999", + fontSize: isMobile ? "4vw" : "1vw", + }) + + if (data?.score >= 0) { + let releaseDate = "" + if (settings.value.Video?.showYear && data?.release_date) { + releaseDate = new Date(data?.release_date)?.getFullYear() + "-" + // const year = new Date(data?.release_date)?.getYear(); + // releaseDate = year >= 100 ? (year + " ").substring(1) : year + " "; + } + div.textContent = releaseDate + data.score?.toFixed(1) + div.setAttribute("alt", data?.title + ", OG title: " + title + ", Vote count: " + vote_count) + } else { + div.textContent = "?" + div.setAttribute("alt", title) + console.log("no score found:", title, data) + } + if (isNetflix) { + card.closest(".title-card-container")?.appendChild(div) + } else if (isHBO) card.appendChild(div) + else if (isDisney) { + const parentDiv = card?.closest("div") + if (parentDiv) { + if (card.nextElementSibling) { + div.style.top = card.offsetHeight + "px" + div.style.bottom = "" + } + parentDiv.style.position = "relative" + parentDiv.appendChild(div) + } + } else if (isHotstar) card?.parentElement?.appendChild(div) + else if (isPrimeVideo) { + if (card.getAttribute("data-card-title")) card?.firstChild?.firstChild?.appendChild(div) + else if (card.querySelector('div[data-testid="title-metadata-main"]')) { + card.querySelector('div[data-testid="title-metadata-main"]')?.appendChild(div) + } else card.appendChild(div) + } +} +function OnFullScreenChange() { + let video: HTMLVideoElement + if (isDisney) + video = Array.from(document.querySelectorAll("video")).find((v) => v.checkVisibility()) as HTMLVideoElement + else if (isNetflix || isHotstar || isHBO) video = document.querySelector("video") as HTMLVideoElement + else video = document.querySelector(AmazonVideoClass) as HTMLVideoElement + //TODO: window.fullScreen + if (document.fullscreenElement && video) { + video.play() + console.log("auto-played on fullscreen") + settings.value.Statistics.SegmentsSkipped++ + sendMessage("increaseBadge", {}, "background") + } +} +async function startPlayOnFullScreen() { + if (settings.value.Video?.playOnFullScreen) { + addEventListener("fullscreenchange", OnFullScreenChange) + } else { + removeEventListener("fullscreenchange", OnFullScreenChange) + } +} +// #endregion diff --git a/src/content-script/static.crunchyroll.ts b/src/content-script/static.crunchyroll.ts new file mode 100644 index 00000000..4276f572 --- /dev/null +++ b/src/content-script/static.crunchyroll.ts @@ -0,0 +1,277 @@ +import { sendMessage } from "webext-bridge/content-script" +// Global Variables + +const { data: settings, promise } = useBrowserSyncStorage("settings", defaultSettings) +const config = { attributes: true, childList: true, subtree: true } +async function logStartOfAddon() { + console.log("%cStreaming enhanced", "color: #00aeef;font-size: 2em;") + console.log("Settings", settings.value) +} +async function startCrunchyroll() { + await promise + logStartOfAddon() + if (settings.value.Crunchyroll.disableNumpad) Crunchyroll_disableNumpad() + if (settings.value.Video.doubleClick) startdoubleClick() + CrunchyrollObserver.observe(document, config) + if (settings.value.Video.playOnFullScreen) startPlayOnFullScreen() + watch( + settings, + (newValue, oldValue) => { + console.log("settings changed", newValue) + if (!oldValue || newValue.Video.playOnFullScreen !== oldValue?.Video?.playOnFullScreen) startPlayOnFullScreen() + }, + { deep: true }, + ) +} +type StatisticsKey = + | "AmazonAdTimeSkipped" + | "NetflixAdTimeSkipped" + | "DisneyAdTimeSkipped" + | "IntroTimeSkipped" + | "RecapTimeSkipped" + | "SegmentsSkipped" +async function addSkippedTime(startTime: number, endTime: number, key: StatisticsKey) { + if (typeof startTime === "number" && typeof endTime === "number" && endTime > startTime) { + console.log(key, endTime - startTime) + settings.value.Statistics[key] += endTime - startTime + increaseBadge() + } +} + +// #region Crunchyroll +// Crunchyroll functions +const CrunchyrollObserver = new MutationObserver(Crunchyroll) +function Crunchyroll() { + const video = document.querySelector("video") + if (!video) return + const time = video?.currentTime + if (settings.value.Crunchyroll?.skipIntro) Crunchyroll_Intro(video, time) + if (settings.value.Crunchyroll?.speedSlider) Crunchyroll_SpeedSlider(video) + if (settings.value.Video?.scrollVolume) Crunchyroll_scrollVolume(video) +} +async function Crunchyroll_scrollVolume(video: HTMLVideoElement) { + const volumeControl = document.querySelector('[data-testid="vilos-volume_container"]:not(.enhanced)') as HTMLElement + if (volumeControl) { + volumeControl.classList.add("enhanced") + volumeControl.addEventListener("wheel", (event: WheelEvent) => { + event.preventDefault() + let volume = video.volume + if (event.deltaY < 0) volume = Math.min(1, volume + 0.1) + else volume = Math.max(0, volume - 0.1) + video.volume = volume + const sliderKnob = document.querySelector('div[data-testid="vilos-volume_slider"]')?.children?.[1]?.firstChild + ?.firstChild as HTMLElement + if (sliderKnob) sliderKnob.style.transform = `translateX(${volume * 61}px) translateX(-8px) scale(1)` + }) + } +} + +function OnFullScreenChange() { + const video = document.querySelector("video") as HTMLVideoElement + //TODO: check if document.fullscreenElement is working before: window.fullScreen + if (document.fullscreenElement && video) { + video.play() + console.log("auto-played on fullscreen") + settings.value.Statistics.SegmentsSkipped++ + sendMessage("increaseBadge", {}, "background") + } +} +async function startPlayOnFullScreen() { + if (settings.value.Video?.playOnFullScreen) { + console.log("started observing| PlayOnFullScreen") + addEventListener("fullscreenchange", OnFullScreenChange) + } else { + console.log("stopped observing| PlayOnFullScreen") + removeEventListener("fullscreenchange", OnFullScreenChange) + } +} +let skipped = false +let audioButtonClicked = false +async function setLanguage(lang: string, index: number) { + settings.value.Crunchyroll.dubLanguage = { lang, index } +} +async function registerAudioButton() { + const Radios = document.querySelectorAll('[data-testid="vilos-settings_radio_item"]') + if (Radios) { + Radios.forEach((radio, index) => { + const checked = radio.querySelector("circle.dot")?.parentNode?.parentNode?.querySelector(".r-jwli3a") + let lang = radio.querySelector('[dir="auto"]')?.textContent ?? "" + if (checked && settings.value.Crunchyroll.dubLanguage?.lang != checked?.textContent) setLanguage(lang, index) + radio.addEventListener("click", function () { + lang = radio.querySelector('[dir="auto"]')?.textContent ?? "" + setLanguage(lang, index) + }) + }) + } +} +function setAudioLanguage() { + // check if settings_audio_track_submenu was clicked + const audioButton = document.querySelector('[data-testid="vilos-settings_audio_track_submenu"]') + if (audioButton) { + audioButton.addEventListener("click", function () { + if (!audioButtonClicked) { + audioButtonClicked = true + setTimeout(function () { + registerAudioButton() + }, 200) + } + }) + } else if (audioButtonClicked) { + setTimeout(function () { + audioButtonClicked = false + }, 1000) + } +} +let reverseButtonClicked = false +let reverseButtonStartTime: number +let reverseButtonEndTime: number +async function Crunchyroll_Intro(video: HTMLVideoElement, time: number) { + // saves the audio language to settings + setAudioLanguage() + if (!reverseButtonClicked) { + const button = document.querySelector('[data-testid="skipIntroText"]') as HTMLElement + if (button && !skipped) { + // add timeout because it can skip mid sentence if language is not japanese. + skipped = true + setTimeout( + function () { + button?.click() + skipped = false + console.log("Intro skipped", button) + setTimeout(function () { + CrunchyrollGobackbutton(video, time, video?.currentTime) + addSkippedTime(time, video?.currentTime, "IntroTimeSkipped") + }, 600) + }, + settings.value.Crunchyroll?.dubLanguage?.index === 0 || + settings.value.Crunchyroll?.dubLanguage?.index == undefined + ? 0 + : 2e3, + ) + } + } else if (!document.querySelector(".reverse-button")) { + addButton(video, reverseButtonStartTime, reverseButtonEndTime) + } +} + +function addButton(video: HTMLVideoElement, startTime: number, endTime: number) { + if (reverseButtonClicked) return + const button = document.createElement("div") + button.setAttribute( + "class", + "reverse-button css-1dbjc4n r-1awozwy r-lj0ial r-1jd5jdk r-1loqt21 r-18u37iz r-eu3ka r-1777fci r-kuhrb7 r-ymttw5 r-u8s1d r-1ff5aok r-1otgn73", + ) + button.style.color = "white" + button.textContent = "Watch skipped ?" + + const buttonTimeout = setTimeout(() => { + button.remove() + }, 5000) + button.onclick = function () { + reverseButtonClicked = true + video.currentTime = startTime + button.remove() + clearTimeout(buttonTimeout) + const waitTime = endTime - startTime + 2 + //console.log("waiting for:", waitTime); + setTimeout(function () { + reverseButtonClicked = false + }, waitTime * 1000) + } + const position = document.querySelector("#velocity-overlay-package") + if (position) position.appendChild(button) +} + +async function CrunchyrollGobackbutton(video: HTMLVideoElement, startTime: number, endTime: number) { + reverseButtonStartTime = startTime + reverseButtonEndTime = endTime + addButton(video, startTime, endTime) +} + +let videoSpeed: number +async function setVideoSpeed(speed: number) { + videoSpeed = speed +} +async function Crunchyroll_SpeedSlider(video: HTMLVideoElement) { + if (video) { + const alreadySlider = document.querySelector("#videoSpeedSlider") + if (!alreadySlider) { + // infobar position for the slider to be added + // console.log((document.querySelector("#settingsControl")); + const position = document.querySelector("#settingsControl")?.parentElement + if (position) { + videoSpeed = videoSpeed || video.playbackRate + + const slider = document.createElement("input") + slider.id = "videoSpeedSlider" + slider.type = "range" + slider.min = settings.value.General.sliderMin.toString() + slider.max = settings.value.General.sliderMax.toString() + slider.value = (videoSpeed * 10).toString() + slider.step = settings.value.General.sliderSteps.toString() + slider.style.display = "none" + slider.style.width = "200px" + + const speed = document.createElement("p") + speed.id = "videoSpeed" + speed.textContent = videoSpeed ? videoSpeed.toFixed(1) + "x" : "1.0x" + // makes the button clickable + // speed.setAttribute("class", "control-icon-btn"); + speed.style.color = "white" + speed.style.margin = "auto" + speed.style.padding = "0 5px" + position.prepend(slider, speed) + + if (videoSpeed) video.playbackRate = videoSpeed + speed.onclick = function (event) { + event.stopPropagation() + slider.style.display = slider.style.display === "block" ? "none" : "block" + } + slider.onclick = function (event) { + event.stopPropagation() + } + slider.oninput = function (event) { + event.stopPropagation() + speed.textContent = (parseInt(slider.value) / 10).toFixed(1) + "x" + video.playbackRate = parseInt(slider.value) / 10 + setVideoSpeed(parseInt(slider.value) / 10) + } + } + } + } +} +async function Crunchyroll_disableNumpad() { + addEventListener( + "keydown", + async function (event) { + if (event.location === 3) { + console.log("key blocked: " + event.key) + event.stopPropagation() + settings.value.Statistics.SegmentsSkipped++ + sendMessage("increaseBadge", {}, "background") + } + }, + true, + ) +} +async function startdoubleClick() { + if (settings.value.Video?.doubleClick) { + // event listener for double click + document.ondblclick = function () { + const video = document.querySelector("video") + if (video) { + // video is fullscreen + //TODO: check if document.fullscreenElement is working before: window.fullScreen + if (document.fullscreenElement) { + document.exitFullscreen() + } else { + document.body.requestFullscreen() + } + } + } + } else { + document.ondblclick = null + } +} +// #endregion +startCrunchyroll() diff --git a/src/locales/de.json b/src/locales/de.json new file mode 100644 index 00000000..437ed3dc --- /dev/null +++ b/src/locales/de.json @@ -0,0 +1,104 @@ +{ + "extensionName": "Streaming enhanced: Netflix Disney+ Prime Video", + "extensionDescription": "Werbung, Intros, Rückblicke, Abspanne usw. auf Netflix, Prime video, Disney+, Crunchyroll und HBO max überspringen.", + "settingsTitle": "Einstellungen - Streaming enhanced", + "pageTitle": "Streaming enhanced", + "rateNow": "Jetzt bewerten!", + "sharedSettings": "Gemeinsame Einstellungen", + "sharedSettingsDescription": "Mit diesen Optionen wird nur der {0}-Teil der gemeinsamen Einstellung aktiviert/deaktiviert", + "backup": "Sichern", + "statistics": "Statistik", + "changelog": "Changelog", + "donate": "Spende", + "pageSpecificTitle": "{0} spezifisch", + "defaultfilterPaidDescription": "Entfernen aller kostenpflichtigen Filme/Serien Kategorien von Amazon Prime", + "sharedPageTitle": "Gemeinsame Videofunktionen", + "sharedPageDescription": "Diese Optionen aktivieren/deaktivieren die Einstellungen für alle Streaming-Dienste. In der folgenden Tabelle können Sie die gemeinsamen Einstellungen für einen bestimmten Dienst deaktivieren.", + "skipIntroSwitch": "Intros & Rückblicke überspringen:", + "skipIntroDescription": "Überspringen der Intros und Rückblicke beliebiger Serien. Außer Netflix, da dort Rückblicke nicht noch einmal angesehen werden können.", + "creditsSwitch": "Abspann überspringen:", + "creditsDescription": "Springt so schnell wie möglich zur nächsten Episode jeder Serie", + "skipAdSwitch": "Werbung überspringen:", + "adsDescription": "Überspringen der Freevee-Werbung für Amazon und Werbung in der Netflix-Basisstufe", + "sliderSwitch": "Geschwindigkeitsregler:", + "sliderDescription": "Geschwindigkeitsregler hinzufügen.", + "sliderOptions": "Slider-Optionen: Geschwindigkeit = Schrittgröße /10", + "sliderStepSize": "Slider Schrittgröße:", + "sliderMin": "Slider minimum:", + "sliderMax": "Slider maximum:", + "sliderPreview": "Slider Vorschau:", + "fullscreenSwitch": "Im Vollbildmodus abspielen:", + "fullscreenDescription": "Wenn ein Video auf Vollbild umgeschaltet wird, wird das Video automatisch abgespielt", + "selfAdSwitch": "Eigenwerbung überspringen:", + "selfAdDescription": "Überspringen der Prime-Show-Vorschauen, die vor jedem Video angezeigt werden", + "filterPaidSwitch": "Bezahlte Inhalte entfernen:", + "filterPaidDescription": "Entfernen aller bezahlten Serien/Filmkategorien", + "continuePositionSwitch": "Kategorie \"Fortsetzen\" verschieben:", + "continuePositionDescription": "Kategorie \"Fortsetzen\" an den Seitenanfang verschieben", + "freeveeSwitch": "Freevee-Werbungen überspringen:", + "skipRecapSwitch": "Rückblicke überspringen:", + "skipRecapDescription": "Überspringt Rückblicke jeder Sendung", + "skipBlockedSwitch": "Inaktivitätswarnung blocken:", + "skipBlockedDescription": "Setzt das Video fort, wenn die Aufforderung 'Sehen Sie noch zu' angezeigt wird", + "profileSwitch": "Automatisch das letztes Profil auswählen:", + "profileDescription": "Das zuletzt verwendete Profil wird direkt beim Start der Seite ausgewählt", + "user": "Benutzer:", + "statisticPageTitle": "Statistik", + "skippedTime": "Übersprungene Zeit:", + "amazonAdDescription": "Zeit der übersprungenen FreeVee Werbung + Prime Video Eigenwerbung", + "statisticAd": "{0} Werbung:", + "netflixAdDescription": "Zeit der übersprungenen Netflix-Werbung", + "statisticIntro": "Intro:", + "statisticIntroDescription": "Zeit der übersprungenen Intros auf Netflix, Amazon und Disney+", + "statisticRecap": "Rückblicke:", + "statisticskipRecapDescription": "Zeit der übersprungenen Rückblicke auf Netflix, Amazon und Disney+", + "statisticSegments": "Übersprungene Segmente:", + "statisticSegmentsDescription": "Anzahl der übersprungenen einzelnen Segmente wie ein Intro oder eine Werbung für Netflix, Amazon und Disney+", + "importSettings": "Alle Einstellungen importieren/exportieren", + "saveSettings": "Einstellungen als Datei speichern", + "uploadSettings": "Einstellungen hochladen", + "resetAddon": "Addon auf Standard zurücksetzen", + "noWrap": "unset", + "watchCreditsSwitch": "Abspann ansehen:", + "watchCreditsDescription": "Sich immer den Abspann jeder Serie ansehen", + "conflictingTitle": "Alle widersprüchlichen Funktionen", + "ratingSwitch": "TMDB Bewertung:", + "ratingDescription": "Zeigt die TMDB Bewertung für jeden Film/Serie an", + "releaseCalendarSwitch": "Release-Kalender Optionen hinzufügen:", + "releaseCalendarDescription": "Fügt dem Veröffentlichungskalender die Kontrollkästchen 'Nur Playlists anzeigen' und 'DUB filtern' hinzu", + "epilepsySwitch": "Epilepsy option", + "epilepsyDescription": "Beim überspringen der Werbung den Bildschirm verdunkeln", + "userAgentSwitch": "Zu Desktop-Webseiten wechseln", + "userAgentDescription": "Für prime video und disney+ auf die Desktop-Website wechseln und für amazon die Website mobilfreundlich machen", + "xraySwitch": "Xray ausblenden:", + "xrayDescription": "Ausblenden der Xray-Schnellansicht über einem video", + "feature": "Funktion: Tooltip für mehr Informationen", + "shared": "Alle", + "openSharedSettings": "Gemeinsame Einstellungen öffnen", + "autoOpenSettings": "Öffnen Sie automatisch die richtigen Einstellungen:", + "autoOpenDescription": "Wenn auf der Streaming-Seite öffnet sich die entsprechenden Einstellungen im popup automatisch", + "duplicateSwitch": "Entfernt doppelte Shows:", + "duplicateDescription": "Entfernt jede doppelte Show, die bereits vorher auf Disney sichtbar war. Sichtbar bedeutet, dass die Show unter den ersten 5 Shows in jeder Reihe war", + "watchSkippedButton": "Zurückspulen?", + "homeButton": "Startseite", + "bigPlayerSwitch": "Video vergrößern:", + "bigPlayerDescription": "Erweitert die größe des Videos zum gesamten Browserfenster ohne Vollbild.", + "disableNumpadSwitch": "Ziffernblock deaktivieren:", + "disableNumpadDescription": "Deaktivieren Sie die Zifferntasten, damit nicht versehentlich die aktuelle Videozeit /-position geändert wird.", + "doubleClickSwitch": "Vollbildmodus mit Doppelklick:", + "doubleClickDescription": "Wenn Sie auf das Video doppelklicken, wird es im Vollbildmodus angezeigt.", + "scrollVolumeSwitch": "Scrollen für Lautstärke:", + "scrollVolumeDescription": "Wenn Sie auf dem Tonsymbol nach oben oder unten scrollen, wird die Lautstärke geändert.", + "disneyAdDescription": "Zeit der übersprungenen Disney-Werbung.", + "showYearSwitch": "Erscheinungsjahr anzeigen:", + "showYearDescription": "Zeigt das Erscheinungsjahr neben der Bewertung an.", + "installPageTitle": "🎉 Installiert! 🚀", + "installThanks": "Vielen Dank für die Installation von Streaming Enhanced! ❤️", + "installTurnOnOptional": "Alle optionalen Funktionen einschalten:", + "tabsPermission": "die für das automatische Öffnen der richtigen Einstellungen erforderlich sind", + "missingPermission": "Fehlende Berechtigungen erkannt", + "iframeTitle": "Unterstützung von Streaming enhanced ❤️", + "iframeButton": "Affiliate-Link anwenden", + "affiliateSwitch": "Partner-Popup:", + "affiliateDescription": "Wenn eine Seite mit einem Affiliate-Link geöffnet ist, wird ein Popup-Fenster angezeigt, um den Affiliate-Link anzuwenden, z. B. für amazon prime." +} \ No newline at end of file diff --git a/src/locales/en.json b/src/locales/en.json new file mode 100644 index 00000000..99af03e1 --- /dev/null +++ b/src/locales/en.json @@ -0,0 +1,104 @@ +{ + "extensionName": "Streaming enhanced: Netflix Disney+ Prime Video", + "extensionDescription": "Skip ads, intros, credits and add adjust speed, etc. on Netflix, Prime video, Disney+, Crunchyroll and HBO max.", + "settingsTitle": "Settings - Streaming enhanced", + "pageTitle": "Streaming enhanced", + "rateNow": "Rate now!", + "sharedSettings": "Shared Settings", + "sharedSettingsDescription": "These options will only enable/disable the {0} part of the shared setting", + "backup": "Backup", + "statistics": "Statistics", + "changelog": "Changelog", + "donate": "Donate", + "pageSpecificTitle": "{0} specific", + "defaultfilterPaidDescription": "Removing every paid movie/series category from Amazon prime", + "sharedPageTitle": "Shared Video features", + "sharedPageDescription": "These options will only enable/disable the settings for all streaming services. In the below table you can disable the shared settings for a specific service", + "skipIntroSwitch": "Skip Intro & Recap:", + "skipIntroDescription": "Skipping the intros and recaps of any series. Except Netflix since there Recaps cannot be watched again.", + "creditsSwitch": "Skip Credits:", + "creditsDescription": "Skipping to the next episode of every series as fast as possible", + "skipAdSwitch": "Skip Ads:", + "skipAdDescription": "Skipping freevee ads for amazon and all of the ads in the basic Netflix tier", + "sliderSwitch": "Add Speed control:", + "sliderDescription": "Adding a speed adjustment slider", + "sliderOptions": "Slider options: speed = stepsize /10", + "sliderStepSize": "Slider stepsize:", + "sliderMin": "Slider minimum:", + "sliderMax": "Slider maximum:", + "sliderPreview": "Slider preview:", + "fullscreenSwitch": "Play on fullscreen:", + "fullscreenDescription": "If a video is put on fullscreen, the video will play automatically", + "selfAdSwitch": "Skip Self Ads:", + "selfAdDescription": "Skipping the prime show previews which are shown before any video", + "filterPaidSwitch": "Remove paid content:", + "filterPaidDescription": "Removing every paid movie/series category", + "continuePositionSwitch": "Move category \"Continue\":", + "continuePositionDescription": "Move category \"Continue\" to the top of the page", + "freeveeSwitch": "Skip Freevee Ads:", + "skipRecapSwitch": "Skip Recaps:", + "skipRecapDescription": "Skips recapitulations of every show", + "skipBlockedSwitch": "Resume inactivity warning:", + "skipBlockedDescription": "Resumes the video if the 'Are you still watching' prompt is shown", + "profileSwitch": "Auto pick last profile:", + "profileDescription": "The last used profile is directly chosen when the page is launched", + "user": "User:", + "statisticPageTitle": "Statistics", + "skippedTime": "Skipped time:", + "amazonAdDescription": "Time of skipped FreeVee Ads + Prime Video Self Ads", + "statisticAd": "{0} Ad:", + "netflixAdDescription": "Time of skipped Netflix Ads", + "statisticIntro": "Intro:", + "statisticIntroDescription": "Time of skipped Intros on Netflix, Amazon and Disney+", + "statisticRecap": "Recap:", + "statisticskipRecapDescription": "Time of skipped Recaps on Netflix, Amazon and Disney+", + "statisticSegments": "Segments Skipped:", + "statisticSegmentsDescription": "Amount of Individual Segments Skipped like an Intro or an Ad for Netflix, Amazon and Disney+", + "importSettings": "Import/Export all Settings", + "saveSettings": "Save Settings as file", + "uploadSettings": "Upload settings", + "resetAddon": "Reset Addon to default", + "noWrap": "nowrap", + "watchCreditsSwitch": "Watch Credits:", + "watchCreditsDescription": "Always watch the credits of every series", + "conflictingTitle": "All conflicting Features", + "ratingSwitch": "TMDB Rating:", + "ratingDescription": "Adding the TMDB rating to every movie and series", + "releaseCalendarSwitch": "Add Release Calendar options:", + "releaseCalendarDescription": "Adds the checkboxes 'Show Playlists only' and 'Filter DUB' to the release calendar", + "epilepsySwitch": "Epilepsy option", + "epilepsyDescription": "Darken the screen when skipping the ad", + "userAgentSwitch": "Switch to desktop websites", + "userAgentDescription": "For prime video and disney+ change to the Desktop website and for amazon make the site mobile friendly", + "xraySwitch": "Hide Xray:", + "xrayDescription": "Hide the Xray Quick View over a video", + "feature": "Feature: Tooltip for more information", + "shared": "All", + "openSharedSettings": "Open Shared Settings", + "autoOpenSettings": "Automatically open correct Settings:", + "autoOpenDescription": "If on streaming site open the according settings in popup automatically", + "duplicateSwitch": "Remove duplicate Shows:", + "duplicateDescription": "Remove every duplicate show, which was already visible on Disney before. Visible means that the show is in the first 5 shows in every row", + "watchSkippedButton": "Rewind?", + "homeButton": "Home", + "bigPlayerSwitch": "Video bigger:", + "bigPlayerDescription": "Extends the video size to the entire browser window without full screen.", + "disableNumpadSwitch": "Disable numpad:", + "disableNumpadDescription": "Disable the numpad keys so you don't accidentally change the current video time/position.", + "doubleClickSwitch": "Fullscreen by double clicking:", + "doubleClickDescription": "If you double click on the video it will go to fullscreen.", + "scrollVolumeSwitch": "Scroll for volume:", + "scrollVolumeDescription": "Scrolling up or down on the Sound Icon will change the volume.", + "disneyAdDescription": "Time of skipped Disney Ads.", + "showYearSwitch": "Show release year:", + "showYearDescription": "Shows the release year next to the rating.", + "installPageTitle": "🎉 Installed! 🚀", + "installThanks": "Thank you for installing Streaming enhanced! ❤️", + "installTurnOnOptional": "Turn on all optional features:", + "tabsPermission": "necessary for the automatic opening of the correct settings", + "missingPermission": "Missing permissions detected", + "iframeTitle": "Support Streaming enhanced ❤️", + "iframeButton": "Apply affiliate link", + "affiliateSwitch": "Affiliate Popup:", + "affiliateDescription": "If a page with affiliate link is open, shows popup to apply affiliate link, like for amazon prime." +} \ No newline at end of file diff --git a/src/locales/es.json b/src/locales/es.json new file mode 100644 index 00000000..97272c05 --- /dev/null +++ b/src/locales/es.json @@ -0,0 +1,104 @@ +{ + "extensionName": "Streaming enhanced: Netflix Disney+ Prime Video", + "extensionDescription": "Omite anuncios, intros, créditos y añade ajustar velocidad, etc. en Netflix, Prime video, Disney+, Crunchyroll y HBO max.", + "settingsTitle": "Ajustes - Streaming enhanced", + "pageTitle": "Streaming enhanced", + "rateNow": "¡Califique ahora!", + "sharedSettings": "Ajustes compartidos", + "sharedSettingsDescription": "Estas opciones sólo activarán/desactivarán la parte {0} de la configuración compartida", + "backup": "Copia de seguridad", + "statistics": "Estadísticas", + "changelog": "Registro de cambios", + "donate": "Donar", + "pageSpecificTitle": "{0} específico", + "defaultfilterPaidDescription": "Eliminación de todas las categorías de películas/series de pago de Amazon prime", + "sharedPageTitle": "Funciones de vídeo compartido", + "sharedPageDescription": "Estas opciones sólo activarán/desactivarán los ajustes para todos los servicios de streaming. En la siguiente tabla puede desactivar los ajustes compartidos para un servicio específico", + "skipIntroSwitch": "Skip Intro & Recap:", + "skipIntroDescription": "Saltarse las intros y las recapitulaciones de cualquier serie. Excepto Netflix, ya que los resúmenes no se pueden volver a ver.", + "creditsSwitch": "Saltar créditos:", + "creditsDescription": "Saltar al siguiente episodio de cada serie lo más rápido posible", + "skipAdSwitch": "Saltar anuncios:", + "skipAdDescription": "Saltar los anuncios de freevee para amazon y todos los anuncios en el nivel básico de Netflix", + "sliderSwitch": "Añadir control de velocidad:", + "sliderDescription": "Añadir un control deslizante de ajuste de la velocidad", + "sliderOptions": "Opciones del control deslizante: velocidad = tamaño del paso /10", + "sliderStepSize": "Tamaño de paso del deslizador:", + "sliderMin": "Deslizador mínimo:", + "sliderMax": "Deslizador máximo:", + "sliderPreview": "Vista previa del deslizador:", + "fullscreenSwitch": "Juega a pantalla completa:", + "fullscreenDescription": "Si un vídeo se pone en pantalla completa, se reproducirá automáticamente", + "selfAdSwitch": "Saltar anuncios propios:", + "selfAdDescription": "Saltar los avances de los programas de máxima audiencia que se muestran antes de cualquier vídeo", + "filterPaidSwitch": "Elimine los contenidos de pago:", + "filterPaidDescription": "Eliminación de todas las categorías de películas/series de pago", + "continuePositionSwitch": "Mover categoría \"Continuar\":", + "continuePositionDescription": "Mover la categoría \"Continuar\" a la parte superior de la página", + "freeveeSwitch": "Saltar anuncios de Freevee:", + "skipRecapSwitch": "Skip Recaps:", + "skipRecapDescription": "Se salta las recapitulaciones de cada programa", + "skipBlockedSwitch": "Reanudar aviso de inactividad:", + "skipBlockedDescription": "Reanuda el vídeo si se muestra el mensaje \"¿Sigue viendo el vídeo?", + "profileSwitch": "Elección automática del último perfil:", + "profileDescription": "Al abrir la página, se selecciona directamente el último perfil utilizado.", + "user": "Usuario:", + "statisticPageTitle": "Estadísticas", + "skippedTime": "Tiempo perdido:", + "amazonAdDescription": "Tiempo de anuncios de FreeVee omitidos + anuncios propios de Prime Video", + "statisticAd": "{0} Ad:", + "netflixAdDescription": "Tiempo de anuncios de Netflix omitidos", + "statisticIntro": "Intro:", + "statisticIntroDescription": "Tiempo de Intros saltadas en Netflix, Amazon y Disney+.", + "statisticRecap": "Recapitulemos:", + "statisticskipRecapDescription": "Tiempo de recapitulaciones omitidas en Netflix, Amazon y Disney+.", + "statisticSegments": "Segmentos saltados:", + "statisticSegmentsDescription": "Cantidad de segmentos individuales omitidos como una introducción o un anuncio para Netflix, Amazon y Disney+.", + "importSettings": "Importar/exportar todos los ajustes", + "saveSettings": "Guardar configuración como archivo", + "uploadSettings": "Cargar configuración", + "resetAddon": "Restablecer Addon por defecto", + "noWrap": "nowrap", + "watchCreditsSwitch": "Ver créditos:", + "watchCreditsDescription": "Ver siempre los créditos de cada serie", + "conflictingTitle": "Todas las características en conflicto", + "ratingSwitch": "Clasificación TMDB:", + "ratingDescription": "Añadir la clasificación TMDB a todas las películas y series", + "releaseCalendarSwitch": "Añadir opciones de calendario de publicación:", + "releaseCalendarDescription": "Añade las casillas \"Mostrar sólo listas de reproducción\" y \"Filtrar DUB\" al calendario de lanzamientos.", + "epilepsySwitch": "Opción epilepsia", + "epilepsyDescription": "Oscurecer la pantalla al saltar el anuncio", + "userAgentSwitch": "Cambiar a sitios web de escritorio", + "userAgentDescription": "Para prime video y disney+ cambiar a la web de escritorio y para amazon hacer el sitio móvil amigable", + "xraySwitch": "Ocultar Rayos X:", + "xrayDescription": "Ocultar la vista rápida de rayos X sobre un vídeo", + "feature": "Función: Tooltip para más información", + "shared": "Todos", + "openSharedSettings": "Abrir la configuración compartida", + "autoOpenSettings": "Abrir automáticamente la configuración correcta:", + "autoOpenDescription": "Si en el sitio de streaming de abrir la configuración de acuerdo en la ventana emergente de forma automática", + "duplicateSwitch": "Eliminar duplicados Espectáculos:", + "duplicateDescription": "Elimina todos los programas duplicados que ya estaban visibles en Disney. Visible significa que el programa está entre los 5 primeros programas de cada fila.", + "watchSkippedButton": "¿Rebobinar?", + "homeButton": "Inicio", + "bigPlayerSwitch": "Un vídeo más grande:", + "bigPlayerDescription": "Amplía el tamaño del vídeo a toda la ventana del navegador sin pantalla completa.", + "disableNumpadSwitch": "Desactiva el teclado numérico:", + "disableNumpadDescription": "Desactiva las teclas del teclado numérico para no cambiar accidentalmente el tiempo/posición de vídeo actual.", + "doubleClickSwitch": "Pantalla completa haciendo doble clic:", + "doubleClickDescription": "Si haces doble clic en el vídeo, pasará a pantalla completa.", + "scrollVolumeSwitch": "Desplácese para el volumen:", + "scrollVolumeDescription": "Si se desplaza hacia arriba o hacia abajo en el icono de sonido, cambiará el volumen.", + "disneyAdDescription": "Tiempo de anuncios Disney saltados.", + "showYearSwitch": "Mostrar año de lanzamiento:", + "showYearDescription": "Muestra el año de publicación junto a la clasificación.", + "installPageTitle": "🎉 ¡Instalado! 🚀", + "installThanks": "¡Gracias por instalar Streaming enhanced! ❤️", + "installTurnOnOptional": "Activa todas las funciones opcionales:", + "tabsPermission": "necesarios para la apertura automática de los ajustes correctos", + "missingPermission": "Permisos detectados", + "iframeTitle": "Soporte Streaming enhanced ❤️", + "iframeButton": "Aplicar enlace de afiliado", + "affiliateSwitch": "Ventana emergente de afiliación:", + "affiliateDescription": "Si una página con enlace de afiliado está abierta, muestra popup para aplicar enlace de afiliado, como para amazon prime." +} \ No newline at end of file diff --git a/src/locales/fr.json b/src/locales/fr.json new file mode 100644 index 00000000..276696a1 --- /dev/null +++ b/src/locales/fr.json @@ -0,0 +1,104 @@ +{ + "extensionName": "Streaming enhanced: Netflix Disney+ Prime Video", + "extensionDescription": "Passez les publicités, intros, génériques et ajustez la vitesse, etc. sur Netflix, Prime video, Disney+, Crunchyroll et HBO max.", + "settingsTitle": "Paramètres - Streaming enhanced", + "pageTitle": "Streaming enhanced", + "rateNow": "Tarifer maintenant !", + "sharedSettings": "Paramètres partagés", + "sharedSettingsDescription": "Ces options n'activeront/désactiveront que la partie {0} du paramètre partagé", + "backup": "Sauvegarde", + "statistics": "Statistiques", + "changelog": "Changelog", + "donate": "Faire un don", + "pageSpecificTitle": "{0} spécifique", + "defaultfilterPaidDescription": "Suppression de toutes les catégories de films et de séries payantes sur Amazon Prime", + "sharedPageTitle": "Fonctionnalités de la vidéo partagée", + "sharedPageDescription": "Ces options n'activent/désactivent les paramètres que pour tous les services de diffusion en continu. Dans le tableau ci-dessous, vous pouvez désactiver les paramètres partagés pour un service spécifique.", + "skipIntroSwitch": "Skip Intro & Recap:", + "skipIntroDescription": "Sauter les intros et les récapitulatifs de n'importe quelle série. Sauf Netflix, car les récapitulatifs ne peuvent pas être regardés à nouveau.", + "creditsSwitch": "Crédits Skip:", + "creditsDescription": "Passer à l'épisode suivant de chaque série aussi vite que possible", + "skipAdSwitch": "Sauter les annonces:", + "skipAdDescription": "Sauter les publicités freevee pour amazon et toutes les publicités dans le niveau de base de Netflix", + "sliderSwitch": "Ajouter le contrôle de la vitesse:", + "sliderDescription": "Ajout d'un curseur de réglage de la vitesse", + "sliderOptions": "Options du curseur: vitesse = taille du pas /10", + "sliderStepSize": "Taille du curseur:", + "sliderMin": "Slider minimum:", + "sliderMax": "Maximum de la glissière:", + "sliderPreview": "Aperçu du curseur:", + "fullscreenSwitch": "Jouer en plein écran:", + "fullscreenDescription": "Si une vidéo est mise en plein écran, la vidéo sera lue automatiquement.", + "selfAdSwitch": "Skip Self Ads:", + "selfAdDescription": "Sauter les aperçus des émissions de premier plan qui sont diffusés avant toute vidéo", + "filterPaidSwitch": "Supprimer les contenus payants:", + "filterPaidDescription": "Suppression de toutes les catégories de films/séries payants", + "continuePositionSwitch": "Déplacer la catégorie \"Continuer\":", + "continuePositionDescription": "Déplacer la catégorie \"Continuer\" en haut de la page", + "freeveeSwitch": "Sauter les annonces de Freevee:", + "skipRecapSwitch": "Skip Recaps:", + "skipRecapDescription": "Sauter les récapitulations de chaque émission", + "skipBlockedSwitch": "Avertissement d'inactivité de reprise:", + "skipBlockedDescription": "Reprend la vidéo si l'invite \"Êtes-vous toujours en train de regarder\" s'affiche.", + "profileSwitch": "Sélection automatique du dernier profil:", + "profileDescription": "Le dernier profil utilisé est directement choisi lors du lancement de la page.", + "user": "Utilisateur:", + "statisticPageTitle": "Statistiques", + "skippedTime": "Le temps a sauté:", + "amazonAdDescription": "Durée des publicités FreeVee sautées + publicités Prime Video Self", + "statisticAd": "{0} Ad:", + "netflixAdDescription": "Durée des publicités Netflix sautées", + "statisticIntro": "Intro:", + "statisticIntroDescription": "L'heure des introductions sautées sur Netflix, Amazon et Disney+", + "statisticRecap": "Récapitulation:", + "statisticskipRecapDescription": "Les récapitulatifs de Time of skipped sur Netflix, Amazon et Disney+", + "statisticSegments": "Segments ignorés:", + "statisticSegmentsDescription": "Nombre de segments individuels sautés comme une intro ou une publicité pour Netflix, Amazon et Disney+", + "importSettings": "Importer/exporter tous les paramètres", + "saveSettings": "Enregistrer les paramètres dans un fichier", + "uploadSettings": "Paramètres de téléchargement", + "resetAddon": "Réinitialiser l'addon par défaut", + "noWrap": "piège à souris", + "watchCreditsSwitch": "Voir les crédits:", + "watchCreditsDescription": "Toujours regarder le générique de chaque série", + "conflictingTitle": "Toutes les caractéristiques contradictoires", + "ratingSwitch": "TMDB Rating:", + "ratingDescription": "Ajouter la note TMDB à chaque film et série", + "releaseCalendarSwitch": "Ajouter des options de calendrier de diffusion:", + "releaseCalendarDescription": "Ajoute les cases à cocher \"Afficher uniquement les listes de lecture\" et \"Filtrer DUB\" au calendrier des sorties.", + "epilepsySwitch": "Option épilepsie", + "epilepsyDescription": "Assombrir l'écran lorsque l'on saute la publicité", + "userAgentSwitch": "Passer à des sites web de bureau", + "userAgentDescription": "Pour prime video et disney+, passer au site web de bureau et pour amazon, rendre le site adapté aux mobiles.", + "xraySwitch": "Cacher la radiographie:", + "xrayDescription": "Masquer l'affichage rapide des radiographies sur une vidéo", + "feature": "Fonctionnalité: Info-bulle pour plus d'informations", + "shared": "Tous", + "openSharedSettings": "Ouvrir les paramètres partagés", + "autoOpenSettings": "Ouvrir automatiquement les paramètres corrects:", + "autoOpenDescription": "Si vous êtes sur un site de streaming, les paramètres correspondants s'ouvrent automatiquement dans une fenêtre contextuelle.", + "duplicateSwitch": "Supprimer les spectacles en double:", + "duplicateDescription": "Supprimez tous les spectacles en double, qui étaient déjà visibles sur Disney auparavant. Visible signifie que le spectacle se trouve dans les 5 premiers spectacles de chaque ligne.", + "watchSkippedButton": "Retour en arrière ?", + "homeButton": "Accueil", + "bigPlayerSwitch": "Vidéo plus grande:", + "bigPlayerDescription": "Étend la taille de la vidéo à l'ensemble de la fenêtre du navigateur sans passer par le plein écran.", + "disableNumpadSwitch": "Désactiver le pavé numérique:", + "disableNumpadDescription": "Désactivez les touches du pavé numérique afin de ne pas modifier accidentellement la durée/la position de la vidéo en cours.", + "doubleClickSwitch": "Plein écran en double-cliquant:", + "doubleClickDescription": "Si vous double-cliquez sur la vidéo, elle s'affichera en plein écran.", + "scrollVolumeSwitch": "Défilement pour le volume:", + "scrollVolumeDescription": "Le défilement vers le haut ou vers le bas de l'icône du son modifie le volume.", + "disneyAdDescription": "Durée des publicités Disney sautées.", + "showYearSwitch": "Année de sortie de l'exposition :", + "showYearDescription": "Indique l'année de publication à côté de la note.", + "installPageTitle": "🎉 Installé ! 🚀", + "installThanks": "Merci d'avoir installé Streaming enhanced ! ❤️", + "installTurnOnOptional": "Activer toutes les fonctions optionnelles :", + "tabsPermission": "nécessaire à l'ouverture automatique des paramètres corrects", + "missingPermission": "Permissions manquantes détectées", + "iframeTitle": "Support Streaming enhanced ❤️", + "iframeButton": "Appliquer le lien d'affiliation", + "affiliateSwitch": "Popup d'affiliation :", + "affiliateDescription": "Si une page contenant un lien d'affiliation est ouverte, une fenêtre contextuelle s'affiche pour appliquer le lien d'affiliation, comme pour amazon prime." +} \ No newline at end of file diff --git a/src/locales/it.json b/src/locales/it.json new file mode 100644 index 00000000..47daf1c3 --- /dev/null +++ b/src/locales/it.json @@ -0,0 +1,104 @@ +{ + "extensionName": "Streaming enhanced: Netflix Disney+ Prime Video", + "extensionDescription": "Salta annunci, intro, titoli di coda e regola la velocità su Netflix, Prime Video, Disney+, Crunchyroll e HBO Max.", + "settingsTitle": "Impostazioni - Streaming enhanced", + "pageTitle": "Streaming enhanced", + "rateNow": "Vota ora!", + "sharedSettings": "Impostazioni condivise", + "sharedSettingsDescription": "Queste opzioni abilitano/disabilitano solo la parte {0} dell'impostazione condivisa", + "backup": "Backup", + "statistics": "Statistiche", + "changelog": "Changelog", + "donate": "Donare", + "pageSpecificTitle": "{0} specifico", + "defaultfilterPaidDescription": "Rimozione di ogni categoria di film/serie a pagamento da Amazon prime", + "sharedPageTitle": "Caratteristiche dei video condivisi", + "sharedPageDescription": "Queste opzioni abilitano/disabilitano le impostazioni solo per tutti i servizi di streaming. Nella tabella seguente è possibile disattivare le impostazioni condivise per un servizio specifico.", + "skipIntroSwitch": "Salta l'introduzione e la ripetizione:", + "skipIntroDescription": "Saltare le introduzioni e i riassunti di qualsiasi serie. Tranne che su Netflix, dove i riassunti non possono essere guardati di nuovo.", + "creditsSwitch": "Crediti di salto:", + "creditsDescription": "Saltare all'episodio successivo di ogni serie il più velocemente possibile", + "skipAdSwitch": "Salta gli annunci:", + "skipAdDescription": "Saltare gli annunci di freevee per amazon e tutti gli annunci nel livello base di Netflix", + "sliderSwitch": "Aggiungere il controllo della velocità:", + "sliderDescription": "Aggiunta di un cursore di regolazione della velocità", + "sliderOptions": "Opzioni del cursore: velocità = stepsize /10", + "sliderStepSize": "Dimensione del cursore:", + "sliderMin": "Cursore minimo:", + "sliderMax": "Cursore massimo:", + "sliderPreview": "Anteprima del cursore:", + "fullscreenSwitch": "Riproduzione a schermo intero:", + "fullscreenDescription": "Se un video viene messo a schermo intero, il video verrà riprodotto automaticamente.", + "selfAdSwitch": "Salta gli annunci personali:", + "selfAdDescription": "Saltare le anteprime della prima serata, che vengono mostrate prima di ogni video.", + "filterPaidSwitch": "Rimuovere i contenuti a pagamento:", + "filterPaidDescription": "Rimozione di tutte le categorie di film/serie a pagamento", + "continuePositionSwitch": "Spostare la categoria \"Continua\":", + "continuePositionDescription": "Spostare la categoria \"Continua\" all'inizio della pagina", + "freeveeSwitch": "Salta gli annunci di Freevee:", + "skipRecapSwitch": "Skip Recaps:", + "skipRecapDescription": "Salta le ricapitolazioni di ogni spettacolo", + "skipBlockedSwitch": "Avviso di inattività della ripresa:", + "skipBlockedDescription": "Riprende il video se viene visualizzato il messaggio \"Stai ancora guardando\".", + "profileSwitch": "Scelta automatica dell'ultimo profilo:", + "profileDescription": "All'avvio della pagina viene scelto direttamente l'ultimo profilo utilizzato.", + "user": "Utente:", + "statisticPageTitle": "Statistiche", + "skippedTime": "Tempo saltato:", + "amazonAdDescription": "Tempo degli annunci FreeVee saltati + Prime Video Self Ads", + "statisticAd": "{0} Annuncio:", + "netflixAdDescription": "Tempo di salto degli annunci di Netflix", + "statisticIntro": "Introduzione:", + "statisticIntroDescription": "Tempo di intro saltate su Netflix, Amazon e Disney+", + "statisticRecap": "Riconoscimento:", + "statisticskipRecapDescription": "Il tempo delle repliche saltate su Netflix, Amazon e Disney+", + "statisticSegments": "Segmenti saltati:", + "statisticSegmentsDescription": "Quantità di singoli segmenti saltati come un'introduzione o una pubblicità per Netflix, Amazon e Disney+", + "importSettings": "Importazione/Esportazione di tutte le impostazioni", + "saveSettings": "Salva le impostazioni come file", + "uploadSettings": "Impostazioni di caricamento", + "resetAddon": "Ripristinare l'impostazione predefinita del componente aggiuntivo", + "noWrap": "nowrap", + "watchCreditsSwitch": "Guarda i crediti:", + "watchCreditsDescription": "Guardate sempre i titoli di coda di ogni serie", + "conflictingTitle": "Tutte le caratteristiche in conflitto", + "ratingSwitch": "Valutazione TMDB:", + "ratingDescription": "Aggiunta della valutazione TMDB a tutti i film e le serie", + "releaseCalendarSwitch": "Aggiungere le opzioni del calendario di rilascio:", + "releaseCalendarDescription": "Aggiunge le caselle di controllo \"Mostra solo playlist\" e \"Filtra DUB\" al calendario delle uscite.", + "epilepsySwitch": "Opzione epilessia", + "epilepsyDescription": "Oscuramento dello schermo quando si salta l'annuncio", + "userAgentSwitch": "Passare a siti web desktop", + "userAgentDescription": "Per prime video e disney+ passare al sito web per desktop e per amazon rendere il sito compatibile con i dispositivi mobili.", + "xraySwitch": "Nascondere i raggi X:", + "xrayDescription": "Nascondere la vista rapida Xray su un video", + "feature": "Caratteristica: Tooltip per maggiori informazioni", + "shared": "Tutti", + "openSharedSettings": "Aprire le impostazioni condivise", + "autoOpenSettings": "Aprire automaticamente le impostazioni corrette:", + "autoOpenDescription": "Se sul sito di streaming si aprono automaticamente le impostazioni corrispondenti nel popup", + "duplicateSwitch": "Rimuovere i duplicati delle Mostre:", + "duplicateDescription": "Rimuove tutti gli spettacoli duplicati che erano già visibili su Disney. Visibile significa che lo spettacolo è tra i primi 5 spettacoli di ogni riga.", + "watchSkippedButton": "Riavvolgere?", + "homeButton": "Casa", + "bigPlayerSwitch": "Video più grande:", + "bigPlayerDescription": "Estende le dimensioni del video all'intera finestra del browser senza schermo intero.", + "disableNumpadSwitch": "Disabilita il tastierino numerico:", + "disableNumpadDescription": "Disattivare i tasti del tastierino numerico per evitare di modificare accidentalmente la posizione o l'ora del video corrente.", + "doubleClickSwitch": "Fare doppio clic su schermo intero:", + "doubleClickDescription": "Se si fa doppio clic sul video, questo verrà visualizzato a schermo intero.", + "scrollVolumeSwitch": "Scorrere per il volume:", + "scrollVolumeDescription": "Lo scorrimento verso l'alto o verso il basso dell'icona del suono modifica il volume.", + "disneyAdDescription": "Tempo di salto degli annunci Disney.", + "showYearSwitch": "Anno di uscita dello spettacolo:", + "showYearDescription": "Mostra l'anno di uscita accanto al rating.", + "installPageTitle": "🎉 Installato! 🚀", + "installThanks": "Grazie per aver installato Streaming enhanced! ❤️", + "installTurnOnOptional": "Attivare tutte le funzioni opzionali:", + "tabsPermission": "necessario per l'apertura automatica delle impostazioni corrette", + "missingPermission": "Rilevati permessi mancanti", + "iframeTitle": "Supporto Streaming enhanced ❤️", + "iframeButton": "Applicare il link di affiliazione", + "affiliateSwitch": "Popup di affiliazione:", + "affiliateDescription": "Se una pagina con un link di affiliazione è aperta, mostra un popup per applicare il link di affiliazione, come per amazon prime." +} \ No newline at end of file diff --git a/src/locales/ja.json b/src/locales/ja.json new file mode 100644 index 00000000..1b554b0d --- /dev/null +++ b/src/locales/ja.json @@ -0,0 +1,104 @@ +{ + "extensionName": "Streaming enhanced: Netflix Disney+ Prime Video", + "extensionDescription": "Netflix、Prime video、Disney+、Crunchyroll、HBO maxでは、広告、イントロ、クレジットをスキップし、速度などを調整できます。", + "settingsTitle": "設定 - Streaming enhanced", + "pageTitle": "Streaming enhanced", + "rateNow": "今すぐレートを", + "sharedSettings": "共有設定", + "sharedSettingsDescription": "これらのオプションは、共有設定の{0}部分のみを有効/無効にします。", + "backup": "バックアップ", + "statistics": "統計", + "changelog": "変更履歴", + "donate": "寄付する", + "pageSpecificTitle": "{0} 専用", + "defaultfilterPaidDescription": "Amazonプライムからすべての有料映画/シリーズカテゴリーを削除", + "sharedPageTitle": "共有ビデオ機能", + "sharedPageDescription": "これらのオプションは、すべてのストリーミングサービスの設定のみを有効/無効にします。以下の表では、特定のサービスの共有設定を無効にすることができます。", + "skipIntroSwitch": "イントロと総括をスキップする:", + "skipIntroDescription": "どのシリーズでもイントロと総集編をスキップする。ただし、Netflixは再放送ができないので別だ。", + "creditsSwitch": "スキップ・クレジット", + "creditsDescription": "すべてのシリーズの次のエピソードにできるだけ早く飛ぶ", + "skipAdSwitch": "広告をスキップする:", + "skipAdDescription": "amazonのfreevee広告とNetflixのベーシック・ティアの広告をすべてスキップする。", + "sliderSwitch": "スピードコントロールを追加する:", + "sliderDescription": "スピード調整スライダーの追加", + "sliderOptions": "スライダーのオプション:スピード = ステップサイズ /10", + "sliderStepSize": "スライダーのステップサイズ:", + "sliderMin": "スライダーの最小値:", + "sliderMax": "スライダーの最大値:", + "sliderPreview": "スライダーのプレビュー", + "fullscreenSwitch": "フルスクリーンで再生する:", + "fullscreenDescription": "ビデオをフルスクリーンにすると、自動的に再生されます。", + "selfAdSwitch": "自己広告をスキップする:", + "selfAdDescription": "ビデオの前に表示されるプライムショーのプレビューをスキップする。", + "filterPaidSwitch": "有料コンテンツを削除する:", + "filterPaidDescription": "すべての有料映画/シリーズカテゴリーの削除", + "continuePositionSwitch": "カテゴリーを「続ける」に移動する:", + "continuePositionDescription": "カテゴリー \"Continue \"をページのトップに移動", + "freeveeSwitch": "フリービー広告をスキップする:", + "skipRecapSwitch": "スキップ・リキャップ", + "skipRecapDescription": "すべてのショーの総括を省略", + "skipBlockedSwitch": "非アクティブの警告を再開する:", + "skipBlockedDescription": "まだ見ていますか」というプロンプトが表示されたら、ビデオを再開する", + "profileSwitch": "最後のプロファイルを自動的に選択します:", + "profileDescription": "最後に使用されたプロファイルは、ページが立ち上げられたときに直接選択される", + "user": "ユーザー", + "statisticPageTitle": "統計", + "skippedTime": "時間を飛ばした:", + "amazonAdDescription": "FreeVee広告+プライム・ビデオ自己広告のスキップ時間", + "statisticAd": "{0} 広告:", + "netflixAdDescription": "Netflix広告のスキップ時間", + "statisticIntro": "イントロダクション", + "statisticIntroDescription": "Netflix、Amazon、Disney+のイントロがスキップされる時間", + "statisticRecap": "総括する:", + "statisticskipRecapDescription": "Netflix、Amazon、Disney+で再放送をスキップした時間", + "statisticSegments": "セグメントスキップ:", + "statisticSegmentsDescription": "Netflix、Amazon、Disney+のイントロや広告のようにスキップされた個別セグメントの量", + "importSettings": "すべての設定のインポート/エクスポート", + "saveSettings": "設定をファイルに保存", + "uploadSettings": "設定のアップロード", + "resetAddon": "アドオンをデフォルトに戻す", + "noWrap": "ナウラップ", + "watchCreditsSwitch": "クレジットを見る", + "watchCreditsDescription": "すべてのシリーズのクレジットを見る", + "conflictingTitle": "相反するすべての機能", + "ratingSwitch": "TMDBの評価", + "ratingDescription": "すべての映画とシリーズにTMDBの評価を加える", + "releaseCalendarSwitch": "リリースカレンダーのオプションを追加:", + "releaseCalendarDescription": "リリースカレンダーに「プレイリストのみ表示」と「DUBをフィルタリング」のチェックボックスを追加", + "epilepsySwitch": "てんかんオプション", + "epilepsyDescription": "広告スキップ時に画面を暗くする", + "userAgentSwitch": "デスクトップウェブサイトへの切り替え", + "userAgentDescription": "プライム・ビデオとdisney+はデスクトップ・サイトに変更し、amazonはモバイル・フレンドリー・サイトにする。", + "xraySwitch": "X線を隠す:", + "xrayDescription": "Xrayクイックビューをビデオの上に隠す", + "feature": "特徴詳細情報のツールチップ", + "shared": "すべて", + "openSharedSettings": "共有設定を開く", + "autoOpenSettings": "自動的に正しい設定を開きます:", + "autoOpenDescription": "ストリーミング・サイトの場合、ポップアップで該当する設定を自動的に開く", + "duplicateSwitch": "重複する番組を削除する:", + "duplicateDescription": "以前ディズニーで表示されていた重複ショーをすべて削除する。表示されているということは、そのショーがすべての行の最初の5つのショーに入っているということです。", + "watchSkippedButton": "巻き戻し?", + "homeButton": "ホーム", + "bigPlayerSwitch": "ビデオも大きくなった:", + "bigPlayerDescription": "フルスクリーンにすることなく、動画サイズをブラウザウィンドウ全体に拡大します。", + "disableNumpadSwitch": "テンキーパッドを無効にする:", + "disableNumpadDescription": "誤って現在のビデオ時間/位置を変更しないように、テンキーキーを無効にします。", + "doubleClickSwitch": "ダブルクリックでフルスクリーン:", + "doubleClickDescription": "ビデオをダブルクリックするとフルスクリーンになります。", + "scrollVolumeSwitch": "音量をスクロールする:", + "scrollVolumeDescription": "サウンドアイコンを上下にスクロールすると音量が変わります。", + "disneyAdDescription": "ディズニーの広告をスキップした時間。", + "showYearSwitch": "ショーのリリース年", + "showYearDescription": "レーティングの横にリリース年を表示。", + "installPageTitle": "インストールされています!🚀", + "installThanks": "Streaming enhancedをインストールしていただきありがとうございます!❤️", + "installTurnOnOptional": "すべてのオプション機能をオンにする:", + "tabsPermission": "正しい設定の自動オープンに必要", + "missingPermission": "欠落したパーミッションが検出された", + "iframeTitle": "Support Streaming enhanced ❤️", + "iframeButton": "アフィリエイトリンクを貼る", + "affiliateSwitch": "アフィリエイト・ポップアップ", + "affiliateDescription": "アフィリエイトリンクのあるページが開いている場合、amazonプライムのようにアフィリエイトリンクを適用するためのポップアップを表示する。" +} \ No newline at end of file diff --git a/src/locales/ko.json b/src/locales/ko.json new file mode 100644 index 00000000..2bf4e363 --- /dev/null +++ b/src/locales/ko.json @@ -0,0 +1,104 @@ +{ + "extensionName": "Streaming enhanced: Netflix Disney+ Prime Video", + "extensionDescription": "넷플릭스, 프라임 비디오, 디즈니+, 크런치롤, HBO max에서 광고, 인트로, 크레딧을 건너뛰고 속도 조절 등을 추가할 수 있습니다.", + "settingsTitle": "설정 - Streaming enhanced", + "pageTitle": "Streaming enhanced", + "rateNow": "지금 평가하세요!", + "sharedSettings": "공유 설정", + "sharedSettingsDescription": "이러한 옵션은 공유 설정의 {0} 부분만 활성화/비활성화합니다.", + "backup": "백업", + "statistics": "통계", + "changelog": "변경 로그", + "donate": "기부하기", + "pageSpecificTitle": "{0} 특정", + "defaultfilterPaidDescription": "Amazon Prime에서 모든 유료 영화/시리즈 카테고리 제거하기", + "sharedPageTitle": "공유 비디오 기능", + "sharedPageDescription": "이러한 옵션은 모든 스트리밍 서비스에 대한 설정만 활성화/비활성화합니다. 아래 표에서 특정 서비스에 대한 공유 설정을 비활성화할 수 있습니다.", + "skipIntroSwitch": "소개 및 요약 건너뛰기:", + "skipIntroDescription": "모든 시리즈의 인트로 및 요약 건너뛰기. 넷플릭스는 다시 볼 수 없는 요약본이 있으므로 제외합니다.", + "creditsSwitch": "크레딧 건너뛰기:", + "creditsDescription": "모든 시리즈의 다음 에피소드로 최대한 빠르게 건너뛰기", + "skipAdSwitch": "광고 건너뛰기:", + "skipAdDescription": "아마존 프리비 광고 건너뛰기 및 기본 넷플릭스 티어의 모든 광고 건너뛰기", + "sliderSwitch": "속도 제어를 추가합니다:", + "sliderDescription": "속도 조절 슬라이더 추가", + "sliderOptions": "슬라이더 옵션: 속도 = 단계 크기 /10", + "sliderStepSize": "슬라이더 단계 크기:", + "sliderMin": "최소 슬라이더:", + "sliderMax": "슬라이더 최대:", + "sliderPreview": "슬라이더 미리 보기:", + "fullscreenSwitch": "전체 화면으로 재생합니다:", + "fullscreenDescription": "동영상이 전체 화면으로 표시되면 동영상이 자동으로 재생됩니다.", + "selfAdSwitch": "셀프 광고 건너뛰기:", + "selfAdDescription": "동영상 전에 표시되는 프라임 쇼 미리보기 건너뛰기", + "filterPaidSwitch": "유료 콘텐츠를 제거합니다:", + "filterPaidDescription": "모든 유료 영화/시리즈 카테고리 삭제", + "continuePositionSwitch": "카테고리 이동 \"계속\":", + "continuePositionDescription": "카테고리 '계속'을 페이지 상단으로 이동합니다.", + "freeveeSwitch": "프리비 광고 건너뛰기:", + "skipRecapSwitch": "요약 건너뛰기:", + "skipRecapDescription": "모든 프로그램 요약 건너뛰기", + "skipBlockedSwitch": "비활성 상태 재개 경고:", + "skipBlockedDescription": "'아직 시청 중이십니까'라는 메시지가 표시되면 동영상을 다시 시작합니다.", + "profileSwitch": "마지막 프로필 자동 선택:", + "profileDescription": "페이지가 시작될 때 마지막으로 사용한 프로필이 바로 선택됩니다.", + "user": "사용자:", + "statisticPageTitle": "통계", + "skippedTime": "시간 건너뛰기:", + "amazonAdDescription": "프리비 광고 + 프라임 비디오 셀프 광고 건너뛰기 시간", + "statisticAd": "{0} 광고:", + "netflixAdDescription": "넷플릭스 광고를 건너뛴 시간", + "statisticIntro": "소개:", + "statisticIntroDescription": "넷플릭스, 아마존, 디즈니+에서 인트로를 건너뛴 시간", + "statisticRecap": "요약합니다:", + "statisticskipRecapDescription": "넷플릭스, 아마존 및 디즈니+에서 건너뛴 요약 시간", + "statisticSegments": "세그먼트 건너뛰기:", + "statisticSegmentsDescription": "넷플릭스, 아마존 및 디즈니+의 인트로 또는 광고처럼 건너뛴 개별 세그먼트의 수", + "importSettings": "모든 설정 가져오기/내보내기", + "saveSettings": "설정을 파일로 저장", + "uploadSettings": "업로드 설정", + "resetAddon": "애드온을 기본값으로 재설정", + "noWrap": "nowrap", + "watchCreditsSwitch": "크레딧 보기:", + "watchCreditsDescription": "모든 시리즈의 크레딧을 항상 시청하세요", + "conflictingTitle": "충돌하는 모든 기능", + "ratingSwitch": "TMDB 등급:", + "ratingDescription": "모든 영화 및 시리즈에 TMDB 등급 추가하기", + "releaseCalendarSwitch": "릴리즈 캘린더 옵션을 추가합니다:", + "releaseCalendarDescription": "출시 캘린더에 '재생목록만 표시' 및 'DUB 필터링' 확인란을 추가합니다.", + "epilepsySwitch": "간질 옵션", + "epilepsyDescription": "광고 건너뛰기 시 화면 어둡게 하기", + "userAgentSwitch": "데스크톱 웹사이트로 전환", + "userAgentDescription": "프라임 비디오 및 디즈니+의 경우 데스크톱 웹사이트로 변경하고 아마존의 경우 사이트를 모바일 친화적으로 만듭니다.", + "xraySwitch": "X레이 숨기기:", + "xrayDescription": "동영상 위에 X레이 퀵뷰 숨기기", + "feature": "기능: 기능: 자세한 내용은 도구 설명", + "shared": "모두", + "openSharedSettings": "공유 설정 열기", + "autoOpenSettings": "올바른 설정이 자동으로 열립니다:", + "autoOpenDescription": "스트리밍 사이트에서 해당 설정이 자동으로 팝업으로 열리면 다음과 같이 설정합니다.", + "duplicateSwitch": "중복된 쇼를 제거합니다:", + "duplicateDescription": "이전에 Disney에서 이미 표시되었던 중복 쇼를 모두 제거합니다. 표시됨은 모든 행의 처음 5개 쇼에 해당 쇼가 있음을 의미합니다.", + "watchSkippedButton": "되감기?", + "homeButton": "홈", + "bigPlayerSwitch": "동영상 크게 보기:", + "bigPlayerDescription": "동영상 크기를 전체 화면 없이 브라우저 창 전체로 확장합니다.", + "disableNumpadSwitch": "숫자 패드를 비활성화합니다:", + "disableNumpadDescription": "현재 동영상 시간/위치를 실수로 변경하지 않도록 숫자패드 키를 비활성화합니다.", + "doubleClickSwitch": "두 번 클릭하면 전체 화면으로 전환됩니다:", + "doubleClickDescription": "동영상을 두 번 클릭하면 전체 화면으로 이동합니다.", + "scrollVolumeSwitch": "볼륨을 찾으려면 스크롤합니다:", + "scrollVolumeDescription": "사운드 아이콘을 위아래로 스크롤하면 볼륨이 변경됩니다.", + "disneyAdDescription": "디즈니 광고를 건너뛴 시간.", + "showYearSwitch": "출시 연도를 표시합니다:", + "showYearDescription": "등급 옆에 출시 연도를 표시합니다.", + "installPageTitle": "🎉 설치 완료! 🚀", + "installThanks": "스트리밍 기능을 설치해 주셔서 감사합니다! ❤️", + "installTurnOnOptional": "모든 옵션 기능을 켭니다:", + "tabsPermission": "올바른 설정을 자동으로 여는 데 필요합니다.", + "missingPermission": "누락된 권한이 감지됨", + "iframeTitle": "Support Streaming enhanced ❤️", + "iframeButton": "제휴사 링크 적용", + "affiliateSwitch": "제휴사 팝업:", + "affiliateDescription": "제휴 링크가 있는 페이지가 열려 있으면 아마존 프라임과 같이 제휴 링크를 적용할 수 있는 팝업을 표시합니다." +} \ No newline at end of file diff --git a/src/locales/pl.json b/src/locales/pl.json new file mode 100644 index 00000000..1bb0fc1c --- /dev/null +++ b/src/locales/pl.json @@ -0,0 +1,104 @@ +{ + "extensionName": "Streaming enhanced: Netflix Disney+ Prime Video", + "extensionDescription": "Pomiń reklamy, wstępy, napisy końcowe i dostosuj prędkość itp. w serwisach Netflix, Prime Video, Disney+, Crunchyroll i HBO max.", + "settingsTitle": "Ustawienia - Streaming enhanced", + "pageTitle": "Streaming enhanced", + "rateNow": "Oceń teraz!", + "sharedSettings": "Ustawienia współdzielone", + "sharedSettingsDescription": "Te opcje włączą/wyłączą tylko część {0} współdzielonego ustawienia", + "backup": "Backup", + "statistics": "Statystyki", + "changelog": "Dziennik zmian", + "donate": "Darowizna", + "pageSpecificTitle": "{0} Specyficzna", + "defaultfilterPaidDescription": "Usunięcie każdej płatnej kategorii filmów/seriali z Amazon Prime", + "sharedPageTitle": "Funkcje udostępnionego wideo", + "sharedPageDescription": "Opcje te włączą/wyłączą ustawienia tylko dla wszystkich usług streamingowych. W poniższej tabeli można wyłączyć współdzielone ustawienia dla określonej usługi.", + "skipIntroSwitch": "Pomiń wprowadzenie i podsumowanie:", + "skipIntroDescription": "Pomijanie wstępów i podsumowań dowolnego serialu. Z wyjątkiem Netflixa, ponieważ tam recapów nie można oglądać ponownie.", + "creditsSwitch": "Pomiń kredyty:", + "creditsDescription": "Przeskakiwanie do następnego odcinka każdej serii tak szybko, jak to możliwe.", + "skipAdSwitch": "Pomiń reklamy:", + "skipAdDescription": "Pomijanie reklam freevee dla amazon i wszystkich reklam w podstawowej warstwie Netflix.", + "sliderSwitch": "Dodaj kontrolę prędkości:", + "sliderDescription": "Dodanie suwaka regulacji prędkości", + "sliderOptions": "Opcje suwaka: prędkość = wielkość kroku /10", + "sliderStepSize": "Wielkość kroku suwaka:", + "sliderMin": "Suwak minimum:", + "sliderMax": "Maksymalny suwak:", + "sliderPreview": "Podgląd suwaka:", + "fullscreenSwitch": "Graj na pełnym ekranie:", + "fullscreenDescription": "Jeśli wideo zostanie wyświetlone na pełnym ekranie, będzie ono odtwarzane automatycznie.", + "selfAdSwitch": "Pomiń reklamy własne:", + "selfAdDescription": "Pomijanie podglądu głównego programu, który jest wyświetlany przed każdym filmem.", + "filterPaidSwitch": "Usuń płatne treści:", + "filterPaidDescription": "Usunięcie każdej płatnej kategorii filmów/seriali", + "continuePositionSwitch": "Przenieś kategorię \"Kontynuuj\":", + "continuePositionDescription": "Przeniesienie kategorii \"Kontynuuj\" na górę strony", + "freeveeSwitch": "Pomiń reklamy Freevee:", + "skipRecapSwitch": "Pomiń podsumowania:", + "skipRecapDescription": "Pomija podsumowania każdego programu", + "skipBlockedSwitch": "Ostrzeżenie o braku aktywności:", + "skipBlockedDescription": "Wznawia odtwarzanie wideo, jeśli wyświetlany jest monit \"Czy nadal oglądasz\".", + "profileSwitch": "Automatyczny wybór ostatniego profilu:", + "profileDescription": "Ostatnio używany profil jest wybierany bezpośrednio po uruchomieniu strony", + "user": "Użytkownik:", + "statisticPageTitle": "Statystyki", + "skippedTime": "Pominięty czas:", + "amazonAdDescription": "Czas pominiętych reklam FreeVee + reklamy własne Prime Video", + "statisticAd": "{0} Ad:", + "netflixAdDescription": "Czas pominiętych reklam Netflix", + "statisticIntro": "Wprowadzenie:", + "statisticIntroDescription": "Czas pominiętych intro w serwisach Netflix, Amazon i Disney+", + "statisticRecap": "Podsumowanie:", + "statisticskipRecapDescription": "Czas pominiętych podsumowań w serwisach Netflix, Amazon i Disney+", + "statisticSegments": "Pominięte segmenty:", + "statisticSegmentsDescription": "Liczba pominiętych pojedynczych segmentów, takich jak intro lub reklama w serwisach Netflix, Amazon i Disney+", + "importSettings": "Import/eksport wszystkich ustawień", + "saveSettings": "Zapisz ustawienia jako plik", + "uploadSettings": "Ustawienia przesyłania", + "resetAddon": "Przywróć domyślne ustawienia dodatku", + "noWrap": "nowrap", + "watchCreditsSwitch": "Kredyty na oglądanie:", + "watchCreditsDescription": "Zawsze oglądaj napisy końcowe każdego serialu", + "conflictingTitle": "Wszystkie sprzeczne funkcje", + "ratingSwitch": "Ocena TMDB:", + "ratingDescription": "Dodawanie oceny TMDB do każdego filmu i serialu", + "releaseCalendarSwitch": "Dodaj opcje kalendarza wydań:", + "releaseCalendarDescription": "Dodaje pola wyboru \"Pokaż tylko listy odtwarzania\" i \"Filtruj DUB\" do kalendarza wydań.", + "epilepsySwitch": "Opcja padaczki", + "epilepsyDescription": "Przyciemnianie ekranu podczas pomijania reklam", + "userAgentSwitch": "Przełączanie na witryny stacjonarne", + "userAgentDescription": "Dla prime video i disney+ zmień stronę na desktopową, a dla amazon zrób stronę przyjazną dla urządzeń mobilnych.", + "xraySwitch": "Ukryj rentgen:", + "xrayDescription": "Ukryj szybki podgląd rentgenowski nad wideo", + "feature": "Funkcja: Podpowiedź, aby uzyskać więcej informacji", + "shared": "Wszystkie", + "openSharedSettings": "Otwórz Ustawienia udostępnione", + "autoOpenSettings": "Automatycznie otwórz prawidłowe ustawienia:", + "autoOpenDescription": "Jeśli na stronie streamingowej automatycznie otworzą się odpowiednie ustawienia w wyskakującym okienku", + "duplicateSwitch": "Usuń zduplikowane pokazy:", + "duplicateDescription": "Usuń każdy zduplikowany program, który był już wcześniej widoczny w Disney. Widoczny oznacza, że program znajduje się w pierwszych 5 programach w każdym rzędzie.", + "watchSkippedButton": "Przewinąć?", + "homeButton": "Strona główna", + "bigPlayerSwitch": "Wideo większe:", + "bigPlayerDescription": "Rozszerza rozmiar wideo do całego okna przeglądarki bez pełnego ekranu.", + "disableNumpadSwitch": "Wyłącz klawiaturę numeryczną:", + "disableNumpadDescription": "Wyłącz klawisze numeryczne, aby przypadkowo nie zmienić bieżącego czasu/pozycji wideo.", + "doubleClickSwitch": "Pełny ekran po dwukrotnym kliknięciu:", + "doubleClickDescription": "Dwukrotne kliknięcie wideo spowoduje przejście do trybu pełnoekranowego.", + "scrollVolumeSwitch": "Przewijanie głośności:", + "scrollVolumeDescription": "Przewijanie ikony dźwięku w górę lub w dół powoduje zmianę głośności.", + "disneyAdDescription": "Czas pominiętych reklam Disneya.", + "showYearSwitch": "Rok premiery programu:", + "showYearDescription": "Pokazuje rok wydania obok oceny.", + "installPageTitle": "🎉 Zainstalowany! 🚀", + "installThanks": "Dziękujemy za zainstalowanie Streaming enhanced! ❤️", + "installTurnOnOptional": "Włącz wszystkie opcjonalne funkcje:", + "tabsPermission": "niezbędne do automatycznego otwarcia prawidłowych ustawień", + "missingPermission": "Wykryto brakujące uprawnienia", + "iframeTitle": "pomoc Streaming enhanced ❤️", + "iframeButton": "Zastosuj link partnerski", + "affiliateSwitch": "Wyskakujące okienko partnerskie:", + "affiliateDescription": "Jeśli strona z linkiem partnerskim jest otwarta, wyświetla wyskakujące okienko, aby zastosować link partnerski, jak w przypadku amazon prime." +} \ No newline at end of file diff --git a/src/locales/pt.json b/src/locales/pt.json new file mode 100644 index 00000000..592dcafd --- /dev/null +++ b/src/locales/pt.json @@ -0,0 +1,104 @@ +{ + "extensionName": "Streaming enhanced: Netflix Disney+ Prime Video", + "extensionDescription": "Salte anúncios, introduções, créditos e ajuste a velocidade, etc. no Netflix, Prime video, Disney+, Crunchyroll e HBO max.", + "settingsTitle": "Definições - Streaming enhanced", + "pageTitle": "Streaming enhanced", + "rateNow": "Avaliar agora!", + "sharedSettings": "Definições partilhadas", + "sharedSettingsDescription": "Estas opções apenas activam/desactivam a parte {0} da definição partilhada", + "backup": "Cópia de segurança", + "statistics": "Estatísticas", + "changelog": "Registo de alterações", + "donate": "Doar", + "pageSpecificTitle": "{0} específico", + "defaultfilterPaidDescription": "Remoção de todas as categorias de filmes/séries pagas do Amazon prime", + "sharedPageTitle": "Caraterísticas do vídeo partilhado", + "sharedPageDescription": "Estas opções só activam/desactivam as definições para todos os serviços de streaming. Na tabela abaixo, pode desativar as definições partilhadas para um serviço específico", + "skipIntroSwitch": "Saltar a introdução e a recapitulação:", + "skipIntroDescription": "Saltar as introduções e recapitulações de qualquer série. Exceto no Netflix, onde as recapitulações não podem ser vistas novamente.", + "creditsSwitch": "Saltar Créditos:", + "creditsDescription": "Saltar para o episódio seguinte de cada série o mais rapidamente possível", + "skipAdSwitch": "Saltar anúncios:", + "skipAdDescription": "Saltar os anúncios do freevee para a amazon e todos os anúncios do nível básico da Netflix", + "sliderSwitch": "Adicionar Controlo de velocidade:", + "sliderDescription": "Adicionar um cursor de ajuste de velocidade", + "sliderOptions": "Opções do seletor: velocidade = tamanho do passo /10", + "sliderStepSize": "Tamanho do passo do seletor:", + "sliderMin": "Mínimo do seletor:", + "sliderMax": "Deslizador máximo:", + "sliderPreview": "Pré-visualização de diapositivos:", + "fullscreenSwitch": "Reproduzir em ecrã completo:", + "fullscreenDescription": "Se um vídeo for colocado em ecrã inteiro, o vídeo será reproduzido automaticamente", + "selfAdSwitch": "Saltar anúncios próprios:", + "selfAdDescription": "Saltar as antevisões do programa principal que são apresentadas antes de qualquer vídeo", + "filterPaidSwitch": "Remover conteúdo pago:", + "filterPaidDescription": "Remoção de todas as categorias de filmes/séries pagos", + "continuePositionSwitch": "Mover a categoria \"Continuar\":", + "continuePositionDescription": "Mover a categoria \"Continuar\" para o topo da página", + "freeveeSwitch": "Saltar anúncios do Freevee:", + "skipRecapSwitch": "Saltar Recapitulações:", + "skipRecapDescription": "Salta as recapitulações de todos os espectáculos", + "skipBlockedSwitch": "Aviso de inatividade do currículo:", + "skipBlockedDescription": "Retoma o vídeo se a mensagem \"Ainda está a ver\" for apresentada", + "profileSwitch": "Seleção automática do último perfil:", + "profileDescription": "O último perfil utilizado é escolhido diretamente quando a página é lançada", + "user": "Utilizador:", + "statisticPageTitle": "Estatísticas", + "skippedTime": "Tempo saltado:", + "amazonAdDescription": "Tempo de anúncios FreeVee ignorados + anúncios Prime Video Self", + "statisticAd": "{0} Anúncio:", + "netflixAdDescription": "Tempo de anúncios da Netflix ignorados", + "statisticIntro": "Introdução:", + "statisticIntroDescription": "Tempo de introduções ignoradas na Netflix, Amazon e Disney+", + "statisticRecap": "Recapitulação:", + "statisticskipRecapDescription": "Recapitulações de Time of Skipped na Netflix, Amazon e Disney+", + "statisticSegments": "Segmentos ignorados:", + "statisticSegmentsDescription": "Quantidade de segmentos individuais saltados como uma introdução ou um anúncio para a Netflix, Amazon e Disney+", + "importSettings": "Importar/Exportar todas as definições", + "saveSettings": "Guardar definições como ficheiro", + "uploadSettings": "Carregar definições", + "resetAddon": "Repor a predefinição da extensão", + "noWrap": "nowrap", + "watchCreditsSwitch": "Créditos do relógio:", + "watchCreditsDescription": "Ver sempre os créditos de todas as séries", + "conflictingTitle": "Todas as caraterísticas contraditórias", + "ratingSwitch": "Classificação TMDB:", + "ratingDescription": "Adicionar a classificação TMDB a todos os filmes e séries", + "releaseCalendarSwitch": "Adicionar opções de calendário de lançamento:", + "releaseCalendarDescription": "Adiciona as caixas de verificação \"Mostrar apenas listas de reprodução\" e \"Filtrar DUB\" ao calendário de lançamentos", + "epilepsySwitch": "Opção de epilepsia", + "epilepsyDescription": "Escurecer o ecrã quando saltar o anúncio", + "userAgentSwitch": "Mudar para sítios Web de secretária", + "userAgentDescription": "No caso do Prime Video e do Disney+, mudar para o sítio Web para computador e, no caso da Amazon, tornar o sítio Web compatível com os telemóveis", + "xraySwitch": "Esconder o raio X:", + "xrayDescription": "Ocultar a visualização rápida do raio X sobre um vídeo", + "feature": "Funcionalidade: Sugestão de ferramenta para mais informações", + "shared": "Todos", + "openSharedSettings": "Abrir Definições Partilhadas", + "autoOpenSettings": "Abrir automaticamente as Definições corretas:", + "autoOpenDescription": "Se estiver num sítio de transmissão, abra automaticamente as definições correspondentes na janela de contexto", + "duplicateSwitch": "Remover os programas duplicados:", + "duplicateDescription": "Remover todos os espectáculos duplicados que já estavam visíveis na Disney anteriormente. Visível significa que o espetáculo está entre os primeiros 5 espectáculos de cada fila", + "watchSkippedButton": "Rebobinar?", + "homeButton": "Início", + "bigPlayerSwitch": "Vídeo maior:", + "bigPlayerDescription": "Aumenta o tamanho do vídeo para toda a janela do browser sem ecrã completo.", + "disableNumpadSwitch": "Desativar o teclado numérico:", + "disableNumpadDescription": "Desativar as teclas do teclado numérico para não alterar acidentalmente a hora/posição atual do vídeo.", + "doubleClickSwitch": "Ecrã completo com um duplo clique:", + "doubleClickDescription": "Se fizer duplo clique no vídeo, este passará para ecrã inteiro.", + "scrollVolumeSwitch": "Deslocação para o volume:", + "scrollVolumeDescription": "Deslocar-se para cima ou para baixo no ícone de som altera o volume.", + "disneyAdDescription": "Tempo de saltar anúncios da Disney.", + "showYearSwitch": "Ano de lançamento do espetáculo:", + "showYearDescription": "Mostra o ano de lançamento ao lado da classificação.", + "installPageTitle": "🎉 Instalado! 🚀", + "installThanks": "Obrigado por instalar o Streaming enhanced! ❤️", + "installTurnOnOptional": "Ativar todas as caraterísticas opcionais:", + "tabsPermission": "necessário para a abertura automática das definições corretas", + "missingPermission": "Detectadas permissões em falta", + "iframeTitle": "Suporte a Streaming enhanced ❤️", + "iframeButton": "Aplicar a ligação de afiliado", + "affiliateSwitch": "Popup de afiliado:", + "affiliateDescription": "Se uma página com uma ligação de afiliado estiver aberta, mostra uma janela pop-up para aplicar a ligação de afiliado, como no caso do amazon prime." +} \ No newline at end of file diff --git a/src/locales/pt_BR.json b/src/locales/pt_BR.json new file mode 100644 index 00000000..72f23914 --- /dev/null +++ b/src/locales/pt_BR.json @@ -0,0 +1,104 @@ +{ + "extensionName": "Streaming enhanced Netflix Disney Prime Video", + "extensionDescription": "Pule anúncios, introduções, créditos e ajuste a velocidade... na Netflix, Prime Video, Disney+, Crunchyroll e HBO Max.", + "settingsTitle": "Configurações - aprimoramento de serviços de streaming", + "pageTitle": "Streaming enhanced", + "rateNow": "Avalie agora!", + "sharedSettings": "Configurações compartilhadas", + "sharedSettingsDescription": "Essas opções só serão ativadas/desativas a partir de {0} da configuração compartilhada", + "backup": "Cópia de segurança", + "statistics": "Estatísticas", + "changelog": "Registro de mudanças", + "donate": "Doar", + "pageSpecificTitle": "{0}", + "defaultfilterPaidDescription": "Remove todas as categorias de filmes/séries pagos do Amazon Prime", + "sharedPageTitle": "Recursos de vídeo compartilhado", + "sharedPageDescription": "Essas opções serão ativadas ou desativadas para todas os serviços de streaming. Na tabela abaixo, você pode desativar as configurações compartilhadas de um serviço específico.", + "skipIntroSwitch": "Pular a introdução e recapitulação:", + "skipIntroDescription": "Pular as introduções e recapitulações de qualquer série. Exceto na Netflix, pois as recapitulações não podem ser assistidas novamente.", + "creditsSwitch": "Ignorar créditos:", + "creditsDescription": "Pular para o próximo episódio de cada série o mais rápido possível", + "skipAdSwitch": "Ignorar anúncios:", + "skipAdDescription": "Ignorando os anúncios da Amazon e todos os anúncios no nível básico da Netflix", + "sliderSwitch": "Adicionar controle de velocidade:", + "sliderDescription": "Adição de um controle deslizante de ajuste de velocidade.", + "sliderOptions": "Opções do controle deslizante: velocidade = quadro a quadro /10", + "sliderStepSize": "Quantidade de quadros:", + "sliderMin": "Controle mínimo:", + "sliderMax": "Controle máximo:", + "sliderPreview": "Visualização do controle deslizante:", + "fullscreenSwitch": "Reproduzir em tela cheia:", + "fullscreenDescription": "Se um vídeo for colocado em tela cheia, ele será reproduzido automaticamente", + "selfAdSwitch": "Ignorar anúncios direcionados:", + "selfAdDescription": "Ignorar as prévias do programa principal que são exibidas antes de qualquer vídeo", + "filterPaidSwitch": "Remover conteúdo pago:", + "filterPaidDescription": "Remoção de todas as categorias de filmes e séries pagos", + "continuePositionSwitch": "Mover categoria \"Continuar\":", + "continuePositionDescription": "Mova a categoria \"Continuar\" para o topo da página", + "freeveeSwitch": "Ignorar anúncios:", + "skipRecapSwitch": "Ignorar recapitulações:", + "skipRecapDescription": "Pula as recapitulações de todos os programas", + "skipBlockedSwitch": "Aviso de retorno por inatividade:", + "skipBlockedDescription": "Reiniciar o vídeo se a mensagem (você ainda está assistindo) for exibida", + "profileSwitch": "Seleção automática do último perfil:", + "profileDescription": "O último perfil da usado é escolhido diretamente quando a página é iniciada", + "user": "Usuário:", + "statisticPageTitle": "Estatísticas", + "skippedTime": "Tempo ignorado:", + "amazonAdDescription": "Tempo de anúncios pulados + auto promoções do Prime Video", + "statisticAd": "{0} Ad:", + "netflixAdDescription": "Tempo de anúncios ignorados da Netflix", + "statisticIntro": "Introdução:", + "statisticIntroDescription": "Tempo de introduções puladas na Netflix, Amazon e Disney+", + "statisticRecap": "Recapitulação:", + "statisticskipRecapDescription": "Tempo de recapitulações puladas na Netflix, Amazon e Disney+", + "statisticSegments": "Segmentos ignorados:", + "statisticSegmentsDescription": "Quantidade de segmentos individuais ignorados como introdução ou um anúncio da Netflix, Amazon e Disney+", + "importSettings": "Importar ou exportar configurações", + "saveSettings": "Salvar configurações para um arquivo", + "uploadSettings": "Carregar configurações", + "resetAddon": "Redefinir a extensão para o padrão", + "noWrap": "nowrap", + "watchCreditsSwitch": "Assista os créditos:", + "watchCreditsDescription": "Sempre assistir aos créditos de todas as séries", + "conflictingTitle": "Todos os recursos conflitantes", + "ratingSwitch": "Classificações TMDB:", + "ratingDescription": "Adiciona a classificação do TMDB a todos os filmes e séries", + "releaseCalendarSwitch": "Incluir calendário de lançamento:", + "releaseCalendarDescription": "Adiciona as caixas de seleção \"Mostrar somente listas de reprodução\" e \"Filtrar\" ao calendário de lançamentos", + "epilepsySwitch": "Opção de epilepsia", + "epilepsyDescription": "Escurecer a tela ao pular o anúncio", + "userAgentSwitch": "Mudar para sites de desktop", + "userAgentDescription": "Para o Prime Video e Disney+, mude para o site para desktop, para a Amazon, torne o site compatível com dispositivos móveis", + "xraySwitch": "Ocultar raioX:", + "xrayDescription": "Ocultar a visualização rápida do raio Xray da tela", + "feature": "Recurso: Dica de ferramenta para obter mais informações", + "shared": "Todos", + "openSharedSettings": "Abrir configurações compartilhadas", + "autoOpenSettings": "Abrir automaticamente as configurações corretas:", + "autoOpenDescription": "Se estiver em um site de streaming, uma janela de configurações será aberta", + "duplicateSwitch": "Remover programas duplicados:", + "duplicateDescription": "Remover todos os programas duplicados, que já estavam visíveis na Disney anteriormente. Visível significa que o programa está entre os primeiros 5 programas em cada linha", + "watchSkippedButton": "Retroceder?", + "homeButton": "Lar", + "bigPlayerSwitch": "Vídeo maior:", + "bigPlayerDescription": "Estende o tamanho do vídeo para toda a janela do navegador sem tela cheia.", + "disableNumpadSwitch": "Desativar o teclado numérico:", + "disableNumpadDescription": "Desative as teclas do teclado numérico para não alterar acidentalmente o tempo/posição do vídeo atual.", + "doubleClickSwitch": "Tela cheia clicando duas vezes:", + "doubleClickDescription": "Se você clicar duas vezes no vídeo, ele será exibido em tela cheia.", + "scrollVolumeSwitch": "Deslocação para o volume:", + "scrollVolumeDescription": "Deslocar-se para cima ou para baixo no ícone de som altera o volume.", + "disneyAdDescription": "Tempo de saltar anúncios da Disney.", + "showYearSwitch": "Ano de lançamento do espetáculo:", + "showYearDescription": "Mostra o ano de lançamento ao lado da classificação.", + "installPageTitle": "🎉 Instalado! 🚀", + "installThanks": "Obrigado por instalar o Streaming enhanced! ❤️", + "installTurnOnOptional": "Ativar todas as caraterísticas opcionais:", + "tabsPermission": "necessário para a abertura automática das definições corretas", + "missingPermission": "Detectadas permissões em falta", + "iframeTitle": "Suporte a Streaming enhanced ❤️", + "iframeButton": "Aplicar a ligação de afiliado", + "affiliateSwitch": "Popup de afiliado:", + "affiliateDescription": "Se uma página com uma ligação de afiliado estiver aberta, mostra uma janela pop-up para aplicar a ligação de afiliado, como no caso do amazon prime." +} \ No newline at end of file diff --git a/src/locales/sv.json b/src/locales/sv.json new file mode 100644 index 00000000..7c76f5d5 --- /dev/null +++ b/src/locales/sv.json @@ -0,0 +1,104 @@ +{ + "extensionName": "Streaming enhanced: Netflix Disney+ Prime Video", + "extensionDescription": "Hoppa över annonser, intron, eftertexter och justera hastighet m.m. på Netflix, Prime video, Disney+, Crunchyroll och HBO max.", + "settingsTitle": "Inställningar - Streaming enhanced", + "pageTitle": "Streaming enhanced", + "rateNow": "Betygsätt nu!", + "sharedSettings": "Delade inställningar", + "sharedSettingsDescription": "Dessa alternativ aktiverar/avaktiverar endast {0}-delen av den delade inställningen", + "backup": "Säkerhetskopiering", + "statistics": "Statistik", + "changelog": "Changelog", + "donate": "Donera", + "pageSpecificTitle": "{0} specifik", + "defaultfilterPaidDescription": "Ta bort alla betalda film- och seriekategorier från Amazon Prime", + "sharedPageTitle": "Funktioner för delad video", + "sharedPageDescription": "Dessa alternativ aktiverar/inaktiverar endast inställningarna för alla streamingtjänster. I tabellen nedan kan du inaktivera de delade inställningarna för en specifik tjänst", + "skipIntroSwitch": "Hoppa över intro och sammanfattning:", + "skipIntroDescription": "Hoppa över intron och sammanfattningar av alla serier. Utom Netflix eftersom deras sammanfattningar inte kan ses igen.", + "creditsSwitch": "Hoppa över krediter:", + "creditsDescription": "Hoppa till nästa avsnitt i varje serie så snabbt som möjligt", + "skipAdSwitch": "Hoppa över annonser:", + "skipAdDescription": "Hoppa över freevee-annonser för Amazon och alla annonser i den grundläggande Netflix-nivån", + "sliderSwitch": "Lägg till Speed control:", + "sliderDescription": "Lägga till ett reglage för hastighetsjustering", + "sliderOptions": "Slider-alternativ: hastighet = stegstorlek /10", + "sliderStepSize": "Skjutreglagets stegstorlek:", + "sliderMin": "Slider minimum:", + "sliderMax": "Slider maximalt:", + "sliderPreview": "Förhandsgranskning av slider:", + "fullscreenSwitch": "Spela på helskärm:", + "fullscreenDescription": "Om en video läggs i helskärmsläge spelas videon upp automatiskt", + "selfAdSwitch": "Hoppa över självannonser:", + "selfAdDescription": "Hoppa över förhandsvisningarna av prime show som visas före varje video", + "filterPaidSwitch": "Ta bort betalt innehåll:", + "filterPaidDescription": "Ta bort alla kategorier för betalda filmer/serier", + "continuePositionSwitch": "Flytta kategori \"Fortsätt\":", + "continuePositionDescription": "Flytta kategorin \"Fortsätt\" till toppen av sidan", + "freeveeSwitch": "Hoppa över Freevee-annonser:", + "skipRecapSwitch": "Hoppa över sammanfattningar:", + "skipRecapDescription": "Hoppar över sammanfattningar av varje program", + "skipBlockedSwitch": "Varning för inaktivitet vid återupptagning:", + "skipBlockedDescription": "Återupptar videon om meddelandet \"Tittar du fortfarande?\" visas", + "profileSwitch": "Välj automatiskt den senaste profilen:", + "profileDescription": "Den senast använda profilen väljs direkt när sidan startas", + "user": "Användare:", + "statisticPageTitle": "Statistik", + "skippedTime": "Hoppade över tid:", + "amazonAdDescription": "Tid för överhoppade FreeVee-annonser + Prime Video självannonser", + "statisticAd": "{0} Annons:", + "netflixAdDescription": "Tid för överhoppade Netflix-annonser", + "statisticIntro": "Intro:", + "statisticIntroDescription": "Tid för överhoppade intron på Netflix, Amazon och Disney+", + "statisticRecap": "Sammanställning:", + "statisticskipRecapDescription": "Time of skipped Återblickar på Netflix, Amazon och Disney+", + "statisticSegments": "Överhoppade segment:", + "statisticSegmentsDescription": "Mängden enskilda segment som hoppats över som ett intro eller en annons för Netflix, Amazon och Disney+", + "importSettings": "Importera/exportera alla inställningar", + "saveSettings": "Spara inställningar som fil", + "uploadSettings": "Ladda upp inställningar", + "resetAddon": "Återställ Addon till standard", + "noWrap": "nurap", + "watchCreditsSwitch": "Titta på krediter:", + "watchCreditsDescription": "Titta alltid på eftertexterna i varje serie", + "conflictingTitle": "Alla motstridiga funktioner", + "ratingSwitch": "TMDB Betyg:", + "ratingDescription": "Lägga till TMDB-betyg för varje film och serie", + "releaseCalendarSwitch": "Lägg till alternativ för Release Calendar:", + "releaseCalendarDescription": "Lägger till kryssrutorna \"Visa endast spellistor\" och \"Filtrera DUB\" i releasekalendern", + "epilepsySwitch": "Alternativ för epilepsi", + "epilepsyDescription": "Mörka skärmen när du hoppar över annonsen", + "userAgentSwitch": "Byt till desktop-webbplatser", + "userAgentDescription": "För prime video och disney+ byt till Desktop-webbplatsen och för amazon gör webbplatsen mobilvänlig", + "xraySwitch": "Göm röntgen:", + "xrayDescription": "Dölj snabbvisningen för röntgen över en video", + "feature": "Funktion: Verktygstips för mer information", + "shared": "Alla", + "openSharedSettings": "Öppna delade inställningar", + "autoOpenSettings": "Öppna automatiskt korrekta inställningar:", + "autoOpenDescription": "Om du är på en streamingwebbplats öppnas motsvarande inställningar automatiskt i popup-fönstret", + "duplicateSwitch": "Ta bort duplicerade program:", + "duplicateDescription": "Ta bort alla dubbletter av program som redan tidigare var synliga på Disney. Synlig innebär att programmet finns bland de 5 första programmen i varje rad", + "watchSkippedButton": "Spola tillbaka?", + "homeButton": "Hem", + "bigPlayerSwitch": "Video större:", + "bigPlayerDescription": "Utökar videostorleken till hela webbläsarfönstret utan helskärm.", + "disableNumpadSwitch": "Inaktivera numpad:", + "disableNumpadDescription": "Inaktivera numpad-tangenterna så att du inte av misstag ändrar den aktuella videotiden/positionen.", + "doubleClickSwitch": "Fullskärm genom att dubbelklicka:", + "doubleClickDescription": "Om du dubbelklickar på videon kommer den att visas i helskärm.", + "scrollVolumeSwitch": "Bläddra för volym:", + "scrollVolumeDescription": "Om du bläddrar upp eller ner på ljudikonen ändras volymen.", + "disneyAdDescription": "Tid för överhoppade Disney-annonser.", + "showYearSwitch": "Visa utgivningsår:", + "showYearDescription": "Visar utgivningsåret bredvid klassificeringen.", + "installPageTitle": "🎉 Installerad! 🚀", + "installThanks": "Tack för att du installerade Streaming enhanced! ❤️", + "installTurnOnOptional": "Slå på alla tillvalsfunktioner:", + "tabsPermission": "nödvändigt för automatisk öppning av rätt inställningar", + "missingPermission": "Saknade behörigheter upptäckta", + "iframeTitle": "Stöd för Streaming enhanced ❤️", + "iframeButton": "Använd affiliate-länk", + "affiliateSwitch": "Affiliate Popup:", + "affiliateDescription": "Om en sida med en affiliate-länk är öppen visas en popup för att tillämpa affiliate-länken, t.ex. för Amazon Prime." +} \ No newline at end of file diff --git a/src/locales/tr.json b/src/locales/tr.json new file mode 100644 index 00000000..60b73fcc --- /dev/null +++ b/src/locales/tr.json @@ -0,0 +1,104 @@ +{ + "extensionName": "Streaming enhanced: Netflix Disney+ Prime Video", + "extensionDescription": "Netflix, Prime video, Disney+, Crunchyroll ve HBO max'te reklamları, introları, jenerikleri atlayın ve hız ayarı vb. ekleyin.", + "settingsTitle": "Ayarlar - Streaming enhanced", + "pageTitle": "Streaming enhanced", + "rateNow": "Şimdi değerlendirin!", + "sharedSettings": "Paylaşılan Ayarlar", + "sharedSettingsDescription": "Bu seçenekler yalnızca paylaşılan ayarın {0} kısmını etkinleştirir/devre dışı bırakır", + "backup": "Yedekleme", + "statistics": "İstatistikler", + "changelog": "Değişiklik Günlüğü", + "donate": "Bağış Yapın", + "pageSpecificTitle": "{0} özel", + "defaultfilterPaidDescription": "Amazon Prime'dan tüm ücretli film/dizi kategorilerinin kaldırılması", + "sharedPageTitle": "Paylaşılan Video özellikleri", + "sharedPageDescription": "Bu seçenekler yalnızca tüm akış hizmetleri için ayarları etkinleştirir/devre dışı bırakır. Aşağıdaki tabloda belirli bir hizmet için paylaşılan ayarları devre dışı bırakabilirsiniz", + "skipIntroSwitch": "Giriş ve Özeti Atlayın:", + "skipIntroDescription": "Herhangi bir dizinin girişlerini ve özetlerini atlamak. Netflix hariç çünkü orada özetler tekrar izlenemiyor.", + "creditsSwitch": "Skip Credits:", + "creditsDescription": "Her dizinin bir sonraki bölümüne olabildiğince hızlı atlamak", + "skipAdSwitch": "Reklamları atla:", + "skipAdDescription": "Amazon için freevee reklamlarını ve temel Netflix katmanındaki tüm reklamları atlamak", + "sliderSwitch": "Hız kontrolü ekleyin:", + "sliderDescription": "Hız ayarlama sürgüsü ekleme", + "sliderOptions": "Kaydırıcı seçenekleri: hız = adım boyutu /10", + "sliderStepSize": "Kaydırıcı adım boyutu:", + "sliderMin": "Kaydırıcı minimum:", + "sliderMax": "Kaydırıcı maksimum:", + "sliderPreview": "Kaydırıcı önizlemesi:", + "fullscreenSwitch": "Tam ekranda oynatın:", + "fullscreenDescription": "Bir video tam ekrana getirilirse, video otomatik olarak oynatılır", + "selfAdSwitch": "Kendi Reklamlarını Atla:", + "selfAdDescription": "Herhangi bir videodan önce gösterilen ana program önizlemelerini atlama", + "filterPaidSwitch": "Ücretli içeriği kaldırın:", + "filterPaidDescription": "Tüm ücretli film/dizi kategorilerinin kaldırılması", + "continuePositionSwitch": "\"Devam\" kategorisine taşıyın:", + "continuePositionDescription": "\"Devam\" kategorisini sayfanın en üstüne taşıyın", + "freeveeSwitch": "Freevee Reklamlarını Atla:", + "skipRecapSwitch": "Skip Recaps:", + "skipRecapDescription": "Her gösterinin özetini atlar", + "skipBlockedSwitch": "Hareketsizlik uyarısına devam edin:", + "skipBlockedDescription": "'Hala izliyor musunuz' uyarısı gösterilirse videoyu devam ettirir", + "profileSwitch": "Son profili otomatik seç:", + "profileDescription": "Sayfa başlatıldığında en son kullanılan profil doğrudan seçilir", + "user": "Kullanıcı:", + "statisticPageTitle": "İstatistikler", + "skippedTime": "Atlanan zaman:", + "amazonAdDescription": "Atlanan FreeVee Reklamlarının Süresi + Prime Video Self Reklamları", + "statisticAd": "{0} Reklam:", + "netflixAdDescription": "Atlanan Netflix Reklamlarının Süresi", + "statisticIntro": "Giriş:", + "statisticIntroDescription": "Netflix, Amazon ve Disney+'ta atlanan tanıtımların zamanı", + "statisticRecap": "Özet:", + "statisticskipRecapDescription": "Netflix, Amazon ve Disney+'ta Atlanan Özetler Zamanı", + "statisticSegments": "Atlanan bölümler:", + "statisticSegmentsDescription": "Netflix, Amazon ve Disney+ için Giriş veya Reklam Gibi Atlanan Bireysel Bölümlerin Miktarı", + "importSettings": "Tüm Ayarları İçe/Dışa Aktar", + "saveSettings": "Ayarları dosya olarak kaydet", + "uploadSettings": "Yükleme ayarları", + "resetAddon": "Eklentiyi varsayılana sıfırla", + "noWrap": "nowrap", + "watchCreditsSwitch": "İzleme Kredileri:", + "watchCreditsDescription": "Her dizinin jeneriğini mutlaka izleyin", + "conflictingTitle": "Tüm çelişkili özellikler", + "ratingSwitch": "TMDB Değerlendirmesi:", + "ratingDescription": "Her film ve diziye TMDB derecelendirmesinin eklenmesi", + "releaseCalendarSwitch": "Yayın Takvimi seçenekleri ekleyin:", + "releaseCalendarDescription": "Yayın takvimine 'Yalnızca Çalma Listelerini Göster' ve 'DUB'ı Filtrele' onay kutularını ekler", + "epilepsySwitch": "Epilepsi seçeneği", + "epilepsyDescription": "Reklamı atlarken ekranı karartın", + "userAgentSwitch": "Masaüstü web sitelerine geçiş yapın", + "userAgentDescription": "Prime video ve disney+ için Masaüstü web sitesine geçin ve amazon için siteyi mobil uyumlu hale getirin", + "xraySwitch": "Xray'i sakla:", + "xrayDescription": "Xray Hızlı Görünümünü bir video üzerinde gizleme", + "feature": "Özellik: Daha fazla bilgi için araç ipucu", + "shared": "Tümü", + "openSharedSettings": "Paylaşılan Ayarları Açın", + "autoOpenSettings": "Doğru Ayarları otomatik olarak aç:", + "autoOpenDescription": "Akış sitesindeyse, açılır pencerede otomatik olarak uygun ayarları açın", + "duplicateSwitch": "Yinelenen Gösterileri kaldırın:", + "duplicateDescription": "Daha önce Disney'de zaten görünür olan her yinelenen gösteriyi kaldırın. Görünür, gösterinin her satırdaki ilk 5 gösteri içinde olduğu anlamına gelir", + "watchSkippedButton": "Geri sarmak mı?", + "homeButton": "Ev", + "bigPlayerSwitch": "Video daha büyük:", + "bigPlayerDescription": "Video boyutunu tam ekran olmadan tüm tarayıcı penceresine genişletir.", + "disableNumpadSwitch": "Numpad'i devre dışı bırakın:", + "disableNumpadDescription": "Mevcut video zamanını/konumunu yanlışlıkla değiştirmemek için sayısal tuşları devre dışı bırakın.", + "doubleClickSwitch": "Çift tıklayarak tam ekran yapın:", + "doubleClickDescription": "Videoya çift tıklarsanız tam ekrana geçecektir.", + "scrollVolumeSwitch": "Ses seviyesi için kaydırın:", + "scrollVolumeDescription": "Ses Simgesi üzerinde yukarı veya aşağı kaydırma yapmak ses seviyesini değiştirecektir.", + "disneyAdDescription": "Disney reklamlarını atlama zamanı.", + "showYearSwitch": "Gösterinin çıkış yılı:", + "showYearDescription": "Derecelendirmenin yanında yayın yılını gösterir.", + "installPageTitle": "🎉 Yüklendi! 🚀", + "installThanks": "Streaming enhanced'ı yüklediğiniz için teşekkür ederiz! ❤️", + "installTurnOnOptional": "Tüm isteğe bağlı özellikleri açın:", + "tabsPermission": "doğru ayarların otomatik olarak açılması için gerekli", + "missingPermission": "Eksik izinler algılandı", + "iframeTitle": "Support Streaming enhanced ❤️", + "iframeButton": "Satış ortağı bağlantısını uygulayın", + "affiliateSwitch": "Affiliate Popup:", + "affiliateDescription": "Satış ortağı bağlantısı olan bir sayfa açıksa, amazon prime'da olduğu gibi satış ortağı bağlantısını uygulamak için açılır pencere gösterir." +} \ No newline at end of file diff --git a/src/locales/zh_CN.json b/src/locales/zh_CN.json new file mode 100644 index 00000000..8ae0151e --- /dev/null +++ b/src/locales/zh_CN.json @@ -0,0 +1,104 @@ +{ + "extensionName": "Streaming enhanced: Netflix Disney+ Prime Video", + "extensionDescription": "在 Netflix、Prime video、Disney+、Crunchyroll 和 HBO max 上跳过广告、开场白、片头,并添加调整速度等功能。", + "settingsTitle": "设置 - Streaming enhanced", + "pageTitle": "Streaming enhanced", + "rateNow": "现在评分", + "sharedSettings": "共享设置", + "sharedSettingsDescription": "这些选项只会启用/禁用共享设置中的 {0} 部分", + "backup": "备份", + "statistics": "统计资料", + "changelog": "更新日志", + "donate": "捐赠", + "pageSpecificTitle": "{0} 专属", + "defaultfilterPaidDescription": "从亚马逊 prime 中删除所有付费电影/连续剧类别", + "sharedPageTitle": "共享视频功能", + "sharedPageDescription": "这些选项只能启用/禁用所有流媒体服务的设置。在下表中,您可以禁用特定服务的共享设置", + "skipIntroSwitch": "跳过介绍和回顾:", + "skipIntroDescription": "跳过任何剧集的前奏和回顾。Netflix除外,因为那里的剧情回顾不能再看一遍。", + "creditsSwitch": "略过:", + "creditsDescription": "以最快的速度跳到每个系列的下一集", + "skipAdSwitch": "跳过广告", + "skipAdDescription": "跳过亚马逊的 freevee 广告和 Netflix 基本层的所有广告", + "sliderSwitch": "添加速度控制:", + "sliderDescription": "添加速度调节滑块", + "sliderOptions": "滑块选项:速度 = 步长 /10", + "sliderStepSize": "滑块步长", + "sliderMin": "滑块最小值:", + "sliderMax": "滑块最大值:", + "sliderPreview": "滑块预览", + "fullscreenSwitch": "全屏播放", + "fullscreenDescription": "如果将视频设置为全屏,视频将自动播放", + "selfAdSwitch": "跳过自助广告:", + "selfAdDescription": "跳过在任何视频之前播放的黄金节目预告", + "filterPaidSwitch": "删除付费内容:", + "filterPaidDescription": "删除所有付费电影/剧集类别", + "continuePositionSwitch": "移动类别 \"继续\":", + "continuePositionDescription": "将类别 \"继续 \"移至页面顶部", + "freeveeSwitch": "跳过 Freevee 广告:", + "skipRecapSwitch": "跳过回顾:", + "skipRecapDescription": "跳过每个节目的复述", + "skipBlockedSwitch": "恢复不活动警告:", + "skipBlockedDescription": "如果出现 \"您是否仍在观看 \"提示,则继续播放视频", + "profileSwitch": "自动选择最后一个配置文件:", + "profileDescription": "页面启动时直接选择上次使用的配置文件", + "user": "用户:", + "statisticPageTitle": "统计资料", + "skippedTime": "跳过时间", + "amazonAdDescription": "跳过 FreeVee 广告 + Prime 视频自助广告的时间", + "statisticAd": "{0} 广告:", + "netflixAdDescription": "跳过 Netflix 广告的时间", + "statisticIntro": "介绍:", + "statisticIntroDescription": "Netflix、亚马逊和迪士尼+上被跳过的介绍时间", + "statisticRecap": "回顾一下", + "statisticskipRecapDescription": "Netflix、亚马逊和迪士尼+上跳过的时间回顾", + "statisticSegments": "跳过的片段:", + "statisticSegmentsDescription": "Netflix、亚马逊和迪士尼+跳过介绍或广告等个别片段的数量", + "importSettings": "导入/导出所有设置", + "saveSettings": "将设置保存为文件", + "uploadSettings": "上传设置", + "resetAddon": "将插件重置为默认设置", + "noWrap": "nowrap", + "watchCreditsSwitch": "腕表荣誉", + "watchCreditsDescription": "经常观看每部电视剧的片头", + "conflictingTitle": "所有冲突功能", + "ratingSwitch": "TMDB Rating:", + "ratingDescription": "为每部电影和剧集添加 TMDB 评级", + "releaseCalendarSwitch": "添加发布日历选项:", + "releaseCalendarDescription": "在发布日历中添加 \"仅显示播放列表 \"和 \"过滤 DUB \"复选框", + "epilepsySwitch": "癫痫选项", + "epilepsyDescription": "跳过广告时使屏幕变暗", + "userAgentSwitch": "切换到桌面网站", + "userAgentDescription": "将 prime video 和 disney+ 改为桌面网站,将亚马逊网站改为移动友好型网站", + "xraySwitch": "隐藏 X 光", + "xrayDescription": "在视频上隐藏 X 光快速视图", + "feature": "功能:更多信息的工具提示", + "shared": "全部", + "openSharedSettings": "打开共享设置", + "autoOpenSettings": "自动打开正确的设置:", + "autoOpenDescription": "如果在流媒体网站上,弹出窗口会自动打开相应设置", + "duplicateSwitch": "删除重复显示:", + "duplicateDescription": "删除所有重复的节目,这些节目之前在迪斯尼上已经可见。可见表示节目位于每一行的前 5 个节目中", + "watchSkippedButton": "倒带?", + "homeButton": "首页", + "bigPlayerSwitch": "视频更大:", + "bigPlayerDescription": "将视频尺寸扩展到整个浏览器窗口,而无需全屏。", + "disableNumpadSwitch": "禁用数字键盘:", + "disableNumpadDescription": "禁用数字键盘,以免意外更改当前视频时间/位置。", + "doubleClickSwitch": "双击全屏:", + "doubleClickDescription": "如果双击视频,它就会变成全屏。", + "scrollVolumeSwitch": "滚动音量:", + "scrollVolumeDescription": "上下滚动声音图标可改变音量。", + "disneyAdDescription": "跳过迪斯尼广告的时间", + "showYearSwitch": "节目发布年份:", + "showYearDescription": "显示评级旁边的发行年份。", + "installPageTitle": "🎉已安装!🚀", + "installThanks": "感谢您安装 Streaming enhanced!❤️", + "installTurnOnOptional": "打开所有可选功能:", + "tabsPermission": "自动打开正确设置的必要条件", + "missingPermission": "检测到权限缺失", + "iframeTitle": "支持 Streaming enhanced ❤️", + "iframeButton": "申请联盟链接", + "affiliateSwitch": "联盟弹出窗口:", + "affiliateDescription": "如果打开了带有联盟链接的页面,则弹出应用联盟链接的窗口,如亚马逊黄金。" +} \ No newline at end of file diff --git a/src/stores/options.store.ts b/src/stores/options.store.ts new file mode 100644 index 00000000..78ad69f6 --- /dev/null +++ b/src/stores/options.store.ts @@ -0,0 +1,15 @@ +export const useOptionsStore = defineStore("options", () => { + const { data: settings, promise } = useBrowserSyncStorage("settings", defaultSettings) + return { + settings, + } +}) +export const useFrontendStore = defineStore("frontend", () => { + const { isDark, toggleDark } = useTheme() + const currentLocale = useLocale() + return { + isDark, + toggleDark, + currentLocale, + } +}) diff --git a/src/stores/storeTypes.ts b/src/stores/storeTypes.ts new file mode 100644 index 00000000..4b30fbcb --- /dev/null +++ b/src/stores/storeTypes.ts @@ -0,0 +1,164 @@ +export type settingsType = { + Amazon: { + skipIntro: boolean + skipCredits: boolean + watchCredits: boolean + selfAd: boolean + skipAd: boolean + speedSlider: boolean + filterPaid: boolean + continuePosition: boolean + showRating: boolean + xray: boolean + } + Netflix: { + skipIntro: boolean + skipRecap: boolean + skipCredits: boolean + watchCredits: boolean + skipBlocked: boolean + skipAd: boolean + speedSlider: boolean + profile: boolean + showRating: boolean + } + Disney: { + skipIntro: boolean + skipCredits: boolean + watchCredits: boolean + skipAd: boolean + speedSlider: boolean + showRating: boolean + selfAd: boolean + } + Crunchyroll: { + skipIntro: boolean + speedSlider: boolean + releaseCalendar: boolean + dubLanguage: { lang: string; index: number } | null + profile: boolean + bigPlayer: boolean + disableNumpad: boolean + } + HBO: { + skipIntro: boolean + skipCredits: boolean + watchCredits: boolean + speedSlider: boolean + showRating: boolean + } + Video: { + playOnFullScreen: boolean + epilepsy: boolean + userAgent: boolean + doubleClick: boolean + scrollVolume: boolean + showYear: boolean + } + Statistics: { + AmazonAdTimeSkipped: number + NetflixAdTimeSkipped: number + DisneyAdTimeSkipped: number + IntroTimeSkipped: number + RecapTimeSkipped: number + SegmentsSkipped: number + } + General: { + Crunchyroll_profilePicture: null | string + profileName: null | string + profilePicture: null | string + sliderSteps: number + sliderMin: number + sliderMax: number + filterDub: boolean + filterQueued: boolean + savedCrunchyList: CrunchyList + GCdate: string + affiliate: boolean + } +} + +export type Nullable = T | null | undefined +export type CrunchyListElement = { href: Nullable; name: Nullable; time: string } +export type CrunchyList = Array + +// Default settings +export const defaultSettings = { + Amazon: { + skipIntro: true, + skipCredits: true, + watchCredits: false, + selfAd: true, + skipAd: true, + speedSlider: true, + filterPaid: false, + continuePosition: true, + showRating: true, + xray: true, + }, + Netflix: { + skipIntro: true, + skipRecap: true, + skipCredits: true, + watchCredits: false, + skipBlocked: true, + skipAd: true, + speedSlider: true, + profile: true, + showRating: true, + }, + Disney: { + skipIntro: true, + skipCredits: true, + watchCredits: false, + skipAd: true, + speedSlider: true, + showRating: true, + selfAd: true, + }, + Crunchyroll: { + skipIntro: true, + speedSlider: true, + releaseCalendar: true, + dubLanguage: null, + profile: true, + bigPlayer: true, + disableNumpad: true, + }, + HBO: { + skipIntro: true, + skipCredits: true, + watchCredits: false, + speedSlider: true, + showRating: true, + }, + Video: { + playOnFullScreen: true, + epilepsy: false, + userAgent: true, + doubleClick: true, + scrollVolume: true, + showYear: false, + }, + Statistics: { + AmazonAdTimeSkipped: 0, + NetflixAdTimeSkipped: 0, + DisneyAdTimeSkipped: 0, + IntroTimeSkipped: 0, + RecapTimeSkipped: 0, + SegmentsSkipped: 0, + }, + General: { + Crunchyroll_profilePicture: "", + profileName: "", + profilePicture: "", + sliderSteps: 1, + sliderMin: 5, + sliderMax: 20, + filterDub: true, + filterQueued: true, + savedCrunchyList: [], + GCdate: "2024-01-01", + affiliate: true, + }, +} diff --git a/src/types/.eslintrc-auto-import.json b/src/types/.eslintrc-auto-import.json new file mode 100644 index 00000000..a7b200fc --- /dev/null +++ b/src/types/.eslintrc-auto-import.json @@ -0,0 +1,352 @@ +{ + "globals": { + "Component": true, + "ComponentPublicInstance": true, + "ComputedRef": true, + "CrunchyList": true, + "CrunchyListElement": true, + "DirectiveBinding": true, + "EffectScope": true, + "ExtractDefaultPropTypes": true, + "ExtractPropTypes": true, + "ExtractPublicPropTypes": true, + "InjectionKey": true, + "MaybeRef": true, + "MaybeRefOrGetter": true, + "Notification": true, + "Notivue": true, + "Nullable": true, + "PropType": true, + "Ref": true, + "VNode": true, + "WritableComputedRef": true, + "acceptHMRUpdate": true, + "appRouter": true, + "asyncComputed": true, + "autoResetRef": true, + "browser": true, + "checkStoreReady": true, + "computed": true, + "computedAsync": true, + "computedEager": true, + "computedInject": true, + "computedWithControl": true, + "controlledComputed": true, + "controlledRef": true, + "createApp": true, + "createEventHook": true, + "createGlobalState": true, + "createInjectionState": true, + "createPinia": true, + "createReactiveFn": true, + "createReusableTemplate": true, + "createSharedComposable": true, + "createTemplatePromise": true, + "createUnrefFn": true, + "customRef": true, + "date": true, + "debouncedRef": true, + "debouncedWatch": true, + "defaultSettings": true, + "defineAsyncComponent": true, + "defineComponent": true, + "definePage": true, + "defineStore": true, + "eagerComputed": true, + "effectScope": true, + "extendRef": true, + "getActivePinia": true, + "getCurrentInstance": true, + "getCurrentScope": true, + "h": true, + "i18n": true, + "ignorableWatch": true, + "increaseBadge": true, + "inject": true, + "injectLocal": true, + "isDefined": true, + "isFirefox": true, + "isProxy": true, + "isReactive": true, + "isReadonly": true, + "isRef": true, + "log": true, + "makeDestructurable": true, + "mapActions": true, + "mapGetters": true, + "mapState": true, + "mapStores": true, + "mapWritableState": true, + "markRaw": true, + "nextTick": true, + "notivue": true, + "onActivated": true, + "onBeforeMount": true, + "onBeforeRouteLeave": true, + "onBeforeRouteUpdate": true, + "onBeforeUnmount": true, + "onBeforeUpdate": true, + "onClickOutside": true, + "onDeactivated": true, + "onElementRemoval": true, + "onErrorCaptured": true, + "onKeyStroke": true, + "onLongPress": true, + "onMounted": true, + "onRenderTracked": true, + "onRenderTriggered": true, + "onScopeDispose": true, + "onServerPrefetch": true, + "onStartTyping": true, + "onUnmounted": true, + "onUpdated": true, + "onWatcherCleanup": true, + "optionsStore": true, + "pausableWatch": true, + "pinia": true, + "provide": true, + "provideLocal": true, + "pushNotification": true, + "reactify": true, + "reactifyObject": true, + "reactive": true, + "reactiveComputed": true, + "reactiveOmit": true, + "reactivePick": true, + "readonly": true, + "ref": true, + "refAutoReset": true, + "refDebounced": true, + "refDefault": true, + "refThrottled": true, + "refWithControl": true, + "resolveComponent": true, + "resolveRef": true, + "resolveUnref": true, + "setActivePinia": true, + "setMapStoreSuffix": true, + "settingsType": true, + "shallowReactive": true, + "shallowReadonly": true, + "shallowRef": true, + "storeToRefs": true, + "syncRef": true, + "syncRefs": true, + "t": true, + "templateRef": true, + "throttledRef": true, + "throttledWatch": true, + "toRaw": true, + "toReactive": true, + "toRef": true, + "toRefs": true, + "toValue": true, + "triggerRef": true, + "tryOnBeforeMount": true, + "tryOnBeforeUnmount": true, + "tryOnMounted": true, + "tryOnScopeDispose": true, + "tryOnUnmounted": true, + "unref": true, + "unrefElement": true, + "until": true, + "useActiveElement": true, + "useAnimate": true, + "useArrayDifference": true, + "useArrayEvery": true, + "useArrayFilter": true, + "useArrayFind": true, + "useArrayFindIndex": true, + "useArrayFindLast": true, + "useArrayIncludes": true, + "useArrayJoin": true, + "useArrayMap": true, + "useArrayReduce": true, + "useArraySome": true, + "useArrayUnique": true, + "useAsyncQueue": true, + "useAsyncState": true, + "useAttrs": true, + "useBase64": true, + "useBattery": true, + "useBluetooth": true, + "useBreakpoints": true, + "useBroadcastChannel": true, + "useBrowserLocalStorage": true, + "useBrowserLocation": true, + "useBrowserSyncStorage": true, + "useCached": true, + "useClipboard": true, + "useClipboardItems": true, + "useCloned": true, + "useColorMode": true, + "useConfirmDialog": true, + "useCounter": true, + "useCssModule": true, + "useCssVar": true, + "useCssVars": true, + "useCurrentElement": true, + "useCycleList": true, + "useDark": true, + "useDateFormat": true, + "useDebounce": true, + "useDebounceFn": true, + "useDebouncedRefHistory": true, + "useDeviceMotion": true, + "useDeviceOrientation": true, + "useDevicePixelRatio": true, + "useDevicesList": true, + "useDisplayMedia": true, + "useDocumentVisibility": true, + "useDraggable": true, + "useDropZone": true, + "useElementBounding": true, + "useElementByPoint": true, + "useElementHover": true, + "useElementSize": true, + "useElementVisibility": true, + "useEventBus": true, + "useEventListener": true, + "useEventSource": true, + "useEyeDropper": true, + "useFavicon": true, + "useFetch": true, + "useFileDialog": true, + "useFileSystemAccess": true, + "useFocus": true, + "useFocusWithin": true, + "useFps": true, + "useFullscreen": true, + "useGamepad": true, + "useGeolocation": true, + "useI18n": true, + "useId": true, + "useIdle": true, + "useImage": true, + "useInfiniteScroll": true, + "useIntersectionObserver": true, + "useInterval": true, + "useIntervalFn": true, + "useKeyModifier": true, + "useLastChanged": true, + "useLink": true, + "useLocalStorage": true, + "useLocale": true, + "useMagicKeys": true, + "useManualRefHistory": true, + "useMediaControls": true, + "useMediaQuery": true, + "useMemoize": true, + "useMemory": true, + "useModel": true, + "useMounted": true, + "useMouse": true, + "useMouseInElement": true, + "useMousePressed": true, + "useMutationObserver": true, + "useNavigatorLanguage": true, + "useNetwork": true, + "useNow": true, + "useObjectUrl": true, + "useOffsetPagination": true, + "useOnline": true, + "useOptionsStore": true, + "usePageLeave": true, + "useParallax": true, + "useParentElement": true, + "usePerformanceObserver": true, + "usePermission": true, + "usePointer": true, + "usePointerLock": true, + "usePointerSwipe": true, + "usePreferredColorScheme": true, + "usePreferredContrast": true, + "usePreferredDark": true, + "usePreferredLanguages": true, + "usePreferredReducedMotion": true, + "usePreferredReducedTransparency": true, + "usePrevious": true, + "useRafFn": true, + "useRefHistory": true, + "useResizeObserver": true, + "useRoute": true, + "useRouter": true, + "useSSRWidth": true, + "useScreenOrientation": true, + "useScreenSafeArea": true, + "useScriptTag": true, + "useScroll": true, + "useScrollLock": true, + "useSessionStorage": true, + "useShare": true, + "useSlots": true, + "useSorted": true, + "useSpeechRecognition": true, + "useSpeechSynthesis": true, + "useStepper": true, + "useStorage": true, + "useStorageAsync": true, + "useStyleTag": true, + "useSupported": true, + "useSwipe": true, + "useTemplateRef": true, + "useTemplateRefsList": true, + "useTextDirection": true, + "useTextSelection": true, + "useTextareaAutosize": true, + "useTheme": true, + "useThrottle": true, + "useThrottleFn": true, + "useThrottledRefHistory": true, + "useTimeAgo": true, + "useTimeout": true, + "useTimeoutFn": true, + "useTimeoutPoll": true, + "useTimestamp": true, + "useTitle": true, + "useToNumber": true, + "useToString": true, + "useToggle": true, + "useTransition": true, + "useUrlSearchParams": true, + "useUserMedia": true, + "useVModel": true, + "useVModels": true, + "useVibrate": true, + "useVirtualList": true, + "useWakeLock": true, + "useWebNotification": true, + "useWebSocket": true, + "useWebWorker": true, + "useWebWorkerFn": true, + "useWindowFocus": true, + "useWindowScroll": true, + "useWindowSize": true, + "watch": true, + "watchArray": true, + "watchAtMost": true, + "watchDebounced": true, + "watchDeep": true, + "watchEffect": true, + "watchIgnorable": true, + "watchImmediate": true, + "watchOnce": true, + "watchPausable": true, + "watchPostEffect": true, + "watchSyncEffect": true, + "watchThrottled": true, + "watchTriggerable": true, + "watchWithFilter": true, + "whenever": true, + "Websites": true, + "logStartOfAddon": true, + "Platforms": true, + "config": true, + "addSkippedTime": true, + "parseAdTime": true, + "createSlider": true, + "DBCache": true, + "MovieInfo": true, + "useFrontendStore": true + } +} diff --git a/src/types/auto-imports.d.ts b/src/types/auto-imports.d.ts new file mode 100644 index 00000000..70a207b2 --- /dev/null +++ b/src/types/auto-imports.d.ts @@ -0,0 +1,669 @@ +/* eslint-disable */ +/* prettier-ignore */ +// @ts-nocheck +// noinspection JSUnusedGlobalSymbols +// Generated by unplugin-auto-import +// biome-ignore lint: disable +export {} +declare global { + const EffectScope: typeof import('vue')['EffectScope'] + const Notification: typeof import('notivue')['Notification'] + const Notivue: typeof import('notivue')['Notivue'] + const Platforms: typeof import('../utils/helper')['Platforms'] + const Websites: typeof import('../utils/helper')['Websites'] + const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate'] + const addSkippedTime: typeof import('../utils/helper')['addSkippedTime'] + const appRouter: typeof import('../utils/router/index')['appRouter'] + const asyncComputed: typeof import('@vueuse/core')['asyncComputed'] + const autoResetRef: typeof import('@vueuse/core')['autoResetRef'] + const browser: typeof import('webextension-polyfill') + const checkStoreReady: typeof import('../utils/helper')['checkStoreReady'] + const computed: typeof import('vue')['computed'] + const computedAsync: typeof import('@vueuse/core')['computedAsync'] + const computedEager: typeof import('@vueuse/core')['computedEager'] + const computedInject: typeof import('@vueuse/core')['computedInject'] + const computedWithControl: typeof import('@vueuse/core')['computedWithControl'] + const config: typeof import('../utils/helper')['config'] + const controlledComputed: typeof import('@vueuse/core')['controlledComputed'] + const controlledRef: typeof import('@vueuse/core')['controlledRef'] + const createApp: typeof import('vue')['createApp'] + const createEventHook: typeof import('@vueuse/core')['createEventHook'] + const createGlobalState: typeof import('@vueuse/core')['createGlobalState'] + const createInjectionState: typeof import('@vueuse/core')['createInjectionState'] + const createPinia: typeof import('pinia')['createPinia'] + const createReactiveFn: typeof import('@vueuse/core')['createReactiveFn'] + const createReusableTemplate: typeof import('@vueuse/core')['createReusableTemplate'] + const createSharedComposable: typeof import('@vueuse/core')['createSharedComposable'] + const createSlider: typeof import('../utils/helper')['createSlider'] + const createTemplatePromise: typeof import('@vueuse/core')['createTemplatePromise'] + const createUnrefFn: typeof import('@vueuse/core')['createUnrefFn'] + const customRef: typeof import('vue')['customRef'] + const date: typeof import('../utils/helper')['date'] + const debouncedRef: typeof import('@vueuse/core')['debouncedRef'] + const debouncedWatch: typeof import('@vueuse/core')['debouncedWatch'] + const defaultSettings: typeof import('../stores/storeTypes')['defaultSettings'] + const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'] + const defineComponent: typeof import('vue')['defineComponent'] + const definePage: typeof import('vue-router/auto')['definePage'] + const defineStore: typeof import('pinia')['defineStore'] + const eagerComputed: typeof import('@vueuse/core')['eagerComputed'] + const effectScope: typeof import('vue')['effectScope'] + const extendRef: typeof import('@vueuse/core')['extendRef'] + const getActivePinia: typeof import('pinia')['getActivePinia'] + const getCurrentInstance: typeof import('vue')['getCurrentInstance'] + const getCurrentScope: typeof import('vue')['getCurrentScope'] + const h: typeof import('vue')['h'] + const i18n: typeof import('../utils/i18n')['i18n'] + const ignorableWatch: typeof import('@vueuse/core')['ignorableWatch'] + const increaseBadge: typeof import('../utils/helper')['increaseBadge'] + const inject: typeof import('vue')['inject'] + const injectLocal: typeof import('@vueuse/core')['injectLocal'] + const isDefined: typeof import('@vueuse/core')['isDefined'] + const isFirefox: typeof import('../utils/helper')['isFirefox'] + const isProxy: typeof import('vue')['isProxy'] + const isReactive: typeof import('vue')['isReactive'] + const isReadonly: typeof import('vue')['isReadonly'] + const isRef: typeof import('vue')['isRef'] + const log: typeof import('../utils/helper')['log'] + const logStartOfAddon: typeof import('../utils/helper')['logStartOfAddon'] + const makeDestructurable: typeof import('@vueuse/core')['makeDestructurable'] + const mapActions: typeof import('pinia')['mapActions'] + const mapGetters: typeof import('pinia')['mapGetters'] + const mapState: typeof import('pinia')['mapState'] + const mapStores: typeof import('pinia')['mapStores'] + const mapWritableState: typeof import('pinia')['mapWritableState'] + const markRaw: typeof import('vue')['markRaw'] + const nextTick: typeof import('vue')['nextTick'] + const notivue: typeof import('../utils/notifications')['notivue'] + const onActivated: typeof import('vue')['onActivated'] + const onBeforeMount: typeof import('vue')['onBeforeMount'] + const onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave'] + const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate'] + const onBeforeUnmount: typeof import('vue')['onBeforeUnmount'] + const onBeforeUpdate: typeof import('vue')['onBeforeUpdate'] + const onClickOutside: typeof import('@vueuse/core')['onClickOutside'] + const onDeactivated: typeof import('vue')['onDeactivated'] + const onElementRemoval: typeof import('@vueuse/core')['onElementRemoval'] + const onErrorCaptured: typeof import('vue')['onErrorCaptured'] + const onKeyStroke: typeof import('@vueuse/core')['onKeyStroke'] + const onLongPress: typeof import('@vueuse/core')['onLongPress'] + const onMounted: typeof import('vue')['onMounted'] + const onRenderTracked: typeof import('vue')['onRenderTracked'] + const onRenderTriggered: typeof import('vue')['onRenderTriggered'] + const onScopeDispose: typeof import('vue')['onScopeDispose'] + const onServerPrefetch: typeof import('vue')['onServerPrefetch'] + const onStartTyping: typeof import('@vueuse/core')['onStartTyping'] + const onUnmounted: typeof import('vue')['onUnmounted'] + const onUpdated: typeof import('vue')['onUpdated'] + const onWatcherCleanup: typeof import('vue')['onWatcherCleanup'] + const optionsStore: typeof import('../utils/helper')['optionsStore'] + const parseAdTime: typeof import('../utils/helper')['parseAdTime'] + const pausableWatch: typeof import('@vueuse/core')['pausableWatch'] + const pinia: typeof import('../utils/pinia')['pinia'] + const provide: typeof import('vue')['provide'] + const provideLocal: typeof import('@vueuse/core')['provideLocal'] + const pushNotification: typeof import('notivue')['push'] + const reactify: typeof import('@vueuse/core')['reactify'] + const reactifyObject: typeof import('@vueuse/core')['reactifyObject'] + const reactive: typeof import('vue')['reactive'] + const reactiveComputed: typeof import('@vueuse/core')['reactiveComputed'] + const reactiveOmit: typeof import('@vueuse/core')['reactiveOmit'] + const reactivePick: typeof import('@vueuse/core')['reactivePick'] + const readonly: typeof import('vue')['readonly'] + const ref: typeof import('vue')['ref'] + const refAutoReset: typeof import('@vueuse/core')['refAutoReset'] + const refDebounced: typeof import('@vueuse/core')['refDebounced'] + const refDefault: typeof import('@vueuse/core')['refDefault'] + const refThrottled: typeof import('@vueuse/core')['refThrottled'] + const refWithControl: typeof import('@vueuse/core')['refWithControl'] + const resolveComponent: typeof import('vue')['resolveComponent'] + const resolveRef: typeof import('@vueuse/core')['resolveRef'] + const resolveUnref: typeof import('@vueuse/core')['resolveUnref'] + const setActivePinia: typeof import('pinia')['setActivePinia'] + const setMapStoreSuffix: typeof import('pinia')['setMapStoreSuffix'] + const shallowReactive: typeof import('vue')['shallowReactive'] + const shallowReadonly: typeof import('vue')['shallowReadonly'] + const shallowRef: typeof import('vue')['shallowRef'] + const storeToRefs: typeof import('pinia')['storeToRefs'] + const syncRef: typeof import('@vueuse/core')['syncRef'] + const syncRefs: typeof import('@vueuse/core')['syncRefs'] + const t: typeof import('vue-i18n')['t'] + const templateRef: typeof import('@vueuse/core')['templateRef'] + const throttledRef: typeof import('@vueuse/core')['throttledRef'] + const throttledWatch: typeof import('@vueuse/core')['throttledWatch'] + const toRaw: typeof import('vue')['toRaw'] + const toReactive: typeof import('@vueuse/core')['toReactive'] + const toRef: typeof import('vue')['toRef'] + const toRefs: typeof import('vue')['toRefs'] + const toValue: typeof import('vue')['toValue'] + const triggerRef: typeof import('vue')['triggerRef'] + const tryOnBeforeMount: typeof import('@vueuse/core')['tryOnBeforeMount'] + const tryOnBeforeUnmount: typeof import('@vueuse/core')['tryOnBeforeUnmount'] + const tryOnMounted: typeof import('@vueuse/core')['tryOnMounted'] + const tryOnScopeDispose: typeof import('@vueuse/core')['tryOnScopeDispose'] + const tryOnUnmounted: typeof import('@vueuse/core')['tryOnUnmounted'] + const unref: typeof import('vue')['unref'] + const unrefElement: typeof import('@vueuse/core')['unrefElement'] + const until: typeof import('@vueuse/core')['until'] + const useActiveElement: typeof import('@vueuse/core')['useActiveElement'] + const useAnimate: typeof import('@vueuse/core')['useAnimate'] + const useArrayDifference: typeof import('@vueuse/core')['useArrayDifference'] + const useArrayEvery: typeof import('@vueuse/core')['useArrayEvery'] + const useArrayFilter: typeof import('@vueuse/core')['useArrayFilter'] + const useArrayFind: typeof import('@vueuse/core')['useArrayFind'] + const useArrayFindIndex: typeof import('@vueuse/core')['useArrayFindIndex'] + const useArrayFindLast: typeof import('@vueuse/core')['useArrayFindLast'] + const useArrayIncludes: typeof import('@vueuse/core')['useArrayIncludes'] + const useArrayJoin: typeof import('@vueuse/core')['useArrayJoin'] + const useArrayMap: typeof import('@vueuse/core')['useArrayMap'] + const useArrayReduce: typeof import('@vueuse/core')['useArrayReduce'] + const useArraySome: typeof import('@vueuse/core')['useArraySome'] + const useArrayUnique: typeof import('@vueuse/core')['useArrayUnique'] + const useAsyncQueue: typeof import('@vueuse/core')['useAsyncQueue'] + const useAsyncState: typeof import('@vueuse/core')['useAsyncState'] + const useAttrs: typeof import('vue')['useAttrs'] + const useBase64: typeof import('@vueuse/core')['useBase64'] + const useBattery: typeof import('@vueuse/core')['useBattery'] + const useBluetooth: typeof import('@vueuse/core')['useBluetooth'] + const useBreakpoints: typeof import('@vueuse/core')['useBreakpoints'] + const useBroadcastChannel: typeof import('@vueuse/core')['useBroadcastChannel'] + const useBrowserLocalStorage: typeof import('../composables/useBrowserStorage')['useBrowserLocalStorage'] + const useBrowserLocation: typeof import('@vueuse/core')['useBrowserLocation'] + const useBrowserSyncStorage: typeof import('../composables/useBrowserStorage')['useBrowserSyncStorage'] + const useCached: typeof import('@vueuse/core')['useCached'] + const useClipboard: typeof import('@vueuse/core')['useClipboard'] + const useClipboardItems: typeof import('@vueuse/core')['useClipboardItems'] + const useCloned: typeof import('@vueuse/core')['useCloned'] + const useColorMode: typeof import('@vueuse/core')['useColorMode'] + const useConfirmDialog: typeof import('@vueuse/core')['useConfirmDialog'] + const useCounter: typeof import('@vueuse/core')['useCounter'] + const useCssModule: typeof import('vue')['useCssModule'] + const useCssVar: typeof import('@vueuse/core')['useCssVar'] + const useCssVars: typeof import('vue')['useCssVars'] + const useCurrentElement: typeof import('@vueuse/core')['useCurrentElement'] + const useCycleList: typeof import('@vueuse/core')['useCycleList'] + const useDark: typeof import('@vueuse/core')['useDark'] + const useDateFormat: typeof import('@vueuse/core')['useDateFormat'] + const useDebounce: typeof import('@vueuse/core')['useDebounce'] + const useDebounceFn: typeof import('@vueuse/core')['useDebounceFn'] + const useDebouncedRefHistory: typeof import('@vueuse/core')['useDebouncedRefHistory'] + const useDeviceMotion: typeof import('@vueuse/core')['useDeviceMotion'] + const useDeviceOrientation: typeof import('@vueuse/core')['useDeviceOrientation'] + const useDevicePixelRatio: typeof import('@vueuse/core')['useDevicePixelRatio'] + const useDevicesList: typeof import('@vueuse/core')['useDevicesList'] + const useDisplayMedia: typeof import('@vueuse/core')['useDisplayMedia'] + const useDocumentVisibility: typeof import('@vueuse/core')['useDocumentVisibility'] + const useDraggable: typeof import('@vueuse/core')['useDraggable'] + const useDropZone: typeof import('@vueuse/core')['useDropZone'] + const useElementBounding: typeof import('@vueuse/core')['useElementBounding'] + const useElementByPoint: typeof import('@vueuse/core')['useElementByPoint'] + const useElementHover: typeof import('@vueuse/core')['useElementHover'] + const useElementSize: typeof import('@vueuse/core')['useElementSize'] + const useElementVisibility: typeof import('@vueuse/core')['useElementVisibility'] + const useEventBus: typeof import('@vueuse/core')['useEventBus'] + const useEventListener: typeof import('@vueuse/core')['useEventListener'] + const useEventSource: typeof import('@vueuse/core')['useEventSource'] + const useEyeDropper: typeof import('@vueuse/core')['useEyeDropper'] + const useFavicon: typeof import('@vueuse/core')['useFavicon'] + const useFetch: typeof import('@vueuse/core')['useFetch'] + const useFileDialog: typeof import('@vueuse/core')['useFileDialog'] + const useFileSystemAccess: typeof import('@vueuse/core')['useFileSystemAccess'] + const useFocus: typeof import('@vueuse/core')['useFocus'] + const useFocusWithin: typeof import('@vueuse/core')['useFocusWithin'] + const useFps: typeof import('@vueuse/core')['useFps'] + const useFrontendStore: typeof import('../stores/options.store')['useFrontendStore'] + const useFullscreen: typeof import('@vueuse/core')['useFullscreen'] + const useGamepad: typeof import('@vueuse/core')['useGamepad'] + const useGeolocation: typeof import('@vueuse/core')['useGeolocation'] + const useI18n: typeof import('vue-i18n')['useI18n'] + const useId: typeof import('vue')['useId'] + const useIdle: typeof import('@vueuse/core')['useIdle'] + const useImage: typeof import('@vueuse/core')['useImage'] + const useInfiniteScroll: typeof import('@vueuse/core')['useInfiniteScroll'] + const useIntersectionObserver: typeof import('@vueuse/core')['useIntersectionObserver'] + const useInterval: typeof import('@vueuse/core')['useInterval'] + const useIntervalFn: typeof import('@vueuse/core')['useIntervalFn'] + const useKeyModifier: typeof import('@vueuse/core')['useKeyModifier'] + const useLastChanged: typeof import('@vueuse/core')['useLastChanged'] + const useLink: typeof import('vue-router')['useLink'] + const useLocalStorage: typeof import('@vueuse/core')['useLocalStorage'] + const useLocale: typeof import('../composables/useLocale')['useLocale'] + const useMagicKeys: typeof import('@vueuse/core')['useMagicKeys'] + const useManualRefHistory: typeof import('@vueuse/core')['useManualRefHistory'] + const useMediaControls: typeof import('@vueuse/core')['useMediaControls'] + const useMediaQuery: typeof import('@vueuse/core')['useMediaQuery'] + const useMemoize: typeof import('@vueuse/core')['useMemoize'] + const useMemory: typeof import('@vueuse/core')['useMemory'] + const useModel: typeof import('vue')['useModel'] + const useMounted: typeof import('@vueuse/core')['useMounted'] + const useMouse: typeof import('@vueuse/core')['useMouse'] + const useMouseInElement: typeof import('@vueuse/core')['useMouseInElement'] + const useMousePressed: typeof import('@vueuse/core')['useMousePressed'] + const useMutationObserver: typeof import('@vueuse/core')['useMutationObserver'] + const useNavigatorLanguage: typeof import('@vueuse/core')['useNavigatorLanguage'] + const useNetwork: typeof import('@vueuse/core')['useNetwork'] + const useNow: typeof import('@vueuse/core')['useNow'] + const useObjectUrl: typeof import('@vueuse/core')['useObjectUrl'] + const useOffsetPagination: typeof import('@vueuse/core')['useOffsetPagination'] + const useOnline: typeof import('@vueuse/core')['useOnline'] + const useOptionsStore: typeof import('../stores/options.store')['useOptionsStore'] + const usePageLeave: typeof import('@vueuse/core')['usePageLeave'] + const useParallax: typeof import('@vueuse/core')['useParallax'] + const useParentElement: typeof import('@vueuse/core')['useParentElement'] + const usePerformanceObserver: typeof import('@vueuse/core')['usePerformanceObserver'] + const usePermission: typeof import('@vueuse/core')['usePermission'] + const usePointer: typeof import('@vueuse/core')['usePointer'] + const usePointerLock: typeof import('@vueuse/core')['usePointerLock'] + const usePointerSwipe: typeof import('@vueuse/core')['usePointerSwipe'] + const usePreferredColorScheme: typeof import('@vueuse/core')['usePreferredColorScheme'] + const usePreferredContrast: typeof import('@vueuse/core')['usePreferredContrast'] + const usePreferredDark: typeof import('@vueuse/core')['usePreferredDark'] + const usePreferredLanguages: typeof import('@vueuse/core')['usePreferredLanguages'] + const usePreferredReducedMotion: typeof import('@vueuse/core')['usePreferredReducedMotion'] + const usePreferredReducedTransparency: typeof import('@vueuse/core')['usePreferredReducedTransparency'] + const usePrevious: typeof import('@vueuse/core')['usePrevious'] + const useRafFn: typeof import('@vueuse/core')['useRafFn'] + const useRefHistory: typeof import('@vueuse/core')['useRefHistory'] + const useResizeObserver: typeof import('@vueuse/core')['useResizeObserver'] + const useRoute: typeof import('vue-router')['useRoute'] + const useRouter: typeof import('vue-router')['useRouter'] + const useSSRWidth: typeof import('@vueuse/core')['useSSRWidth'] + const useScreenOrientation: typeof import('@vueuse/core')['useScreenOrientation'] + const useScreenSafeArea: typeof import('@vueuse/core')['useScreenSafeArea'] + const useScriptTag: typeof import('@vueuse/core')['useScriptTag'] + const useScroll: typeof import('@vueuse/core')['useScroll'] + const useScrollLock: typeof import('@vueuse/core')['useScrollLock'] + const useSessionStorage: typeof import('@vueuse/core')['useSessionStorage'] + const useShare: typeof import('@vueuse/core')['useShare'] + const useSlots: typeof import('vue')['useSlots'] + const useSorted: typeof import('@vueuse/core')['useSorted'] + const useSpeechRecognition: typeof import('@vueuse/core')['useSpeechRecognition'] + const useSpeechSynthesis: typeof import('@vueuse/core')['useSpeechSynthesis'] + const useStepper: typeof import('@vueuse/core')['useStepper'] + const useStorage: typeof import('@vueuse/core')['useStorage'] + const useStorageAsync: typeof import('@vueuse/core')['useStorageAsync'] + const useStyleTag: typeof import('@vueuse/core')['useStyleTag'] + const useSupported: typeof import('@vueuse/core')['useSupported'] + const useSwipe: typeof import('@vueuse/core')['useSwipe'] + const useTemplateRef: typeof import('vue')['useTemplateRef'] + const useTemplateRefsList: typeof import('@vueuse/core')['useTemplateRefsList'] + const useTextDirection: typeof import('@vueuse/core')['useTextDirection'] + const useTextSelection: typeof import('@vueuse/core')['useTextSelection'] + const useTextareaAutosize: typeof import('@vueuse/core')['useTextareaAutosize'] + const useTheme: typeof import('../composables/useTheme')['useTheme'] + const useThrottle: typeof import('@vueuse/core')['useThrottle'] + const useThrottleFn: typeof import('@vueuse/core')['useThrottleFn'] + const useThrottledRefHistory: typeof import('@vueuse/core')['useThrottledRefHistory'] + const useTimeAgo: typeof import('@vueuse/core')['useTimeAgo'] + const useTimeout: typeof import('@vueuse/core')['useTimeout'] + const useTimeoutFn: typeof import('@vueuse/core')['useTimeoutFn'] + const useTimeoutPoll: typeof import('@vueuse/core')['useTimeoutPoll'] + const useTimestamp: typeof import('@vueuse/core')['useTimestamp'] + const useTitle: typeof import('@vueuse/core')['useTitle'] + const useToNumber: typeof import('@vueuse/core')['useToNumber'] + const useToString: typeof import('@vueuse/core')['useToString'] + const useToggle: typeof import('@vueuse/core')['useToggle'] + const useTransition: typeof import('@vueuse/core')['useTransition'] + const useUrlSearchParams: typeof import('@vueuse/core')['useUrlSearchParams'] + const useUserMedia: typeof import('@vueuse/core')['useUserMedia'] + const useVModel: typeof import('@vueuse/core')['useVModel'] + const useVModels: typeof import('@vueuse/core')['useVModels'] + const useVibrate: typeof import('@vueuse/core')['useVibrate'] + const useVirtualList: typeof import('@vueuse/core')['useVirtualList'] + const useWakeLock: typeof import('@vueuse/core')['useWakeLock'] + const useWebNotification: typeof import('@vueuse/core')['useWebNotification'] + const useWebSocket: typeof import('@vueuse/core')['useWebSocket'] + const useWebWorker: typeof import('@vueuse/core')['useWebWorker'] + const useWebWorkerFn: typeof import('@vueuse/core')['useWebWorkerFn'] + const useWindowFocus: typeof import('@vueuse/core')['useWindowFocus'] + const useWindowScroll: typeof import('@vueuse/core')['useWindowScroll'] + const useWindowSize: typeof import('@vueuse/core')['useWindowSize'] + const watch: typeof import('vue')['watch'] + const watchArray: typeof import('@vueuse/core')['watchArray'] + const watchAtMost: typeof import('@vueuse/core')['watchAtMost'] + const watchDebounced: typeof import('@vueuse/core')['watchDebounced'] + const watchDeep: typeof import('@vueuse/core')['watchDeep'] + const watchEffect: typeof import('vue')['watchEffect'] + const watchIgnorable: typeof import('@vueuse/core')['watchIgnorable'] + const watchImmediate: typeof import('@vueuse/core')['watchImmediate'] + const watchOnce: typeof import('@vueuse/core')['watchOnce'] + const watchPausable: typeof import('@vueuse/core')['watchPausable'] + const watchPostEffect: typeof import('vue')['watchPostEffect'] + const watchSyncEffect: typeof import('vue')['watchSyncEffect'] + const watchThrottled: typeof import('@vueuse/core')['watchThrottled'] + const watchTriggerable: typeof import('@vueuse/core')['watchTriggerable'] + const watchWithFilter: typeof import('@vueuse/core')['watchWithFilter'] + const whenever: typeof import('@vueuse/core')['whenever'] +} +// for type re-export +declare global { + // @ts-ignore + export type { Component, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue' + import('vue') + // @ts-ignore + export type { settingsType, Nullable, CrunchyListElement, CrunchyList } from '../stores/storeTypes' + import('../stores/storeTypes') +} + +// for vue template auto import +import { UnwrapRef } from 'vue' +declare module 'vue' { + interface GlobalComponents {} + interface ComponentCustomProperties { + readonly EffectScope: UnwrapRef + readonly Notification: UnwrapRef + readonly Notivue: UnwrapRef + readonly acceptHMRUpdate: UnwrapRef + readonly appRouter: UnwrapRef + readonly asyncComputed: UnwrapRef + readonly autoResetRef: UnwrapRef + readonly browser: UnwrapRef + readonly computed: UnwrapRef + readonly computedAsync: UnwrapRef + readonly computedEager: UnwrapRef + readonly computedInject: UnwrapRef + readonly computedWithControl: UnwrapRef + readonly controlledComputed: UnwrapRef + readonly controlledRef: UnwrapRef + readonly createApp: UnwrapRef + readonly createEventHook: UnwrapRef + readonly createGlobalState: UnwrapRef + readonly createInjectionState: UnwrapRef + readonly createPinia: UnwrapRef + readonly createReactiveFn: UnwrapRef + readonly createReusableTemplate: UnwrapRef + readonly createSharedComposable: UnwrapRef + readonly createTemplatePromise: UnwrapRef + readonly createUnrefFn: UnwrapRef + readonly customRef: UnwrapRef + readonly debouncedRef: UnwrapRef + readonly debouncedWatch: UnwrapRef + readonly defaultSettings: UnwrapRef + readonly defineAsyncComponent: UnwrapRef + readonly defineComponent: UnwrapRef + readonly definePage: UnwrapRef + readonly defineStore: UnwrapRef + readonly eagerComputed: UnwrapRef + readonly effectScope: UnwrapRef + readonly extendRef: UnwrapRef + readonly getActivePinia: UnwrapRef + readonly getCurrentInstance: UnwrapRef + readonly getCurrentScope: UnwrapRef + readonly h: UnwrapRef + readonly i18n: UnwrapRef + readonly ignorableWatch: UnwrapRef + readonly inject: UnwrapRef + readonly injectLocal: UnwrapRef + readonly isDefined: UnwrapRef + readonly isProxy: UnwrapRef + readonly isReactive: UnwrapRef + readonly isReadonly: UnwrapRef + readonly isRef: UnwrapRef + readonly makeDestructurable: UnwrapRef + readonly mapActions: UnwrapRef + readonly mapGetters: UnwrapRef + readonly mapState: UnwrapRef + readonly mapStores: UnwrapRef + readonly mapWritableState: UnwrapRef + readonly markRaw: UnwrapRef + readonly nextTick: UnwrapRef + readonly notivue: UnwrapRef + readonly onActivated: UnwrapRef + readonly onBeforeMount: UnwrapRef + readonly onBeforeRouteLeave: UnwrapRef + readonly onBeforeRouteUpdate: UnwrapRef + readonly onBeforeUnmount: UnwrapRef + readonly onBeforeUpdate: UnwrapRef + readonly onClickOutside: UnwrapRef + readonly onDeactivated: UnwrapRef + readonly onElementRemoval: UnwrapRef + readonly onErrorCaptured: UnwrapRef + readonly onKeyStroke: UnwrapRef + readonly onLongPress: UnwrapRef + readonly onMounted: UnwrapRef + readonly onRenderTracked: UnwrapRef + readonly onRenderTriggered: UnwrapRef + readonly onScopeDispose: UnwrapRef + readonly onServerPrefetch: UnwrapRef + readonly onStartTyping: UnwrapRef + readonly onUnmounted: UnwrapRef + readonly onUpdated: UnwrapRef + readonly onWatcherCleanup: UnwrapRef + readonly pausableWatch: UnwrapRef + readonly pinia: UnwrapRef + readonly provide: UnwrapRef + readonly provideLocal: UnwrapRef + readonly pushNotification: UnwrapRef + readonly reactify: UnwrapRef + readonly reactifyObject: UnwrapRef + readonly reactive: UnwrapRef + readonly reactiveComputed: UnwrapRef + readonly reactiveOmit: UnwrapRef + readonly reactivePick: UnwrapRef + readonly readonly: UnwrapRef + readonly ref: UnwrapRef + readonly refAutoReset: UnwrapRef + readonly refDebounced: UnwrapRef + readonly refDefault: UnwrapRef + readonly refThrottled: UnwrapRef + readonly refWithControl: UnwrapRef + readonly resolveComponent: UnwrapRef + readonly resolveRef: UnwrapRef + readonly resolveUnref: UnwrapRef + readonly setActivePinia: UnwrapRef + readonly setMapStoreSuffix: UnwrapRef + readonly shallowReactive: UnwrapRef + readonly shallowReadonly: UnwrapRef + readonly shallowRef: UnwrapRef + readonly storeToRefs: UnwrapRef + readonly syncRef: UnwrapRef + readonly syncRefs: UnwrapRef + readonly t: UnwrapRef + readonly templateRef: UnwrapRef + readonly throttledRef: UnwrapRef + readonly throttledWatch: UnwrapRef + readonly toRaw: UnwrapRef + readonly toReactive: UnwrapRef + readonly toRef: UnwrapRef + readonly toRefs: UnwrapRef + readonly toValue: UnwrapRef + readonly triggerRef: UnwrapRef + readonly tryOnBeforeMount: UnwrapRef + readonly tryOnBeforeUnmount: UnwrapRef + readonly tryOnMounted: UnwrapRef + readonly tryOnScopeDispose: UnwrapRef + readonly tryOnUnmounted: UnwrapRef + readonly unref: UnwrapRef + readonly unrefElement: UnwrapRef + readonly until: UnwrapRef + readonly useActiveElement: UnwrapRef + readonly useAnimate: UnwrapRef + readonly useArrayDifference: UnwrapRef + readonly useArrayEvery: UnwrapRef + readonly useArrayFilter: UnwrapRef + readonly useArrayFind: UnwrapRef + readonly useArrayFindIndex: UnwrapRef + readonly useArrayFindLast: UnwrapRef + readonly useArrayIncludes: UnwrapRef + readonly useArrayJoin: UnwrapRef + readonly useArrayMap: UnwrapRef + readonly useArrayReduce: UnwrapRef + readonly useArraySome: UnwrapRef + readonly useArrayUnique: UnwrapRef + readonly useAsyncQueue: UnwrapRef + readonly useAsyncState: UnwrapRef + readonly useAttrs: UnwrapRef + readonly useBase64: UnwrapRef + readonly useBattery: UnwrapRef + readonly useBluetooth: UnwrapRef + readonly useBreakpoints: UnwrapRef + readonly useBroadcastChannel: UnwrapRef + readonly useBrowserLocalStorage: UnwrapRef + readonly useBrowserLocation: UnwrapRef + readonly useBrowserSyncStorage: UnwrapRef + readonly useCached: UnwrapRef + readonly useClipboard: UnwrapRef + readonly useClipboardItems: UnwrapRef + readonly useCloned: UnwrapRef + readonly useColorMode: UnwrapRef + readonly useConfirmDialog: UnwrapRef + readonly useCounter: UnwrapRef + readonly useCssModule: UnwrapRef + readonly useCssVar: UnwrapRef + readonly useCssVars: UnwrapRef + readonly useCurrentElement: UnwrapRef + readonly useCycleList: UnwrapRef + readonly useDark: UnwrapRef + readonly useDateFormat: UnwrapRef + readonly useDebounce: UnwrapRef + readonly useDebounceFn: UnwrapRef + readonly useDebouncedRefHistory: UnwrapRef + readonly useDeviceMotion: UnwrapRef + readonly useDeviceOrientation: UnwrapRef + readonly useDevicePixelRatio: UnwrapRef + readonly useDevicesList: UnwrapRef + readonly useDisplayMedia: UnwrapRef + readonly useDocumentVisibility: UnwrapRef + readonly useDraggable: UnwrapRef + readonly useDropZone: UnwrapRef + readonly useElementBounding: UnwrapRef + readonly useElementByPoint: UnwrapRef + readonly useElementHover: UnwrapRef + readonly useElementSize: UnwrapRef + readonly useElementVisibility: UnwrapRef + readonly useEventBus: UnwrapRef + readonly useEventListener: UnwrapRef + readonly useEventSource: UnwrapRef + readonly useEyeDropper: UnwrapRef + readonly useFavicon: UnwrapRef + readonly useFetch: UnwrapRef + readonly useFileDialog: UnwrapRef + readonly useFileSystemAccess: UnwrapRef + readonly useFocus: UnwrapRef + readonly useFocusWithin: UnwrapRef + readonly useFps: UnwrapRef + readonly useFrontendStore: UnwrapRef + readonly useFullscreen: UnwrapRef + readonly useGamepad: UnwrapRef + readonly useGeolocation: UnwrapRef + readonly useI18n: UnwrapRef + readonly useId: UnwrapRef + readonly useIdle: UnwrapRef + readonly useImage: UnwrapRef + readonly useInfiniteScroll: UnwrapRef + readonly useIntersectionObserver: UnwrapRef + readonly useInterval: UnwrapRef + readonly useIntervalFn: UnwrapRef + readonly useKeyModifier: UnwrapRef + readonly useLastChanged: UnwrapRef + readonly useLink: UnwrapRef + readonly useLocalStorage: UnwrapRef + readonly useLocale: UnwrapRef + readonly useMagicKeys: UnwrapRef + readonly useManualRefHistory: UnwrapRef + readonly useMediaControls: UnwrapRef + readonly useMediaQuery: UnwrapRef + readonly useMemoize: UnwrapRef + readonly useMemory: UnwrapRef + readonly useModel: UnwrapRef + readonly useMounted: UnwrapRef + readonly useMouse: UnwrapRef + readonly useMouseInElement: UnwrapRef + readonly useMousePressed: UnwrapRef + readonly useMutationObserver: UnwrapRef + readonly useNavigatorLanguage: UnwrapRef + readonly useNetwork: UnwrapRef + readonly useNow: UnwrapRef + readonly useObjectUrl: UnwrapRef + readonly useOffsetPagination: UnwrapRef + readonly useOnline: UnwrapRef + readonly useOptionsStore: UnwrapRef + readonly usePageLeave: UnwrapRef + readonly useParallax: UnwrapRef + readonly useParentElement: UnwrapRef + readonly usePerformanceObserver: UnwrapRef + readonly usePermission: UnwrapRef + readonly usePointer: UnwrapRef + readonly usePointerLock: UnwrapRef + readonly usePointerSwipe: UnwrapRef + readonly usePreferredColorScheme: UnwrapRef + readonly usePreferredContrast: UnwrapRef + readonly usePreferredDark: UnwrapRef + readonly usePreferredLanguages: UnwrapRef + readonly usePreferredReducedMotion: UnwrapRef + readonly usePreferredReducedTransparency: UnwrapRef + readonly usePrevious: UnwrapRef + readonly useRafFn: UnwrapRef + readonly useRefHistory: UnwrapRef + readonly useResizeObserver: UnwrapRef + readonly useRoute: UnwrapRef + readonly useRouter: UnwrapRef + readonly useSSRWidth: UnwrapRef + readonly useScreenOrientation: UnwrapRef + readonly useScreenSafeArea: UnwrapRef + readonly useScriptTag: UnwrapRef + readonly useScroll: UnwrapRef + readonly useScrollLock: UnwrapRef + readonly useSessionStorage: UnwrapRef + readonly useShare: UnwrapRef + readonly useSlots: UnwrapRef + readonly useSorted: UnwrapRef + readonly useSpeechRecognition: UnwrapRef + readonly useSpeechSynthesis: UnwrapRef + readonly useStepper: UnwrapRef + readonly useStorage: UnwrapRef + readonly useStorageAsync: UnwrapRef + readonly useStyleTag: UnwrapRef + readonly useSupported: UnwrapRef + readonly useSwipe: UnwrapRef + readonly useTemplateRef: UnwrapRef + readonly useTemplateRefsList: UnwrapRef + readonly useTextDirection: UnwrapRef + readonly useTextSelection: UnwrapRef + readonly useTextareaAutosize: UnwrapRef + readonly useTheme: UnwrapRef + readonly useThrottle: UnwrapRef + readonly useThrottleFn: UnwrapRef + readonly useThrottledRefHistory: UnwrapRef + readonly useTimeAgo: UnwrapRef + readonly useTimeout: UnwrapRef + readonly useTimeoutFn: UnwrapRef + readonly useTimeoutPoll: UnwrapRef + readonly useTimestamp: UnwrapRef + readonly useTitle: UnwrapRef + readonly useToNumber: UnwrapRef + readonly useToString: UnwrapRef + readonly useToggle: UnwrapRef + readonly useTransition: UnwrapRef + readonly useUrlSearchParams: UnwrapRef + readonly useUserMedia: UnwrapRef + readonly useVModel: UnwrapRef + readonly useVModels: UnwrapRef + readonly useVibrate: UnwrapRef + readonly useVirtualList: UnwrapRef + readonly useWakeLock: UnwrapRef + readonly useWebNotification: UnwrapRef + readonly useWebSocket: UnwrapRef + readonly useWebWorker: UnwrapRef + readonly useWebWorkerFn: UnwrapRef + readonly useWindowFocus: UnwrapRef + readonly useWindowScroll: UnwrapRef + readonly useWindowSize: UnwrapRef + readonly watch: UnwrapRef + readonly watchArray: UnwrapRef + readonly watchAtMost: UnwrapRef + readonly watchDebounced: UnwrapRef + readonly watchDeep: UnwrapRef + readonly watchEffect: UnwrapRef + readonly watchIgnorable: UnwrapRef + readonly watchImmediate: UnwrapRef + readonly watchOnce: UnwrapRef + readonly watchPausable: UnwrapRef + readonly watchPostEffect: UnwrapRef + readonly watchSyncEffect: UnwrapRef + readonly watchThrottled: UnwrapRef + readonly watchTriggerable: UnwrapRef + readonly watchWithFilter: UnwrapRef + readonly whenever: UnwrapRef + } +} \ No newline at end of file diff --git a/src/types/components.d.ts b/src/types/components.d.ts new file mode 100644 index 00000000..f30aaf71 --- /dev/null +++ b/src/types/components.d.ts @@ -0,0 +1,42 @@ +/* eslint-disable */ +// @ts-nocheck +// Generated by unplugin-vue-components +// Read more: https://github.com/vuejs/core/pull/3399 +export {} + +/* prettier-ignore */ +declare module 'vue' { + export interface GlobalComponents { + AppHeader: typeof import('./../components/AppHeader.vue')['default'] + DisplayError: typeof import('./../components/state/DisplayError.vue')['default'] + IMdiChartBar: typeof import('~icons/mdi/chart-bar')['default'] + IMdiClose: typeof import('~icons/mdi/close')['default'] + IMdiCog: typeof import('~icons/mdi/cog')['default'] + IMdiDotsHorizontal: typeof import('~icons/mdi/dots-horizontal')['default'] + IMdiFormatListBulleted: typeof import('~icons/mdi/format-list-bulleted')['default'] + IMdiGift: typeof import('~icons/mdi/gift')['default'] + IMdiGithub: typeof import('~icons/mdi/github')['default'] + IMdiNetflix: typeof import('~icons/mdi/netflix')['default'] + IMdiTransitConnectionVariant: typeof import('~icons/mdi/transit-connection-variant')['default'] + IPhArrowLeft: typeof import('~icons/ph/arrow-left')['default'] + IPhGlobe: typeof import('~icons/ph/globe')['default'] + IPhMoon: typeof import('~icons/ph/moon')['default'] + IPhSun: typeof import('~icons/ph/sun')['default'] + LoadingSpinner: typeof import('./../components/state/LoadingSpinner.vue')['default'] + LocaleSwitch: typeof import('./../components/LocaleSwitch.vue')['default'] + OpenSettingsButton: typeof import('./../components/OpenSettingsButton.vue')['default'] + OptionalPermission: typeof import('./../components/OptionalPermission.vue')['default'] + OptionsPageSettingsTable: typeof import('./../components/options-page/SettingsTable.vue')['default'] + RouterLink: typeof import('vue-router')['RouterLink'] + RouterLinkUp: typeof import('./../components/RouterLinkUp.vue')['default'] + RouterView: typeof import('vue-router')['RouterView'] + SharedPagesAmazon: typeof import('./../components/shared-pages/Amazon.vue')['default'] + SharedPagesCrunchyroll: typeof import('./../components/shared-pages/Crunchyroll.vue')['default'] + SharedPagesDisney: typeof import('./../components/shared-pages/Disney.vue')['default'] + SharedPagesNetflix: typeof import('./../components/shared-pages/Netflix.vue')['default'] + SharedPagesStatistics: typeof import('./../components/shared-pages/Statistics.vue')['default'] + Switch: typeof import('./../components/Switch.vue')['default'] + TailwindEmptyState: typeof import('./../components/state/tailwind-empty-state.vue')['default'] + ThemeSwitch: typeof import('./../components/ThemeSwitch.vue')['default'] + } +} diff --git a/src/types/router-meta.d.ts b/src/types/router-meta.d.ts new file mode 100644 index 00000000..9882c5ac --- /dev/null +++ b/src/types/router-meta.d.ts @@ -0,0 +1,16 @@ +import "vue-router" +import { RouteNamedMap } from "vue-router/auto-routes" + +export {} + +declare module "vue-router" { + interface RouteMeta { + auth: + | undefined + | boolean + | { + unauthenticatedOnly: true + navigateAuthenticatedTo: keyof RouteNamedMap | "/" + } + } +} diff --git a/src/types/typed-router.d.ts b/src/types/typed-router.d.ts new file mode 100644 index 00000000..f828ac7e --- /dev/null +++ b/src/types/typed-router.d.ts @@ -0,0 +1,41 @@ +/* eslint-disable */ +/* prettier-ignore */ +// @ts-nocheck +// Generated by unplugin-vue-router. ‼️ DO NOT MODIFY THIS FILE ‼️ +// It's recommended to commit this file. +// Make sure to add this file to your tsconfig.json file as an "includes" or "files" entry. + +declare module 'vue-router/auto-routes' { + import type { + RouteRecordInfo, + ParamValue, + ParamValueOneOrMore, + ParamValueZeroOrMore, + ParamValueZeroOrOne, + } from 'vue-router' + + /** + * Route name map generated by unplugin-vue-router + */ + export interface RouteNamedMap { + '/action-popup/': RouteRecordInfo<'/action-popup/', '/action-popup', Record, Record>, + '/action-popup/Amazon': RouteRecordInfo<'/action-popup/Amazon', '/action-popup/Amazon', Record, Record>, + '/action-popup/Crunchyroll': RouteRecordInfo<'/action-popup/Crunchyroll', '/action-popup/Crunchyroll', Record, Record>, + '/action-popup/Disney': RouteRecordInfo<'/action-popup/Disney', '/action-popup/Disney', Record, Record>, + '/action-popup/Netflix': RouteRecordInfo<'/action-popup/Netflix', '/action-popup/Netflix', Record, Record>, + '/action-popup/SharedOptions': RouteRecordInfo<'/action-popup/SharedOptions', '/action-popup/SharedOptions', Record, Record>, + '/action-popup/Statistics': RouteRecordInfo<'/action-popup/Statistics', '/action-popup/Statistics', Record, Record>, + '/content-script-iframe/': RouteRecordInfo<'/content-script-iframe/', '/content-script-iframe', Record, Record>, + '/iframe-page/': RouteRecordInfo<'/iframe-page/', '/iframe-page', Record, Record>, + '/options-page/': RouteRecordInfo<'/options-page/', '/options-page', Record, Record>, + '/options-page/Amazon': RouteRecordInfo<'/options-page/Amazon', '/options-page/Amazon', Record, Record>, + '/options-page/Backup': RouteRecordInfo<'/options-page/Backup', '/options-page/Backup', Record, Record>, + '/options-page/Changelog': RouteRecordInfo<'/options-page/Changelog', '/options-page/Changelog', Record, Record>, + '/options-page/Crunchyroll': RouteRecordInfo<'/options-page/Crunchyroll', '/options-page/Crunchyroll', Record, Record>, + '/options-page/Disney': RouteRecordInfo<'/options-page/Disney', '/options-page/Disney', Record, Record>, + '/options-page/install': RouteRecordInfo<'/options-page/install', '/options-page/install', Record, Record>, + '/options-page/Netflix': RouteRecordInfo<'/options-page/Netflix', '/options-page/Netflix', Record, Record>, + '/options-page/SharedSettings': RouteRecordInfo<'/options-page/SharedSettings', '/options-page/SharedSettings', Record, Record>, + '/options-page/Statistics': RouteRecordInfo<'/options-page/Statistics', '/options-page/Statistics', Record, Record>, + } +} diff --git a/src/types/vite-env.d.ts b/src/types/vite-env.d.ts new file mode 100644 index 00000000..6df827b2 --- /dev/null +++ b/src/types/vite-env.d.ts @@ -0,0 +1,11 @@ +/// +/// + +// Put your variables here: + +declare const __VERSION__: string +declare const __NAME__: string +declare const __DISPLAY_NAME__: string +declare const __CHANGELOG__: string +declare const __GIT_COMMIT__: string +declare const __GITHUB_URL__: string diff --git a/src/ui/action-popup/app.vue b/src/ui/action-popup/app.vue new file mode 100644 index 00000000..bd04914f --- /dev/null +++ b/src/ui/action-popup/app.vue @@ -0,0 +1,48 @@ + + + + + diff --git a/src/ui/action-popup/index.html b/src/ui/action-popup/index.html new file mode 100644 index 00000000..22146583 --- /dev/null +++ b/src/ui/action-popup/index.html @@ -0,0 +1,18 @@ + + + + + + + + + <%= HTML_TITLE %> + + + + +
    + + + + \ No newline at end of file diff --git a/src/ui/action-popup/index.scss b/src/ui/action-popup/index.scss new file mode 100644 index 00000000..e69de29b diff --git a/src/ui/action-popup/index.ts b/src/ui/action-popup/index.ts new file mode 100644 index 00000000..71ee67c9 --- /dev/null +++ b/src/ui/action-popup/index.ts @@ -0,0 +1,34 @@ +import { i18n } from "@/utils/i18n" +import { notivue } from "@/utils/notifications" +import { pinia } from "@/utils/pinia" +import { appRouter } from "@/utils/router" +import { createApp } from "vue" +import App from "./app.vue" +import "./index.scss" + +appRouter.addRoute({ + path: "/", + redirect: "/action-popup", +}) + +// router.beforeEach((to, from, next) => { +// if (to.path === '/') { +// return next('/action-popup') +// } + +// next() +// }) + +const app = createApp(App).use(i18n).use(notivue).use(pinia).use(appRouter) + +app.mount("#app") + +export default app + +self.onerror = function (message, source, lineno, colno, error) { + console.info("Error: " + message) + console.info("Source: " + source) + console.info("Line: " + lineno) + console.info("Column: " + colno) + console.info("Error object: " + error) +} diff --git a/src/ui/action-popup/pages/Amazon.vue b/src/ui/action-popup/pages/Amazon.vue new file mode 100644 index 00000000..4aaea504 --- /dev/null +++ b/src/ui/action-popup/pages/Amazon.vue @@ -0,0 +1,4 @@ + diff --git a/src/ui/action-popup/pages/Crunchyroll.vue b/src/ui/action-popup/pages/Crunchyroll.vue new file mode 100644 index 00000000..80f6cdbc --- /dev/null +++ b/src/ui/action-popup/pages/Crunchyroll.vue @@ -0,0 +1,4 @@ + diff --git a/src/ui/action-popup/pages/Disney.vue b/src/ui/action-popup/pages/Disney.vue new file mode 100644 index 00000000..d8c86e87 --- /dev/null +++ b/src/ui/action-popup/pages/Disney.vue @@ -0,0 +1,4 @@ + diff --git a/src/ui/action-popup/pages/Netflix.vue b/src/ui/action-popup/pages/Netflix.vue new file mode 100644 index 00000000..8d7f3708 --- /dev/null +++ b/src/ui/action-popup/pages/Netflix.vue @@ -0,0 +1,4 @@ + diff --git a/src/ui/action-popup/pages/SharedOptions.vue b/src/ui/action-popup/pages/SharedOptions.vue new file mode 100644 index 00000000..91bcb8b6 --- /dev/null +++ b/src/ui/action-popup/pages/SharedOptions.vue @@ -0,0 +1,189 @@ + + + diff --git a/src/ui/action-popup/pages/Statistics.vue b/src/ui/action-popup/pages/Statistics.vue new file mode 100644 index 00000000..747ccdfe --- /dev/null +++ b/src/ui/action-popup/pages/Statistics.vue @@ -0,0 +1,3 @@ + diff --git a/src/ui/action-popup/pages/index.vue b/src/ui/action-popup/pages/index.vue new file mode 100644 index 00000000..a7e29dfa --- /dev/null +++ b/src/ui/action-popup/pages/index.vue @@ -0,0 +1,134 @@ + + + + + +> diff --git a/src/ui/content-script-iframe/app.vue b/src/ui/content-script-iframe/app.vue new file mode 100644 index 00000000..c7af5c8e --- /dev/null +++ b/src/ui/content-script-iframe/app.vue @@ -0,0 +1,21 @@ + + + + + diff --git a/src/ui/content-script-iframe/index.html b/src/ui/content-script-iframe/index.html new file mode 100644 index 00000000..828c5064 --- /dev/null +++ b/src/ui/content-script-iframe/index.html @@ -0,0 +1,18 @@ + + + + + + <%= HTML_TITLE %> + + +
    + + + diff --git a/src/ui/content-script-iframe/index.scss b/src/ui/content-script-iframe/index.scss new file mode 100644 index 00000000..e69de29b diff --git a/src/ui/content-script-iframe/index.ts b/src/ui/content-script-iframe/index.ts new file mode 100644 index 00000000..1cb593c2 --- /dev/null +++ b/src/ui/content-script-iframe/index.ts @@ -0,0 +1,26 @@ +import { i18n } from "@/utils/i18n" +import { notivue } from "@/utils/notifications" +import { pinia } from "@/utils/pinia" +import { appRouter } from "@/utils/router" +import { createApp } from "vue" +import App from "./app.vue" +import "./index.scss" + +appRouter.addRoute({ + path: "/", + redirect: "/content-script-iframe", +}) + +const app = createApp(App).use(i18n).use(notivue).use(pinia).use(appRouter) + +app.mount("#app") + +export default app + +self.onerror = function (message, source, lineno, colno, error) { + console.info("Error: " + message) + console.info("Source: " + source) + console.info("Line: " + lineno) + console.info("Column: " + colno) + console.info("Error object: " + error) +} diff --git a/src/ui/content-script-iframe/pages/index.vue b/src/ui/content-script-iframe/pages/index.vue new file mode 100644 index 00000000..2f116c44 --- /dev/null +++ b/src/ui/content-script-iframe/pages/index.vue @@ -0,0 +1,7 @@ + + + diff --git a/src/ui/iframe-page/app.vue b/src/ui/iframe-page/app.vue new file mode 100644 index 00000000..b485ac21 --- /dev/null +++ b/src/ui/iframe-page/app.vue @@ -0,0 +1,7 @@ + + + + + diff --git a/src/ui/iframe-page/index.html b/src/ui/iframe-page/index.html new file mode 100644 index 00000000..828c5064 --- /dev/null +++ b/src/ui/iframe-page/index.html @@ -0,0 +1,18 @@ + + + + + + <%= HTML_TITLE %> + + +
    + + + diff --git a/src/ui/iframe-page/index.scss b/src/ui/iframe-page/index.scss new file mode 100644 index 00000000..e69de29b diff --git a/src/ui/iframe-page/index.ts b/src/ui/iframe-page/index.ts new file mode 100644 index 00000000..15a2b3f1 --- /dev/null +++ b/src/ui/iframe-page/index.ts @@ -0,0 +1,26 @@ +import { i18n } from "@/utils/i18n" +import { notivue } from "@/utils/notifications" +import { pinia } from "@/utils/pinia" +import { appRouter } from "@/utils/router" +import { createApp } from "vue" +import App from "./app.vue" +import "./index.scss" + +appRouter.addRoute({ + path: "/", + redirect: "/iframe-page", +}) + +const app = createApp(App).use(i18n).use(notivue).use(pinia).use(appRouter) + +app.mount("#app") + +export default app + +self.onerror = function (message, source, lineno, colno, error) { + console.info("Error: " + message) + console.info("Source: " + source) + console.info("Line: " + lineno) + console.info("Column: " + colno) + console.info("Error object: " + error) +} diff --git a/src/ui/iframe-page/pages/index.vue b/src/ui/iframe-page/pages/index.vue new file mode 100644 index 00000000..f20775cf --- /dev/null +++ b/src/ui/iframe-page/pages/index.vue @@ -0,0 +1,33 @@ + + + diff --git a/src/ui/options-page/app.vue b/src/ui/options-page/app.vue new file mode 100644 index 00000000..b187b7c5 --- /dev/null +++ b/src/ui/options-page/app.vue @@ -0,0 +1,290 @@ + + + + diff --git a/src/ui/options-page/index.html b/src/ui/options-page/index.html new file mode 100644 index 00000000..17e1450c --- /dev/null +++ b/src/ui/options-page/index.html @@ -0,0 +1,16 @@ + + + + + + + + Settings + + + +
    + + + + \ No newline at end of file diff --git a/src/ui/options-page/index.scss b/src/ui/options-page/index.scss new file mode 100644 index 00000000..e69de29b diff --git a/src/ui/options-page/index.ts b/src/ui/options-page/index.ts new file mode 100644 index 00000000..0d1c1018 --- /dev/null +++ b/src/ui/options-page/index.ts @@ -0,0 +1,26 @@ +import { i18n } from "@/utils/i18n" +import { notivue } from "@/utils/notifications" +import { pinia } from "@/utils/pinia" +import { appRouter } from "@/utils/router" +import { createApp } from "vue" +import App from "./app.vue" +import "./index.scss" + +appRouter.addRoute({ + path: "/", + redirect: "/options-page", +}) + +const app = createApp(App).use(i18n).use(notivue).use(pinia).use(appRouter) + +app.mount("#app") + +export default app + +self.onerror = function (message, source, lineno, colno, error) { + console.info("Error: " + message) + console.info("Source: " + source) + console.info("Line: " + lineno) + console.info("Column: " + colno) + console.info("Error object: " + error) +} diff --git a/src/ui/options-page/pages/Amazon.vue b/src/ui/options-page/pages/Amazon.vue new file mode 100644 index 00000000..fbf59290 --- /dev/null +++ b/src/ui/options-page/pages/Amazon.vue @@ -0,0 +1,5 @@ + + + diff --git a/src/ui/options-page/pages/Backup.vue b/src/ui/options-page/pages/Backup.vue new file mode 100644 index 00000000..b409f2e1 --- /dev/null +++ b/src/ui/options-page/pages/Backup.vue @@ -0,0 +1,74 @@ + + + diff --git a/src/ui/options-page/pages/Changelog.vue b/src/ui/options-page/pages/Changelog.vue new file mode 100644 index 00000000..8b13684b --- /dev/null +++ b/src/ui/options-page/pages/Changelog.vue @@ -0,0 +1,32 @@ + + + + + diff --git a/src/ui/options-page/pages/Crunchyroll.vue b/src/ui/options-page/pages/Crunchyroll.vue new file mode 100644 index 00000000..1d07f9f5 --- /dev/null +++ b/src/ui/options-page/pages/Crunchyroll.vue @@ -0,0 +1,3 @@ + diff --git a/src/ui/options-page/pages/Disney.vue b/src/ui/options-page/pages/Disney.vue new file mode 100644 index 00000000..96314c83 --- /dev/null +++ b/src/ui/options-page/pages/Disney.vue @@ -0,0 +1,3 @@ + diff --git a/src/ui/options-page/pages/Netflix.vue b/src/ui/options-page/pages/Netflix.vue new file mode 100644 index 00000000..e6cd1694 --- /dev/null +++ b/src/ui/options-page/pages/Netflix.vue @@ -0,0 +1,3 @@ + diff --git a/src/ui/options-page/pages/SharedSettings.vue b/src/ui/options-page/pages/SharedSettings.vue new file mode 100644 index 00000000..406c521e --- /dev/null +++ b/src/ui/options-page/pages/SharedSettings.vue @@ -0,0 +1,188 @@ + + diff --git a/src/ui/options-page/pages/Statistics.vue b/src/ui/options-page/pages/Statistics.vue new file mode 100644 index 00000000..a8d44d4a --- /dev/null +++ b/src/ui/options-page/pages/Statistics.vue @@ -0,0 +1,3 @@ + diff --git a/src/ui/options-page/pages/index.vue b/src/ui/options-page/pages/index.vue new file mode 100644 index 00000000..79981f89 --- /dev/null +++ b/src/ui/options-page/pages/index.vue @@ -0,0 +1,6 @@ + + diff --git a/src/ui/options-page/pages/install.vue b/src/ui/options-page/pages/install.vue new file mode 100644 index 00000000..613218d3 --- /dev/null +++ b/src/ui/options-page/pages/install.vue @@ -0,0 +1,69 @@ + + + diff --git a/src/utils/i18n.ts b/src/utils/i18n.ts new file mode 100644 index 00000000..38d755bf --- /dev/null +++ b/src/utils/i18n.ts @@ -0,0 +1,16 @@ +import messages from "@intlify/unplugin-vue-i18n/messages" +import { createI18n } from "vue-i18n" + +export const i18n = createI18n({ + globalInjection: true, + legacy: false, + locale: "en", + fallbackLocale: "en", + messages, +}) + +// restore locale from local storage + +const { data: currentLocale } = useBrowserLocalStorage("user-locale", "en") + +i18n.global.locale.value = currentLocale.value diff --git a/src/utils/notifications.ts b/src/utils/notifications.ts new file mode 100644 index 00000000..8613ef9d --- /dev/null +++ b/src/utils/notifications.ts @@ -0,0 +1,8 @@ +import { createNotivue } from "notivue" + +import "notivue/notification.css" // Only needed if using built-in notifications +import "notivue/animations.css" // Only needed if using built-in animations + +export const notivue = createNotivue({ + position: "bottom-center", +}) diff --git a/src/utils/pinia.ts b/src/utils/pinia.ts new file mode 100644 index 00000000..06ef2150 --- /dev/null +++ b/src/utils/pinia.ts @@ -0,0 +1,3 @@ +import { createPinia } from "pinia" + +export const pinia = createPinia() diff --git a/src/utils/router/index.ts b/src/utils/router/index.ts new file mode 100644 index 00000000..083f305e --- /dev/null +++ b/src/utils/router/index.ts @@ -0,0 +1,16 @@ +import { createRouter, createWebHashHistory } from "vue-router" +import { handleHotUpdate, routes } from "vue-router/auto-routes" + +routes.push({ + path: "/:catchAll(.*)*", + redirect: "/", +}) + +export const appRouter = createRouter({ + history: createWebHashHistory(import.meta.env.BASE_URL), + routes, +}) + +if (import.meta.hot) { + handleHotUpdate(appRouter) +} diff --git a/tailwind.config.cjs b/tailwind.config.cjs new file mode 100644 index 00000000..a4bcf82c --- /dev/null +++ b/tailwind.config.cjs @@ -0,0 +1,43 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ["src/**/*.{html,vue,js,ts,jsx,tsx}"], + theme: { + extend: { + colors: { + netflix: "#e60010", + amazon: "#00aeef", + disney: "#1d1fff", + crunchyroll: "#f78b24", + }, + }, + }, + plugins: [ + "prettier-plugin-tailwindcss", + // require("@tailwindcss/typography"), + // require('@tailwindcss/forms'), + require("daisyui"), + ], + daisyui: { + themes: [ + { + light: { + primary: "#fff", + "primary-content": "#000", + }, + }, + { + dark: { + primary: "#242424", + "primary-content": "#fff", + secondary: "#0082fc", + "secondary-content": "#fff", + accent: "#00ffff", + neutral: "#161616", + "base-100": "#212121", + "error-content": "#fff", + }, + }, + ], + logs: false, + }, +} diff --git a/test.py b/test.py deleted file mode 100644 index 82c592bc..00000000 --- a/test.py +++ /dev/null @@ -1,326 +0,0 @@ -from selenium import webdriver -from selenium.webdriver.firefox.options import Options -from selenium.webdriver.common.by import By -from selenium.webdriver.support.wait import WebDriverWait -import time -import sys - -ffOptions = Options() - -ffOptions.add_argument("-profile") -ffOptions.add_argument( - r"C:\Users\Marvin\AppData\Roaming\Mozilla\Firefox\Profiles\35x42i21.test" -) -driver = webdriver.Firefox(options=ffOptions) -extension_path = "NetflixPrime@Autoskip.io.xpi" -driver.install_addon(extension_path, temporary=True) -driver.implicitly_wait(500) - - -# ## Netflix tests -def Netflix_intro(): - driver.get("https://www.netflix.com/watch/80011385?trackId=14277283") - # click on profile-icon class - # driver.find_element(by=By.CLASS_NAME, value="profile-icon").click() - # click on video element - driver.implicitly_wait(4) - driver.find_element(by=By.CLASS_NAME, value="watch-video--autoplay-blocked").click() - - # profile auto pick - time.sleep(1) - # driver.implicitly_wait(1) - # profileNames = driver.find_elements(by=By.CSS_SELECTOR, value=".profile-name") - # try: - # assert len(profileNames) == 0 - # print("✅: Profile Auto Pick") - # output[7][1] = "✅" - # except Exception as e: - # print("❌: Profile Auto Pick") - # print(e) - - video = driver.find_element(by=By.TAG_NAME, value="video") - # video.currentTime = 33 # does not work on netflix - driver.implicitly_wait(2) - forwardButton = driver.find_element( - by=By.XPATH, value="//button[@data-uia='control-forward10']" - ) - backwardButton = driver.find_element( - by=By.XPATH, value="//button[@data-uia='control-back10']" - ) - while video.get_property("currentTime") <= 54: - forwardButton.click() - time.sleep(0.3) - - while video.get_property("currentTime") >= 64: - backwardButton.click() - time.sleep(0.3) - time.sleep(8) - t = video.get_property("currentTime") - try: - assert t >= 62 - print("✅: Skip Intro") - output[1][1] = "✅" - except Exception as e: - print("❌: Skip Intro") - print("time: " + str(t)) - print(e) - - Speed_Slider(1) - - -def Speed_Slider(position, isPrime=False): - # Speed Slider Test - driver.implicitly_wait(3) - t = driver.find_elements(by=By.ID, value="videoSpeedSlider") - # set value to 20 - script = "document.querySelector('#videoSpeedSlider').value = 20" - driver.execute_script(script) - - # create oninput event - inputEvent = "document.querySelector('#videoSpeedSlider').dispatchEvent(new Event('input', { bubbles: true,cancelable: true,}));" - driver.execute_script(inputEvent) - if isPrime: - video = driver.find_element(by=By.XPATH, value=v) - else: - video = driver.find_element(by=By.TAG_NAME, value="video") - - try: - assert len(t) == 1 - assert video.get_property("playbackRate") == 2 - print("✅: Speed Slider") - output[5][position] = "✅" - except Exception as e: - print("❌: Speed Slider") - print("playbackRate: " + str(video.get_property("playbackRate"))) - print("len(t): " + str(len(t))) - print(e) - - script = 'document.querySelector("#videoSpeedSlider").value = 10' - driver.execute_script(script) - driver.execute_script(inputEvent) - - -def Netflix_Profile(): - driver.get("https://www.netflix.com/profiles/manage") - driver.implicitly_wait(2) - driver.find_element(by=By.CLASS_NAME, value="profile-button").click() - time.sleep(1) - profileNames = driver.find_elements(by=By.CSS_SELECTOR, value=".profile-name") - try: - assert len(profileNames) == 0 - print("✅: Profile Auto Pick") - output[7][1] = "✅" - except Exception as e: - print("❌: Profile Auto Pick") - print(e) - - -## Amazon Prime tests -v = "//video[not(@preload='auto')]" -AmazonVideoClass = "#dv-web-player > div > div:nth-child(1) > div > div > div.scalingVideoContainer > div.scalingVideoContainerBottom > div > video" - - -def Amazon_Prime(): - # Intro test - driver.get( - "https://www.amazon.de/gp/video/detail/B07FMF18GN/ref=atv_dp_btf_el_prime_sd_tv_resume_t1ALAAAAAA0wr0?autoplay=1&t=1" - ) - video = driver.find_element(by=By.XPATH, value=v) - # sleep for 3 seconds - time.sleep(3) - skipButton = driver.find_element( - by=By.CSS_SELECTOR, value=".atvwebplayersdk-skipelement-button" - ) - # Speed Slider Test - Speed_Slider(2, True) - - # delay - wait = WebDriverWait(driver, timeout=5) - wait.until(lambda driver: video.get_property("currentTime") > 4) - # assert video time greater than 24 - t = video.get_property("currentTime") - try: - assert t >= 16 - print("✅: Skip Intro") - output[1][2] = "✅" - except Exception as e: - print("❌: Skip Intro") - print("time: " + str(t)) - print(e) - - # delay - wait = WebDriverWait(driver, timeout=5) - wait.until(lambda driver: video.get_property("currentTime") > t) - # Skip Credits test - - script = "document.querySelector('" + AmazonVideoClass + "').currentTime = 2463" - driver.execute_script(script) - - wait = WebDriverWait(driver, timeout=10) - try: - wait.until(lambda driver: video.get_property("currentTime") < 10) - print("✅: Skip Credits") - output[3][2] = "✅" - except Exception as e: - print("❌: Skip Credits") - print("time: " + str(video.get_property("currentTime"))) - print(e) - - # Skip Recap Test - wait = WebDriverWait(driver, timeout=8) - try: - wait.until(lambda driver: video.get_property("currentTime") >= 37) - print("✅: Skip Recap") - output[2][2] = "✅" - except Exception as e: - print("❌: Skip Recap") - print("time: " + str(time)) - # print error message - print(e) - - -def Amazon_Ad(): - driver.get( - "https://www.amazon.de/gp/video/detail/B00IAJMINK/ref=atv_dp_btf_el_3p_sd_tv_resume_t1AKAAAAAA0wr0?autoplay=1&t=43" - ) - video = driver.find_element(by=By.XPATH, value=v) - wait = WebDriverWait(driver, timeout=20) - try: - wait.until(lambda driver: video.get_property("currentTime") > 10) - print("✅: Skip Ad") - output[4][2] = "✅" - except Exception as e: - print("❌: Skip Ad") - print("time: " + str(video.get_property("currentTime"))) - print(e) - - -def Amazon_PaidContent(): - driver.get("https://www.amazon.de/gp/video/storefront") - time.sleep(1) # Sleep for 1seconds - # timeout =1 - driver.implicitly_wait(1) - t = driver.find_elements(by=By.CSS_SELECTOR, value=".o86fri") - try: - assert len(t) == 0 - print("✅: No paid content") - output[6][2] = "✅" - except Exception as e: - print("❌: Paid content with length" + str(len(t))) - print(e) - - -def Disney_Intro(): - driver.get( - "https://www.disneyplus.com/en-gb/video/4e9305a0-6ade-4922-bfba-c68c53a0d5a6" - ) - # play video - driver.implicitly_wait(5) - playButton = driver.find_elements( - by=By.XPATH, value="//div[@data-testid='episode-s1-e2']" - ) - if len(playButton) > 0: - playButton[0].click() - print("clicked play Button") - else: - print("no play button found") - - Speed_Slider(3) - video = driver.find_element(by=By.XPATH, value=v) - - # Skip Intro Test - while video.get_property("currentTime") > 80: - driver.execute_script( - "document.querySelector('.control-icon-btn.rwd-10sec-icon').click()" - ) - time.sleep(0.3) - print("time " + str(video.get_property("currentTime"))) - wait = WebDriverWait(driver, timeout=30) - wait.until(lambda driver: video.get_property("currentTime") >= 80) - - wait = WebDriverWait(driver, timeout=5) - try: - wait.until(lambda driver: video.get_property("currentTime") >= 106) - print("✅: Skip Intro/Recap") - output[1][3] = "✅" - output[2][3] = "✅" - except Exception as e: - print("❌: Skip Intro/Recap") - print("time: " + str(time)) - print(e) - - -def Disney_Credits(): - # Skip Credits Test - # mickey mouse 5 min - driver.get( - "https://www.disneyplus.com/en-gb/video/f0a6ddaf-d754-45e2-ab19-86e678047a17" - ) - - # play video - driver.implicitly_wait(5) - playButton = driver.find_elements( - by=By.XPATH, value="//div[@data-testid='episode-s1-e2']" - ) - if len(playButton) > 0: - playButton[0].click() - print("clicked play Button") - else: - print("no play button found") - video = driver.find_element(by=By.TAG_NAME, value="video") - while video.get_property("currentTime") < 220: - driver.execute_script( - "document.querySelector('.control-icon-btn.ff-10sec-icon').click()" - ) - time.sleep(0.2) - driver.implicitly_wait(100) - nextEpisodeButton = driver.find_element( - by=By.XPATH, value="//button[@data-gv2elementkey='playNext']" - ) - print("found playNext") - # driver.execute_script("document.querySelector('video').playbackRate = 1") - time.sleep(1) - video = driver.find_element(by=By.TAG_NAME, value="video") - t = video.get_property("currentTime") - try: - assert t < 5 - print("✅: Skip Credits") - output[3][3] = "✅" - except Exception as e: - print("❌: Skip Credits") - print("time: " + str(t)) - print(e) - - -output = [ - ["", "Netflix", "Prime Video", "Disney+"], - ["Intro", "❌", "❌", "❌"], - ["Recaps", "❕", "❌", "❌"], - ["Credits", "❕", "❌", "❌"], - ["Ads", "❕", "❌", "➖"], - ["Speed Slider", "❌", "❌", "❌"], - ["Paid Content", "➖", "❌", "➖"], - ["Profile", "❌", "➖", "➖"], -] - -if len(sys.argv) <= 1 or "p" in sys.argv: - print("Amazon Prime:") - Amazon_Ad() - Amazon_Prime() - Amazon_PaidContent() - -if len(sys.argv) <= 1 or "n" in sys.argv: - print("Netflix:") - Netflix_Profile() - Netflix_intro() - -if len(sys.argv) <= 1 or "d" in sys.argv: - print("Disney:") - Disney_Intro() - Disney_Credits() - -format_row = "{:>12}" + "{:^12}" * (len(output[0]) - 1) -for row in output: - print(format_row.format(*row)) - -driver.quit() diff --git a/test/user.js b/test/user.js deleted file mode 100644 index d1aef1ad..00000000 --- a/test/user.js +++ /dev/null @@ -1,70 +0,0 @@ -user_pref("app.update.auto", false); -user_pref("app.update.enabled", false); -user_pref("browser.download.manager.showWhenStarting", false); -user_pref("browser.EULA.override", true); -user_pref("browser.EULA.3.accepted", true); -user_pref("browser.link.open_external", 2); -user_pref("browser.link.open_newwindow", 3); -user_pref("browser.offline", false); -user_pref("browser.safebrowsing.enabled", false); -user_pref("browser.search.update", false); -user_pref("extensions.blocklist.enabled", false); -user_pref("browser.sessionstore.resume_from_crash", false); -user_pref("browser.shell.checkDefaultBrowser", false); -user_pref("browser.tabs.warnOnClose", false); -user_pref("browser.tabs.warnOnOpen", false); -user_pref("browser.startup.page", 0); -user_pref("browser.safebrowsing.malware.enabled", false); -user_pref("startup.homepage_welcome_url", "about:blank"); -user_pref("devtools.errorconsole.enabled", true); -user_pref("dom.disable_open_during_load", false); -user_pref("extensions.autoDisableScopes", 10); -user_pref("extensions.logging.enabled", false); -user_pref("extensions.update.enabled", false); -user_pref("extensions.update.notifyUser", false); -user_pref("network.manage-offline-status", false); -user_pref("network.http.max-connections-per-server", 10); -user_pref("network.http.phishy-userpass-length", 255); -user_pref("offline-apps.allow_by_default", true); -user_pref("prompts.tab_modal.enabled", false); -user_pref("security.fileuri.origin_policy", 3); -user_pref("security.fileuri.strict_origin_policy", false); -user_pref("security.warn_entering_secure", false); -user_pref("security.warn_entering_secure.show_once", false); -user_pref("security.warn_entering_weak", false); -user_pref("security.warn_entering_weak.show_once", false); -user_pref("security.warn_leaving_secure", false); -user_pref("security.warn_leaving_secure.show_once", false); -user_pref("security.warn_submit_insecure", false); -user_pref("security.warn_viewing_mixed", false); -user_pref("security.warn_viewing_mixed.show_once", false); -user_pref("signon.rememberSignons", false); -user_pref("toolkit.networkmanager.disable", true); -user_pref("toolkit.telemetry.enabled", false); -user_pref("toolkit.telemetry.prompted", 2); -user_pref("toolkit.telemetry.rejected", true); -user_pref("javascript.options.showInConsole", true); -user_pref("browser.dom.window.dump.enabled", true); -user_pref("webdriver_accept_untrusted_certs", true); -user_pref("webdriver_enable_native_events", true); -user_pref("webdriver_assume_untrusted_issuer", true); -user_pref("dom.max_script_run_time", 30); -user_pref("datareporting.policy.dataSubmissionEnabled", false); -user_pref("devtools.debugger.remote-enabled", true); -user_pref("devtools.debugger.prompt-connection", false); -user_pref("devtools.browserconsole.contentMessages", true); -user_pref("extensions.checkCompatibility.nightly", false); -user_pref("extensions.enabledScopes", 5); -user_pref("extensions.getAddons.cache.enabled", false); -user_pref("extensions.installDistroAddons", false); -user_pref("xpinstall.signatures.required", false); -user_pref("browser.startup.homepage", "about:blank"); -user_pref("startup.homepage_welcome_url.additional", ""); -user_pref("devtools.chrome.enabled", true); -user_pref("urlclassifier.updateinterval", 172800); -user_pref("browser.safebrowsing.provider.0.gethashURL", "http://localhost/safebrowsing-dummy/gethash"); -user_pref("browser.safebrowsing.provider.0.keyURL", "http://localhost/safebrowsing-dummy/newkey"); -user_pref("browser.safebrowsing.provider.0.updateURL", "http://localhost/safebrowsing-dummy/update"); -user_pref("browser.selfsupport.url", "https://localhost/selfrepair"); -user_pref("browser.reader.detectedFirstArticle", true); -user_pref("datareporting.policy.firstRunURL", ""); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..c782d46c --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,39 @@ +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "incremental": true, + "target": "ES6", + "jsx": "preserve", + "lib": ["ES6", "DOM"], + "useDefineForClassFields": true, + "module": "ESNext", + "moduleResolution": "Bundler", + "paths": { + "@/*": ["./src/*"], + "~/*": ["./src/*"], + "src/*": ["./src/*"], + "@assets/*": ["./src/assets/*"] + }, + "resolveJsonModule": true, + "types": ["unplugin-icons/types/vue", "chrome-types", "@intlify/unplugin-vue-i18n/messages"], + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "isolatedModules": true, + "skipLibCheck": true + }, + "include": [ + "package.json", + "vite.config.ts", + // "manifest.config.ts", + "src/**/*.ts", + "src/**/*.d.ts", + "src/**/*.tsx", + "src/**/*.vue" + ] + // "references": [ + // { + // "path": "./tsconfig.node.json" + // } + // ] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 00000000..dde57ea9 --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "strict": true, + "incremental": true, + "composite": true, + "module": "ESNext", + "moduleResolution": "Bundler", + "paths": { + "@/*": ["./src/*"], + "~/*": ["./src/*"], + "src/*": ["./src/*"], + "@assets/*": ["./src/assets/*"] + }, + "resolveJsonModule": true, + "types": ["unplugin-icons/types/vue", "chrome-types", "@intlify/unplugin-vue-i18n/messages"], + "allowSyntheticDefaultImports": true, + "esModuleInterop": true + }, + "include": [ + "package.json", + "vite.config.ts", + "vite.firefox.config.ts", + "manifest.config.ts", + "manifest.firefox.config.ts" + ] +} diff --git a/vite.chrome.config.ts b/vite.chrome.config.ts new file mode 100644 index 00000000..aebd873c --- /dev/null +++ b/vite.chrome.config.ts @@ -0,0 +1,113 @@ +import { crx } from "@crxjs/vite-plugin" +import { defineConfig } from "vite" +import zipPack from "vite-plugin-zip-pack" +import manifest from "./manifest.chrome.config" +import packageJson from "./package.json" with { type: "json" } +import ViteConfig from "./vite.config" +import chalk from "chalk" + +const IS_DEV = process.env.NODE_ENV === "development" +const browser = "chrome" +const outDir = "dist" +const browserOutDir = `${outDir}/${browser}` +const outFileName = `${browser}-${packageJson.version}.zip` + +function printDevMessage() { + setTimeout(() => { + console.info("\n") + console.info(`${chalk.greenBright(`✅ Successfully built for ${browser}.`)}`) + console.info( + chalk.greenBright( + `🚀 To load this extension in Chrome, go to chrome://extensions/, enable "Developer mode", click "Load unpacked", and select the ${browserOutDir} directory.`, + ), + ) + console.info("\n") + }, 50) +} + +function printProdMessage() { + setTimeout(() => { + console.info("\n") + console.info(`${chalk.greenBright(`✅ Successfully built for ${browser}.`)}`) + console.info( + `${chalk.greenBright(`📦 Zip File for ${browser} is located at ${outDir}/${outFileName}. You can upload this to respective store. `)}`, + ) + console.info( + chalk.greenBright( + ` 🚀 To load this extension in Chrome, go to chrome://extensions/, enable "Developer mode", click "Load unpacked", and select the ${browserOutDir} directory.`, + ), + ) + console.info("\n") + }, 50) +} + +if (!ViteConfig.build) { + ViteConfig.build = {} +} + +if (!ViteConfig.plugins) { + ViteConfig.plugins = [] +} + +ViteConfig.build.outDir = browserOutDir +// ViteConfig.base = IS_DEV +// ? `http://localhost:${ViteConfig.server?.port}/` +// : `/dist/${browser}` + +if (IS_DEV) { + ViteConfig.build.minify = false + ViteConfig.build.sourcemap = true +} + +ViteConfig.plugins.unshift( + crx({ + manifest, + browser, + contentScripts: { + injectCss: true, + }, + }), +) + +if (IS_DEV) { + ViteConfig.plugins.push({ + name: "vite-plugin-build-message", + enforce: "post", + configureServer(server) { + server.httpServer?.once("listening", () => { + printDevMessage() + }) + }, + closeBundle: { + sequential: true, + handler() { + printDevMessage() + }, + }, + }) +} else { + ViteConfig.plugins.push( + zipPack({ + inDir: browserOutDir, + outDir, + outFileName, + filter: (fileName, filePath, isDirectory) => !(isDirectory && filePath.includes(".vite")), + }), + ) + + ViteConfig.plugins.push({ + name: "vite-plugin-build-message", + enforce: "post", + closeBundle: { + sequential: true, + handler() { + printProdMessage() + }, + }, + }) +} + +// https://vitejs.dev/config/ +export default defineConfig({ + ...ViteConfig, +}) diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 00000000..37a0df73 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,190 @@ +import fs from "node:fs" +import { URL, fileURLToPath } from "node:url" +import vue from "@vitejs/plugin-vue" +import AutoImport from "unplugin-auto-import/vite" +import IconsResolver from "unplugin-icons/resolver" +import Icons from "unplugin-icons/vite" +import Components from "unplugin-vue-components/vite" +import { createHtmlPlugin } from "vite-plugin-html" +import VueRouter from "unplugin-vue-router/vite" +import { defineConfig } from "vite" +// @ts-expect-error commonjs module +import { defineViteConfig as define } from "./define.config.mjs" +import vueDevTools from "vite-plugin-vue-devtools" +import TurboConsole from "unplugin-turbo-console/vite" +import VueI18nPlugin from "@intlify/unplugin-vue-i18n/vite" +import { dirname, relative, resolve } from "node:path" +import "dotenv/config" + +const PORT = Number(process.env.PORT || "") || 3303 + +function getImmediateDirectories(dirPath: string): string[] { + try { + // Read the directory contents synchronously + const items = fs.readdirSync(dirPath, { withFileTypes: true }) + + // Filter and map to get only directory names + return items + .filter((item): item is fs.Dirent => item.isDirectory()) // Type guard + .map((item) => item.name) + } catch (err) { + throw new Error(`Error reading directories: ${(err as Error).message}`) + } +} + +// https://vitejs.dev/config/ +export default defineConfig({ + resolve: { + alias: { + "@": fileURLToPath(new URL("src", import.meta.url)), + "~": fileURLToPath(new URL("src", import.meta.url)), + src: fileURLToPath(new URL("src", import.meta.url)), + "@assets": fileURLToPath(new URL("src/assets", import.meta.url)), + }, + }, + + css: { + preprocessorOptions: { + scss: { + api: "modern", + // additionalData: `@use "/src/assets/base.scss";`, + additionalData: (content, filePath) => { + // do not include base.scss (tailwind etc) in content-script iframe as it will be affect main page styles + if (filePath.includes("content-script/index.scss")) { + return content + } + + return `@use "/src/assets/base.scss";\n${content}` + }, + }, + }, + }, + + plugins: [ + VueI18nPlugin({ + include: resolve(dirname(fileURLToPath(import.meta.url)), "./src/locales/**"), + globalSFCScope: true, + compositionOnly: true, + }), + + vueDevTools(), + + // https://github.com/posva/unplugin-vue-router + VueRouter({ + dts: "src/types/typed-router.d.ts", + routesFolder: getImmediateDirectories("src/ui").map((dir) => { + return { + src: `src/ui/${dir}/pages`, + path: `${dir}/`, + } + }), + }), + + vue(), + + // imagemin({}), + + TurboConsole(), + + // https://github.com/unplugin/unplugin-auto-import + AutoImport({ + imports: [ + "vue", + "vue-router", + "@vueuse/core", + "pinia", + { + "vue-router/auto": ["definePage"], + }, + { + "vue-i18n": ["useI18n", "t"], + }, + { + "webextension-polyfill": [["*", "browser"]], + }, + { + notivue: ["Notivue", "Notification", ["push", "pushNotification"]], + }, + ], + dts: "src/types/auto-imports.d.ts", + dirs: ["src/composables/**", "src/stores/**", "src/utils/**"], + vueTemplate: true, + viteOptimizeDeps: true, + eslintrc: { + enabled: true, + filepath: "src/types/.eslintrc-auto-import.json", + }, + }), + + // https://github.com/antfu/unplugin-vue-components + Components({ + dirs: ["src/components"], + // generate `components.d.ts` for ts support with Volar + dts: "src/types/components.d.ts", + resolvers: [ + // auto import icons + IconsResolver(), + ], + directoryAsNamespace: true, + globalNamespaces: ["account", "state"], + }), + + // https://github.com/antfu/unplugin-icons + Icons({ + autoInstall: true, + compiler: "vue3", + scale: 1.5, + }), + + // rewrite assets to use relative path + { + name: "assets-rewrite", + enforce: "post", + apply: "build", + transformIndexHtml(html, { path }) { + const assetsPath = relative(dirname(path), "/assets").replace(/\\/g, "/") + return html.replace(/"\/assets\//g, `"${assetsPath}/`) + }, + }, + + createHtmlPlugin({ + inject: { + data: define, // Inject all key-value pairs from defineViteConfig + }, + }), + ], + + build: { + manifest: false, + outDir: "dist", + sourcemap: false, + write: true, + rollupOptions: { + // ui or pages that are not specified in manifest file need to be specified here + input: { + // setup: "src/ui/setup/index.html", + // iframe: "src/ui/iframe-page/index.html", + // devtoolsPanel: "src/ui/devtools-panel/index.html", + }, + }, + }, + + server: { + port: PORT, + hmr: { + host: "localhost", + clientPort: PORT, + overlay: true, + protocol: "ws", + port: PORT, + }, + origin: `http://localhost:${PORT}`, + }, + + optimizeDeps: { + include: ["vue", "@vueuse/core", "webextension-polyfill"], + exclude: ["vue-demi"], + }, + + define, +}) diff --git a/vite.firefox.config.ts b/vite.firefox.config.ts new file mode 100644 index 00000000..95bd8a92 --- /dev/null +++ b/vite.firefox.config.ts @@ -0,0 +1,144 @@ +import { crx } from "@crxjs/vite-plugin" +import { defineConfig } from "vite" +import zipPack from "vite-plugin-zip-pack" +import manifest from "./manifest.firefox.config" +import packageJson from "./package.json" with { type: "json" } +import ViteConfig from "./vite.config" +import chalk from "chalk" + +const IS_DEV = process.env.NODE_ENV === "development" +const browser = "firefox" +const outDir = "dist" +const browserOutDir = `${outDir}/${browser}` +const outFileName = `${browser}-${packageJson.version}.zip` + +function printDevMessage() { + setTimeout(() => { + console.info("\n") + console.info(`${chalk.greenBright(`✅ Successfully built for ${browser}.`)}`) + console.info( + chalk.greenBright( + `🚀 To load this extension in Firefox, go to about:debugging, click "This Firefox", then click "Load Temporary Add-on" and select the extension's manifest file in ${browserOutDir}.`, + ), + ) + console.info("\n") + }, 50) +} + +function printProdMessage() { + setTimeout(() => { + console.info("\n") + console.info(`${chalk.greenBright(`✅ Successfully built for ${browser}.`)}`) + console.info( + `${chalk.greenBright(`📦 Zip File for ${browser} is located at ${outDir}/${outFileName}. You can upload this to respective store. `)}`, + ) + console.info( + chalk.greenBright( + `🚀 To load this extension in Firefox, go to about:debugging, click "This Firefox", then click "Load Temporary Add-on" and select the extension's manifest file in ${browserOutDir}.`, + ), + ) + console.info("\n") + }, 50) +} + +if (!ViteConfig.build) { + ViteConfig.build = {} +} + +if (!ViteConfig.plugins) { + ViteConfig.plugins = [] +} + +ViteConfig.build.outDir = browserOutDir + +if (IS_DEV) { + ViteConfig.build.minify = false + ViteConfig.build.sourcemap = true +} + +import fs from "fs" +import path from "path" +// Custom plugin to run a script after the build +const postBuildPlugin = () => { + return { + name: "post-build-plugin", + writeBundle() { + console.log("Replacing manifest V3 with V2") + const manifestPath = path.join(browserOutDir, "manifest.json") + // if manifest exists in browserOutDir + if (!fs.existsSync(manifestPath)) { + console.error(`Manifest file not found at ${manifestPath}`) + return + } + // read browserOutDir/manifest.json + const manifest = JSON.parse(fs.readFileSync(manifestPath, "utf8")) + // change manifest version to 2 + manifest.manifest_version = 2 + let webacessibleRecources: string[] = [] + for (const resource of manifest.web_accessible_resources) { + webacessibleRecources = [...webacessibleRecources, ...(resource.resources as string[])] + } + manifest.web_accessible_resources = webacessibleRecources + + // replace action with browser_action + manifest.browser_action = manifest.action + delete manifest.action + // write back to browserOutDir/manifest.json + fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2)) + }, + } +} + +ViteConfig.plugins.unshift( + crx({ + manifest, + browser, + contentScripts: { + injectCss: true, + }, + }), +) +ViteConfig.plugins.push(postBuildPlugin()) + +if (IS_DEV) { + ViteConfig.plugins.push({ + name: "vite-plugin-build-message", + enforce: "post", + configureServer(server) { + server.httpServer?.once("listening", () => { + printDevMessage() + }) + }, + closeBundle: { + sequential: true, + handler() { + printDevMessage() + }, + }, + }) +} else { + ViteConfig.plugins.push( + zipPack({ + inDir: browserOutDir, + outDir, + outFileName, + filter: (fileName, filePath, isDirectory) => !(isDirectory && filePath.includes(".vite")), + }), + ) + + ViteConfig.plugins.push({ + name: "vite-plugin-build-message", + enforce: "post", + closeBundle: { + sequential: true, + handler() { + printProdMessage() + }, + }, + }) +} + +// https://vitejs.dev/config/ +export default defineConfig({ + ...ViteConfig, +})