From 1e38a383689841291c17db80d5931d3cbe1cb18c Mon Sep 17 00:00:00 2001 From: Syer10 Date: Fri, 23 Jul 2021 18:30:58 -0400 Subject: [PATCH] Rewrite Tachidesk to a Source Inspector --- .../nulldev/ts/config/ApplicationRootDir.kt | 18 - .../xyz/nulldev/ts/config/ConfigManager.kt | 22 +- .../java/xyz/nulldev/ts/config/Logging.kt | 3 - README.md | 77 +- build.gradle.kts | 3 - server/build.gradle.kts | 31 +- .../suwayomi/tachidesk/InspectorMain.kt | 53 + .../main/kotlin/suwayomi/tachidesk/Main.kt | 6 +- .../suwayomi/tachidesk/anime/AnimeAPI.kt | 379 - .../suwayomi/tachidesk/anime/impl/Anime.kt | 139 - .../tachidesk/anime/impl/AnimeList.kt | 102 - .../suwayomi/tachidesk/anime/impl/Episode.kt | 241 - .../suwayomi/tachidesk/anime/impl/Source.kt | 50 - .../anime/impl/extension/Extension.kt | 251 - .../anime/impl/extension/ExtensionsList.kt | 132 - .../extension/github/ExtensionGithubApi.kt | 79 - .../impl/extension/github/OnlineExtension.kt | 19 - .../anime/impl/util/GetAnimeHttpSource.kt | 57 - .../tachidesk/anime/impl/util/PackageTools.kt | 145 - .../anime/model/dataclass/AnimeDataClass.kt | 36 - .../dataclass/AnimeExtensionDataClass.kt | 24 - .../model/dataclass/AnimeSourceDataClass.kt | 16 - .../anime/model/dataclass/EpisodeDataClass.kt | 35 - .../anime/model/table/AnimeExtensionTable.kt | 31 - .../anime/model/table/AnimeSourceTable.kt | 18 - .../tachidesk/anime/model/table/AnimeTable.kt | 65 - .../anime/model/table/EpisodeTable.kt | 46 - .../suwayomi/tachidesk/manga/TachideskAPI.kt | 466 - .../suwayomi/tachidesk/manga/impl/Category.kt | 78 - .../tachidesk/manga/impl/CategoryManga.kt | 72 - .../suwayomi/tachidesk/manga/impl/Chapter.kt | 263 - .../suwayomi/tachidesk/manga/impl/Library.kt | 68 - .../suwayomi/tachidesk/manga/impl/Manga.kt | 171 - .../tachidesk/manga/impl/MangaList.kt | 104 - .../suwayomi/tachidesk/manga/impl/Page.kt | 95 - .../suwayomi/tachidesk/manga/impl/Search.kt | 75 - .../suwayomi/tachidesk/manga/impl/Source.kt | 50 - .../manga/impl/backup/BackupFlags.kt | 16 - .../impl/backup/legacy/LegacyBackupBase.kt | 45 - .../impl/backup/legacy/LegacyBackupExport.kt | 154 - .../impl/backup/legacy/LegacyBackupImport.kt | 210 - .../backup/legacy/LegacyBackupValidator.kt | 71 - .../manga/impl/backup/legacy/models/Backup.kt | 25 - .../impl/backup/legacy/models/DHistory.kt | 3 - .../legacy/serializer/CategoryTypeAdapter.kt | 31 - .../legacy/serializer/ChapterTypeAdapter.kt | 59 - .../legacy/serializer/HistoryTypeAdapter.kt | 32 - .../legacy/serializer/MangaTypeAdapter.kt | 37 - .../legacy/serializer/TrackTypeAdapter.kt | 59 - .../manga/impl/backup/models/Category.kt | 23 - .../manga/impl/backup/models/CategoryImpl.kt | 24 - .../manga/impl/backup/models/Chapter.kt | 31 - .../manga/impl/backup/models/ChapterImpl.kt | 57 - .../manga/impl/backup/models/History.kt | 42 - .../manga/impl/backup/models/HistoryImpl.kt | 27 - .../manga/impl/backup/models/LibraryManga.kt | 8 - .../manga/impl/backup/models/Manga.kt | 116 - .../manga/impl/backup/models/MangaCategory.kt | 20 - .../manga/impl/backup/models/MangaChapter.kt | 3 - .../impl/backup/models/MangaChapterHistory.kt | 10 - .../manga/impl/backup/models/MangaImpl.kt | 79 - .../manga/impl/backup/models/Track.kt | 46 - .../manga/impl/backup/models/TrackImpl.kt | 48 - .../manga/impl/download/DownloadManager.kt | 129 - .../manga/impl/download/Downloader.kt | 81 - .../impl/download/model/DownloadChapter.kt | 20 - .../impl/download/model/DownloadState.kt | 15 - .../impl/download/model/DownloadStatus.kt | 13 - .../manga/impl/extension/Extension.kt | 243 +- .../manga/impl/extension/ExtensionsList.kt | 132 - .../extension/github/ExtensionGithubApi.kt | 76 - .../impl/extension/github/OnlineExtension.kt | 19 - .../manga/impl/util/GetHttpSource.kt | 57 - .../tachidesk/manga/impl/util/PackageTools.kt | 13 +- .../manga/impl/util/lang/RxCoroutineBridge.kt | 62 - .../manga/impl/util/network/OkHttp.kt | 50 - .../impl/util/network/UnzippingInterceptor.kt | 49 - .../impl/util/storage/CachedImageResponse.kt | 71 - .../manga/impl/util/storage/ImageUtil.kt | 73 - .../manga/impl/util/storage/SafePath.kt | 47 - .../model/dataclass/CategoryDataClass.kt | 15 - .../manga/model/dataclass/ChapterDataClass.kt | 44 - .../model/dataclass/ExtensionDataClass.kt | 24 - .../manga/model/dataclass/MangaDataClass.kt | 37 - .../manga/model/dataclass/PageDataClass.kt | 13 - .../manga/model/dataclass/SourceDataClass.kt | 16 - .../manga/model/table/CategoryMangaTable.kt | 15 - .../manga/model/table/CategoryTable.kt | 25 - .../manga/model/table/ChapterMetaTable.kt | 10 - .../manga/model/table/ChapterTable.kt | 56 - .../manga/model/table/ExtensionTable.kt | 31 - .../manga/model/table/MangaMetaTable.kt | 10 - .../tachidesk/manga/model/table/MangaTable.kt | 67 - .../tachidesk/manga/model/table/PageTable.kt | 18 - .../manga/model/table/SourceTable.kt | 18 - .../suwayomi/tachidesk/server/JavalinSetup.kt | 81 - .../suwayomi/tachidesk/server/ServerConfig.kt | 33 - .../suwayomi/tachidesk/server/ServerSetup.kt | 87 +- .../tachidesk/server/database/DBManager.kt | 32 - .../database/migration/M0001_Initial.kt | 135 - .../M0002_ChapterTableIndexRename.kt | 24 - .../migration/M0003_DefaultCategory.kt | 24 - .../migration/M0004_AnimeTablesBatch1.kt | 54 - .../migration/M0005_AnimeTablesBatch2.kt | 45 - .../migration/M0006_AnimeTablesBatch3.kt | 41 - .../migration/M0007_ChapterIsDownloaded.kt | 24 - .../migration/M0008_ChapterPageCount.kt | 24 - .../migration/M0009_ChapterLastReadAt.kt | 25 - .../migration/M0010_MangaAndChapterMeta.kt | 38 - .../server/database/migration/lib/LICENSE | 21 - .../database/migration/lib/Migration.kt | 25 - .../database/migration/lib/MigrationEntity.kt | 37 - .../database/migration/lib/runMigrations.kt | 123 - .../suwayomi/tachidesk/server/impl/About.kt | 34 - .../suwayomi/tachidesk/server/util/AppExit.kt | 25 - .../tachidesk/server/util/AppMutex.kt | 77 - .../suwayomi/tachidesk/server/util/Browser.kt | 38 - .../tachidesk/server/util/SystemTray.kt | 62 - .../src/main/resources/icon/faviconlogo.ico | Bin 113318 -> 0 bytes .../src/main/resources/icon/faviconlogo.png | Bin 592885 -> 0 bytes .../test/kotlin/suwayomi/TestExtensions.kt | 197 - server/src/test/kotlin/suwayomi/TestUtils.kt | 19 - settings.gradle.kts | 2 - webUI/build.gradle.kts | 21 - webUI/src/.eslintignore | 1 - webUI/src/.eslintrc.js | 19 - webUI/src/.gitignore | 4 - webUI/src/README.md | 70 - webUI/src/package.json | 55 - webUI/src/public/favicon.ico | Bin 113318 -> 0 bytes webUI/src/public/favicon.png | Bin 592885 -> 0 bytes webUI/src/public/index.html | 43 - webUI/src/public/manifest.json | 31 - webUI/src/public/robots.txt | 3 - webUI/src/src/App.tsx | 174 - .../src/src/components/LoadingPlaceholder.tsx | 56 - webUI/src/src/components/SpinnerImage.tsx | 67 - webUI/src/src/components/TemporaryDrawer.tsx | 112 - webUI/src/src/components/Toast.tsx | 63 - webUI/src/src/components/anime/AnimeCard.tsx | 83 - .../src/src/components/anime/AnimeDetails.tsx | 257 - webUI/src/src/components/anime/AnimeGrid.tsx | 62 - .../src/src/components/anime/EpisodeCard.tsx | 138 - .../src/components/anime/ExtensionCard.tsx | 149 - webUI/src/src/components/anime/SourceCard.tsx | 86 - .../src/components/manga/CategorySelect.tsx | 123 - .../src/src/components/manga/ChapterCard.tsx | 146 - .../src/components/manga/ExtensionCard.tsx | 149 - .../components/manga/ExtensionLangSelect.tsx | 109 - webUI/src/src/components/manga/MangaCard.tsx | 87 - .../src/src/components/manga/MangaDetails.tsx | 257 - webUI/src/src/components/manga/MangaGrid.tsx | 62 - webUI/src/src/components/manga/SourceCard.tsx | 86 - .../components/manga/reader/DoublePage.tsx | 62 - .../src/src/components/manga/reader/Page.tsx | 119 - .../components/manga/reader/PageNumber.tsx | 39 - .../manga/reader/pager/DoublePagedPager.tsx | 212 - .../manga/reader/pager/HorizontalPager.tsx | 147 - .../manga/reader/pager/PagedPager.tsx | 111 - .../manga/reader/pager/VerticalPager.tsx | 130 - webUI/src/src/components/navbar/NavBar.tsx | 67 - .../src/components/navbar/ReaderNavBar.tsx | 393 - webUI/src/src/context/DarkTheme.tsx | 20 - webUI/src/src/context/NavbarContext.tsx | 28 - webUI/src/src/index.css | 10 - webUI/src/src/index.tsx | 20 - webUI/src/src/react-app-env.d.ts | 8 - webUI/src/src/screens/Settings.tsx | 134 - webUI/src/src/screens/anime/Anime.tsx | 118 - .../src/src/screens/anime/AnimeExtensions.tsx | 112 - webUI/src/src/screens/anime/AnimeSources.tsx | 84 - webUI/src/src/screens/anime/Player.tsx | 77 - webUI/src/src/screens/anime/SourceAnimes.tsx | 51 - webUI/src/src/screens/manga/DownloadQueue.tsx | 153 - webUI/src/src/screens/manga/Library.tsx | 161 - webUI/src/src/screens/manga/Manga.tsx | 163 - .../src/src/screens/manga/MangaExtensions.tsx | 112 - webUI/src/src/screens/manga/MangaSources.tsx | 84 - webUI/src/src/screens/manga/Reader.tsx | 196 - webUI/src/src/screens/manga/SearchSingle.tsx | 109 - webUI/src/src/screens/manga/SourceMangas.tsx | 51 - webUI/src/src/screens/settings/About.tsx | 70 - webUI/src/src/screens/settings/Backup.tsx | 91 - webUI/src/src/screens/settings/Categories.tsx | 249 - webUI/src/src/typings.d.ts | 169 - webUI/src/src/util/ListItemLink.tsx | 14 - webUI/src/src/util/client.tsx | 29 - webUI/src/src/util/cloneObject.tsx | 10 - webUI/src/src/util/language.tsx | 88 - webUI/src/src/util/localStorage.tsx | 31 - webUI/src/src/util/useLocalStorage.tsx | 24 - webUI/src/tsconfig.json | 27 - webUI/src/yarn.lock | 11962 ---------------- 193 files changed, 100 insertions(+), 25820 deletions(-) delete mode 100644 AndroidCompat/Config/src/main/java/xyz/nulldev/ts/config/ApplicationRootDir.kt create mode 100644 server/src/main/kotlin/suwayomi/tachidesk/InspectorMain.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/anime/AnimeAPI.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/anime/impl/Anime.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/anime/impl/AnimeList.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/anime/impl/Episode.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/anime/impl/Source.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/anime/impl/extension/Extension.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/anime/impl/extension/ExtensionsList.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/anime/impl/extension/github/ExtensionGithubApi.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/anime/impl/extension/github/OnlineExtension.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/anime/impl/util/GetAnimeHttpSource.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/anime/impl/util/PackageTools.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/anime/model/dataclass/AnimeDataClass.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/anime/model/dataclass/AnimeExtensionDataClass.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/anime/model/dataclass/AnimeSourceDataClass.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/anime/model/dataclass/EpisodeDataClass.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/anime/model/table/AnimeExtensionTable.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/anime/model/table/AnimeSourceTable.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/anime/model/table/AnimeTable.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/anime/model/table/EpisodeTable.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/TachideskAPI.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Category.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/CategoryManga.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Chapter.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Library.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Manga.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/MangaList.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Page.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Search.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Source.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/BackupFlags.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/LegacyBackupBase.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/LegacyBackupExport.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/LegacyBackupImport.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/LegacyBackupValidator.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/models/Backup.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/models/DHistory.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/serializer/CategoryTypeAdapter.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/serializer/ChapterTypeAdapter.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/serializer/HistoryTypeAdapter.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/serializer/MangaTypeAdapter.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/serializer/TrackTypeAdapter.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/Category.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/CategoryImpl.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/Chapter.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/ChapterImpl.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/History.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/HistoryImpl.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/LibraryManga.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/Manga.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/MangaCategory.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/MangaChapter.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/MangaChapterHistory.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/MangaImpl.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/Track.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/TrackImpl.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/download/DownloadManager.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/download/Downloader.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/download/model/DownloadChapter.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/download/model/DownloadState.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/download/model/DownloadStatus.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/ExtensionsList.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/github/ExtensionGithubApi.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/github/OnlineExtension.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/GetHttpSource.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/lang/RxCoroutineBridge.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/network/OkHttp.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/network/UnzippingInterceptor.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/storage/CachedImageResponse.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/storage/ImageUtil.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/storage/SafePath.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/model/dataclass/CategoryDataClass.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/model/dataclass/ChapterDataClass.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/model/dataclass/ExtensionDataClass.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/model/dataclass/MangaDataClass.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/model/dataclass/PageDataClass.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/model/dataclass/SourceDataClass.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/CategoryMangaTable.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/CategoryTable.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/ChapterMetaTable.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/ChapterTable.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/ExtensionTable.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/MangaMetaTable.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/MangaTable.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/PageTable.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/SourceTable.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/server/JavalinSetup.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/server/ServerConfig.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/server/database/DBManager.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0001_Initial.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0002_ChapterTableIndexRename.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0003_DefaultCategory.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0004_AnimeTablesBatch1.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0005_AnimeTablesBatch2.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0006_AnimeTablesBatch3.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0007_ChapterIsDownloaded.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0008_ChapterPageCount.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0009_ChapterLastReadAt.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0010_MangaAndChapterMeta.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/lib/LICENSE delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/lib/Migration.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/lib/MigrationEntity.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/lib/runMigrations.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/server/impl/About.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/server/util/AppExit.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/server/util/AppMutex.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/server/util/Browser.kt delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/server/util/SystemTray.kt delete mode 100644 server/src/main/resources/icon/faviconlogo.ico delete mode 100644 server/src/main/resources/icon/faviconlogo.png delete mode 100644 server/src/test/kotlin/suwayomi/TestExtensions.kt delete mode 100644 server/src/test/kotlin/suwayomi/TestUtils.kt delete mode 100644 webUI/build.gradle.kts delete mode 100644 webUI/src/.eslintignore delete mode 100644 webUI/src/.eslintrc.js delete mode 100644 webUI/src/.gitignore delete mode 100644 webUI/src/README.md delete mode 100644 webUI/src/package.json delete mode 100644 webUI/src/public/favicon.ico delete mode 100644 webUI/src/public/favicon.png delete mode 100644 webUI/src/public/index.html delete mode 100644 webUI/src/public/manifest.json delete mode 100644 webUI/src/public/robots.txt delete mode 100644 webUI/src/src/App.tsx delete mode 100644 webUI/src/src/components/LoadingPlaceholder.tsx delete mode 100644 webUI/src/src/components/SpinnerImage.tsx delete mode 100644 webUI/src/src/components/TemporaryDrawer.tsx delete mode 100644 webUI/src/src/components/Toast.tsx delete mode 100644 webUI/src/src/components/anime/AnimeCard.tsx delete mode 100644 webUI/src/src/components/anime/AnimeDetails.tsx delete mode 100644 webUI/src/src/components/anime/AnimeGrid.tsx delete mode 100644 webUI/src/src/components/anime/EpisodeCard.tsx delete mode 100644 webUI/src/src/components/anime/ExtensionCard.tsx delete mode 100644 webUI/src/src/components/anime/SourceCard.tsx delete mode 100644 webUI/src/src/components/manga/CategorySelect.tsx delete mode 100644 webUI/src/src/components/manga/ChapterCard.tsx delete mode 100644 webUI/src/src/components/manga/ExtensionCard.tsx delete mode 100644 webUI/src/src/components/manga/ExtensionLangSelect.tsx delete mode 100644 webUI/src/src/components/manga/MangaCard.tsx delete mode 100644 webUI/src/src/components/manga/MangaDetails.tsx delete mode 100644 webUI/src/src/components/manga/MangaGrid.tsx delete mode 100644 webUI/src/src/components/manga/SourceCard.tsx delete mode 100644 webUI/src/src/components/manga/reader/DoublePage.tsx delete mode 100644 webUI/src/src/components/manga/reader/Page.tsx delete mode 100644 webUI/src/src/components/manga/reader/PageNumber.tsx delete mode 100644 webUI/src/src/components/manga/reader/pager/DoublePagedPager.tsx delete mode 100644 webUI/src/src/components/manga/reader/pager/HorizontalPager.tsx delete mode 100644 webUI/src/src/components/manga/reader/pager/PagedPager.tsx delete mode 100644 webUI/src/src/components/manga/reader/pager/VerticalPager.tsx delete mode 100644 webUI/src/src/components/navbar/NavBar.tsx delete mode 100644 webUI/src/src/components/navbar/ReaderNavBar.tsx delete mode 100644 webUI/src/src/context/DarkTheme.tsx delete mode 100644 webUI/src/src/context/NavbarContext.tsx delete mode 100644 webUI/src/src/index.css delete mode 100644 webUI/src/src/index.tsx delete mode 100644 webUI/src/src/react-app-env.d.ts delete mode 100644 webUI/src/src/screens/Settings.tsx delete mode 100644 webUI/src/src/screens/anime/Anime.tsx delete mode 100644 webUI/src/src/screens/anime/AnimeExtensions.tsx delete mode 100644 webUI/src/src/screens/anime/AnimeSources.tsx delete mode 100644 webUI/src/src/screens/anime/Player.tsx delete mode 100644 webUI/src/src/screens/anime/SourceAnimes.tsx delete mode 100644 webUI/src/src/screens/manga/DownloadQueue.tsx delete mode 100644 webUI/src/src/screens/manga/Library.tsx delete mode 100644 webUI/src/src/screens/manga/Manga.tsx delete mode 100644 webUI/src/src/screens/manga/MangaExtensions.tsx delete mode 100644 webUI/src/src/screens/manga/MangaSources.tsx delete mode 100644 webUI/src/src/screens/manga/Reader.tsx delete mode 100644 webUI/src/src/screens/manga/SearchSingle.tsx delete mode 100644 webUI/src/src/screens/manga/SourceMangas.tsx delete mode 100644 webUI/src/src/screens/settings/About.tsx delete mode 100644 webUI/src/src/screens/settings/Backup.tsx delete mode 100644 webUI/src/src/screens/settings/Categories.tsx delete mode 100644 webUI/src/src/typings.d.ts delete mode 100644 webUI/src/src/util/ListItemLink.tsx delete mode 100644 webUI/src/src/util/client.tsx delete mode 100644 webUI/src/src/util/cloneObject.tsx delete mode 100644 webUI/src/src/util/language.tsx delete mode 100644 webUI/src/src/util/localStorage.tsx delete mode 100644 webUI/src/src/util/useLocalStorage.tsx delete mode 100644 webUI/src/tsconfig.json delete mode 100644 webUI/src/yarn.lock diff --git a/AndroidCompat/Config/src/main/java/xyz/nulldev/ts/config/ApplicationRootDir.kt b/AndroidCompat/Config/src/main/java/xyz/nulldev/ts/config/ApplicationRootDir.kt deleted file mode 100644 index 25c47f6..0000000 --- a/AndroidCompat/Config/src/main/java/xyz/nulldev/ts/config/ApplicationRootDir.kt +++ /dev/null @@ -1,18 +0,0 @@ -package xyz.nulldev.ts.config - -import net.harawata.appdirs.AppDirsFactory - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -val ApplicationRootDir: String - get(): String { - return System.getProperty( - "suwayomi.tachidesk.server.rootDir", - AppDirsFactory.getInstance().getUserDataDir("Tachidesk", null, null) - ) - } \ No newline at end of file diff --git a/AndroidCompat/Config/src/main/java/xyz/nulldev/ts/config/ConfigManager.kt b/AndroidCompat/Config/src/main/java/xyz/nulldev/ts/config/ConfigManager.kt index 43c3cd9..7bd5256 100644 --- a/AndroidCompat/Config/src/main/java/xyz/nulldev/ts/config/ConfigManager.kt +++ b/AndroidCompat/Config/src/main/java/xyz/nulldev/ts/config/ConfigManager.kt @@ -43,32 +43,14 @@ open class ConfigManager { fun loadConfigs(): Config { //Load reference configs val compatConfig = ConfigFactory.parseResources("compat-reference.conf") - val serverConfig = ConfigFactory.parseResources("server-reference.conf") - val baseConfig = - ConfigFactory.parseMap( - mapOf( - "ts.server.rootDir" to ApplicationRootDir - ) - ) - - //Load user config - val userConfig = - File(ApplicationRootDir, "server.conf").let { - ConfigFactory.parseFile(it) - } - val config = ConfigFactory.empty() - .withFallback(baseConfig) - .withFallback(userConfig) .withFallback(compatConfig) - .withFallback(serverConfig) .resolve() // set log level early - if (debugLogsEnabled(config)) { - setLogLevel(Level.DEBUG) - } + setLogLevel(Level.DEBUG) + logger.debug { "Loaded config:\n" + config.root().render(ConfigRenderOptions.concise().setFormatted(true)) diff --git a/AndroidCompat/Config/src/main/java/xyz/nulldev/ts/config/Logging.kt b/AndroidCompat/Config/src/main/java/xyz/nulldev/ts/config/Logging.kt index 80cdcbb..43322d8 100644 --- a/AndroidCompat/Config/src/main/java/xyz/nulldev/ts/config/Logging.kt +++ b/AndroidCompat/Config/src/main/java/xyz/nulldev/ts/config/Logging.kt @@ -15,6 +15,3 @@ import org.slf4j.Logger fun setLogLevel(level: Level) { (KotlinLogging.logger(Logger.ROOT_LOGGER_NAME).underlyingLogger as ch.qos.logback.classic.Logger).level = level } - -fun debugLogsEnabled(config: Config) - = System.getProperty("suwayomi.tachidesk.server.debugLogsEnabled", config.getString("server.debugLogsEnabled")).toBoolean() \ No newline at end of file diff --git a/README.md b/README.md index ce3c765..e285648 100644 --- a/README.md +++ b/README.md @@ -1,80 +1,7 @@ - -| Build | Stable | Preview | Support Server | -|-------|----------|---------|---------| -| ![CI](https://github.com/Suwayomi/Tachidesk/actions/workflows/build_push.yml/badge.svg) | [![stable release](https://img.shields.io/github/release/Suwayomi/Tachidesk.svg?maxAge=3600&label=download)](https://github.com/Suwayomi/Tachidesk/releases) | [![preview](https://img.shields.io/badge/dynamic/json?url=https://github.com/Suwayomi/Tachidesk-preview/raw/main/index.json&label=download&query=$.latest&color=blue)](https://github.com/Suwayomi/Tachidesk-preview/releases/latest) | [![Discord](https://img.shields.io/discord/801021177333940224.svg?label=discord&labelColor=7289da&color=2c2f33&style=flat)](https://discord.gg/DDZdqZWaHA) | - -# Tachidesk -drawing - -A free and open source manga reader that runs extensions built for [Tachiyomi](https://tachiyomi.org/). - -Tachidesk is an independent Tachiyomi compatible software and is **not a Fork of** Tachiyomi. - -Tachidesk is as multi-platform as you can get. Any platform that runs java and/or has a modern browser can run it. This includes Windows, Linux, macOS, chrome OS, etc. Follow [Downloading and Running the app](#downloading-and-running-the-app) for installation instructions. - -Ability to read and write Tachiyomi compatible backups and syncing is a planned feature. - -**Tachidesk needs serious front-end dev help for it's reader and other parts, if you like the app and want to see it become better please don't hesitate to contribute some code!** - -## Is this application usable? Should I test it? -Here is a list of current features: - -- Installing and executing Tachiyomi's Extensions, So you'll get the same sources. -- A library to save your mangas and categories to put them into. -- Searching and browsing installed sources. -- A decent chapter reader. -- Ability to download Mangas for offline read -- Backup and restore support powered by Tachiyomi Legacy Backups - -**Note:** Keep in mind that Tachidesk is alpha software and can break rarely and/or with each update. See [Troubleshooting](https://github.com/Suwayomi/Tachidesk/wiki/Troubleshooting) if it happens. - -## Downloading and Running the app -### All Operating Systems -You should have The Java Runtime Environment(JRE) 8 or newer and a modern browser installed(Google is your friend for seeking assitance). Also an internet connection is required as almost everything this app does is downloading stuff. - -Download the latest "Stable" jar release from [the releases section](https://github.com/Suwayomi/Tachidesk/releases) or a preview jar build from [the preview repository](https://github.com/Suwayomi/Tachidesk-preview/releases). - -Double click on the jar file or run `java -jar Tachidesk-vX.Y.Z-rxxx.jar` (or `java -jar Tachidesk-latest.jar` if you have the latest preview) from a Terminal/Command Prompt window to run the app which will open a new browser window automatically. Also the System Tray Icon is your friend if you need to open the browser window again or close Tachidesk. - -### Windows -Download the latest "Stable" win32 or win64 (depending on your system, usually you want win64) release from [the releases section](https://github.com/Suwayomi/Tachidesk/releases) or a preview one from [the preview repository](https://github.com/Suwayomi/Tachidesk-preview/releases). - -The Windows specific build has java bundled inside, so you don't have to install java to use it. Unzip `Tachidesk-vX.Y.Z-rxxx-win64.zip` and run one of the Launcher files depending on what you want(see bellow). The rest works like the previous section. -#### Windows Launchers -- `Tachidesk Electron Launcher.bat`: Launches Tachidesk inside Electron as a desktop applicaton -- `Tachidesk Browser Launcher.bat`: Launches Tachidesk in a browser window -- `Tachidesk Debug Launcher.bat`: Launches Tachidesk with debug logs attached. If Tachidesk doesn't work for you, running this can give you insight into why. - -### Arch Linux -You can install Tachidesk from the AUR -``` -yay -S tachidesk -``` - -### Docker -Check our Offical Docker release [Tachidesk Container](https://github.com/orgs/Suwayomi/packages/container/package/tachidesk) or use [arbuilder's](https://github.com/arbuilder/Tachidesk-docker) tachidesk docker repo for installation. Source code for our container is available at [docker-tachidesk](https://github.com/Suwayomi/docker-tachidesk). By default the server will be running on http://localhost:4567 open this url in your browser. - -Install from the command line: -``` - $ docker pull ghcr.io/suwayomi/tachidesk -``` -Run Container from the command line: -``` - $ docker run -p 4567:4567 ghcr.io/suwayomi/tachidesk -``` - -### Using Tachidesk Remotely -You can run Tachidesk on your computer or a server and connect to it remotely through the web interface with a web browser on any device including a mobile or tablet or even your smart TV!, this method of using Tachidesk is only recommended if you are a power user and know what you are doing. - -## Troubleshooting and Support -See [this troubleshooting wiki page](https://github.com/Suwayomi/Tachidesk/wiki/Troubleshooting). - -## Contributing and Technical info -See [CONTRIBUTING.md](./CONTRIBUTING.md). +# Inspector +This is a headless fork of [Tachidesk](https://github.com/AriaMoradi/Tachidesk) that is used to inspect Tachiyomi's extension sources. ## Credit -This project is a spiritual successor of [TachiWeb-Server](https://github.com/Tachiweb/TachiWeb-server), Many of the ideas and the groundwork adopted in this project comes from TachiWeb. - The `AndroidCompat` module was originally developed by [@null-dev](https://github.com/null-dev) for [TachiWeb-Server](https://github.com/Tachiweb/TachiWeb-server) and is licensed under `Apache License Version 2.0`. Parts of [tachiyomi](https://github.com/tachiyomiorg/tachiyomi) is adopted into this codebase, also licensed under `Apache License Version 2.0`. diff --git a/build.gradle.kts b/build.gradle.kts index dbd45c9..d833968 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -76,9 +76,6 @@ configure(projects) { implementation("com.typesafe:config:1.4.1") implementation("io.github.config4k:config4k:0.4.2") - // to get application content root - implementation("net.harawata:appdirs:1.2.1") - // dex2jar: https://github.com/DexPatcher/dex2jar/releases/tag/v2.1-20190905-lanchon implementation("com.github.DexPatcher.dex2jar:dex-tools:v2.1-20190905-lanchon") diff --git a/server/build.gradle.kts b/server/build.gradle.kts index 102124b..b19b466 100644 --- a/server/build.gradle.kts +++ b/server/build.gradle.kts @@ -3,10 +3,10 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jmailen.gradle.kotlinter.tasks.FormatTask import org.jmailen.gradle.kotlinter.tasks.LintTask import java.io.BufferedReader -import java.time.Instant plugins { application + kotlin("plugin.serialization") id("com.github.johnrengelman.shadow") version "7.0.0" id("org.jmailen.kotlinter") version "3.4.3" id("de.fuerstenau.buildconfig") version "1.1.8" @@ -29,25 +29,10 @@ dependencies { implementation("com.squareup.okhttp3:okhttp-dnsoverhttps:$okhttpVersion") implementation("com.squareup.okio:okio:2.10.0") - // Javalin api - implementation("io.javalin:javalin:3.13.6") // jackson version is tied to javalin, ref: `io.javalin.core.util.OptionalDependency` implementation("com.fasterxml.jackson.core:jackson-databind:2.10.3") implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.10.3") - // Exposed ORM - val exposedVersion = "0.31.1" - implementation("org.jetbrains.exposed:exposed-core:$exposedVersion") - implementation("org.jetbrains.exposed:exposed-dao:$exposedVersion") - implementation("org.jetbrains.exposed:exposed-jdbc:$exposedVersion") - implementation("org.jetbrains.exposed:exposed-java-time:$exposedVersion") - // current database driver - implementation("com.h2database:h2:1.4.200") - - // tray icon - implementation("com.dorkbox:SystemTray:4.1") - implementation("com.dorkbox:Utilities:1.9") - // dependencies of Tachiyomi extensions, some are duplicate, keeping it here for reference implementation("com.github.inorichi.injekt:injekt-core:65b0440") @@ -118,11 +103,6 @@ buildConfig { buildConfigField("String", "NAME", rootProject.name) buildConfigField("String", "VERSION", tachideskVersion) buildConfigField("String", "REVISION", tachideskRevision) - buildConfigField("String", "BUILD_TYPE", if (System.getenv("ProductBuildType") == "Stable") "Stable" else "Preview") - buildConfigField("long", "BUILD_TIME", Instant.now().epochSecond.toString()) - - buildConfigField("String", "GITHUB", "https://github.com/Suwayomi/Tachidesk") - buildConfigField("String", "DISCORD", "https://discord.gg/DDZdqZWaHA") } tasks { @@ -165,11 +145,6 @@ tasks { dependsOn("formatKotlin", "lintKotlin") } - named("processResources") { - duplicatesStrategy = DuplicatesStrategy.INCLUDE - mustRunAfter(":webUI:copyBuild") - } - withType { source(files("src/kotlin")) } @@ -177,4 +152,8 @@ tasks { withType { source(files("src/kotlin")) } + + withType { + duplicatesStrategy = DuplicatesStrategy.WARN + } } diff --git a/server/src/main/kotlin/suwayomi/tachidesk/InspectorMain.kt b/server/src/main/kotlin/suwayomi/tachidesk/InspectorMain.kt new file mode 100644 index 0000000..0c59d9c --- /dev/null +++ b/server/src/main/kotlin/suwayomi/tachidesk/InspectorMain.kt @@ -0,0 +1,53 @@ +package suwayomi.tachidesk + +import eu.kanade.tachiyomi.source.CatalogueSource +import kotlinx.serialization.Serializable +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json +import suwayomi.tachidesk.manga.impl.extension.Extension.installAPK +import java.io.File + +object InspectorMain { + suspend fun inspectorMain(args: Array) { + if (args.size < 3) { + throw RuntimeException("Inspector must be given the path of apks directory, output json, and a tmp dir") + } + + val apksPath = args[0] + val outputPath = args[1] + val tmpDirPath = args[2] + + val tmpDir = File(tmpDirPath, "tmp").also { it.mkdir() } + val extensions = File(apksPath).listFiles().orEmpty().mapNotNull { + if (it.extension == "apk") { + println("Installing ${it.absolutePath}") + + val (pkgName, sources) = installAPK(tmpDir) { + it + } + ExtensionJson( + pkgName, + sources.map { source -> SourceJson(source) } + ) + } else null + } + + File(outputPath).writeText(Json.encodeToString(extensions)) + } + + @Serializable + data class ExtensionJson( + val pkgName: String, + val sources: List + ) + + @Serializable + data class SourceJson( + val name: String, + val lang: String, + val id: Long + ) { + constructor(source: CatalogueSource) : + this(source.name, source.lang, source.id) + } +} \ No newline at end of file diff --git a/server/src/main/kotlin/suwayomi/tachidesk/Main.kt b/server/src/main/kotlin/suwayomi/tachidesk/Main.kt index d3d87f9..16f8295 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/Main.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/Main.kt @@ -7,10 +7,10 @@ package suwayomi.tachidesk * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import suwayomi.tachidesk.server.JavalinSetup.javalinSetup +import suwayomi.tachidesk.InspectorMain.inspectorMain import suwayomi.tachidesk.server.applicationSetup -fun main() { +suspend fun main(args: Array) { applicationSetup() - javalinSetup() + inspectorMain(args) } diff --git a/server/src/main/kotlin/suwayomi/tachidesk/anime/AnimeAPI.kt b/server/src/main/kotlin/suwayomi/tachidesk/anime/AnimeAPI.kt deleted file mode 100644 index 2deb497..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/anime/AnimeAPI.kt +++ /dev/null @@ -1,379 +0,0 @@ -package suwayomi.tachidesk.anime - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import io.javalin.Javalin -import suwayomi.tachidesk.anime.impl.Anime.getAnime -import suwayomi.tachidesk.anime.impl.Anime.getAnimeThumbnail -import suwayomi.tachidesk.anime.impl.AnimeList.getAnimeList -import suwayomi.tachidesk.anime.impl.Episode.getEpisode -import suwayomi.tachidesk.anime.impl.Episode.getEpisodeList -import suwayomi.tachidesk.anime.impl.Episode.modifyEpisode -import suwayomi.tachidesk.anime.impl.Source.getAnimeSource -import suwayomi.tachidesk.anime.impl.Source.getSourceList -import suwayomi.tachidesk.anime.impl.extension.Extension.getExtensionIcon -import suwayomi.tachidesk.anime.impl.extension.Extension.installExtension -import suwayomi.tachidesk.anime.impl.extension.Extension.uninstallExtension -import suwayomi.tachidesk.anime.impl.extension.Extension.updateExtension -import suwayomi.tachidesk.anime.impl.extension.ExtensionsList.getExtensionList -import suwayomi.tachidesk.server.JavalinSetup.future - -object AnimeAPI { - fun defineEndpoints(app: Javalin) { - // list all extensions - app.get("/api/v1/anime/extension/list") { ctx -> - ctx.json( - future { - getExtensionList() - } - ) - } - - // install extension identified with "pkgName" - app.get("/api/v1/anime/extension/install/:pkgName") { ctx -> - val pkgName = ctx.pathParam("pkgName") - - ctx.json( - future { - installExtension(pkgName) - } - ) - } - - // update extension identified with "pkgName" - app.get("/api/v1/anime/extension/update/:pkgName") { ctx -> - val pkgName = ctx.pathParam("pkgName") - - ctx.json( - future { - updateExtension(pkgName) - } - ) - } - - // uninstall extension identified with "pkgName" - app.get("/api/v1/anime/extension/uninstall/:pkgName") { ctx -> - val pkgName = ctx.pathParam("pkgName") - - uninstallExtension(pkgName) - ctx.status(200) - } - - // icon for extension named `apkName` - app.get("/api/v1/anime/extension/icon/:apkName") { ctx -> // TODO: move to pkgName - val apkName = ctx.pathParam("apkName") - - ctx.result( - future { getExtensionIcon(apkName) } - .thenApply { - ctx.header("content-type", it.second) - it.first - } - ) - } - - // list of sources - app.get("/api/v1/anime/source/list") { ctx -> - ctx.json(getSourceList()) - } - - // fetch source with id `sourceId` - app.get("/api/v1/anime/source/:sourceId") { ctx -> - val sourceId = ctx.pathParam("sourceId").toLong() - ctx.json(getAnimeSource(sourceId)) - } - - // popular animes from source with id `sourceId` - app.get("/api/v1/anime/source/:sourceId/popular/:pageNum") { ctx -> - val sourceId = ctx.pathParam("sourceId").toLong() - val pageNum = ctx.pathParam("pageNum").toInt() - ctx.json( - future { - getAnimeList(sourceId, pageNum, popular = true) - } - ) - } - - // latest animes from source with id `sourceId` - app.get("/api/v1/anime/source/:sourceId/latest/:pageNum") { ctx -> - val sourceId = ctx.pathParam("sourceId").toLong() - val pageNum = ctx.pathParam("pageNum").toInt() - ctx.json( - future { - getAnimeList(sourceId, pageNum, popular = false) - } - ) - } - - // get anime info - app.get("/api/v1/anime/anime/:animeId/") { ctx -> - val animeId = ctx.pathParam("animeId").toInt() - val onlineFetch = ctx.queryParam("onlineFetch", "false").toBoolean() - - ctx.json( - future { - getAnime(animeId, onlineFetch) - } - ) - } - - // anime thumbnail - app.get("api/v1/anime/anime/:animeId/thumbnail") { ctx -> - val animeId = ctx.pathParam("animeId").toInt() - - ctx.result( - future { getAnimeThumbnail(animeId) } - .thenApply { - ctx.header("content-type", it.second) - it.first - } - ) - } -// -// // list manga's categories -// app.get("api/v1/manga/:mangaId/category/") { ctx -> -// val mangaId = ctx.pathParam("mangaId").toInt() -// ctx.json(getMangaCategories(mangaId)) -// } -// -// // adds the manga to category -// app.get("api/v1/manga/:mangaId/category/:categoryId") { ctx -> -// val mangaId = ctx.pathParam("mangaId").toInt() -// val categoryId = ctx.pathParam("categoryId").toInt() -// addMangaToCategory(mangaId, categoryId) -// ctx.status(200) -// } -// -// // removes the manga from the category -// app.delete("api/v1/manga/:mangaId/category/:categoryId") { ctx -> -// val mangaId = ctx.pathParam("mangaId").toInt() -// val categoryId = ctx.pathParam("categoryId").toInt() -// removeMangaFromCategory(mangaId, categoryId) -// ctx.status(200) -// } -// - // get episode list when showing a anime - app.get("/api/v1/anime/anime/:animeId/episodes") { ctx -> - val animeId = ctx.pathParam("animeId").toInt() - - val onlineFetch = ctx.queryParam("onlineFetch")?.toBoolean() - - ctx.json(future { getEpisodeList(animeId, onlineFetch) }) - } - - // used to display a episode, get a episode in order to show it's - app.get("/api/v1/anime/anime/:animeId/episode/:episodeIndex") { ctx -> - val episodeIndex = ctx.pathParam("episodeIndex").toInt() - val animeId = ctx.pathParam("animeId").toInt() - ctx.json(future { getEpisode(episodeIndex, animeId) }) - } - - // used to modify a episode's parameters - app.patch("/api/v1/anime/anime/:animeId/episode/:episodeIndex") { ctx -> - val episodeIndex = ctx.pathParam("episodeIndex").toInt() - val animeId = ctx.pathParam("animeId").toInt() - - val read = ctx.formParam("read")?.toBoolean() - val bookmarked = ctx.formParam("bookmarked")?.toBoolean() - val markPrevRead = ctx.formParam("markPrevRead")?.toBoolean() - val lastPageRead = ctx.formParam("lastPageRead")?.toInt() - - modifyEpisode(animeId, episodeIndex, read, bookmarked, markPrevRead, lastPageRead) - - ctx.status(200) - } -// -// // get page at index "index" -// app.get("/api/v1/manga/:mangaId/chapter/:chapterIndex/page/:index") { ctx -> -// val mangaId = ctx.pathParam("mangaId").toInt() -// val chapterIndex = ctx.pathParam("chapterIndex").toInt() -// val index = ctx.pathParam("index").toInt() -// -// ctx.result( -// JavalinSetup.future { getPageImage(mangaId, chapterIndex, index) } -// .thenApply { -// ctx.header("content-type", it.second) -// it.first -// } -// ) -// } -// -// // submit a chapter for download -// app.put("/api/v1/manga/:mangaId/chapter/:chapterIndex/download") { ctx -> -// // TODO -// } -// -// // cancel a chapter download -// app.delete("/api/v1/manga/:mangaId/chapter/:chapterIndex/download") { ctx -> -// // TODO -// } -// -// // global search, Not implemented yet -// app.get("/api/v1/search/:searchTerm") { ctx -> -// val searchTerm = ctx.pathParam("searchTerm") -// ctx.json(sourceGlobalSearch(searchTerm)) -// } -// -// // single source search -// app.get("/api/v1/source/:sourceId/search/:searchTerm/:pageNum") { ctx -> -// val sourceId = ctx.pathParam("sourceId").toLong() -// val searchTerm = ctx.pathParam("searchTerm") -// val pageNum = ctx.pathParam("pageNum").toInt() -// ctx.json(JavalinSetup.future { sourceSearch(sourceId, searchTerm, pageNum) }) -// } -// -// // source filter list -// app.get("/api/v1/source/:sourceId/filters/") { ctx -> -// val sourceId = ctx.pathParam("sourceId").toLong() -// ctx.json(sourceFilters(sourceId)) -// } -// -// // adds the manga to library -// app.get("api/v1/manga/:mangaId/library") { ctx -> -// val mangaId = ctx.pathParam("mangaId").toInt() -// -// ctx.result( -// JavalinSetup.future { addMangaToLibrary(mangaId) } -// ) -// } -// -// // removes the manga from the library -// app.delete("api/v1/manga/:mangaId/library") { ctx -> -// val mangaId = ctx.pathParam("mangaId").toInt() -// -// ctx.result( -// JavalinSetup.future { removeMangaFromLibrary(mangaId) } -// ) -// } -// -// // lists mangas that have no category assigned -// app.get("/api/v1/library/") { ctx -> -// ctx.json(getLibraryMangas()) -// } -// -// // category list -// app.get("/api/v1/category/") { ctx -> -// ctx.json(Category.getCategoryList()) -// } -// -// // category create -// app.post("/api/v1/category/") { ctx -> -// val name = ctx.formParam("name")!! -// Category.createCategory(name) -// ctx.status(200) -// } -// -// // returns some static info of the current app build -// app.get("/api/v1/about/") { ctx -> -// ctx.json(About.getAbout()) -// } -// -// // category modification -// app.patch("/api/v1/category/:categoryId") { ctx -> -// val categoryId = ctx.pathParam("categoryId").toInt() -// val name = ctx.formParam("name") -// val isDefault = ctx.formParam("default")?.toBoolean() -// Category.updateCategory(categoryId, name, isDefault) -// ctx.status(200) -// } -// -// // category re-ordering -// app.patch("/api/v1/category/:categoryId/reorder") { ctx -> -// val categoryId = ctx.pathParam("categoryId").toInt() -// val from = ctx.formParam("from")!!.toInt() -// val to = ctx.formParam("to")!!.toInt() -// Category.reorderCategory(categoryId, from, to) -// ctx.status(200) -// } -// -// // category delete -// app.delete("/api/v1/category/:categoryId") { ctx -> -// val categoryId = ctx.pathParam("categoryId").toInt() -// Category.removeCategory(categoryId) -// ctx.status(200) -// } -// -// // returns the manga list associated with a category -// app.get("/api/v1/category/:categoryId") { ctx -> -// val categoryId = ctx.pathParam("categoryId").toInt() -// ctx.json(getCategoryMangaList(categoryId)) -// } -// -// // expects a Tachiyomi legacy backup json in the body -// app.post("/api/v1/backup/legacy/import") { ctx -> -// ctx.result( -// future { -// restoreLegacyBackup(ctx.bodyAsInputStream()) -// } -// ) -// } -// -// // expects a Tachiyomi legacy backup json as a file upload, the file must be named "backup.json" -// app.post("/api/v1/backup/legacy/import/file") { ctx -> -// ctx.result( -// JavalinSetup.future { -// restoreLegacyBackup(ctx.uploadedFile("backup.json")!!.content) -// } -// ) -// } -// -// // returns a Tachiyomi legacy backup json created from the current database as a json body -// app.get("/api/v1/backup/legacy/export") { ctx -> -// ctx.contentType("application/json") -// ctx.result( -// JavalinSetup.future { -// createLegacyBackup( -// BackupFlags( -// includeManga = true, -// includeCategories = true, -// includeChapters = true, -// includeTracking = true, -// includeHistory = true, -// ) -// ) -// } -// ) -// } -// -// // returns a Tachiyomi legacy backup json created from the current database as a file -// app.get("/api/v1/backup/legacy/export/file") { ctx -> -// ctx.contentType("application/json") -// val sdf = SimpleDateFormat("yyyy-MM-dd_HH-mm") -// val currentDate = sdf.format(Date()) -// -// ctx.header("Content-Disposition", "attachment; filename=\"tachidesk_$currentDate.json\"") -// ctx.result( -// JavalinSetup.future { -// createLegacyBackup( -// BackupFlags( -// includeManga = true, -// includeCategories = true, -// includeChapters = true, -// includeTracking = true, -// includeHistory = true, -// ) -// ) -// } -// ) -// } -// -// // Download queue stats -// app.ws("/api/v1/downloads") { ws -> -// ws.onConnect { ctx -> -// // TODO: send current stat -// // TODO: add to downlad subscribers -// } -// ws.onMessage { -// // TODO: send current stat -// } -// ws.onClose { ctx -> -// // TODO: remove from subscribers -// } -// } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/Anime.kt b/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/Anime.kt deleted file mode 100644 index 5fb0c58..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/Anime.kt +++ /dev/null @@ -1,139 +0,0 @@ -package suwayomi.tachidesk.anime.impl - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import eu.kanade.tachiyomi.animesource.model.SAnime -import eu.kanade.tachiyomi.network.GET -import org.jetbrains.exposed.sql.select -import org.jetbrains.exposed.sql.transactions.transaction -import org.jetbrains.exposed.sql.update -import org.kodein.di.DI -import org.kodein.di.conf.global -import org.kodein.di.instance -import suwayomi.tachidesk.anime.impl.AnimeList.proxyThumbnailUrl -import suwayomi.tachidesk.anime.impl.Source.getAnimeSource -import suwayomi.tachidesk.anime.impl.util.GetAnimeHttpSource.getAnimeHttpSource -import suwayomi.tachidesk.anime.model.dataclass.AnimeDataClass -import suwayomi.tachidesk.anime.model.table.AnimeStatus -import suwayomi.tachidesk.anime.model.table.AnimeTable -import suwayomi.tachidesk.manga.impl.util.lang.awaitSingle -import suwayomi.tachidesk.manga.impl.util.network.await -import suwayomi.tachidesk.manga.impl.util.storage.CachedImageResponse.clearCachedImage -import suwayomi.tachidesk.manga.impl.util.storage.CachedImageResponse.getCachedImageResponse -import suwayomi.tachidesk.server.ApplicationDirs -import java.io.InputStream - -object Anime { - private fun truncate(text: String?, maxLength: Int): String? { - return if (text?.length ?: 0 > maxLength) - text?.take(maxLength - 3) + "..." - else - text - } - - suspend fun getAnime(animeId: Int, onlineFetch: Boolean = false): AnimeDataClass { - var animeEntry = transaction { AnimeTable.select { AnimeTable.id eq animeId }.first() } - - return if (animeEntry[AnimeTable.initialized] && !onlineFetch) { - AnimeDataClass( - animeId, - animeEntry[AnimeTable.sourceReference].toString(), - - animeEntry[AnimeTable.url], - animeEntry[AnimeTable.title], - proxyThumbnailUrl(animeId), - - true, - - animeEntry[AnimeTable.artist], - animeEntry[AnimeTable.author], - animeEntry[AnimeTable.description], - animeEntry[AnimeTable.genre], - AnimeStatus.valueOf(animeEntry[AnimeTable.status]).name, - animeEntry[AnimeTable.inLibrary], - getAnimeSource(animeEntry[AnimeTable.sourceReference]), - false - ) - } else { // initialize anime - val source = getAnimeHttpSource(animeEntry[AnimeTable.sourceReference]) - val fetchedAnime = source.fetchAnimeDetails( - SAnime.create().apply { - url = animeEntry[AnimeTable.url] - title = animeEntry[AnimeTable.title] - } - ).awaitSingle() - - transaction { - AnimeTable.update({ AnimeTable.id eq animeId }) { - - it[AnimeTable.initialized] = true - - it[AnimeTable.artist] = fetchedAnime.artist - it[AnimeTable.author] = fetchedAnime.author - it[AnimeTable.description] = truncate(fetchedAnime.description, 4096) - it[AnimeTable.genre] = fetchedAnime.genre - it[AnimeTable.status] = fetchedAnime.status - if (fetchedAnime.thumbnail_url != null && fetchedAnime.thumbnail_url.orEmpty().isNotEmpty()) - it[AnimeTable.thumbnail_url] = fetchedAnime.thumbnail_url - } - } - - clearAnimeThumbnail(animeId) - - animeEntry = transaction { AnimeTable.select { AnimeTable.id eq animeId }.first() } - - AnimeDataClass( - animeId, - animeEntry[AnimeTable.sourceReference].toString(), - - animeEntry[AnimeTable.url], - animeEntry[AnimeTable.title], - proxyThumbnailUrl(animeId), - - true, - - fetchedAnime.artist, - fetchedAnime.author, - fetchedAnime.description, - fetchedAnime.genre, - AnimeStatus.valueOf(fetchedAnime.status).name, - animeEntry[AnimeTable.inLibrary], - getAnimeSource(animeEntry[AnimeTable.sourceReference]), - true - ) - } - } - - private val applicationDirs by DI.global.instance() - suspend fun getAnimeThumbnail(animeId: Int): Pair { - val saveDir = applicationDirs.animeThumbnailsRoot - val fileName = animeId.toString() - - return getCachedImageResponse(saveDir, fileName) { - getAnime(animeId) // make sure is initialized - - val animeEntry = transaction { AnimeTable.select { AnimeTable.id eq animeId }.first() } - - val sourceId = animeEntry[AnimeTable.sourceReference] - val source = getAnimeHttpSource(sourceId) - - val thumbnailUrl = animeEntry[AnimeTable.thumbnail_url]!! - - source.client.newCall( - GET(thumbnailUrl, source.headers) - ).await() - } - } - - private fun clearAnimeThumbnail(animeId: Int) { - val saveDir = applicationDirs.animeThumbnailsRoot - val fileName = animeId.toString() - - clearCachedImage(saveDir, fileName) - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/AnimeList.kt b/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/AnimeList.kt deleted file mode 100644 index 4fccdbb..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/AnimeList.kt +++ /dev/null @@ -1,102 +0,0 @@ -package suwayomi.tachidesk.anime.impl - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import eu.kanade.tachiyomi.animesource.model.AnimesPage -import org.jetbrains.exposed.sql.insertAndGetId -import org.jetbrains.exposed.sql.select -import org.jetbrains.exposed.sql.transactions.transaction -import suwayomi.tachidesk.anime.impl.util.GetAnimeHttpSource.getAnimeHttpSource -import suwayomi.tachidesk.anime.model.dataclass.AnimeDataClass -import suwayomi.tachidesk.anime.model.dataclass.PagedAnimeListDataClass -import suwayomi.tachidesk.anime.model.table.AnimeStatus -import suwayomi.tachidesk.anime.model.table.AnimeTable -import suwayomi.tachidesk.manga.impl.util.lang.awaitSingle - -object AnimeList { - fun proxyThumbnailUrl(animeId: Int): String { - return "/api/v1/anime/anime/$animeId/thumbnail" - } - - suspend fun getAnimeList(sourceId: Long, pageNum: Int = 1, popular: Boolean): PagedAnimeListDataClass { - val source = getAnimeHttpSource(sourceId) - val animesPage = if (popular) { - source.fetchPopularAnime(pageNum).awaitSingle() - } else { - if (source.supportsLatest) - source.fetchLatestUpdates(pageNum).awaitSingle() - else - throw Exception("Source $source doesn't support latest") - } - return animesPage.processEntries(sourceId) - } - - fun AnimesPage.processEntries(sourceId: Long): PagedAnimeListDataClass { - val animesPage = this - val animeList = transaction { - return@transaction animesPage.animes.map { anime -> - val animeEntry = AnimeTable.select { AnimeTable.url eq anime.url }.firstOrNull() - if (animeEntry == null) { // create anime entry - val animeId = AnimeTable.insertAndGetId { - it[url] = anime.url - it[title] = anime.title - - it[artist] = anime.artist - it[author] = anime.author - it[description] = anime.description - it[genre] = anime.genre - it[status] = anime.status - it[thumbnail_url] = anime.thumbnail_url - - it[sourceReference] = sourceId - }.value - - AnimeDataClass( - animeId, - sourceId.toString(), - - anime.url, - anime.title, - proxyThumbnailUrl(animeId), - - anime.initialized, - - anime.artist, - anime.author, - anime.description, - anime.genre, - AnimeStatus.valueOf(anime.status).name - ) - } else { - val animeId = animeEntry[AnimeTable.id].value - AnimeDataClass( - animeId, - sourceId.toString(), - - anime.url, - anime.title, - proxyThumbnailUrl(animeId), - - true, - - animeEntry[AnimeTable.artist], - animeEntry[AnimeTable.author], - animeEntry[AnimeTable.description], - animeEntry[AnimeTable.genre], - AnimeStatus.valueOf(animeEntry[AnimeTable.status]).name, - animeEntry[AnimeTable.inLibrary] - ) - } - } - } - return PagedAnimeListDataClass( - animeList, - animesPage.hasNextPage - ) - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/Episode.kt b/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/Episode.kt deleted file mode 100644 index 00152b9..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/Episode.kt +++ /dev/null @@ -1,241 +0,0 @@ -package suwayomi.tachidesk.anime.impl - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import eu.kanade.tachiyomi.animesource.model.SAnime -import eu.kanade.tachiyomi.animesource.model.SEpisode -import org.jetbrains.exposed.sql.SortOrder.DESC -import org.jetbrains.exposed.sql.and -import org.jetbrains.exposed.sql.deleteWhere -import org.jetbrains.exposed.sql.insert -import org.jetbrains.exposed.sql.select -import org.jetbrains.exposed.sql.transactions.transaction -import org.jetbrains.exposed.sql.update -import suwayomi.tachidesk.anime.impl.Anime.getAnime -import suwayomi.tachidesk.anime.impl.util.GetAnimeHttpSource.getAnimeHttpSource -import suwayomi.tachidesk.anime.model.dataclass.EpisodeDataClass -import suwayomi.tachidesk.anime.model.table.AnimeTable -import suwayomi.tachidesk.anime.model.table.EpisodeTable -import suwayomi.tachidesk.anime.model.table.toDataClass -import suwayomi.tachidesk.manga.impl.util.lang.awaitSingle - -object Episode { - /** get episode list when showing an anime */ - suspend fun getEpisodeList(animeId: Int, onlineFetch: Boolean?): List { - return if (onlineFetch == true) { - getSourceEpisodes(animeId) - } else { - transaction { - EpisodeTable.select { EpisodeTable.anime eq animeId }.orderBy(EpisodeTable.episodeIndex to DESC) - .map { - EpisodeTable.toDataClass(it) - } - }.ifEmpty { - // If it was explicitly set to offline dont grab episodes - if (onlineFetch == null) { - getSourceEpisodes(animeId) - } else emptyList() - } - } - } - - private suspend fun getSourceEpisodes(animeId: Int): List { - val animeDetails = getAnime(animeId) - val source = getAnimeHttpSource(animeDetails.sourceId.toLong()) - val episodeList = source.fetchEpisodeList( - SAnime.create().apply { - title = animeDetails.title - url = animeDetails.url - } - ).awaitSingle() - - val episodeCount = episodeList.count() - - transaction { - episodeList.reversed().forEachIndexed { index, fetchedEpisode -> - val episodeEntry = EpisodeTable.select { EpisodeTable.url eq fetchedEpisode.url }.firstOrNull() - if (episodeEntry == null) { - EpisodeTable.insert { - it[url] = fetchedEpisode.url - it[name] = fetchedEpisode.name - it[date_upload] = fetchedEpisode.date_upload - it[episode_number] = fetchedEpisode.episode_number - it[scanlator] = fetchedEpisode.scanlator - - it[episodeIndex] = index + 1 - it[anime] = animeId - } - } else { - EpisodeTable.update({ EpisodeTable.url eq fetchedEpisode.url }) { - it[name] = fetchedEpisode.name - it[date_upload] = fetchedEpisode.date_upload - it[episode_number] = fetchedEpisode.episode_number - it[scanlator] = fetchedEpisode.scanlator - - it[episodeIndex] = index + 1 - it[anime] = animeId - } - } - } - } - - // clear any orphaned episodes that are in the db but not in `episodeList` - val dbEpisodeCount = transaction { EpisodeTable.select { EpisodeTable.anime eq animeId }.count() } - if (dbEpisodeCount > episodeCount) { // we got some clean up due - val dbEpisodeList = transaction { EpisodeTable.select { EpisodeTable.anime eq animeId } } - - dbEpisodeList.forEach { - if (it[EpisodeTable.episodeIndex] >= episodeList.size || - episodeList[it[EpisodeTable.episodeIndex] - 1].url != it[EpisodeTable.url] - ) { - transaction { -// PageTable.deleteWhere { PageTable.episode eq it[EpisodeTable.id] } - EpisodeTable.deleteWhere { EpisodeTable.id eq it[EpisodeTable.id] } - } - } - } - } - - val dbEpisodeMap = transaction { - EpisodeTable.select { EpisodeTable.anime eq animeId } - .associateBy({ it[EpisodeTable.url] }, { it }) - } - - return episodeList.mapIndexed { index, it -> - - val dbEpisode = dbEpisodeMap.getValue(it.url) - - EpisodeDataClass( - it.url, - it.name, - it.date_upload, - it.episode_number, - it.scanlator, - animeId, - - dbEpisode[EpisodeTable.isRead], - dbEpisode[EpisodeTable.isBookmarked], - dbEpisode[EpisodeTable.lastPageRead], - - episodeCount - index, - episodeList.size - ) - } - } - - /** used to display a episode, get a episode in order to show it's video */ - suspend fun getEpisode(episodeIndex: Int, animeId: Int): EpisodeDataClass { - val episode = getEpisodeList(animeId, false) - .first { it.index == episodeIndex } - - val animeEntry = transaction { AnimeTable.select { AnimeTable.id eq animeId }.first() } - val source = getAnimeHttpSource(animeEntry[AnimeTable.sourceReference]) - val fetchedLinkUrl = source.fetchEpisodeLink( - SEpisode.create().also { - it.url = episode.url - it.name = episode.name - } - ).awaitSingle() - - return EpisodeDataClass( - episode.url, - episode.name, - episode.uploadDate, - episode.episodeNumber, - episode.scanlator, - animeId, - episode.read, - episode.bookmarked, - episode.lastPageRead, - episode.index, - episode.episodeCount, - fetchedLinkUrl - ) - } - -// /** used to display a episode, get a episode in order to show it's pages */ -// suspend fun getEpisode(episodeIndex: Int, animeId: Int): EpisodeDataClass { -// val episodeEntry = transaction { -// EpisodeTable.select { -// (EpisodeTable.episodeIndex eq episodeIndex) and (EpisodeTable.anime eq animeId) -// }.first() -// } -// val animeEntry = transaction { MangaTable.select { MangaTable.id eq animeId }.first() } -// val source = getAnimeHttpSource(animeEntry[MangaTable.sourceReference]) -// -// val pageList = source.fetchPageList( -// SEpisode.create().apply { -// url = episodeEntry[EpisodeTable.url] -// name = episodeEntry[EpisodeTable.name] -// } -// ).awaitSingle() -// -// val episodeId = episodeEntry[EpisodeTable.id].value -// val episodeCount = transaction { EpisodeTable.select { EpisodeTable.anime eq animeId }.count() } -// -// // update page list for this episode -// transaction { -// pageList.forEach { page -> -// val pageEntry = transaction { PageTable.select { (PageTable.episode eq episodeId) and (PageTable.index eq page.index) }.firstOrNull() } -// if (pageEntry == null) { -// PageTable.insert { -// it[index] = page.index -// it[url] = page.url -// it[imageUrl] = page.imageUrl -// it[episode] = episodeId -// } -// } else { -// PageTable.update({ (PageTable.episode eq episodeId) and (PageTable.index eq page.index) }) { -// it[url] = page.url -// it[imageUrl] = page.imageUrl -// } -// } -// } -// } -// -// return EpisodeDataClass( -// episodeEntry[EpisodeTable.url], -// episodeEntry[EpisodeTable.name], -// episodeEntry[EpisodeTable.date_upload], -// episodeEntry[EpisodeTable.episode_number], -// episodeEntry[EpisodeTable.scanlator], -// animeId, -// episodeEntry[EpisodeTable.isRead], -// episodeEntry[EpisodeTable.isBookmarked], -// episodeEntry[EpisodeTable.lastPageRead], -// -// episodeEntry[EpisodeTable.episodeIndex], -// episodeCount.toInt(), -// pageList.count() -// ) -// } - - fun modifyEpisode(animeId: Int, episodeIndex: Int, isRead: Boolean?, isBookmarked: Boolean?, markPrevRead: Boolean?, lastPageRead: Int?) { - transaction { - if (listOf(isRead, isBookmarked, lastPageRead).any { it != null }) { - EpisodeTable.update({ (EpisodeTable.anime eq animeId) and (EpisodeTable.episodeIndex eq episodeIndex) }) { update -> - isRead?.also { - update[EpisodeTable.isRead] = it - } - isBookmarked?.also { - update[EpisodeTable.isBookmarked] = it - } - lastPageRead?.also { - update[EpisodeTable.lastPageRead] = it - } - } - } - - markPrevRead?.let { - EpisodeTable.update({ (EpisodeTable.anime eq animeId) and (EpisodeTable.episodeIndex less episodeIndex) }) { - it[EpisodeTable.isRead] = markPrevRead - } - } - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/Source.kt b/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/Source.kt deleted file mode 100644 index 63e8266..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/Source.kt +++ /dev/null @@ -1,50 +0,0 @@ -package suwayomi.tachidesk.anime.impl - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import mu.KotlinLogging -import org.jetbrains.exposed.sql.select -import org.jetbrains.exposed.sql.selectAll -import org.jetbrains.exposed.sql.transactions.transaction -import suwayomi.tachidesk.anime.impl.extension.Extension.getExtensionIconUrl -import suwayomi.tachidesk.anime.impl.util.GetAnimeHttpSource.getAnimeHttpSource -import suwayomi.tachidesk.anime.model.dataclass.AnimeSourceDataClass -import suwayomi.tachidesk.anime.model.table.AnimeExtensionTable -import suwayomi.tachidesk.anime.model.table.AnimeSourceTable - -object Source { - private val logger = KotlinLogging.logger {} - - fun getSourceList(): List { - return transaction { - AnimeSourceTable.selectAll().map { - AnimeSourceDataClass( - it[AnimeSourceTable.id].value.toString(), - it[AnimeSourceTable.name], - it[AnimeSourceTable.lang], - getExtensionIconUrl(AnimeExtensionTable.select { AnimeExtensionTable.id eq it[AnimeSourceTable.extension] }.first()[AnimeExtensionTable.apkName]), - getAnimeHttpSource(it[AnimeSourceTable.id].value).supportsLatest - ) - } - } - } - - fun getAnimeSource(sourceId: Long): AnimeSourceDataClass { - return transaction { - val source = AnimeSourceTable.select { AnimeSourceTable.id eq sourceId }.firstOrNull() - - AnimeSourceDataClass( - sourceId.toString(), - source?.get(AnimeSourceTable.name), - source?.get(AnimeSourceTable.lang), - source?.let { AnimeExtensionTable.select { AnimeExtensionTable.id eq source[AnimeSourceTable.extension] }.first()[AnimeExtensionTable.iconUrl] }, - source?.let { getAnimeHttpSource(sourceId).supportsLatest } - ) - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/extension/Extension.kt b/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/extension/Extension.kt deleted file mode 100644 index 8155ae6..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/extension/Extension.kt +++ /dev/null @@ -1,251 +0,0 @@ -package suwayomi.tachidesk.anime.impl.extension - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import android.net.Uri -import eu.kanade.tachiyomi.animesource.AnimeCatalogueSource -import eu.kanade.tachiyomi.animesource.AnimeSource -import eu.kanade.tachiyomi.animesource.AnimeSourceFactory -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.network.NetworkHelper -import mu.KotlinLogging -import okhttp3.Request -import okio.buffer -import okio.sink -import org.jetbrains.exposed.sql.deleteWhere -import org.jetbrains.exposed.sql.insert -import org.jetbrains.exposed.sql.select -import org.jetbrains.exposed.sql.transactions.transaction -import org.jetbrains.exposed.sql.update -import org.kodein.di.DI -import org.kodein.di.conf.global -import org.kodein.di.instance -import suwayomi.tachidesk.anime.impl.extension.ExtensionsList.extensionTableAsDataClass -import suwayomi.tachidesk.anime.impl.extension.github.ExtensionGithubApi -import suwayomi.tachidesk.anime.impl.util.PackageTools.EXTENSION_FEATURE -import suwayomi.tachidesk.anime.impl.util.PackageTools.LIB_VERSION_MAX -import suwayomi.tachidesk.anime.impl.util.PackageTools.LIB_VERSION_MIN -import suwayomi.tachidesk.anime.impl.util.PackageTools.METADATA_NSFW -import suwayomi.tachidesk.anime.impl.util.PackageTools.METADATA_SOURCE_CLASS -import suwayomi.tachidesk.anime.impl.util.PackageTools.dex2jar -import suwayomi.tachidesk.anime.impl.util.PackageTools.getPackageInfo -import suwayomi.tachidesk.anime.impl.util.PackageTools.getSignatureHash -import suwayomi.tachidesk.anime.impl.util.PackageTools.loadExtensionSources -import suwayomi.tachidesk.anime.impl.util.PackageTools.trustedSignatures -import suwayomi.tachidesk.anime.model.table.AnimeExtensionTable -import suwayomi.tachidesk.anime.model.table.AnimeSourceTable -import suwayomi.tachidesk.manga.impl.util.network.await -import suwayomi.tachidesk.manga.impl.util.storage.CachedImageResponse.getCachedImageResponse -import suwayomi.tachidesk.server.ApplicationDirs -import uy.kohesive.injekt.injectLazy -import java.io.File -import java.io.InputStream - -object Extension { - private val logger = KotlinLogging.logger {} - private val applicationDirs by DI.global.instance() - - data class InstallableAPK( - val apkFilePath: String, - val pkgName: String - ) - - suspend fun installExtension(pkgName: String): Int { - logger.debug("Installing $pkgName") - val extensionRecord = extensionTableAsDataClass().first { it.pkgName == pkgName } - - return installAPK { - val apkURL = ExtensionGithubApi.getApkUrl(extensionRecord) - val apkName = Uri.parse(apkURL).lastPathSegment!! - val apkSavePath = "${applicationDirs.extensionsRoot}/$apkName" - // download apk file - downloadAPKFile(apkURL, apkSavePath) - - apkSavePath - } - } - - suspend fun installAPK(fetcher: suspend () -> String): Int { - val apkFilePath = fetcher() - val apkName = File(apkFilePath).name - - // check if we don't have the extension already installed - // if it's installed and we want to update, it first has to be uninstalled - val isInstalled = transaction { - AnimeExtensionTable.select { AnimeExtensionTable.apkName eq apkName }.firstOrNull() - }?.get(AnimeExtensionTable.isInstalled) ?: false - - if (!isInstalled) { - val fileNameWithoutType = apkName.substringBefore(".apk") - - val dirPathWithoutType = "${applicationDirs.extensionsRoot}/$fileNameWithoutType" - val jarFilePath = "$dirPathWithoutType.jar" - val dexFilePath = "$dirPathWithoutType.dex" - - val packageInfo = getPackageInfo(apkFilePath) - val pkgName = packageInfo.packageName - - if (!packageInfo.reqFeatures.orEmpty().any { it.name == EXTENSION_FEATURE }) { - throw Exception("This apk is not a Tachiyomi extension") - } - - // Validate lib version - val libVersion = packageInfo.versionName.substringBeforeLast('.').toDouble() - if (libVersion < LIB_VERSION_MIN || libVersion > LIB_VERSION_MAX) { - throw Exception( - "Lib version is $libVersion, while only versions " + - "$LIB_VERSION_MIN to $LIB_VERSION_MAX are allowed" - ) - } - - val signatureHash = getSignatureHash(packageInfo) - - if (signatureHash == null) { - throw Exception("Package $pkgName isn't signed") - } else if (signatureHash !in trustedSignatures) { - // TODO: allow trusting keys - throw Exception("This apk is not a signed with the official tachiyomi signature") - } - - val isNsfw = packageInfo.applicationInfo.metaData.getString(METADATA_NSFW) == "1" - - val className = packageInfo.packageName + packageInfo.applicationInfo.metaData.getString(METADATA_SOURCE_CLASS) - - logger.debug("Main class for extension is $className") - - dex2jar(apkFilePath, jarFilePath, fileNameWithoutType) - - // clean up -// File(apkFilePath).delete() - File(dexFilePath).delete() - - // collect sources from the extension - val sources: List = when (val instance = loadExtensionSources(jarFilePath, className)) { - is AnimeSource -> listOf(instance) - is AnimeSourceFactory -> instance.createSources() - else -> throw RuntimeException("Unknown source class type! ${instance.javaClass}") - }.map { it as AnimeCatalogueSource } - - val langs = sources.map { it.lang }.toSet() - val extensionLang = when (langs.size) { - 0 -> "" - 1 -> langs.first() - else -> "all" - } - - val extensionName = packageInfo.applicationInfo.nonLocalizedLabel.toString().substringAfter("Tachiyomi: ") - - // update extension info - transaction { - if (AnimeExtensionTable.select { AnimeExtensionTable.pkgName eq pkgName }.firstOrNull() == null) { - AnimeExtensionTable.insert { - it[this.apkName] = apkName - it[name] = extensionName - it[this.pkgName] = packageInfo.packageName - it[versionName] = packageInfo.versionName - it[versionCode] = packageInfo.versionCode - it[lang] = extensionLang - it[this.isNsfw] = isNsfw - } - } - - AnimeExtensionTable.update({ AnimeExtensionTable.pkgName eq pkgName }) { - it[this.isInstalled] = true - it[this.classFQName] = className - } - - val extensionId = AnimeExtensionTable.select { AnimeExtensionTable.pkgName eq pkgName }.first()[AnimeExtensionTable.id].value - - sources.forEach { httpSource -> - AnimeSourceTable.insert { - it[id] = httpSource.id - it[name] = httpSource.name - it[lang] = httpSource.lang - it[extension] = extensionId - } - logger.debug("Installed source ${httpSource.name} (${httpSource.lang}) with id:${httpSource.id}") - } - } - return 201 // we installed successfully - } else { - return 302 // extension was already installed - } - } - - private val network: NetworkHelper by injectLazy() - - private suspend fun downloadAPKFile(url: String, savePath: String) { - val request = Request.Builder().url(url).build() - val response = network.client.newCall(request).await() - - val downloadedFile = File(savePath) - downloadedFile.sink().buffer().use { sink -> - response.body!!.source().use { source -> - sink.writeAll(source) - sink.flush() - } - } - } - - fun uninstallExtension(pkgName: String) { - logger.debug("Uninstalling $pkgName") - - val extensionRecord = transaction { AnimeExtensionTable.select { AnimeExtensionTable.pkgName eq pkgName }.first() } - val fileNameWithoutType = extensionRecord[AnimeExtensionTable.apkName].substringBefore(".apk") - val jarPath = "${applicationDirs.extensionsRoot}/$fileNameWithoutType.jar" - transaction { - val extensionId = extensionRecord[AnimeExtensionTable.id].value - - AnimeSourceTable.deleteWhere { AnimeSourceTable.extension eq extensionId } - if (extensionRecord[AnimeExtensionTable.isObsolete]) - AnimeExtensionTable.deleteWhere { AnimeExtensionTable.pkgName eq pkgName } - else - AnimeExtensionTable.update({ AnimeExtensionTable.pkgName eq pkgName }) { - it[isInstalled] = false - } - } - - if (File(jarPath).exists()) { - File(jarPath).delete() - } - } - - suspend fun updateExtension(pkgName: String): Int { - val targetExtension = ExtensionsList.updateMap.remove(pkgName)!! - uninstallExtension(pkgName) - transaction { - AnimeExtensionTable.update({ AnimeExtensionTable.pkgName eq pkgName }) { - it[name] = targetExtension.name - it[versionName] = targetExtension.versionName - it[versionCode] = targetExtension.versionCode - it[lang] = targetExtension.lang - it[isNsfw] = targetExtension.isNsfw - it[apkName] = targetExtension.apkName - it[iconUrl] = targetExtension.iconUrl - it[hasUpdate] = false - } - } - return installExtension(pkgName) - } - - suspend fun getExtensionIcon(apkName: String): Pair { - val iconUrl = transaction { AnimeExtensionTable.select { AnimeExtensionTable.apkName eq apkName }.first() }[AnimeExtensionTable.iconUrl] - - val saveDir = "${applicationDirs.extensionsRoot}/icon" - - return getCachedImageResponse(saveDir, apkName) { - network.client.newCall( - GET(iconUrl) - ).await() - } - } - - fun getExtensionIconUrl(apkName: String): String { - return "/api/v1/anime/extension/icon/$apkName" - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/extension/ExtensionsList.kt b/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/extension/ExtensionsList.kt deleted file mode 100644 index d6686e4..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/extension/ExtensionsList.kt +++ /dev/null @@ -1,132 +0,0 @@ -package suwayomi.tachidesk.anime.impl.extension - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import mu.KotlinLogging -import org.jetbrains.exposed.sql.deleteWhere -import org.jetbrains.exposed.sql.insert -import org.jetbrains.exposed.sql.select -import org.jetbrains.exposed.sql.selectAll -import org.jetbrains.exposed.sql.transactions.transaction -import org.jetbrains.exposed.sql.update -import suwayomi.tachidesk.anime.impl.extension.Extension.getExtensionIconUrl -import suwayomi.tachidesk.anime.impl.extension.github.ExtensionGithubApi -import suwayomi.tachidesk.anime.impl.extension.github.OnlineExtension -import suwayomi.tachidesk.anime.model.dataclass.AnimeExtensionDataClass -import suwayomi.tachidesk.anime.model.table.AnimeExtensionTable -import java.util.concurrent.ConcurrentHashMap - -object ExtensionsList { - private val logger = KotlinLogging.logger {} - - var lastUpdateCheck: Long = 0 - var updateMap = ConcurrentHashMap() - - /** 60,000 milliseconds = 60 seconds */ - private const val ExtensionUpdateDelayTime = 60 * 1000 - - suspend fun getExtensionList(): List { - // update if {ExtensionUpdateDelayTime} seconds has passed or requested offline and database is empty - if (lastUpdateCheck + ExtensionUpdateDelayTime < System.currentTimeMillis()) { - logger.debug("Getting extensions list from the internet") - lastUpdateCheck = System.currentTimeMillis() - - val foundExtensions = ExtensionGithubApi.findExtensions() - updateExtensionDatabase(foundExtensions) - } else { - logger.debug("used cached extension list") - } - - return extensionTableAsDataClass() - } - - fun extensionTableAsDataClass() = transaction { - AnimeExtensionTable.selectAll().map { - AnimeExtensionDataClass( - it[AnimeExtensionTable.apkName], - getExtensionIconUrl(it[AnimeExtensionTable.apkName]), - it[AnimeExtensionTable.name], - it[AnimeExtensionTable.pkgName], - it[AnimeExtensionTable.versionName], - it[AnimeExtensionTable.versionCode], - it[AnimeExtensionTable.lang], - it[AnimeExtensionTable.isNsfw], - it[AnimeExtensionTable.isInstalled], - it[AnimeExtensionTable.hasUpdate], - it[AnimeExtensionTable.isObsolete], - ) - } - } - - private fun updateExtensionDatabase(foundExtensions: List) { - transaction { - foundExtensions.forEach { foundExtension -> - val extensionRecord = AnimeExtensionTable.select { AnimeExtensionTable.pkgName eq foundExtension.pkgName }.firstOrNull() - if (extensionRecord != null) { - if (extensionRecord[AnimeExtensionTable.isInstalled]) { - when { - foundExtension.versionCode > extensionRecord[AnimeExtensionTable.versionCode] -> { - // there is an update - AnimeExtensionTable.update({ AnimeExtensionTable.pkgName eq foundExtension.pkgName }) { - it[hasUpdate] = true - } - updateMap.putIfAbsent(foundExtension.pkgName, foundExtension) - } - foundExtension.versionCode < extensionRecord[AnimeExtensionTable.versionCode] -> { - // some how the user installed an invalid version - AnimeExtensionTable.update({ AnimeExtensionTable.pkgName eq foundExtension.pkgName }) { - it[isObsolete] = true - } - } - } - } else { - // extension is not installed so we can overwrite the data without a care - AnimeExtensionTable.update({ AnimeExtensionTable.pkgName eq foundExtension.pkgName }) { - it[name] = foundExtension.name - it[versionName] = foundExtension.versionName - it[versionCode] = foundExtension.versionCode - it[lang] = foundExtension.lang - it[isNsfw] = foundExtension.isNsfw - it[apkName] = foundExtension.apkName - it[iconUrl] = foundExtension.iconUrl - } - } - } else { - // insert new record - AnimeExtensionTable.insert { - it[name] = foundExtension.name - it[pkgName] = foundExtension.pkgName - it[versionName] = foundExtension.versionName - it[versionCode] = foundExtension.versionCode - it[lang] = foundExtension.lang - it[isNsfw] = foundExtension.isNsfw - it[apkName] = foundExtension.apkName - it[iconUrl] = foundExtension.iconUrl - } - } - } - - // deal with obsolete extensions - AnimeExtensionTable.selectAll().forEach { extensionRecord -> - val foundExtension = foundExtensions.find { it.pkgName == extensionRecord[AnimeExtensionTable.pkgName] } - if (foundExtension == null) { - // not in the repo, so this extensions is obsolete - if (extensionRecord[AnimeExtensionTable.isInstalled]) { - // is installed so we should mark it as obsolete - AnimeExtensionTable.update({ AnimeExtensionTable.pkgName eq extensionRecord[AnimeExtensionTable.pkgName] }) { - it[isObsolete] = true - } - } else { - // is not installed so we can remove the record without a care - AnimeExtensionTable.deleteWhere { AnimeExtensionTable.pkgName eq extensionRecord[AnimeExtensionTable.pkgName] } - } - } - } - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/extension/github/ExtensionGithubApi.kt b/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/extension/github/ExtensionGithubApi.kt deleted file mode 100644 index bc30373..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/extension/github/ExtensionGithubApi.kt +++ /dev/null @@ -1,79 +0,0 @@ -package suwayomi.tachidesk.anime.impl.extension.github - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import com.github.salomonbrys.kotson.int -import com.github.salomonbrys.kotson.string -import com.google.gson.JsonArray -import com.google.gson.JsonParser -import eu.kanade.tachiyomi.network.NetworkHelper -import okhttp3.Request -import suwayomi.tachidesk.anime.impl.util.PackageTools.LIB_VERSION_MAX -import suwayomi.tachidesk.anime.impl.util.PackageTools.LIB_VERSION_MIN -import suwayomi.tachidesk.anime.model.dataclass.AnimeExtensionDataClass -import suwayomi.tachidesk.manga.impl.util.network.UnzippingInterceptor -import uy.kohesive.injekt.injectLazy - -object ExtensionGithubApi { - private const val BASE_URL = "https://raw.githubusercontent.com" - private const val REPO_URL_PREFIX = "$BASE_URL/jmir1/tachiyomi-extensions/repo" - - private fun parseResponse(json: JsonArray): List { - return json - .map { it.asJsonObject } - .filter { element -> - val versionName = element["version"].string - val libVersion = versionName.substringBeforeLast('.').toInt() - libVersion in LIB_VERSION_MIN..LIB_VERSION_MAX - } - .map { element -> - val name = element["name"].string.substringAfter("Tachiyomi: ") - val pkgName = element["pkg"].string - val apkName = element["apk"].string - val versionName = element["version"].string - val versionCode = element["code"].int - val lang = element["lang"].string - val nsfw = element["nsfw"].int == 1 - val icon = "$REPO_URL_PREFIX/icon/${apkName.replace(".apk", ".png")}" - - OnlineExtension(name, pkgName, versionName, versionCode, lang, nsfw, apkName, icon) - } - } - - suspend fun findExtensions(): List { - val response = getRepo() - return parseResponse(response) - } - - fun getApkUrl(extension: AnimeExtensionDataClass): String { - return "$REPO_URL_PREFIX/apk/${extension.apkName}" - } - - private val client by lazy { - val network: NetworkHelper by injectLazy() - network.client.newBuilder() - .addNetworkInterceptor { chain -> - val originalResponse = chain.proceed(chain.request()) - originalResponse.newBuilder() - .header("Content-Encoding", "gzip") - .header("Content-Type", "application/json") - .build() - } - .addInterceptor(UnzippingInterceptor()) - .build() - } - - private fun getRepo(): JsonArray { - val request = Request.Builder() - .url("$REPO_URL_PREFIX/index.json.gz") - .build() - - val response = client.newCall(request).execute().use { response -> response.body!!.string() } - return JsonParser.parseString(response).asJsonArray - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/extension/github/OnlineExtension.kt b/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/extension/github/OnlineExtension.kt deleted file mode 100644 index 5947976..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/extension/github/OnlineExtension.kt +++ /dev/null @@ -1,19 +0,0 @@ -package suwayomi.tachidesk.anime.impl.extension.github - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -data class OnlineExtension( - val name: String, - val pkgName: String, - val versionName: String, - val versionCode: Int, - val lang: String, - val isNsfw: Boolean, - val apkName: String, - val iconUrl: String -) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/util/GetAnimeHttpSource.kt b/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/util/GetAnimeHttpSource.kt deleted file mode 100644 index a7d5b10..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/util/GetAnimeHttpSource.kt +++ /dev/null @@ -1,57 +0,0 @@ -package suwayomi.tachidesk.anime.impl.util - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import eu.kanade.tachiyomi.animesource.AnimeSource -import eu.kanade.tachiyomi.animesource.AnimeSourceFactory -import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource -import org.jetbrains.exposed.sql.select -import org.jetbrains.exposed.sql.transactions.transaction -import org.kodein.di.DI -import org.kodein.di.conf.global -import org.kodein.di.instance -import suwayomi.tachidesk.anime.impl.util.PackageTools.loadExtensionSources -import suwayomi.tachidesk.anime.model.table.AnimeExtensionTable -import suwayomi.tachidesk.anime.model.table.AnimeSourceTable -import suwayomi.tachidesk.server.ApplicationDirs -import java.util.concurrent.ConcurrentHashMap - -object GetAnimeHttpSource { - private val sourceCache = ConcurrentHashMap() - private val applicationDirs by DI.global.instance() - - fun getAnimeHttpSource(sourceId: Long): AnimeHttpSource { - val cachedResult: AnimeHttpSource? = sourceCache[sourceId] - if (cachedResult != null) { - return cachedResult - } - - val sourceRecord = transaction { - AnimeSourceTable.select { AnimeSourceTable.id eq sourceId }.first() - } - - val extensionId = sourceRecord[AnimeSourceTable.extension] - val extensionRecord = transaction { - AnimeExtensionTable.select { AnimeExtensionTable.id eq extensionId }.first() - } - - val apkName = extensionRecord[AnimeExtensionTable.apkName] - val className = extensionRecord[AnimeExtensionTable.classFQName] - val jarName = apkName.substringBefore(".apk") + ".jar" - val jarPath = "${applicationDirs.extensionsRoot}/$jarName" - - when (val instance = loadExtensionSources(jarPath, className)) { - is AnimeSource -> listOf(instance) - is AnimeSourceFactory -> instance.createSources() - else -> throw Exception("Unknown source class type! ${instance.javaClass}") - }.forEach { - sourceCache[it.id] = it as AnimeHttpSource - } - return sourceCache[sourceId]!! - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/util/PackageTools.kt b/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/util/PackageTools.kt deleted file mode 100644 index 8bdf709..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/util/PackageTools.kt +++ /dev/null @@ -1,145 +0,0 @@ -package suwayomi.tachidesk.anime.impl.util - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import android.content.pm.PackageInfo -import android.content.pm.Signature -import android.os.Bundle -import com.googlecode.d2j.dex.Dex2jar -import com.googlecode.d2j.reader.MultiDexFileReader -import com.googlecode.dex2jar.tools.BaksmaliBaseDexExceptionHandler -import eu.kanade.tachiyomi.util.lang.Hash -import mu.KotlinLogging -import net.dongliu.apk.parser.ApkFile -import net.dongliu.apk.parser.ApkParsers -import org.kodein.di.DI -import org.kodein.di.conf.global -import org.kodein.di.instance -import org.w3c.dom.Element -import org.w3c.dom.Node -import suwayomi.tachidesk.server.ApplicationDirs -import xyz.nulldev.androidcompat.pm.InstalledPackage.Companion.toList -import xyz.nulldev.androidcompat.pm.toPackageInfo -import java.io.File -import java.net.URL -import java.net.URLClassLoader -import java.nio.file.Files -import java.nio.file.Path -import javax.xml.parsers.DocumentBuilderFactory - -object PackageTools { - private val logger = KotlinLogging.logger {} - private val applicationDirs by DI.global.instance() - - const val EXTENSION_FEATURE = "tachiyomi.animeextension" - const val METADATA_SOURCE_CLASS = "tachiyomi.animeextension.class" - const val METADATA_SOURCE_FACTORY = "tachiyomi.animeextension.factory" - const val METADATA_NSFW = "tachiyomi.animeextension.nsfw" - const val LIB_VERSION_MIN = 10 - const val LIB_VERSION_MAX = 10 - - private const val officialSignature = "50ab1d1e3a20d204d0ad6d334c7691c632e41b98dfa132bf385695fdfa63839c" // jmir1's key - var trustedSignatures = mutableSetOf() + officialSignature - - /** - * Convert dex to jar, a wrapper for the dex2jar library - */ - fun dex2jar(dexFile: String, jarFile: String, fileNameWithoutType: String) { - // adopted from com.googlecode.dex2jar.tools.Dex2jarCmd.doCommandLine - // source at: https://github.com/DexPatcher/dex2jar/tree/v2.1-20190905-lanchon/dex-tools/src/main/java/com/googlecode/dex2jar/tools/Dex2jarCmd.java - - val jarFilePath = File(jarFile).toPath() - val reader = MultiDexFileReader.open(Files.readAllBytes(File(dexFile).toPath())) - val handler = BaksmaliBaseDexExceptionHandler() - Dex2jar - .from(reader) - .withExceptionHandler(handler) - .reUseReg(false) - .topoLogicalSort() - .skipDebug(true) - .optimizeSynchronized(false) - .printIR(false) - .noCode(false) - .skipExceptions(false) - .to(jarFilePath) - if (handler.hasException()) { - val errorFile: Path = File(applicationDirs.extensionsRoot).toPath().resolve("$fileNameWithoutType-error.txt") - logger.error( - """ - Detail Error Information in File $errorFile - Please report this file to one of following link if possible (any one). - https://sourceforge.net/p/dex2jar/tickets/ - https://bitbucket.org/pxb1988/dex2jar/issues - https://github.com/pxb1988/dex2jar/issues - dex2jar@googlegroups.com - """.trimIndent() - ) - handler.dump(errorFile, emptyArray()) - } - } - - /** A modified version of `xyz.nulldev.androidcompat.pm.InstalledPackage.info` */ - fun getPackageInfo(apkFilePath: String): PackageInfo { - val apk = File(apkFilePath) - return ApkParsers.getMetaInfo(apk).toPackageInfo(apk).apply { - val parsed = ApkFile(apk) - val dbFactory = DocumentBuilderFactory.newInstance() - val dBuilder = dbFactory.newDocumentBuilder() - val doc = parsed.manifestXml.byteInputStream().use { - dBuilder.parse(it) - } - - logger.debug(parsed.manifestXml) - - applicationInfo.metaData = Bundle().apply { - val appTag = doc.getElementsByTagName("application").item(0) - - appTag?.childNodes?.toList() - .orEmpty() - .asSequence() - .filter { - it.nodeType == Node.ELEMENT_NODE - }.map { - it as Element - }.filter { - it.tagName == "meta-data" - }.forEach { - putString( - it.attributes.getNamedItem("android:name").nodeValue, - it.attributes.getNamedItem("android:value").nodeValue - ) - } - } - - signatures = ( - parsed.apkSingers.flatMap { it.certificateMetas } - /*+ parsed.apkV2Singers.flatMap { it.certificateMetas }*/ - ) // Blocked by: https://github.com/hsiafan/apk-parser/issues/72 - .map { Signature(it.data) }.toTypedArray() - } - } - - fun getSignatureHash(pkgInfo: PackageInfo): String? { - val signatures = pkgInfo.signatures - return if (signatures != null && signatures.isNotEmpty()) { - Hash.sha256(signatures.first().toByteArray()) - } else { - null - } - } - - /** - * loads the extension main class called $className from the jar located at $jarPath - * It may return an instance of HttpSource or SourceFactory depending on the extension. - */ - fun loadExtensionSources(jarPath: String, className: String): Any { - val classLoader = URLClassLoader(arrayOf(URL("file:$jarPath"))) - val classToLoad = Class.forName(className, false, classLoader) - return classToLoad.getDeclaredConstructor().newInstance() - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/anime/model/dataclass/AnimeDataClass.kt b/server/src/main/kotlin/suwayomi/tachidesk/anime/model/dataclass/AnimeDataClass.kt deleted file mode 100644 index 7dfcebe..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/anime/model/dataclass/AnimeDataClass.kt +++ /dev/null @@ -1,36 +0,0 @@ -package suwayomi.tachidesk.anime.model.dataclass - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import suwayomi.tachidesk.anime.model.table.AnimeStatus - -data class AnimeDataClass( - val id: Int, - val sourceId: String, - - val url: String, - val title: String, - val thumbnailUrl: String? = null, - - val initialized: Boolean = false, - - val artist: String? = null, - val author: String? = null, - val description: String? = null, - val genre: String? = null, - val status: String = AnimeStatus.UNKNOWN.name, - val inLibrary: Boolean = false, - val source: AnimeSourceDataClass? = null, - - val freshData: Boolean = false -) - -data class PagedAnimeListDataClass( - val mangaList: List, - val hasNextPage: Boolean -) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/anime/model/dataclass/AnimeExtensionDataClass.kt b/server/src/main/kotlin/suwayomi/tachidesk/anime/model/dataclass/AnimeExtensionDataClass.kt deleted file mode 100644 index c8b2839..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/anime/model/dataclass/AnimeExtensionDataClass.kt +++ /dev/null @@ -1,24 +0,0 @@ -package suwayomi.tachidesk.anime.model.dataclass - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -data class AnimeExtensionDataClass( - val apkName: String, - val iconUrl: String, - - val name: String, - val pkgName: String, - val versionName: String, - val versionCode: Int, - val lang: String, - val isNsfw: Boolean, - - val installed: Boolean, - val hasUpdate: Boolean, - val obsolete: Boolean, -) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/anime/model/dataclass/AnimeSourceDataClass.kt b/server/src/main/kotlin/suwayomi/tachidesk/anime/model/dataclass/AnimeSourceDataClass.kt deleted file mode 100644 index 5403601..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/anime/model/dataclass/AnimeSourceDataClass.kt +++ /dev/null @@ -1,16 +0,0 @@ -package suwayomi.tachidesk.anime.model.dataclass - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -data class AnimeSourceDataClass( - val id: String, - val name: String?, - val lang: String?, - val iconUrl: String?, - val supportsLatest: Boolean? -) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/anime/model/dataclass/EpisodeDataClass.kt b/server/src/main/kotlin/suwayomi/tachidesk/anime/model/dataclass/EpisodeDataClass.kt deleted file mode 100644 index 91f9718..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/anime/model/dataclass/EpisodeDataClass.kt +++ /dev/null @@ -1,35 +0,0 @@ -package suwayomi.tachidesk.anime.model.dataclass - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -data class EpisodeDataClass( - val url: String, - val name: String, - val uploadDate: Long, - val episodeNumber: Float, - val scanlator: String?, - val animeId: Int, - - /** chapter is read */ - val read: Boolean, - - /** chapter is bookmarked */ - val bookmarked: Boolean, - - /** last read page, zero means not read/no data */ - val lastPageRead: Int, - - /** this chapter's index, starts with 1 */ - val index: Int, - - /** total episode count, used to calculate if there's a next and prev episode */ - val episodeCount: Int? = null, - - /** used to construct pages in the front-end */ - val linkUrl: String? = null, -) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/anime/model/table/AnimeExtensionTable.kt b/server/src/main/kotlin/suwayomi/tachidesk/anime/model/table/AnimeExtensionTable.kt deleted file mode 100644 index 6ccd8a5..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/anime/model/table/AnimeExtensionTable.kt +++ /dev/null @@ -1,31 +0,0 @@ -package suwayomi.tachidesk.anime.model.table - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import org.jetbrains.exposed.dao.id.IntIdTable - -object AnimeExtensionTable : IntIdTable() { - val apkName = varchar("apk_name", 1024) - - // default is the local source icon from tachiyomi - val iconUrl = varchar("icon_url", 2048) - .default("https://raw.githubusercontent.com/tachiyomiorg/tachiyomi/64ba127e7d43b1d7e6d58a6f5c9b2bd5fe0543f7/app/src/main/res/mipmap-xxxhdpi/ic_local_source.webp") - - val name = varchar("name", 128) - val pkgName = varchar("pkg_name", 128) - val versionName = varchar("version_name", 16) - val versionCode = integer("version_code") - val lang = varchar("lang", 10) - val isNsfw = bool("is_nsfw") - - val isInstalled = bool("is_installed").default(false) - val hasUpdate = bool("has_update").default(false) - val isObsolete = bool("is_obsolete").default(false) - - val classFQName = varchar("class_name", 1024).default("") // fully qualified name -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/anime/model/table/AnimeSourceTable.kt b/server/src/main/kotlin/suwayomi/tachidesk/anime/model/table/AnimeSourceTable.kt deleted file mode 100644 index 77238a4..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/anime/model/table/AnimeSourceTable.kt +++ /dev/null @@ -1,18 +0,0 @@ -package suwayomi.tachidesk.anime.model.table - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import org.jetbrains.exposed.dao.id.IdTable - -object AnimeSourceTable : IdTable() { - override val id = long("id").entityId() - val name = varchar("name", 128) - val lang = varchar("lang", 10) - val extension = reference("extension", AnimeExtensionTable) - val partOfFactorySource = bool("part_of_factory_source").default(false) -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/anime/model/table/AnimeTable.kt b/server/src/main/kotlin/suwayomi/tachidesk/anime/model/table/AnimeTable.kt deleted file mode 100644 index c6018d6..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/anime/model/table/AnimeTable.kt +++ /dev/null @@ -1,65 +0,0 @@ -package suwayomi.tachidesk.anime.model.table - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import eu.kanade.tachiyomi.animesource.model.SAnime -import org.jetbrains.exposed.dao.id.IntIdTable -import org.jetbrains.exposed.sql.ResultRow -import suwayomi.tachidesk.manga.impl.MangaList.proxyThumbnailUrl -import suwayomi.tachidesk.manga.model.dataclass.MangaDataClass -import suwayomi.tachidesk.manga.model.table.MangaStatus.Companion - -object AnimeTable : IntIdTable() { - val url = varchar("url", 2048) - val title = varchar("title", 512) - val initialized = bool("initialized").default(false) - - val artist = varchar("artist", 64).nullable() - val author = varchar("author", 64).nullable() - val description = varchar("description", 4096).nullable() - val genre = varchar("genre", 1024).nullable() - - val status = integer("status").default(SAnime.UNKNOWN) - val thumbnail_url = varchar("thumbnail_url", 2048).nullable() - - val inLibrary = bool("in_library").default(false) - val defaultCategory = bool("default_category").default(true) - - // source is used by some ancestor of IntIdTable - val sourceReference = long("source") -} - -fun AnimeTable.toDataClass(mangaEntry: ResultRow) = - MangaDataClass( - mangaEntry[this.id].value, - mangaEntry[sourceReference].toString(), - - mangaEntry[url], - mangaEntry[title], - proxyThumbnailUrl(mangaEntry[this.id].value), - - mangaEntry[initialized], - - mangaEntry[artist], - mangaEntry[author], - mangaEntry[description], - mangaEntry[genre], - Companion.valueOf(mangaEntry[status]).name, - mangaEntry[inLibrary] - ) - -enum class AnimeStatus(val status: Int) { - UNKNOWN(0), - ONGOING(1), - COMPLETED(2), - LICENSED(3); - - companion object { - fun valueOf(value: Int): AnimeStatus = values().find { it.status == value } ?: UNKNOWN - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/anime/model/table/EpisodeTable.kt b/server/src/main/kotlin/suwayomi/tachidesk/anime/model/table/EpisodeTable.kt deleted file mode 100644 index ea8a404..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/anime/model/table/EpisodeTable.kt +++ /dev/null @@ -1,46 +0,0 @@ -package suwayomi.tachidesk.anime.model.table - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import org.jetbrains.exposed.dao.id.IntIdTable -import org.jetbrains.exposed.sql.ResultRow -import org.jetbrains.exposed.sql.select -import org.jetbrains.exposed.sql.transactions.transaction -import suwayomi.tachidesk.anime.model.dataclass.EpisodeDataClass - -object EpisodeTable : IntIdTable() { - val url = varchar("url", 2048) - val name = varchar("name", 512) - val date_upload = long("date_upload").default(0) - val episode_number = float("episode_number").default(-1f) - val scanlator = varchar("scanlator", 128).nullable() - - val isRead = bool("read").default(false) - val isBookmarked = bool("bookmark").default(false) - val lastPageRead = integer("last_page_read").default(0) - - // index is reserved by a function - val episodeIndex = integer("index") - - val anime = reference("anime", AnimeTable) -} - -fun EpisodeTable.toDataClass(episodeEntry: ResultRow) = - EpisodeDataClass( - episodeEntry[url], - episodeEntry[name], - episodeEntry[date_upload], - episodeEntry[episode_number], - episodeEntry[scanlator], - episodeEntry[anime].value, - episodeEntry[isRead], - episodeEntry[isBookmarked], - episodeEntry[lastPageRead], - episodeEntry[episodeIndex], - transaction { EpisodeTable.select { anime eq episodeEntry[anime] }.count().toInt() } - ) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/TachideskAPI.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/TachideskAPI.kt deleted file mode 100644 index 88421c6..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/TachideskAPI.kt +++ /dev/null @@ -1,466 +0,0 @@ -package suwayomi.tachidesk.manga - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import io.javalin.Javalin -import suwayomi.tachidesk.manga.impl.Category -import suwayomi.tachidesk.manga.impl.CategoryManga.addMangaToCategory -import suwayomi.tachidesk.manga.impl.CategoryManga.getCategoryMangaList -import suwayomi.tachidesk.manga.impl.CategoryManga.getMangaCategories -import suwayomi.tachidesk.manga.impl.CategoryManga.removeMangaFromCategory -import suwayomi.tachidesk.manga.impl.Chapter.getChapter -import suwayomi.tachidesk.manga.impl.Chapter.getChapterList -import suwayomi.tachidesk.manga.impl.Chapter.modifyChapter -import suwayomi.tachidesk.manga.impl.Chapter.modifyChapterMeta -import suwayomi.tachidesk.manga.impl.Library.addMangaToLibrary -import suwayomi.tachidesk.manga.impl.Library.getLibraryMangas -import suwayomi.tachidesk.manga.impl.Library.removeMangaFromLibrary -import suwayomi.tachidesk.manga.impl.Manga.getManga -import suwayomi.tachidesk.manga.impl.Manga.getMangaThumbnail -import suwayomi.tachidesk.manga.impl.Manga.modifyMangaMeta -import suwayomi.tachidesk.manga.impl.MangaList.getMangaList -import suwayomi.tachidesk.manga.impl.Page.getPageImage -import suwayomi.tachidesk.manga.impl.Search.sourceFilters -import suwayomi.tachidesk.manga.impl.Search.sourceGlobalSearch -import suwayomi.tachidesk.manga.impl.Search.sourceSearch -import suwayomi.tachidesk.manga.impl.Source.getSource -import suwayomi.tachidesk.manga.impl.Source.getSourceList -import suwayomi.tachidesk.manga.impl.backup.BackupFlags -import suwayomi.tachidesk.manga.impl.backup.legacy.LegacyBackupExport.createLegacyBackup -import suwayomi.tachidesk.manga.impl.backup.legacy.LegacyBackupImport.restoreLegacyBackup -import suwayomi.tachidesk.manga.impl.download.DownloadManager -import suwayomi.tachidesk.manga.impl.extension.Extension.getExtensionIcon -import suwayomi.tachidesk.manga.impl.extension.Extension.installExtension -import suwayomi.tachidesk.manga.impl.extension.Extension.uninstallExtension -import suwayomi.tachidesk.manga.impl.extension.Extension.updateExtension -import suwayomi.tachidesk.manga.impl.extension.ExtensionsList.getExtensionList -import suwayomi.tachidesk.server.JavalinSetup.future -import suwayomi.tachidesk.server.impl.About -import java.text.SimpleDateFormat -import java.util.Date - -object TachideskAPI { - fun defineEndpoints(app: Javalin) { - // list all extensions - app.get("/api/v1/extension/list") { ctx -> - ctx.json( - future { - getExtensionList() - } - ) - } - - // install extension identified with "pkgName" - app.get("/api/v1/extension/install/:pkgName") { ctx -> - val pkgName = ctx.pathParam("pkgName") - - ctx.json( - future { - installExtension(pkgName) - } - ) - } - - // update extension identified with "pkgName" - app.get("/api/v1/extension/update/:pkgName") { ctx -> - val pkgName = ctx.pathParam("pkgName") - - ctx.json( - future { - updateExtension(pkgName) - } - ) - } - - // uninstall extension identified with "pkgName" - app.get("/api/v1/extension/uninstall/:pkgName") { ctx -> - val pkgName = ctx.pathParam("pkgName") - - uninstallExtension(pkgName) - ctx.status(200) - } - - // icon for extension named `apkName` - app.get("/api/v1/extension/icon/:apkName") { ctx -> // TODO: move to pkgName - val apkName = ctx.pathParam("apkName") - - ctx.result( - future { getExtensionIcon(apkName) } - .thenApply { - ctx.header("content-type", it.second) - it.first - } - ) - } - - // list of sources - app.get("/api/v1/source/list") { ctx -> - ctx.json(getSourceList()) - } - - // fetch source with id `sourceId` - app.get("/api/v1/source/:sourceId") { ctx -> - val sourceId = ctx.pathParam("sourceId").toLong() - ctx.json(getSource(sourceId)) - } - - // popular mangas from source with id `sourceId` - app.get("/api/v1/source/:sourceId/popular/:pageNum") { ctx -> - val sourceId = ctx.pathParam("sourceId").toLong() - val pageNum = ctx.pathParam("pageNum").toInt() - ctx.json( - future { - getMangaList(sourceId, pageNum, popular = true) - } - ) - } - - // latest mangas from source with id `sourceId` - app.get("/api/v1/source/:sourceId/latest/:pageNum") { ctx -> - val sourceId = ctx.pathParam("sourceId").toLong() - val pageNum = ctx.pathParam("pageNum").toInt() - ctx.json( - future { - getMangaList(sourceId, pageNum, popular = false) - } - ) - } - - // get manga info - app.get("/api/v1/manga/:mangaId/") { ctx -> - val mangaId = ctx.pathParam("mangaId").toInt() - val onlineFetch = ctx.queryParam("onlineFetch", "false").toBoolean() - - ctx.json( - future { - getManga(mangaId, onlineFetch) - } - ) - } - - // manga thumbnail - app.get("api/v1/manga/:mangaId/thumbnail") { ctx -> - val mangaId = ctx.pathParam("mangaId").toInt() - - ctx.result( - future { getMangaThumbnail(mangaId) } - .thenApply { - ctx.header("content-type", it.second) - it.first - } - ) - } - - // list manga's categories - app.get("api/v1/manga/:mangaId/category/") { ctx -> - val mangaId = ctx.pathParam("mangaId").toInt() - ctx.json(getMangaCategories(mangaId)) - } - - // adds the manga to category - app.get("api/v1/manga/:mangaId/category/:categoryId") { ctx -> - val mangaId = ctx.pathParam("mangaId").toInt() - val categoryId = ctx.pathParam("categoryId").toInt() - addMangaToCategory(mangaId, categoryId) - ctx.status(200) - } - - // removes the manga from the category - app.delete("api/v1/manga/:mangaId/category/:categoryId") { ctx -> - val mangaId = ctx.pathParam("mangaId").toInt() - val categoryId = ctx.pathParam("categoryId").toInt() - removeMangaFromCategory(mangaId, categoryId) - ctx.status(200) - } - - // get chapter list when showing a manga - app.get("/api/v1/manga/:mangaId/chapters") { ctx -> - val mangaId = ctx.pathParam("mangaId").toInt() - - val onlineFetch = ctx.queryParam("onlineFetch")?.toBoolean() - - ctx.json(future { getChapterList(mangaId, onlineFetch) }) - } - - // used to modify a manga's meta paramaters - app.patch("/api/v1/manga/:mangaId/meta") { ctx -> - val mangaId = ctx.pathParam("mangaId").toInt() - - val key = ctx.formParam("key")!! - val value = ctx.formParam("value")!! - - modifyMangaMeta(mangaId, key, value) - - ctx.status(200) - } - - // used to display a chapter, get a chapter in order to show it's pages - app.get("/api/v1/manga/:mangaId/chapter/:chapterIndex") { ctx -> - val chapterIndex = ctx.pathParam("chapterIndex").toInt() - val mangaId = ctx.pathParam("mangaId").toInt() - ctx.json(future { getChapter(chapterIndex, mangaId) }) - } - - // used to modify a chapter's parameters - app.patch("/api/v1/manga/:mangaId/chapter/:chapterIndex") { ctx -> - val chapterIndex = ctx.pathParam("chapterIndex").toInt() - val mangaId = ctx.pathParam("mangaId").toInt() - - val read = ctx.formParam("read")?.toBoolean() - val bookmarked = ctx.formParam("bookmarked")?.toBoolean() - val markPrevRead = ctx.formParam("markPrevRead")?.toBoolean() - val lastPageRead = ctx.formParam("lastPageRead")?.toInt() - - modifyChapter(mangaId, chapterIndex, read, bookmarked, markPrevRead, lastPageRead) - - ctx.status(200) - } - - // used to modify a chapter's meta paramaters - app.patch("/api/v1/manga/:mangaId/chapter/:chapterIndex/meta") { ctx -> - val chapterIndex = ctx.pathParam("chapterIndex").toInt() - val mangaId = ctx.pathParam("mangaId").toInt() - - val key = ctx.formParam("key")!! - val value = ctx.formParam("value")!! - - modifyChapterMeta(mangaId, chapterIndex, key, value) - - ctx.status(200) - } - - // get page at index "index" - app.get("/api/v1/manga/:mangaId/chapter/:chapterIndex/page/:index") { ctx -> - val mangaId = ctx.pathParam("mangaId").toInt() - val chapterIndex = ctx.pathParam("chapterIndex").toInt() - val index = ctx.pathParam("index").toInt() - - ctx.result( - future { getPageImage(mangaId, chapterIndex, index) } - .thenApply { - ctx.header("content-type", it.second) - it.first - } - ) - } - - // submit a chapter for download - app.put("/api/v1/manga/:mangaId/chapter/:chapterIndex/download") { ctx -> - // TODO - } - - // cancel a chapter download - app.delete("/api/v1/manga/:mangaId/chapter/:chapterIndex/download") { ctx -> - // TODO - } - - // global search, Not implemented yet - app.get("/api/v1/search/:searchTerm") { ctx -> - val searchTerm = ctx.pathParam("searchTerm") - ctx.json(sourceGlobalSearch(searchTerm)) - } - - // single source search - app.get("/api/v1/source/:sourceId/search/:searchTerm/:pageNum") { ctx -> - val sourceId = ctx.pathParam("sourceId").toLong() - val searchTerm = ctx.pathParam("searchTerm") - val pageNum = ctx.pathParam("pageNum").toInt() - ctx.json(future { sourceSearch(sourceId, searchTerm, pageNum) }) - } - - // source filter list - app.get("/api/v1/source/:sourceId/filters/") { ctx -> - val sourceId = ctx.pathParam("sourceId").toLong() - ctx.json(sourceFilters(sourceId)) - } - - // adds the manga to library - app.get("api/v1/manga/:mangaId/library") { ctx -> - val mangaId = ctx.pathParam("mangaId").toInt() - - ctx.result( - future { addMangaToLibrary(mangaId) } - ) - } - - // removes the manga from the library - app.delete("api/v1/manga/:mangaId/library") { ctx -> - val mangaId = ctx.pathParam("mangaId").toInt() - - ctx.result( - future { removeMangaFromLibrary(mangaId) } - ) - } - - // lists mangas that have no category assigned - app.get("/api/v1/library/") { ctx -> - ctx.json(getLibraryMangas()) - } - - // category list - app.get("/api/v1/category/") { ctx -> - ctx.json(Category.getCategoryList()) - } - - // category create - app.post("/api/v1/category/") { ctx -> - val name = ctx.formParam("name")!! - Category.createCategory(name) - ctx.status(200) - } - - // returns some static info of the current app build - app.get("/api/v1/about/") { ctx -> - ctx.json(About.getAbout()) - } - - // category modification - app.patch("/api/v1/category/:categoryId") { ctx -> - val categoryId = ctx.pathParam("categoryId").toInt() - val name = ctx.formParam("name") - val isDefault = ctx.formParam("default")?.toBoolean() - Category.updateCategory(categoryId, name, isDefault) - ctx.status(200) - } - - // category re-ordering - app.patch("/api/v1/category/:categoryId/reorder") { ctx -> - val categoryId = ctx.pathParam("categoryId").toInt() - val from = ctx.formParam("from")!!.toInt() - val to = ctx.formParam("to")!!.toInt() - Category.reorderCategory(categoryId, from, to) - ctx.status(200) - } - - // category delete - app.delete("/api/v1/category/:categoryId") { ctx -> - val categoryId = ctx.pathParam("categoryId").toInt() - Category.removeCategory(categoryId) - ctx.status(200) - } - - // returns the manga list associated with a category - app.get("/api/v1/category/:categoryId") { ctx -> - val categoryId = ctx.pathParam("categoryId").toInt() - ctx.json(getCategoryMangaList(categoryId)) - } - - // expects a Tachiyomi legacy backup json in the body - app.post("/api/v1/backup/legacy/import") { ctx -> - ctx.result( - future { - restoreLegacyBackup(ctx.bodyAsInputStream()) - } - ) - } - - // expects a Tachiyomi legacy backup json as a file upload, the file must be named "backup.json" - app.post("/api/v1/backup/legacy/import/file") { ctx -> - ctx.result( - future { - restoreLegacyBackup(ctx.uploadedFile("backup.json")!!.content) - } - ) - } - - // returns a Tachiyomi legacy backup json created from the current database as a json body - app.get("/api/v1/backup/legacy/export") { ctx -> - ctx.contentType("application/json") - ctx.result( - future { - createLegacyBackup( - BackupFlags( - includeManga = true, - includeCategories = true, - includeChapters = true, - includeTracking = true, - includeHistory = true, - ) - ) - } - ) - } - - // returns a Tachiyomi legacy backup json created from the current database as a file - app.get("/api/v1/backup/legacy/export/file") { ctx -> - ctx.contentType("application/json") - val sdf = SimpleDateFormat("yyyy-MM-dd_HH-mm") - val currentDate = sdf.format(Date()) - - ctx.header("Content-Disposition", "attachment; filename=\"tachidesk_$currentDate.json\"") - ctx.result( - future { - createLegacyBackup( - BackupFlags( - includeManga = true, - includeCategories = true, - includeChapters = true, - includeTracking = true, - includeHistory = true, - ) - ) - } - ) - } - - // Download queue stats - app.ws("/api/v1/downloads") { ws -> - ws.onConnect { ctx -> - DownloadManager.addClient(ctx) - DownloadManager.notifyClient(ctx) - } - ws.onMessage { ctx -> - DownloadManager.handleRequest(ctx) - } - ws.onClose { ctx -> - DownloadManager.removeClient(ctx) - } - } - - // Start the downloader - app.get("/api/v1/downloads/start") { ctx -> - DownloadManager.start() - - ctx.status(200) - } - - // Stop the downloader - app.get("/api/v1/downloads/stop") { ctx -> - DownloadManager.stop() - - ctx.status(200) - } - - // clear download queue - app.get("/api/v1/downloads/clear") { ctx -> - DownloadManager.clear() - - ctx.status(200) - } - - // Queue chapter for download - app.get("/api/v1/download/:mangaId/chapter/:chapterIndex") { ctx -> - val chapterIndex = ctx.pathParam("chapterIndex").toInt() - val mangaId = ctx.pathParam("mangaId").toInt() - - DownloadManager.enqueue(chapterIndex, mangaId) - - ctx.status(200) - } - - // delete chapter from download queue - app.delete("/api/v1/download/:mangaId/chapter/:chapterIndex") { ctx -> - val chapterIndex = ctx.pathParam("chapterIndex").toInt() - val mangaId = ctx.pathParam("mangaId").toInt() - - DownloadManager.unqueue(chapterIndex, mangaId) - - ctx.status(200) - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Category.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Category.kt deleted file mode 100644 index eacfb8f..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Category.kt +++ /dev/null @@ -1,78 +0,0 @@ -package suwayomi.tachidesk.manga.impl - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import org.jetbrains.exposed.sql.SortOrder -import org.jetbrains.exposed.sql.deleteWhere -import org.jetbrains.exposed.sql.insert -import org.jetbrains.exposed.sql.select -import org.jetbrains.exposed.sql.selectAll -import org.jetbrains.exposed.sql.transactions.transaction -import org.jetbrains.exposed.sql.update -import suwayomi.tachidesk.manga.impl.CategoryManga.removeMangaFromCategory -import suwayomi.tachidesk.manga.model.dataclass.CategoryDataClass -import suwayomi.tachidesk.manga.model.table.CategoryMangaTable -import suwayomi.tachidesk.manga.model.table.CategoryTable -import suwayomi.tachidesk.manga.model.table.toDataClass - -object Category { - /** - * The new category will be placed at the end of the list - */ - fun createCategory(name: String) { - transaction { - val count = CategoryTable.selectAll().count() - if (CategoryTable.select { CategoryTable.name eq name }.firstOrNull() == null) - CategoryTable.insert { - it[CategoryTable.name] = name - it[CategoryTable.order] = count.toInt() + 1 - } - } - } - - fun updateCategory(categoryId: Int, name: String?, isDefault: Boolean?) { - transaction { - CategoryTable.update({ CategoryTable.id eq categoryId }) { - if (name != null) it[CategoryTable.name] = name - if (isDefault != null) it[CategoryTable.isDefault] = isDefault - } - } - } - - /** - * Move the category from position `from` to `to` - */ - fun reorderCategory(categoryId: Int, from: Int, to: Int) { - transaction { - val categories = CategoryTable.selectAll().orderBy(CategoryTable.order to SortOrder.ASC).toMutableList() - categories.add(to - 1, categories.removeAt(from - 1)) - categories.forEachIndexed { index, cat -> - CategoryTable.update({ CategoryTable.id eq cat[CategoryTable.id].value }) { - it[CategoryTable.order] = index + 1 - } - } - } - } - - fun removeCategory(categoryId: Int) { - transaction { - CategoryMangaTable.select { CategoryMangaTable.category eq categoryId }.forEach { - removeMangaFromCategory(it[CategoryMangaTable.manga].value, categoryId) - } - CategoryTable.deleteWhere { CategoryTable.id eq categoryId } - } - } - - fun getCategoryList(): List { - return transaction { - CategoryTable.selectAll().orderBy(CategoryTable.order to SortOrder.ASC).map { - CategoryTable.toDataClass(it) - } - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/CategoryManga.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/CategoryManga.kt deleted file mode 100644 index f1142c6..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/CategoryManga.kt +++ /dev/null @@ -1,72 +0,0 @@ -package suwayomi.tachidesk.manga.impl - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import org.jetbrains.exposed.sql.SortOrder -import org.jetbrains.exposed.sql.and -import org.jetbrains.exposed.sql.deleteWhere -import org.jetbrains.exposed.sql.insert -import org.jetbrains.exposed.sql.select -import org.jetbrains.exposed.sql.transactions.transaction -import org.jetbrains.exposed.sql.update -import suwayomi.tachidesk.manga.model.dataclass.CategoryDataClass -import suwayomi.tachidesk.manga.model.dataclass.MangaDataClass -import suwayomi.tachidesk.manga.model.table.CategoryMangaTable -import suwayomi.tachidesk.manga.model.table.CategoryTable -import suwayomi.tachidesk.manga.model.table.MangaTable -import suwayomi.tachidesk.manga.model.table.toDataClass - -object CategoryManga { - fun addMangaToCategory(mangaId: Int, categoryId: Int) { - transaction { - if (CategoryMangaTable.select { (CategoryMangaTable.category eq categoryId) and (CategoryMangaTable.manga eq mangaId) }.firstOrNull() == null) { - CategoryMangaTable.insert { - it[CategoryMangaTable.category] = categoryId - it[CategoryMangaTable.manga] = mangaId - } - - MangaTable.update({ MangaTable.id eq mangaId }) { - it[MangaTable.defaultCategory] = false - } - } - } - } - - fun removeMangaFromCategory(mangaId: Int, categoryId: Int) { - transaction { - CategoryMangaTable.deleteWhere { (CategoryMangaTable.category eq categoryId) and (CategoryMangaTable.manga eq mangaId) } - if (CategoryMangaTable.select { CategoryMangaTable.manga eq mangaId }.count() == 0L) { - MangaTable.update({ MangaTable.id eq mangaId }) { - it[MangaTable.defaultCategory] = true - } - } - } - } - - /** - * list of mangas that belong to a category - */ - fun getCategoryMangaList(categoryId: Int): List { - return transaction { - CategoryMangaTable.innerJoin(MangaTable).select { CategoryMangaTable.category eq categoryId }.map { - MangaTable.toDataClass(it) - } - } - } - - /** - * list of categories that a manga belongs to - */ - fun getMangaCategories(mangaId: Int): List { - return transaction { - CategoryMangaTable.innerJoin(CategoryTable).select { CategoryMangaTable.manga eq mangaId }.orderBy(CategoryTable.order to SortOrder.ASC).map { - CategoryTable.toDataClass(it) - } - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Chapter.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Chapter.kt deleted file mode 100644 index 48f6f9c..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Chapter.kt +++ /dev/null @@ -1,263 +0,0 @@ -package suwayomi.tachidesk.manga.impl - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import eu.kanade.tachiyomi.source.model.SChapter -import eu.kanade.tachiyomi.source.model.SManga -import org.jetbrains.exposed.dao.id.EntityID -import org.jetbrains.exposed.sql.SortOrder.DESC -import org.jetbrains.exposed.sql.and -import org.jetbrains.exposed.sql.deleteWhere -import org.jetbrains.exposed.sql.insert -import org.jetbrains.exposed.sql.select -import org.jetbrains.exposed.sql.transactions.transaction -import org.jetbrains.exposed.sql.update -import suwayomi.tachidesk.manga.impl.Manga.getManga -import suwayomi.tachidesk.manga.impl.util.GetHttpSource.getHttpSource -import suwayomi.tachidesk.manga.impl.util.lang.awaitSingle -import suwayomi.tachidesk.manga.model.dataclass.ChapterDataClass -import suwayomi.tachidesk.manga.model.table.ChapterMetaTable -import suwayomi.tachidesk.manga.model.table.ChapterTable -import suwayomi.tachidesk.manga.model.table.MangaTable -import suwayomi.tachidesk.manga.model.table.PageTable -import suwayomi.tachidesk.manga.model.table.toDataClass -import java.time.Instant - -object Chapter { - /** get chapter list when showing a manga */ - suspend fun getChapterList(mangaId: Int, onlineFetch: Boolean?): List { - return if (onlineFetch == true) { - getSourceChapters(mangaId) - } else { - transaction { - ChapterTable.select { ChapterTable.manga eq mangaId }.orderBy(ChapterTable.chapterIndex to DESC) - .map { - ChapterTable.toDataClass(it) - } - }.ifEmpty { - // If it was explicitly set to offline dont grab chapters - if (onlineFetch == null) { - getSourceChapters(mangaId) - } else emptyList() - } - } - } - - private suspend fun getSourceChapters(mangaId: Int): List { - val mangaDetails = getManga(mangaId) - val source = getHttpSource(mangaDetails.sourceId.toLong()) - val chapterList = source.fetchChapterList( - SManga.create().apply { - title = mangaDetails.title - url = mangaDetails.url - } - ).awaitSingle() - - val chapterCount = chapterList.count() - - transaction { - chapterList.reversed().forEachIndexed { index, fetchedChapter -> - val chapterEntry = ChapterTable.select { ChapterTable.url eq fetchedChapter.url }.firstOrNull() - if (chapterEntry == null) { - ChapterTable.insert { - it[url] = fetchedChapter.url - it[name] = fetchedChapter.name - it[date_upload] = fetchedChapter.date_upload - it[chapter_number] = fetchedChapter.chapter_number - it[scanlator] = fetchedChapter.scanlator - - it[chapterIndex] = index + 1 - it[manga] = mangaId - } - } else { - ChapterTable.update({ ChapterTable.url eq fetchedChapter.url }) { - it[name] = fetchedChapter.name - it[date_upload] = fetchedChapter.date_upload - it[chapter_number] = fetchedChapter.chapter_number - it[scanlator] = fetchedChapter.scanlator - - it[chapterIndex] = index + 1 - it[manga] = mangaId - } - } - } - } - - // clear any orphaned chapters that are in the db but not in `chapterList` - val dbChapterCount = transaction { ChapterTable.select { ChapterTable.manga eq mangaId }.count() } - if (dbChapterCount > chapterCount) { // we got some clean up due - val dbChapterList = transaction { ChapterTable.select { ChapterTable.manga eq mangaId }.toList() } - - dbChapterList.forEach { - if (it[ChapterTable.chapterIndex] >= chapterList.size || - chapterList[it[ChapterTable.chapterIndex] - 1].url != it[ChapterTable.url] - ) { - transaction { - PageTable.deleteWhere { PageTable.chapter eq it[ChapterTable.id] } - ChapterTable.deleteWhere { ChapterTable.id eq it[ChapterTable.id] } - } - } - } - } - - val dbChapterMap = transaction { - ChapterTable.select { ChapterTable.manga eq mangaId } - .associateBy({ it[ChapterTable.url] }, { it }) - } - - return chapterList.mapIndexed { index, it -> - - val dbChapter = dbChapterMap.getValue(it.url) - - ChapterDataClass( - it.url, - it.name, - it.date_upload, - it.chapter_number, - it.scanlator, - mangaId, - - dbChapter[ChapterTable.isRead], - dbChapter[ChapterTable.isBookmarked], - dbChapter[ChapterTable.lastPageRead], - dbChapter[ChapterTable.lastReadAt], - - chapterCount - index, - dbChapter[ChapterTable.isDownloaded], - - dbChapter[ChapterTable.pageCount], - - chapterList.size, - meta = getChapterMetaMap(dbChapter[ChapterTable.id]) - ) - } - } - - /** used to display a chapter, get a chapter in order to show it's pages */ - suspend fun getChapter(chapterIndex: Int, mangaId: Int): ChapterDataClass { - val chapterEntry = transaction { - ChapterTable.select { - (ChapterTable.chapterIndex eq chapterIndex) and (ChapterTable.manga eq mangaId) - }.first() - } - - return if (!chapterEntry[ChapterTable.isDownloaded]) { - val mangaEntry = transaction { MangaTable.select { MangaTable.id eq mangaId }.first() } - val source = getHttpSource(mangaEntry[MangaTable.sourceReference]) - - val pageList = source.fetchPageList( - SChapter.create().apply { - url = chapterEntry[ChapterTable.url] - name = chapterEntry[ChapterTable.name] - } - ).awaitSingle() - - val chapterId = chapterEntry[ChapterTable.id].value - val chapterCount = transaction { ChapterTable.select { ChapterTable.manga eq mangaId }.count() } - - // update page list for this chapter - transaction { - pageList.forEach { page -> - val pageEntry = transaction { PageTable.select { (PageTable.chapter eq chapterId) and (PageTable.index eq page.index) }.firstOrNull() } - if (pageEntry == null) { - PageTable.insert { - it[index] = page.index - it[url] = page.url - it[imageUrl] = page.imageUrl - it[chapter] = chapterId - } - } else { - PageTable.update({ (PageTable.chapter eq chapterId) and (PageTable.index eq page.index) }) { - it[url] = page.url - it[imageUrl] = page.imageUrl - } - } - } - } - - val pageCount = pageList.count() - - transaction { - ChapterTable.update({ (ChapterTable.manga eq mangaId) and (ChapterTable.chapterIndex eq chapterIndex) }) { - it[ChapterTable.pageCount] = pageCount - } - } - return ChapterDataClass( - chapterEntry[ChapterTable.url], - chapterEntry[ChapterTable.name], - chapterEntry[ChapterTable.date_upload], - chapterEntry[ChapterTable.chapter_number], - chapterEntry[ChapterTable.scanlator], - mangaId, - chapterEntry[ChapterTable.isRead], - chapterEntry[ChapterTable.isBookmarked], - chapterEntry[ChapterTable.lastPageRead], - chapterEntry[ChapterTable.lastReadAt], - - chapterEntry[ChapterTable.chapterIndex], - chapterEntry[ChapterTable.isDownloaded], - pageCount, - chapterCount.toInt(), - getChapterMetaMap(chapterEntry[ChapterTable.id]) - ) - } else { - ChapterTable.toDataClass(chapterEntry) - } - } - - fun modifyChapter(mangaId: Int, chapterIndex: Int, isRead: Boolean?, isBookmarked: Boolean?, markPrevRead: Boolean?, lastPageRead: Int?) { - transaction { - if (listOf(isRead, isBookmarked, lastPageRead).any { it != null }) { - ChapterTable.update({ (ChapterTable.manga eq mangaId) and (ChapterTable.chapterIndex eq chapterIndex) }) { update -> - isRead?.also { - update[ChapterTable.isRead] = it - } - isBookmarked?.also { - update[ChapterTable.isBookmarked] = it - } - lastPageRead?.also { - update[ChapterTable.lastPageRead] = it - update[ChapterTable.lastReadAt] = Instant.now().epochSecond - } - } - } - - markPrevRead?.let { - ChapterTable.update({ (ChapterTable.manga eq mangaId) and (ChapterTable.chapterIndex less chapterIndex) }) { - it[ChapterTable.isRead] = markPrevRead - } - } - } - } - - fun getChapterMetaMap(chapter: EntityID): Map { - return transaction { - ChapterMetaTable.select { ChapterMetaTable.ref eq chapter } - .associate { it[ChapterMetaTable.key] to it[ChapterMetaTable.value] } - } - } - - fun modifyChapterMeta(mangaId: Int, chapterIndex: Int, key: String, value: String) { - transaction { - val chapter = ChapterTable.select { (ChapterTable.manga eq mangaId) and (ChapterTable.chapterIndex eq chapterIndex) } - .first()[ChapterTable.id] - val meta = transaction { ChapterMetaTable.select { (ChapterMetaTable.ref eq chapter) and (ChapterMetaTable.key eq key) } }.firstOrNull() - if (meta == null) { - ChapterMetaTable.insert { - it[ChapterMetaTable.key] = key - it[ChapterMetaTable.value] = value - it[ChapterMetaTable.ref] = chapter - } - } else { - ChapterMetaTable.update { - it[ChapterMetaTable.value] = value - } - } - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Library.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Library.kt deleted file mode 100644 index ff1ec16..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Library.kt +++ /dev/null @@ -1,68 +0,0 @@ -package suwayomi.tachidesk.manga.impl - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import org.jetbrains.exposed.sql.and -import org.jetbrains.exposed.sql.deleteWhere -import org.jetbrains.exposed.sql.insert -import org.jetbrains.exposed.sql.select -import org.jetbrains.exposed.sql.transactions.transaction -import org.jetbrains.exposed.sql.update -import suwayomi.tachidesk.manga.impl.Manga.getManga -import suwayomi.tachidesk.manga.model.dataclass.MangaDataClass -import suwayomi.tachidesk.manga.model.table.CategoryMangaTable -import suwayomi.tachidesk.manga.model.table.CategoryTable -import suwayomi.tachidesk.manga.model.table.MangaTable -import suwayomi.tachidesk.manga.model.table.toDataClass - -object Library { - // TODO: `Category.isLanding` is to handle the default categories a new library manga gets, -// ..implement that shit at some time... -// ..also Consider to rename it to `isDefault` - suspend fun addMangaToLibrary(mangaId: Int) { - val manga = getManga(mangaId) - if (!manga.inLibrary) { - transaction { - val defaultCategories = CategoryTable.select { CategoryTable.isDefault eq true }.toList() - - MangaTable.update({ MangaTable.id eq manga.id }) { - it[MangaTable.inLibrary] = true - it[MangaTable.defaultCategory] = defaultCategories.isEmpty() - } - - defaultCategories.forEach { category -> - CategoryMangaTable.insert { - it[CategoryMangaTable.category] = category[CategoryTable.id].value - it[CategoryMangaTable.manga] = mangaId - } - } - } - } - } - - suspend fun removeMangaFromLibrary(mangaId: Int) { - val manga = getManga(mangaId) - if (manga.inLibrary) { - transaction { - MangaTable.update({ MangaTable.id eq manga.id }) { - it[inLibrary] = false - it[defaultCategory] = true - } - CategoryMangaTable.deleteWhere { CategoryMangaTable.manga eq mangaId } - } - } - } - - fun getLibraryMangas(): List { - return transaction { - MangaTable.select { (MangaTable.inLibrary eq true) and (MangaTable.defaultCategory eq true) }.map { - MangaTable.toDataClass(it) - } - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Manga.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Manga.kt deleted file mode 100644 index e2139b4..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Manga.kt +++ /dev/null @@ -1,171 +0,0 @@ -package suwayomi.tachidesk.manga.impl - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.source.model.SManga -import org.jetbrains.exposed.dao.id.EntityID -import org.jetbrains.exposed.sql.and -import org.jetbrains.exposed.sql.insert -import org.jetbrains.exposed.sql.select -import org.jetbrains.exposed.sql.transactions.transaction -import org.jetbrains.exposed.sql.update -import org.kodein.di.DI -import org.kodein.di.conf.global -import org.kodein.di.instance -import suwayomi.tachidesk.manga.impl.MangaList.proxyThumbnailUrl -import suwayomi.tachidesk.manga.impl.Source.getSource -import suwayomi.tachidesk.manga.impl.util.GetHttpSource.getHttpSource -import suwayomi.tachidesk.manga.impl.util.lang.awaitSingle -import suwayomi.tachidesk.manga.impl.util.network.await -import suwayomi.tachidesk.manga.impl.util.storage.CachedImageResponse.clearCachedImage -import suwayomi.tachidesk.manga.impl.util.storage.CachedImageResponse.getCachedImageResponse -import suwayomi.tachidesk.manga.model.dataclass.MangaDataClass -import suwayomi.tachidesk.manga.model.table.MangaMetaTable -import suwayomi.tachidesk.manga.model.table.MangaStatus -import suwayomi.tachidesk.manga.model.table.MangaTable -import suwayomi.tachidesk.server.ApplicationDirs -import java.io.InputStream - -object Manga { - private fun truncate(text: String?, maxLength: Int): String? { - return if (text?.length ?: 0 > maxLength) - text?.take(maxLength - 3) + "..." - else - text - } - - suspend fun getManga(mangaId: Int, onlineFetch: Boolean = false): MangaDataClass { - var mangaEntry = transaction { MangaTable.select { MangaTable.id eq mangaId }.first() } - - return if (mangaEntry[MangaTable.initialized] && !onlineFetch) { - MangaDataClass( - mangaId, - mangaEntry[MangaTable.sourceReference].toString(), - - mangaEntry[MangaTable.url], - mangaEntry[MangaTable.title], - proxyThumbnailUrl(mangaId), - - true, - - mangaEntry[MangaTable.artist], - mangaEntry[MangaTable.author], - mangaEntry[MangaTable.description], - mangaEntry[MangaTable.genre], - MangaStatus.valueOf(mangaEntry[MangaTable.status]).name, - mangaEntry[MangaTable.inLibrary], - getSource(mangaEntry[MangaTable.sourceReference]), - getMangaMetaMap(mangaEntry[MangaTable.id]), - false - ) - } else { // initialize manga - val source = getHttpSource(mangaEntry[MangaTable.sourceReference]) - val fetchedManga = source.fetchMangaDetails( - SManga.create().apply { - url = mangaEntry[MangaTable.url] - title = mangaEntry[MangaTable.title] - } - ).awaitSingle() - - transaction { - MangaTable.update({ MangaTable.id eq mangaId }) { - - it[MangaTable.initialized] = true - - it[MangaTable.artist] = fetchedManga.artist - it[MangaTable.author] = fetchedManga.author - it[MangaTable.description] = truncate(fetchedManga.description, 4096) - it[MangaTable.genre] = fetchedManga.genre - it[MangaTable.status] = fetchedManga.status - if (fetchedManga.thumbnail_url != null && fetchedManga.thumbnail_url.orEmpty().isNotEmpty()) - it[MangaTable.thumbnail_url] = fetchedManga.thumbnail_url - } - } - - clearMangaThumbnail(mangaId) - - mangaEntry = transaction { MangaTable.select { MangaTable.id eq mangaId }.first() } - - MangaDataClass( - mangaId, - mangaEntry[MangaTable.sourceReference].toString(), - - mangaEntry[MangaTable.url], - mangaEntry[MangaTable.title], - proxyThumbnailUrl(mangaId), - - true, - - fetchedManga.artist, - fetchedManga.author, - fetchedManga.description, - fetchedManga.genre, - MangaStatus.valueOf(fetchedManga.status).name, - mangaEntry[MangaTable.inLibrary], - getSource(mangaEntry[MangaTable.sourceReference]), - getMangaMetaMap(mangaEntry[MangaTable.id]), - true - ) - } - } - - fun getMangaMetaMap(manga: EntityID): Map { - return transaction { - MangaMetaTable.select { MangaMetaTable.ref eq manga } - .associate { it[MangaMetaTable.key] to it[MangaMetaTable.value] } - } - } - - fun modifyMangaMeta(mangaId: Int, key: String, value: String) { - transaction { - val manga = MangaMetaTable.select { (MangaTable.id eq mangaId) } - .first()[MangaTable.id] - val meta = transaction { MangaMetaTable.select { (MangaMetaTable.ref eq manga) and (MangaMetaTable.key eq key) } }.firstOrNull() - if (meta == null) { - MangaMetaTable.insert { - it[MangaMetaTable.key] = key - it[MangaMetaTable.value] = value - it[MangaMetaTable.ref] = manga - } - } else { - MangaMetaTable.update { - it[MangaMetaTable.value] = value - } - } - } - } - - private val applicationDirs by DI.global.instance() - suspend fun getMangaThumbnail(mangaId: Int): Pair { - val saveDir = applicationDirs.mangaThumbnailsRoot - val fileName = mangaId.toString() - - return getCachedImageResponse(saveDir, fileName) { - getManga(mangaId) // make sure is initialized - - val mangaEntry = transaction { MangaTable.select { MangaTable.id eq mangaId }.first() } - - val sourceId = mangaEntry[MangaTable.sourceReference] - val source = getHttpSource(sourceId) - - val thumbnailUrl = mangaEntry[MangaTable.thumbnail_url]!! - - source.client.newCall( - GET(thumbnailUrl, source.headers) - ).await() - } - } - - private fun clearMangaThumbnail(mangaId: Int) { - val saveDir = applicationDirs.mangaThumbnailsRoot - val fileName = mangaId.toString() - - clearCachedImage(saveDir, fileName) - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/MangaList.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/MangaList.kt deleted file mode 100644 index 9ffa3e1..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/MangaList.kt +++ /dev/null @@ -1,104 +0,0 @@ -package suwayomi.tachidesk.manga.impl - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import eu.kanade.tachiyomi.source.model.MangasPage -import org.jetbrains.exposed.sql.insertAndGetId -import org.jetbrains.exposed.sql.select -import org.jetbrains.exposed.sql.transactions.transaction -import suwayomi.tachidesk.manga.impl.Manga.getMangaMetaMap -import suwayomi.tachidesk.manga.impl.util.GetHttpSource.getHttpSource -import suwayomi.tachidesk.manga.impl.util.lang.awaitSingle -import suwayomi.tachidesk.manga.model.dataclass.MangaDataClass -import suwayomi.tachidesk.manga.model.dataclass.PagedMangaListDataClass -import suwayomi.tachidesk.manga.model.table.MangaStatus -import suwayomi.tachidesk.manga.model.table.MangaTable - -object MangaList { - fun proxyThumbnailUrl(mangaId: Int): String { - return "/api/v1/manga/$mangaId/thumbnail" - } - - suspend fun getMangaList(sourceId: Long, pageNum: Int = 1, popular: Boolean): PagedMangaListDataClass { - val source = getHttpSource(sourceId) - val mangasPage = if (popular) { - source.fetchPopularManga(pageNum).awaitSingle() - } else { - if (source.supportsLatest) - source.fetchLatestUpdates(pageNum).awaitSingle() - else - throw Exception("Source $source doesn't support latest") - } - return mangasPage.processEntries(sourceId) - } - - fun MangasPage.processEntries(sourceId: Long): PagedMangaListDataClass { - val mangasPage = this - val mangaList = transaction { - return@transaction mangasPage.mangas.map { manga -> - val mangaEntry = MangaTable.select { MangaTable.url eq manga.url }.firstOrNull() - if (mangaEntry == null) { // create manga entry - val mangaId = MangaTable.insertAndGetId { - it[url] = manga.url - it[title] = manga.title - - it[artist] = manga.artist - it[author] = manga.author - it[description] = manga.description - it[genre] = manga.genre - it[status] = manga.status - it[thumbnail_url] = manga.thumbnail_url - - it[sourceReference] = sourceId - }.value - - MangaDataClass( - mangaId, - sourceId.toString(), - - manga.url, - manga.title, - proxyThumbnailUrl(mangaId), - - manga.initialized, - - manga.artist, - manga.author, - manga.description, - manga.genre, - MangaStatus.valueOf(manga.status).name - ) - } else { - val mangaId = mangaEntry[MangaTable.id].value - MangaDataClass( - mangaId, - sourceId.toString(), - - manga.url, - manga.title, - proxyThumbnailUrl(mangaId), - - true, - - mangaEntry[MangaTable.artist], - mangaEntry[MangaTable.author], - mangaEntry[MangaTable.description], - mangaEntry[MangaTable.genre], - MangaStatus.valueOf(mangaEntry[MangaTable.status]).name, - mangaEntry[MangaTable.inLibrary], - meta = getMangaMetaMap(mangaEntry[MangaTable.id]) - ) - } - } - } - return PagedMangaListDataClass( - mangaList, - mangasPage.hasNextPage - ) - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Page.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Page.kt deleted file mode 100644 index 9b3cac6..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Page.kt +++ /dev/null @@ -1,95 +0,0 @@ -package suwayomi.tachidesk.manga.impl - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import eu.kanade.tachiyomi.source.model.Page -import eu.kanade.tachiyomi.source.online.HttpSource -import org.jetbrains.exposed.sql.and -import org.jetbrains.exposed.sql.select -import org.jetbrains.exposed.sql.transactions.transaction -import org.jetbrains.exposed.sql.update -import org.kodein.di.DI -import org.kodein.di.conf.global -import org.kodein.di.instance -import suwayomi.tachidesk.manga.impl.util.GetHttpSource.getHttpSource -import suwayomi.tachidesk.manga.impl.util.lang.awaitSingle -import suwayomi.tachidesk.manga.impl.util.storage.CachedImageResponse.getCachedImageResponse -import suwayomi.tachidesk.manga.impl.util.storage.SafePath -import suwayomi.tachidesk.manga.model.table.ChapterTable -import suwayomi.tachidesk.manga.model.table.MangaTable -import suwayomi.tachidesk.manga.model.table.PageTable -import suwayomi.tachidesk.server.ApplicationDirs -import java.io.File -import java.io.InputStream - -object Page { - /** - * A page might have a imageUrl ready from the get go, or we might need to - * go an extra step and call fetchImageUrl to get it. - */ - suspend fun getTrueImageUrl(page: Page, source: HttpSource): String { - if (page.imageUrl == null) { - page.imageUrl = source.fetchImageUrl(page).awaitSingle() - } - return page.imageUrl!! - } - - suspend fun getPageImage(mangaId: Int, chapterIndex: Int, index: Int): Pair { - val mangaEntry = transaction { MangaTable.select { MangaTable.id eq mangaId }.first() } - val source = getHttpSource(mangaEntry[MangaTable.sourceReference]) - val chapterEntry = transaction { - ChapterTable.select { - (ChapterTable.chapterIndex eq chapterIndex) and (ChapterTable.manga eq mangaId) - }.first() - } - val chapterId = chapterEntry[ChapterTable.id].value - - val pageEntry = transaction { PageTable.select { (PageTable.chapter eq chapterId) and (PageTable.index eq index) }.first() } - - val tachiPage = Page( - pageEntry[PageTable.index], - pageEntry[PageTable.url], - pageEntry[PageTable.imageUrl] - ) - - if (pageEntry[PageTable.imageUrl] == null) { - val trueImageUrl = getTrueImageUrl(tachiPage, source) - transaction { - PageTable.update({ (PageTable.chapter eq chapterId) and (PageTable.index eq index) }) { - it[imageUrl] = trueImageUrl - } - } - } - - val saveDir = getChapterDir(mangaId, chapterId) - File(saveDir).mkdirs() - val fileName = String.format("%03d", index) // e.g. 001.jpeg - - return getCachedImageResponse(saveDir, fileName) { - source.fetchImage(tachiPage).awaitSingle() - } - } - - private val applicationDirs by DI.global.instance() - private fun getChapterDir(mangaId: Int, chapterId: Int): String { - val mangaEntry = transaction { MangaTable.select { MangaTable.id eq mangaId }.first() } - val source = getHttpSource(mangaEntry[MangaTable.sourceReference]) - val chapterEntry = transaction { ChapterTable.select { ChapterTable.id eq chapterId }.first() } - - val sourceDir = source.toString() - val mangaDir = SafePath.buildValidFilename(mangaEntry[MangaTable.title]) - val chapterDir = SafePath.buildValidFilename( - when { - chapterEntry[ChapterTable.scanlator] != null -> "${chapterEntry[ChapterTable.scanlator]}_${chapterEntry[ChapterTable.name]}" - else -> chapterEntry[ChapterTable.name] - } - ) - - return "${applicationDirs.mangaRoot}/$sourceDir/$mangaDir/$chapterDir" - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Search.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Search.kt deleted file mode 100644 index c36436f..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Search.kt +++ /dev/null @@ -1,75 +0,0 @@ -package suwayomi.tachidesk.manga.impl - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import suwayomi.tachidesk.manga.impl.MangaList.processEntries -import suwayomi.tachidesk.manga.impl.util.GetHttpSource.getHttpSource -import suwayomi.tachidesk.manga.impl.util.lang.awaitSingle -import suwayomi.tachidesk.manga.model.dataclass.PagedMangaListDataClass - -object Search { - // TODO - fun sourceFilters(sourceId: Long) { - val source = getHttpSource(sourceId) - // source.getFilterList().toItems() - } - - suspend fun sourceSearch(sourceId: Long, searchTerm: String, pageNum: Int): PagedMangaListDataClass { - val source = getHttpSource(sourceId) - val searchManga = source.fetchSearchManga(pageNum, searchTerm, source.getFilterList()).awaitSingle() - return searchManga.processEntries(sourceId) - } - - fun sourceGlobalSearch(searchTerm: String) { - // TODO - } - - data class FilterWrapper( - val type: String, - val filter: Any - ) - - /** - * Note: Exhentai had a filter serializer (now in SY) that we might be able to steal - */ -// private fun FilterList.toFilterWrapper(): List { -// return mapNotNull { filter -> -// when (filter) { -// is Filter.Header -> FilterWrapper("Header",filter) -// is Filter.Separator -> FilterWrapper("Separator",filter) -// is Filter.CheckBox -> FilterWrapper("CheckBox",filter) -// is Filter.TriState -> FilterWrapper("TriState",filter) -// is Filter.Text -> FilterWrapper("Text",filter) -// is Filter.Select<*> -> FilterWrapper("Select",filter) -// is Filter.Group<*> -> { -// val group = GroupItem(filter) -// val subItems = filter.state.mapNotNull { -// when (it) { -// is Filter.CheckBox -> FilterWrapper("CheckBox",filter) -// is Filter.TriState -> FilterWrapper("TriState",filter) -// is Filter.Text -> FilterWrapper("Text",filter) -// is Filter.Select<*> -> FilterWrapper("Select",filter) -// else -> null -// } as? ISectionable<*, *> -// } -// subItems.forEach { it.header = group } -// group.subItems = subItems -// group -// } -// is Filter.Sort -> { -// val group = SortGroup(filter) -// val subItems = filter.values.map { -// SortItem(it, group) -// } -// group.subItems = subItems -// group -// } -// } -// } -// } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Source.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Source.kt deleted file mode 100644 index 7f8373d..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Source.kt +++ /dev/null @@ -1,50 +0,0 @@ -package suwayomi.tachidesk.manga.impl - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import mu.KotlinLogging -import org.jetbrains.exposed.sql.select -import org.jetbrains.exposed.sql.selectAll -import org.jetbrains.exposed.sql.transactions.transaction -import suwayomi.tachidesk.manga.impl.extension.Extension.getExtensionIconUrl -import suwayomi.tachidesk.manga.impl.util.GetHttpSource.getHttpSource -import suwayomi.tachidesk.manga.model.dataclass.SourceDataClass -import suwayomi.tachidesk.manga.model.table.ExtensionTable -import suwayomi.tachidesk.manga.model.table.SourceTable - -object Source { - private val logger = KotlinLogging.logger {} - - fun getSourceList(): List { - return transaction { - SourceTable.selectAll().map { - SourceDataClass( - it[SourceTable.id].value.toString(), - it[SourceTable.name], - it[SourceTable.lang], - getExtensionIconUrl(ExtensionTable.select { ExtensionTable.id eq it[SourceTable.extension] }.first()[ExtensionTable.apkName]), - getHttpSource(it[SourceTable.id].value).supportsLatest - ) - } - } - } - - fun getSource(sourceId: Long): SourceDataClass { - return transaction { - val source = SourceTable.select { SourceTable.id eq sourceId }.firstOrNull() - - SourceDataClass( - sourceId.toString(), - source?.get(SourceTable.name), - source?.get(SourceTable.lang), - source?.let { ExtensionTable.select { ExtensionTable.id eq source[SourceTable.extension] }.first()[ExtensionTable.iconUrl] }, - source?.let { getHttpSource(sourceId).supportsLatest } - ) - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/BackupFlags.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/BackupFlags.kt deleted file mode 100644 index 05c6954..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/BackupFlags.kt +++ /dev/null @@ -1,16 +0,0 @@ -package suwayomi.tachidesk.manga.impl.backup - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -data class BackupFlags( - val includeManga: Boolean, - val includeCategories: Boolean, - val includeChapters: Boolean, - val includeTracking: Boolean, - val includeHistory: Boolean, -) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/LegacyBackupBase.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/LegacyBackupBase.kt deleted file mode 100644 index dfcfc6b..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/LegacyBackupBase.kt +++ /dev/null @@ -1,45 +0,0 @@ -package suwayomi.tachidesk.manga.impl.backup.legacy - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import com.github.salomonbrys.kotson.registerTypeAdapter -import com.github.salomonbrys.kotson.registerTypeHierarchyAdapter -import com.google.gson.Gson -import com.google.gson.GsonBuilder -import suwayomi.tachidesk.manga.impl.backup.legacy.models.DHistory -import suwayomi.tachidesk.manga.impl.backup.legacy.serializer.CategoryTypeAdapter -import suwayomi.tachidesk.manga.impl.backup.legacy.serializer.ChapterTypeAdapter -import suwayomi.tachidesk.manga.impl.backup.legacy.serializer.HistoryTypeAdapter -import suwayomi.tachidesk.manga.impl.backup.legacy.serializer.MangaTypeAdapter -import suwayomi.tachidesk.manga.impl.backup.legacy.serializer.TrackTypeAdapter -import suwayomi.tachidesk.manga.impl.backup.models.CategoryImpl -import suwayomi.tachidesk.manga.impl.backup.models.ChapterImpl -import suwayomi.tachidesk.manga.impl.backup.models.MangaImpl -import suwayomi.tachidesk.manga.impl.backup.models.TrackImpl -import java.util.Date - -open class LegacyBackupBase { - protected val parser: Gson = when (version) { - 2 -> GsonBuilder() - .registerTypeAdapter(MangaTypeAdapter.build()) - .registerTypeHierarchyAdapter(ChapterTypeAdapter.build()) - .registerTypeAdapter(CategoryTypeAdapter.build()) - .registerTypeAdapter(HistoryTypeAdapter.build()) - .registerTypeHierarchyAdapter(TrackTypeAdapter.build()) - .create() - else -> throw Exception("Unknown backup version") - } - - protected var sourceMapping: Map = emptyMap() - - protected val errors = mutableListOf>() - - companion object { - internal const val version = 2 - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/LegacyBackupExport.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/LegacyBackupExport.kt deleted file mode 100644 index 454a40a..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/LegacyBackupExport.kt +++ /dev/null @@ -1,154 +0,0 @@ -package suwayomi.tachidesk.manga.impl.backup.legacy - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import com.github.salomonbrys.kotson.set -import com.google.gson.JsonArray -import com.google.gson.JsonElement -import com.google.gson.JsonObject -import eu.kanade.tachiyomi.source.LocalSource -import org.jetbrains.exposed.sql.select -import org.jetbrains.exposed.sql.transactions.transaction -import suwayomi.tachidesk.manga.impl.Category.getCategoryList -import suwayomi.tachidesk.manga.impl.CategoryManga.getMangaCategories -import suwayomi.tachidesk.manga.impl.backup.BackupFlags -import suwayomi.tachidesk.manga.impl.backup.legacy.models.Backup -import suwayomi.tachidesk.manga.impl.backup.legacy.models.Backup.CURRENT_VERSION -import suwayomi.tachidesk.manga.impl.backup.models.CategoryImpl -import suwayomi.tachidesk.manga.impl.backup.models.ChapterImpl -import suwayomi.tachidesk.manga.impl.backup.models.Manga -import suwayomi.tachidesk.manga.impl.backup.models.MangaImpl -import suwayomi.tachidesk.manga.impl.util.GetHttpSource.getHttpSource -import suwayomi.tachidesk.manga.model.table.ChapterTable -import suwayomi.tachidesk.manga.model.table.MangaTable - -object LegacyBackupExport : LegacyBackupBase() { - - suspend fun createLegacyBackup(flags: BackupFlags): String? { - // Create root object - val root = JsonObject() - - // Create manga array - val mangaEntries = JsonArray() - - // Create category array - val categoryEntries = JsonArray() - - // Create extension ID/name mapping - val extensionEntries = JsonArray() - - // Add values to root - root[Backup.VERSION] = CURRENT_VERSION - root[Backup.MANGAS] = mangaEntries - root[Backup.CATEGORIES] = categoryEntries - root[Backup.EXTENSIONS] = extensionEntries - - transaction { - val mangas = MangaTable.select { (MangaTable.inLibrary eq true) } - - val extensions: MutableSet = mutableSetOf() - - // Backup library manga and its dependencies - mangas.map { - MangaImpl.fromQuery(it) - }.forEach { manga -> - - mangaEntries.add(backupMangaObject(manga, flags)) - - // Maintain set of extensions/sources used (excludes local source) - if (manga.source != LocalSource.ID) { - getHttpSource(manga.source).let { - extensions.add("${it.id}:${it.name}") - } - } - } - - // Backup categories - if (flags.includeCategories) { - backupCategories(categoryEntries) - } - - // Backup extension ID/name mapping - backupExtensionInfo(extensionEntries, extensions) - } - - return parser.toJson(root) - } - - private fun backupMangaObject(manga: Manga, options: BackupFlags): JsonElement { - // Entry for this manga - val entry = JsonObject() - - // Backup manga fields - entry[Backup.MANGA] = parser.toJsonTree(manga) - val mangaId = manga.id!!.toInt() - - // Check if user wants chapter information in backup - if (options.includeChapters) { - // Backup all the chapters - val chapters = ChapterTable.select { ChapterTable.manga eq mangaId }.map { ChapterImpl.fromQuery(it) } - if (chapters.count() > 0) { - val chaptersJson = parser.toJsonTree(chapters) - if (chaptersJson.asJsonArray.size() > 0) { - entry[Backup.CHAPTERS] = chaptersJson - } - } - } - - // Check if user wants category information in backup - if (options.includeCategories) { - // Backup categories for this manga - val categoriesForManga = getMangaCategories(mangaId) - if (categoriesForManga.isNotEmpty()) { - val categoriesNames = categoriesForManga.map { it.name } - entry[Backup.CATEGORIES] = parser.toJsonTree(categoriesNames) - } - } - - // Check if user wants track information in backup - if (options.includeTracking) { // TODO -// val tracks = databaseHelper.getTracks(manga).executeAsBlocking() -// if (tracks.isNotEmpty()) { -// entry[TRACK] = parser.toJsonTree(tracks) -// } - } -// -// // Check if user wants history information in backup - if (options.includeHistory) { // TODO -// val historyForManga = databaseHelper.getHistoryByMangaId(manga.id!!).executeAsBlocking() -// if (historyForManga.isNotEmpty()) { -// val historyData = historyForManga.mapNotNull { history -> -// val url = databaseHelper.getChapter(history.chapter_id).executeAsBlocking()?.url -// url?.let { DHistory(url, history.last_read) } -// } -// val historyJson = parser.toJsonTree(historyData) -// if (historyJson.asJsonArray.size() > 0) { -// entry[HISTORY] = historyJson -// } -// } - } - - return entry - } - - private fun backupCategories(root: JsonArray) { - val categories = getCategoryList().map { - CategoryImpl().apply { - name = it.name - order = it.order - } - } - categories.forEach { root.add(parser.toJsonTree(it)) } - } - - private fun backupExtensionInfo(root: JsonArray, extensions: Set) { - extensions.sorted().forEach { - root.add(it) - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/LegacyBackupImport.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/LegacyBackupImport.kt deleted file mode 100644 index 9c98474..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/LegacyBackupImport.kt +++ /dev/null @@ -1,210 +0,0 @@ -package suwayomi.tachidesk.manga.impl.backup.legacy - -import com.github.salomonbrys.kotson.fromJson -import com.google.gson.JsonArray -import com.google.gson.JsonElement -import com.google.gson.JsonObject -import com.google.gson.JsonParser -import eu.kanade.tachiyomi.source.Source -import eu.kanade.tachiyomi.source.model.SManga -import mu.KotlinLogging -import org.jetbrains.exposed.sql.and -import org.jetbrains.exposed.sql.insert -import org.jetbrains.exposed.sql.select -import org.jetbrains.exposed.sql.transactions.transaction -import org.jetbrains.exposed.sql.update -import suwayomi.tachidesk.manga.impl.Category.createCategory -import suwayomi.tachidesk.manga.impl.Category.getCategoryList -import suwayomi.tachidesk.manga.impl.backup.legacy.LegacyBackupValidator.ValidationResult -import suwayomi.tachidesk.manga.impl.backup.legacy.LegacyBackupValidator.validate -import suwayomi.tachidesk.manga.impl.backup.legacy.models.Backup -import suwayomi.tachidesk.manga.impl.backup.legacy.models.DHistory -import suwayomi.tachidesk.manga.impl.backup.models.CategoryImpl -import suwayomi.tachidesk.manga.impl.backup.models.Chapter -import suwayomi.tachidesk.manga.impl.backup.models.ChapterImpl -import suwayomi.tachidesk.manga.impl.backup.models.Manga -import suwayomi.tachidesk.manga.impl.backup.models.MangaImpl -import suwayomi.tachidesk.manga.impl.backup.models.Track -import suwayomi.tachidesk.manga.impl.backup.models.TrackImpl -import suwayomi.tachidesk.manga.impl.util.GetHttpSource.getHttpSource -import suwayomi.tachidesk.manga.impl.util.lang.awaitSingle -import suwayomi.tachidesk.manga.model.table.MangaTable -import java.io.InputStream -import java.util.Date - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -private val logger = KotlinLogging.logger {} - -object LegacyBackupImport : LegacyBackupBase() { - suspend fun restoreLegacyBackup(sourceStream: InputStream): ValidationResult { - val reader = sourceStream.bufferedReader() - val json = JsonParser.parseReader(reader).asJsonObject - - val validationResult = validate(json) - - val mangasJson = json.get(Backup.MANGAS).asJsonArray - - // Restore categories - json.get(Backup.CATEGORIES)?.let { restoreCategories(it) } - - // Store source mapping for error messages - sourceMapping = LegacyBackupValidator.getSourceMapping(json) - - // Restore individual manga - mangasJson.forEach { - restoreManga(it.asJsonObject) - } - - logger.info { - """ - Restore Errors: - ${ errors.joinToString("\n") { "${it.first} - ${it.second}" } } - Restore Summary: - - Missing Sources: - ${validationResult.missingSources.joinToString("\n")} - - Missing Trackers: - ${validationResult.missingTrackers.joinToString("\n")} - """.trimIndent() - } - - return validationResult - } - - private fun restoreCategories(jsonCategories: JsonElement) { - val backupCategories = parser.fromJson>(jsonCategories) - val dbCategories = getCategoryList() - - // Iterate over them and create missing categories - backupCategories.forEach { category -> - if (dbCategories.none { it.name == category.name }) { - createCategory(category.name) - } - } - } - - private suspend fun restoreManga(mangaJson: JsonObject) { - val manga = parser.fromJson( - mangaJson.get( - Backup.MANGA - ) - ) - val chapters = parser.fromJson>( - mangaJson.get(Backup.CHAPTERS) - ?: JsonArray() - ) - val categories = parser.fromJson>( - mangaJson.get(Backup.CATEGORIES) - ?: JsonArray() - ) - val history = parser.fromJson>( - mangaJson.get(Backup.HISTORY) - ?: JsonArray() - ) - val tracks = parser.fromJson>( - mangaJson.get(Backup.TRACK) - ?: JsonArray() - ) - - val source = try { - getHttpSource(manga.source) - } catch (e: NullPointerException) { - null - } catch (e: NoSuchElementException) { - null - } - val sourceName = sourceMapping[manga.source] ?: manga.source.toString() - - logger.debug("Restoring Manga: ${manga.title} from $sourceName") - - try { - if (source != null) { - restoreMangaData(manga, source, chapters, categories, history, tracks) - } else { - errors.add(Date() to "${manga.title} [$sourceName]: Source not found: $sourceName (${manga.source})") - } - } catch (e: Exception) { - errors.add(Date() to "${manga.title} [$sourceName]: ${e.message}") - } - } - - /** - * @param manga manga data from json - * @param source source to get manga data from - * @param chapters chapters data from json - * @param categories categories data from json - * @param history history data from json - * @param tracks tracking data from json - */ - private suspend fun restoreMangaData( - manga: Manga, - source: Source, - chapters: List, - categories: List, - history: List, - tracks: List - ) { - val fetchedManga = fetchManga(source, manga) - - updateChapters(source, fetchedManga, chapters) - - // TODO -// backupManager.restoreCategoriesForManga(manga, categories) - -// backupManager.restoreHistoryForManga(history) - -// backupManager.restoreTrackForManga(manga, tracks) - -// updateTracking(fetchedManga, tracks) - } - - /** - * Fetches manga information - * - * @param source source of manga - * @param manga manga that needs updating - * @return Updated manga. - */ - private suspend fun fetchManga(source: Source, manga: Manga): SManga { - // make sure we have the manga record in library - transaction { - if (MangaTable.select { (MangaTable.url eq manga.url) and (MangaTable.sourceReference eq manga.source) }.firstOrNull() == null) { - MangaTable.insert { - it[url] = manga.url - it[title] = manga.title - - it[sourceReference] = manga.source - } - } - MangaTable.update({ (MangaTable.url eq manga.url) and (MangaTable.sourceReference eq manga.source) }) { - it[MangaTable.inLibrary] = true - } - } - - // update manga details - val fetchedManga = source.fetchMangaDetails(manga).awaitSingle() - transaction { - MangaTable.update({ (MangaTable.url eq manga.url) and (MangaTable.sourceReference eq manga.source) }) { - - it[artist] = fetchedManga.artist - it[author] = fetchedManga.author - it[description] = fetchedManga.description - it[genre] = fetchedManga.genre - it[status] = fetchedManga.status - if (fetchedManga.thumbnail_url != null && fetchedManga.thumbnail_url.orEmpty().isNotEmpty()) - it[MangaTable.thumbnail_url] = fetchedManga.thumbnail_url - } - } - - return fetchedManga - } - - private fun updateChapters(source: Source, fetchedManga: SManga, chapters: List) { - // TODO("Not yet implemented") - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/LegacyBackupValidator.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/LegacyBackupValidator.kt deleted file mode 100644 index e8036ac..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/LegacyBackupValidator.kt +++ /dev/null @@ -1,71 +0,0 @@ -package suwayomi.tachidesk.manga.impl.backup.legacy - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import com.google.gson.JsonObject -import org.jetbrains.exposed.sql.select -import org.jetbrains.exposed.sql.transactions.transaction -import suwayomi.tachidesk.manga.impl.backup.legacy.models.Backup -import suwayomi.tachidesk.manga.model.table.SourceTable - -object LegacyBackupValidator { - data class ValidationResult(val missingSources: List, val missingTrackers: List) - - /** - * Checks for critical backup file data. - * - * @throws Exception if version or manga cannot be found. - * @return List of missing sources or missing trackers. - */ - fun validate(json: JsonObject): ValidationResult { - val version = json.get(Backup.VERSION) - val mangasJson = json.get(Backup.MANGAS) - if (version == null || mangasJson == null) { - throw Exception("File is missing data.") - } - - val mangas = mangasJson.asJsonArray - if (mangas.size() == 0) { - throw Exception("Backup does not contain any manga.") - } - - val sources = getSourceMapping(json) - val missingSources = transaction { - sources - .filter { SourceTable.select { SourceTable.id eq it.key }.firstOrNull() == null } - .map { "${it.value} (${it.key})" } - .sorted() - } - - val trackers = mangas - .filter { it.asJsonObject.has("track") } - .flatMap { it.asJsonObject["track"].asJsonArray } - .map { it.asJsonObject["s"].asInt } - .distinct() - - val missingTrackers = listOf("") -// val missingTrackers = trackers -// .mapNotNull { trackManager.getService(it) } -// .filter { !it.isLogged } -// .map { context.getString(it.nameRes()) } -// .sorted() - - return ValidationResult(missingSources, missingTrackers) - } - - fun getSourceMapping(json: JsonObject): Map { - val extensionsMapping = json.get(Backup.EXTENSIONS) ?: return emptyMap() - - return extensionsMapping.asJsonArray - .map { - val items = it.asString.split(":") - items[0].toLong() to items[1] - } - .toMap() - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/models/Backup.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/models/Backup.kt deleted file mode 100644 index 2f58de8..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/models/Backup.kt +++ /dev/null @@ -1,25 +0,0 @@ -package suwayomi.tachidesk.manga.impl.backup.legacy.models - -import java.text.SimpleDateFormat -import java.util.Date -import java.util.Locale - -/** - * Json values - */ -object Backup { - const val CURRENT_VERSION = 2 - const val MANGA = "manga" - const val MANGAS = "mangas" - const val TRACK = "track" - const val CHAPTERS = "chapters" - const val CATEGORIES = "categories" - const val EXTENSIONS = "extensions" - const val HISTORY = "history" - const val VERSION = "version" - - fun getDefaultFilename(): String { - val date = SimpleDateFormat("yyyy-MM-dd_HH-mm", Locale.getDefault()).format(Date()) - return "tachiyomi_$date.json" - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/models/DHistory.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/models/DHistory.kt deleted file mode 100644 index 6d91fbd..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/models/DHistory.kt +++ /dev/null @@ -1,3 +0,0 @@ -package suwayomi.tachidesk.manga.impl.backup.legacy.models - -data class DHistory(val url: String, val lastRead: Long) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/serializer/CategoryTypeAdapter.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/serializer/CategoryTypeAdapter.kt deleted file mode 100644 index edd73f2..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/serializer/CategoryTypeAdapter.kt +++ /dev/null @@ -1,31 +0,0 @@ -package suwayomi.tachidesk.manga.impl.backup.legacy.serializer - -import com.github.salomonbrys.kotson.typeAdapter -import com.google.gson.TypeAdapter -import suwayomi.tachidesk.manga.impl.backup.models.CategoryImpl - -/** - * JSON Serializer used to write / read [CategoryImpl] to / from json - */ -object CategoryTypeAdapter { - - fun build(): TypeAdapter { - return typeAdapter { - write { - beginArray() - value(it.name) - value(it.order) - endArray() - } - - read { - beginArray() - val category = CategoryImpl() - category.name = nextString() - category.order = nextInt() - endArray() - category - } - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/serializer/ChapterTypeAdapter.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/serializer/ChapterTypeAdapter.kt deleted file mode 100644 index a669db8..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/serializer/ChapterTypeAdapter.kt +++ /dev/null @@ -1,59 +0,0 @@ -package suwayomi.tachidesk.manga.impl.backup.legacy.serializer - -import com.github.salomonbrys.kotson.typeAdapter -import com.google.gson.TypeAdapter -import com.google.gson.stream.JsonToken -import suwayomi.tachidesk.manga.impl.backup.models.ChapterImpl - -/** - * JSON Serializer used to write / read [ChapterImpl] to / from json - */ -object ChapterTypeAdapter { - - private const val URL = "u" - private const val READ = "r" - private const val BOOKMARK = "b" - private const val LAST_READ = "l" - - fun build(): TypeAdapter { - return typeAdapter { - write { - if (it.read || it.bookmark || it.last_page_read != 0) { - beginObject() - name(URL) - value(it.url) - if (it.read) { - name(READ) - value(1) - } - if (it.bookmark) { - name(BOOKMARK) - value(1) - } - if (it.last_page_read != 0) { - name(LAST_READ) - value(it.last_page_read) - } - endObject() - } - } - - read { - val chapter = ChapterImpl() - beginObject() - while (hasNext()) { - if (peek() == JsonToken.NAME) { - when (nextName()) { - URL -> chapter.url = nextString() - READ -> chapter.read = nextInt() == 1 - BOOKMARK -> chapter.bookmark = nextInt() == 1 - LAST_READ -> chapter.last_page_read = nextInt() - } - } - } - endObject() - chapter - } - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/serializer/HistoryTypeAdapter.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/serializer/HistoryTypeAdapter.kt deleted file mode 100644 index b5cdd1d..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/serializer/HistoryTypeAdapter.kt +++ /dev/null @@ -1,32 +0,0 @@ -package suwayomi.tachidesk.manga.impl.backup.legacy.serializer - -import com.github.salomonbrys.kotson.typeAdapter -import com.google.gson.TypeAdapter -import suwayomi.tachidesk.manga.impl.backup.legacy.models.DHistory - -/** - * JSON Serializer used to write / read [DHistory] to / from json - */ -object HistoryTypeAdapter { - - fun build(): TypeAdapter { - return typeAdapter { - write { - if (it.lastRead != 0L) { - beginArray() - value(it.url) - value(it.lastRead) - endArray() - } - } - - read { - beginArray() - val url = nextString() - val lastRead = nextLong() - endArray() - DHistory(url, lastRead) - } - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/serializer/MangaTypeAdapter.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/serializer/MangaTypeAdapter.kt deleted file mode 100644 index dee9733..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/serializer/MangaTypeAdapter.kt +++ /dev/null @@ -1,37 +0,0 @@ -package suwayomi.tachidesk.manga.impl.backup.legacy.serializer - -import com.github.salomonbrys.kotson.typeAdapter -import com.google.gson.TypeAdapter -import suwayomi.tachidesk.manga.impl.backup.models.MangaImpl - -/** - * JSON Serializer used to write / read [MangaImpl] to / from json - */ -object MangaTypeAdapter { - - fun build(): TypeAdapter { - return typeAdapter { - write { - beginArray() - value(it.url) - value(it.title) - value(it.source) - value(it.viewer) - value(it.chapter_flags) - endArray() - } - - read { - beginArray() - val manga = MangaImpl() - manga.url = nextString() - manga.title = nextString() - manga.source = nextLong() - manga.viewer = nextInt() - manga.chapter_flags = nextInt() - endArray() - manga - } - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/serializer/TrackTypeAdapter.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/serializer/TrackTypeAdapter.kt deleted file mode 100644 index c6053f6..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/legacy/serializer/TrackTypeAdapter.kt +++ /dev/null @@ -1,59 +0,0 @@ -package suwayomi.tachidesk.manga.impl.backup.legacy.serializer - -import com.github.salomonbrys.kotson.typeAdapter -import com.google.gson.TypeAdapter -import com.google.gson.stream.JsonToken -import suwayomi.tachidesk.manga.impl.backup.models.TrackImpl - -/** - * JSON Serializer used to write / read [TrackImpl] to / from json - */ -object TrackTypeAdapter { - - private const val SYNC = "s" - private const val MEDIA = "r" - private const val LIBRARY = "ml" - private const val TITLE = "t" - private const val LAST_READ = "l" - private const val TRACKING_URL = "u" - - fun build(): TypeAdapter { - return typeAdapter { - write { - beginObject() - name(TITLE) - value(it.title) - name(SYNC) - value(it.sync_id) - name(MEDIA) - value(it.media_id) - name(LIBRARY) - value(it.library_id) - name(LAST_READ) - value(it.last_chapter_read) - name(TRACKING_URL) - value(it.tracking_url) - endObject() - } - - read { - val track = TrackImpl() - beginObject() - while (hasNext()) { - if (peek() == JsonToken.NAME) { - when (nextName()) { - TITLE -> track.title = nextString() - SYNC -> track.sync_id = nextInt() - MEDIA -> track.media_id = nextInt() - LIBRARY -> track.library_id = nextLong() - LAST_READ -> track.last_chapter_read = nextInt() - TRACKING_URL -> track.tracking_url = nextString() - } - } - } - endObject() - track - } - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/Category.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/Category.kt deleted file mode 100644 index f4ece8d..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/Category.kt +++ /dev/null @@ -1,23 +0,0 @@ -package suwayomi.tachidesk.manga.impl.backup.models - -import java.io.Serializable - -interface Category : Serializable { - - var id: Int? - - var name: String - - var order: Int - - var flags: Int - - companion object { - - fun create(name: String): Category = CategoryImpl().apply { - this.name = name - } - - fun createDefault(): Category = create("Default").apply { id = 0 } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/CategoryImpl.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/CategoryImpl.kt deleted file mode 100644 index 813c00d..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/CategoryImpl.kt +++ /dev/null @@ -1,24 +0,0 @@ -package suwayomi.tachidesk.manga.impl.backup.models - -class CategoryImpl : Category { - - override var id: Int? = null - - override lateinit var name: String - - override var order: Int = 0 - - override var flags: Int = 0 - - override fun equals(other: Any?): Boolean { - if (this === other) return true - if (other == null || javaClass != other.javaClass) return false - - val category = other as Category - return name == category.name - } - - override fun hashCode(): Int { - return name.hashCode() - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/Chapter.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/Chapter.kt deleted file mode 100644 index f5f0a12..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/Chapter.kt +++ /dev/null @@ -1,31 +0,0 @@ -package suwayomi.tachidesk.manga.impl.backup.models - -import eu.kanade.tachiyomi.source.model.SChapter -import java.io.Serializable - -interface Chapter : SChapter, Serializable { - - var id: Long? - - var manga_id: Long? - - var read: Boolean - - var bookmark: Boolean - - var last_page_read: Int - - var date_fetch: Long - - var source_order: Int - - val isRecognizedNumber: Boolean - get() = chapter_number >= 0f - - companion object { - - fun create(): Chapter = ChapterImpl().apply { - chapter_number = -1f - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/ChapterImpl.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/ChapterImpl.kt deleted file mode 100644 index d30ba6b..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/ChapterImpl.kt +++ /dev/null @@ -1,57 +0,0 @@ -package suwayomi.tachidesk.manga.impl.backup.models - -import org.jetbrains.exposed.sql.ResultRow -import suwayomi.tachidesk.manga.model.table.ChapterTable - -class ChapterImpl : Chapter { - - override var id: Long? = null - - override var manga_id: Long? = null - - override lateinit var url: String - - override lateinit var name: String - - override var scanlator: String? = null - - override var read: Boolean = false - - override var bookmark: Boolean = false - - override var last_page_read: Int = 0 - - override var date_fetch: Long = 0 - - override var date_upload: Long = 0 - - override var chapter_number: Float = 0f - - override var source_order: Int = 0 - - override fun equals(other: Any?): Boolean { - if (this === other) return true - if (other == null || javaClass != other.javaClass) return false - - val chapter = other as Chapter - if (url != chapter.url) return false - return id == chapter.id - } - - override fun hashCode(): Int { - return url.hashCode() + id.hashCode() - } - - // Tachidesk --> - companion object { - fun fromQuery(chapterRecord: ResultRow): ChapterImpl { - return ChapterImpl().apply { - url = chapterRecord[ChapterTable.url] - read = chapterRecord[ChapterTable.isRead] - bookmark = chapterRecord[ChapterTable.isBookmarked] - last_page_read = chapterRecord[ChapterTable.lastPageRead] - } - } - } - // Tachidesk <-- -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/History.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/History.kt deleted file mode 100644 index 3c60b6b..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/History.kt +++ /dev/null @@ -1,42 +0,0 @@ -package suwayomi.tachidesk.manga.impl.backup.models - -import java.io.Serializable - -/** - * Object containing the history statistics of a chapter - */ -interface History : Serializable { - - /** - * Id of history object. - */ - var id: Long? - - /** - * Chapter id of history object. - */ - var chapter_id: Long - - /** - * Last time chapter was read in time long format - */ - var last_read: Long - - /** - * Total time chapter was read - todo not yet implemented - */ - var time_read: Long - - companion object { - - /** - * History constructor - * - * @param chapter chapter object - * @return history object - */ - fun create(chapter: Chapter): History = HistoryImpl().apply { - this.chapter_id = chapter.id!! - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/HistoryImpl.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/HistoryImpl.kt deleted file mode 100644 index f0ee2ce..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/HistoryImpl.kt +++ /dev/null @@ -1,27 +0,0 @@ -package suwayomi.tachidesk.manga.impl.backup.models - -/** - * Object containing the history statistics of a chapter - */ -class HistoryImpl : History { - - /** - * Id of history object. - */ - override var id: Long? = null - - /** - * Chapter id of history object. - */ - override var chapter_id: Long = 0 - - /** - * Last time chapter was read in time long format - */ - override var last_read: Long = 0 - - /** - * Total time chapter was read - todo not yet implemented - */ - override var time_read: Long = 0 -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/LibraryManga.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/LibraryManga.kt deleted file mode 100644 index c3ee863..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/LibraryManga.kt +++ /dev/null @@ -1,8 +0,0 @@ -package suwayomi.tachidesk.manga.impl.backup.models - -class LibraryManga : MangaImpl() { - - var unread: Int = 0 - - var category: Int = 0 -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/Manga.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/Manga.kt deleted file mode 100644 index 4d03501..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/Manga.kt +++ /dev/null @@ -1,116 +0,0 @@ -package suwayomi.tachidesk.manga.impl.backup.models - -import eu.kanade.tachiyomi.source.model.SManga - -// import tachiyomi.source.model.MangaInfo - -interface Manga : SManga { - - var id: Long? - - var source: Long - - /** is in library */ - var favorite: Boolean - - var last_update: Long - - var date_added: Long - - var viewer: Int - - var chapter_flags: Int - - var cover_last_modified: Long - - fun setChapterOrder(order: Int) { - setFlags(order, SORT_MASK) - } - - fun sortDescending(): Boolean { - return chapter_flags and SORT_MASK == SORT_DESC - } - - fun getGenres(): List? { - return genre?.split(", ")?.map { it.trim() } - } - - private fun setFlags(flag: Int, mask: Int) { - chapter_flags = chapter_flags and mask.inv() or (flag and mask) - } - - // Used to display the chapter's title one way or another - var displayMode: Int - get() = chapter_flags and DISPLAY_MASK - set(mode) = setFlags(mode, DISPLAY_MASK) - - var readFilter: Int - get() = chapter_flags and READ_MASK - set(filter) = setFlags(filter, READ_MASK) - - var downloadedFilter: Int - get() = chapter_flags and DOWNLOADED_MASK - set(filter) = setFlags(filter, DOWNLOADED_MASK) - - var bookmarkedFilter: Int - get() = chapter_flags and BOOKMARKED_MASK - set(filter) = setFlags(filter, BOOKMARKED_MASK) - - var sorting: Int - get() = chapter_flags and SORTING_MASK - set(sort) = setFlags(sort, SORTING_MASK) - - companion object { - - const val SORT_DESC = 0x00000000 - const val SORT_ASC = 0x00000001 - const val SORT_MASK = 0x00000001 - - // Generic filter that does not filter anything - const val SHOW_ALL = 0x00000000 - - const val SHOW_UNREAD = 0x00000002 - const val SHOW_READ = 0x00000004 - const val READ_MASK = 0x00000006 - - const val SHOW_DOWNLOADED = 0x00000008 - const val SHOW_NOT_DOWNLOADED = 0x00000010 - const val DOWNLOADED_MASK = 0x00000018 - - const val SHOW_BOOKMARKED = 0x00000020 - const val SHOW_NOT_BOOKMARKED = 0x00000040 - const val BOOKMARKED_MASK = 0x00000060 - - const val SORTING_SOURCE = 0x00000000 - const val SORTING_NUMBER = 0x00000100 - const val SORTING_UPLOAD_DATE = 0x00000200 - const val SORTING_MASK = 0x00000300 - - const val DISPLAY_NAME = 0x00000000 - const val DISPLAY_NUMBER = 0x00100000 - const val DISPLAY_MASK = 0x00100000 - - fun create(source: Long): Manga = MangaImpl().apply { - this.source = source - } - - fun create(pathUrl: String, title: String, source: Long = 0): Manga = MangaImpl().apply { - url = pathUrl - this.title = title - this.source = source - } - } -} - -// fun Manga.toMangaInfo(): MangaInfo { -// return MangaInfo( -// artist = this.artist ?: "", -// author = this.author ?: "", -// cover = this.thumbnail_url ?: "", -// description = this.description ?: "", -// genres = this.getGenres() ?: emptyList(), -// key = this.url, -// status = this.status, -// title = this.title -// ) -// } diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/MangaCategory.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/MangaCategory.kt deleted file mode 100644 index 9afba35..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/MangaCategory.kt +++ /dev/null @@ -1,20 +0,0 @@ -package suwayomi.tachidesk.manga.impl.backup.models - -class MangaCategory { - - var id: Long? = null - - var manga_id: Long = 0 - - var category_id: Int = 0 - - companion object { - - fun create(manga: Manga, category: Category): MangaCategory { - val mc = MangaCategory() - mc.manga_id = manga.id!! - mc.category_id = category.id!! - return mc - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/MangaChapter.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/MangaChapter.kt deleted file mode 100644 index 9afc27c..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/MangaChapter.kt +++ /dev/null @@ -1,3 +0,0 @@ -package suwayomi.tachidesk.manga.impl.backup.models - -class MangaChapter(val manga: Manga, val chapter: Chapter) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/MangaChapterHistory.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/MangaChapterHistory.kt deleted file mode 100644 index f93bfcf..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/MangaChapterHistory.kt +++ /dev/null @@ -1,10 +0,0 @@ -package suwayomi.tachidesk.manga.impl.backup.models - -/** - * Object containing manga, chapter and history - * - * @param manga object containing manga - * @param chapter object containing chater - * @param history object containing history - */ -data class MangaChapterHistory(val manga: Manga, val chapter: Chapter, val history: History) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/MangaImpl.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/MangaImpl.kt deleted file mode 100644 index 8124cdd..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/MangaImpl.kt +++ /dev/null @@ -1,79 +0,0 @@ -package suwayomi.tachidesk.manga.impl.backup.models - -import org.jetbrains.exposed.sql.ResultRow -import suwayomi.tachidesk.manga.model.table.MangaTable - -open class MangaImpl : Manga { - - override var id: Long? = 0 - - override var source: Long = -1 - - override lateinit var url: String - - override lateinit var title: String - - override var artist: String? = null - - override var author: String? = null - - override var description: String? = null - - override var genre: String? = null - - override var status: Int = 0 - - override var thumbnail_url: String? = null - - override var favorite: Boolean = false - - override var last_update: Long = 0 - - override var date_added: Long = 0 - - override var initialized: Boolean = false - - /** Reader mode value - * ref: https://github.com/tachiyomiorg/tachiyomi/blob/ff369010074b058bb734ce24c66508300e6e9ac6/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReadingModeType.kt#L8 - * 0 -> Default - * 1 -> Left to Right - * 2 -> Right to Left - * 3 -> Vertical - * 4 -> Webtoon - * 5 -> Continues Vertical - */ - override var viewer: Int = 0 - - /** Contains some useful info about - */ - override var chapter_flags: Int = 0 - - override var cover_last_modified: Long = 0 - - override fun equals(other: Any?): Boolean { - if (this === other) return true - if (other == null || javaClass != other.javaClass) return false - - val manga = other as Manga - if (url != manga.url) return false - return id == manga.id - } - - override fun hashCode(): Int { - return url.hashCode() + id.hashCode() - } - - // Tachidesk --> - companion object { - fun fromQuery(mangaRecord: ResultRow): MangaImpl { - return MangaImpl().apply { - url = mangaRecord[MangaTable.url] - title = mangaRecord[MangaTable.title] - source = mangaRecord[MangaTable.sourceReference] - viewer = 0 // TODO: implement - chapter_flags = 0 // TODO: implement - } - } - } - // Tachidesk <-- -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/Track.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/Track.kt deleted file mode 100644 index c9b9e15..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/Track.kt +++ /dev/null @@ -1,46 +0,0 @@ -package suwayomi.tachidesk.manga.impl.backup.models - -import java.io.Serializable - -interface Track : Serializable { - - var id: Long? - - var manga_id: Long - - var sync_id: Int - - var media_id: Int - - var library_id: Long? - - var title: String - - var last_chapter_read: Int - - var total_chapters: Int - - var score: Float - - var status: Int - - var started_reading_date: Long - - var finished_reading_date: Long - - var tracking_url: String - - fun copyPersonalFrom(other: Track) { - last_chapter_read = other.last_chapter_read - score = other.score - status = other.status - started_reading_date = other.started_reading_date - finished_reading_date = other.finished_reading_date - } - - companion object { - fun create(serviceId: Int): Track = TrackImpl().apply { - sync_id = serviceId - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/TrackImpl.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/TrackImpl.kt deleted file mode 100644 index 84e035b..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/models/TrackImpl.kt +++ /dev/null @@ -1,48 +0,0 @@ -package suwayomi.tachidesk.manga.impl.backup.models - -class TrackImpl : Track { - - override var id: Long? = null - - override var manga_id: Long = 0 - - override var sync_id: Int = 0 - - override var media_id: Int = 0 - - override var library_id: Long? = null - - override lateinit var title: String - - override var last_chapter_read: Int = 0 - - override var total_chapters: Int = 0 - - override var score: Float = 0f - - override var status: Int = 0 - - override var started_reading_date: Long = 0 - - override var finished_reading_date: Long = 0 - - override var tracking_url: String = "" - - override fun equals(other: Any?): Boolean { - if (this === other) return true - if (other == null || javaClass != other.javaClass) return false - - other as Track - - if (manga_id != other.manga_id) return false - if (sync_id != other.sync_id) return false - return media_id == other.media_id - } - - override fun hashCode(): Int { - var result = (manga_id xor manga_id.ushr(32)).toInt() - result = 31 * result + sync_id - result = 31 * result + media_id - return result - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/download/DownloadManager.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/download/DownloadManager.kt deleted file mode 100644 index a7ede41..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/download/DownloadManager.kt +++ /dev/null @@ -1,129 +0,0 @@ -package suwayomi.tachidesk.manga.impl.download - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import io.javalin.websocket.WsContext -import io.javalin.websocket.WsMessageContext -import org.jetbrains.exposed.sql.and -import org.jetbrains.exposed.sql.select -import org.jetbrains.exposed.sql.transactions.transaction -import suwayomi.tachidesk.manga.impl.download.model.DownloadChapter -import suwayomi.tachidesk.manga.impl.download.model.DownloadState.Downloading -import suwayomi.tachidesk.manga.impl.download.model.DownloadStatus -import suwayomi.tachidesk.manga.model.table.ChapterTable -import suwayomi.tachidesk.manga.model.table.toDataClass -import java.util.concurrent.ConcurrentHashMap -import java.util.concurrent.CopyOnWriteArrayList - -object DownloadManager { - private val clients = ConcurrentHashMap() - private val downloadQueue = CopyOnWriteArrayList() - private var downloader: Downloader? = null - - fun addClient(ctx: WsContext) { - clients[ctx.sessionId] = ctx - } - - fun removeClient(ctx: WsContext) { - clients.remove(ctx.sessionId) - } - - fun notifyClient(ctx: WsContext) { - ctx.send( - getStatus() - ) - } - - fun handleRequest(ctx: WsMessageContext) { - when (ctx.message()) { - "STATUS" -> notifyClient(ctx) - else -> ctx.send( - """ - |Invalid command. - |Supported commands are: - | - STATUS - | sends the current download status - |""".trimMargin() - ) - } - } - - private fun notifyAllClients() { - val status = getStatus() - clients.forEach { - it.value.send(status) - } - } - - private fun getStatus(): DownloadStatus { - return DownloadStatus( - if (downloader == null || - downloadQueue.none { it.state == Downloading } - ) "Stopped" else "Started", - downloadQueue - ) - } - - fun enqueue(chapterIndex: Int, mangaId: Int) { - if (downloadQueue.none { it.mangaId == mangaId && it.chapterIndex == chapterIndex }) { - downloadQueue.add( - DownloadChapter( - chapterIndex, - mangaId, - chapter = ChapterTable.toDataClass( - transaction { - ChapterTable.select { (ChapterTable.manga eq mangaId) and (ChapterTable.chapterIndex eq chapterIndex) } - .first() - } - ) - ) - ) - start() - } - notifyAllClients() - } - - fun unqueue(chapterIndex: Int, mangaId: Int) { - downloadQueue.removeIf { it.mangaId == mangaId && it.chapterIndex == chapterIndex } - notifyAllClients() - } - - fun start() { - if (downloader != null && !downloader?.isAlive!!) // doesn't exist or is dead - downloader = null - - if (downloader == null) { - downloader = Downloader(downloadQueue) { notifyAllClients() } - downloader!!.start() - } - - notifyAllClients() - } - - fun stop() { - downloader?.let { - synchronized(it.shouldStop) { - it.shouldStop = true - } - } - downloader = null - notifyAllClients() - } - - fun clear() { - stop() - downloadQueue.clear() - notifyAllClients() - } -} - -enum class DownloaderState(val state: Int) { - Stopped(0), - Running(1), - Paused(2), -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/download/Downloader.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/download/Downloader.kt deleted file mode 100644 index c58ff0e..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/download/Downloader.kt +++ /dev/null @@ -1,81 +0,0 @@ -package suwayomi.tachidesk.manga.impl.download - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import kotlinx.coroutines.runBlocking -import org.jetbrains.exposed.sql.and -import org.jetbrains.exposed.sql.transactions.transaction -import org.jetbrains.exposed.sql.update -import suwayomi.tachidesk.manga.impl.Chapter.getChapter -import suwayomi.tachidesk.manga.impl.Page.getPageImage -import suwayomi.tachidesk.manga.impl.download.model.DownloadChapter -import suwayomi.tachidesk.manga.impl.download.model.DownloadState.Downloading -import suwayomi.tachidesk.manga.impl.download.model.DownloadState.Error -import suwayomi.tachidesk.manga.impl.download.model.DownloadState.Finished -import suwayomi.tachidesk.manga.impl.download.model.DownloadState.Queued -import suwayomi.tachidesk.manga.model.table.ChapterTable -import java.util.concurrent.CopyOnWriteArrayList - -class Downloader(private val downloadQueue: CopyOnWriteArrayList, val notifier: () -> Unit) : Thread() { - var shouldStop: Boolean = false - - class DownloadShouldStopException : Exception() - - fun step() { - notifier() - synchronized(shouldStop) { - if (shouldStop) throw DownloadShouldStopException() - } - } - - override fun run() { - do { - val download = downloadQueue.firstOrNull { - it.state == Queued || - (it.state == Error && it.tries < 3) // 3 re-tries per download - } ?: break - - try { - download.state = Downloading - step() - - download.chapter = runBlocking { getChapter(download.chapterIndex, download.mangaId) } - step() - - val pageCount = download.chapter!!.pageCount - for (pageNum in 0 until pageCount) { - runBlocking { getPageImage(download.mangaId, download.chapterIndex, pageNum) } - // TODO: retry on error with 2,4,8 seconds of wait - // TODO: download multiple pages at once, possible solution: rx observer's strategy is used in Tachiyomi - // TODO: fine grained download percentage - download.progress = (pageNum + 1).toFloat() / pageCount - step() - } - download.state = Finished - transaction { - ChapterTable.update({ (ChapterTable.manga eq download.mangaId) and (ChapterTable.chapterIndex eq download.chapterIndex) }) { - it[isDownloaded] = true - } - } - step() - - downloadQueue.removeIf { it.mangaId == download.mangaId && it.chapterIndex == download.chapterIndex } - step() - } catch (e: DownloadShouldStopException) { - println("Downloader was stopped") - downloadQueue.filter { it.state == Downloading }.forEach { it.state = Queued } - } catch (e: Exception) { - println("Downloader faced an exception") - downloadQueue.filter { it.state == Downloading }.forEach { it.state = Error; it.tries++ } - e.printStackTrace() - } finally { - notifier() - } - } while (!shouldStop) - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/download/model/DownloadChapter.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/download/model/DownloadChapter.kt deleted file mode 100644 index cce5559..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/download/model/DownloadChapter.kt +++ /dev/null @@ -1,20 +0,0 @@ -package suwayomi.tachidesk.manga.impl.download.model - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import suwayomi.tachidesk.manga.impl.download.model.DownloadState.Queued -import suwayomi.tachidesk.manga.model.dataclass.ChapterDataClass - -class DownloadChapter( - val chapterIndex: Int, - val mangaId: Int, - var state: DownloadState = Queued, - var progress: Float = 0f, - var tries: Int = 0, - var chapter: ChapterDataClass? = null, -) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/download/model/DownloadState.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/download/model/DownloadState.kt deleted file mode 100644 index e0f83f1..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/download/model/DownloadState.kt +++ /dev/null @@ -1,15 +0,0 @@ -package suwayomi.tachidesk.manga.impl.download.model - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -enum class DownloadState(val state: Int) { - Queued(0), - Downloading(1), - Finished(2), - Error(3), -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/download/model/DownloadStatus.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/download/model/DownloadStatus.kt deleted file mode 100644 index ba645a4..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/download/model/DownloadStatus.kt +++ /dev/null @@ -1,13 +0,0 @@ -package suwayomi.tachidesk.manga.impl.download.model - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -data class DownloadStatus( - val status: String, - val queue: List, -) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/Extension.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/Extension.kt index 253285f..92c511e 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/Extension.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/Extension.kt @@ -7,245 +7,62 @@ package suwayomi.tachidesk.manga.impl.extension * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import android.net.Uri -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.network.NetworkHelper import eu.kanade.tachiyomi.source.CatalogueSource import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.SourceFactory import mu.KotlinLogging -import okhttp3.Request -import okio.buffer -import okio.sink -import org.jetbrains.exposed.sql.deleteWhere -import org.jetbrains.exposed.sql.insert -import org.jetbrains.exposed.sql.select -import org.jetbrains.exposed.sql.transactions.transaction -import org.jetbrains.exposed.sql.update -import org.kodein.di.DI -import org.kodein.di.conf.global -import org.kodein.di.instance -import suwayomi.tachidesk.manga.impl.extension.ExtensionsList.extensionTableAsDataClass -import suwayomi.tachidesk.manga.impl.extension.github.ExtensionGithubApi import suwayomi.tachidesk.manga.impl.util.PackageTools.EXTENSION_FEATURE import suwayomi.tachidesk.manga.impl.util.PackageTools.LIB_VERSION_MAX import suwayomi.tachidesk.manga.impl.util.PackageTools.LIB_VERSION_MIN -import suwayomi.tachidesk.manga.impl.util.PackageTools.METADATA_NSFW import suwayomi.tachidesk.manga.impl.util.PackageTools.METADATA_SOURCE_CLASS import suwayomi.tachidesk.manga.impl.util.PackageTools.dex2jar import suwayomi.tachidesk.manga.impl.util.PackageTools.getPackageInfo -import suwayomi.tachidesk.manga.impl.util.PackageTools.getSignatureHash import suwayomi.tachidesk.manga.impl.util.PackageTools.loadExtensionSources -import suwayomi.tachidesk.manga.impl.util.PackageTools.trustedSignatures -import suwayomi.tachidesk.manga.impl.util.network.await -import suwayomi.tachidesk.manga.impl.util.storage.CachedImageResponse.getCachedImageResponse -import suwayomi.tachidesk.manga.model.table.ExtensionTable -import suwayomi.tachidesk.manga.model.table.SourceTable -import suwayomi.tachidesk.server.ApplicationDirs -import uy.kohesive.injekt.injectLazy import java.io.File -import java.io.InputStream object Extension { private val logger = KotlinLogging.logger {} - private val applicationDirs by DI.global.instance() - data class InstallableAPK( - val apkFilePath: String, - val pkgName: String - ) + suspend fun installAPK(tmpDir: File, fetcher: suspend () -> File): Pair> { + val apkFile = fetcher() - suspend fun installExtension(pkgName: String): Int { - logger.debug("Installing $pkgName") - val extensionRecord = extensionTableAsDataClass().first { it.pkgName == pkgName } + val jarFile = File(tmpDir, "${apkFile.nameWithoutExtension}.jar") - return installAPK { - val apkURL = ExtensionGithubApi.getApkUrl(extensionRecord) - val apkName = Uri.parse(apkURL).lastPathSegment!! - val apkSavePath = "${applicationDirs.extensionsRoot}/$apkName" - // download apk file - downloadAPKFile(apkURL, apkSavePath) + val packageInfo = getPackageInfo(apkFile.absolutePath) - apkSavePath - } - } - - suspend fun installAPK(fetcher: suspend () -> String): Int { - val apkFilePath = fetcher() - val apkName = File(apkFilePath).name - - // check if we don't have the extension already installed - // if it's installed and we want to update, it first has to be uninstalled - val isInstalled = transaction { - ExtensionTable.select { ExtensionTable.apkName eq apkName }.firstOrNull() - }?.get(ExtensionTable.isInstalled) ?: false - - if (!isInstalled) { - val fileNameWithoutType = apkName.substringBefore(".apk") - - val dirPathWithoutType = "${applicationDirs.extensionsRoot}/$fileNameWithoutType" - val jarFilePath = "$dirPathWithoutType.jar" - val dexFilePath = "$dirPathWithoutType.dex" - - val packageInfo = getPackageInfo(apkFilePath) - val pkgName = packageInfo.packageName - - if (!packageInfo.reqFeatures.orEmpty().any { it.name == EXTENSION_FEATURE }) { - throw Exception("This apk is not a Tachiyomi extension") - } - - // Validate lib version - val libVersion = packageInfo.versionName.substringBeforeLast('.').toDouble() - if (libVersion < LIB_VERSION_MIN || libVersion > LIB_VERSION_MAX) { - throw Exception( - "Lib version is $libVersion, while only versions " + - "$LIB_VERSION_MIN to $LIB_VERSION_MAX are allowed" - ) - } - - val signatureHash = getSignatureHash(packageInfo) - - if (signatureHash == null) { - throw Exception("Package $pkgName isn't signed") - } else if (signatureHash !in trustedSignatures) { - // TODO: allow trusting keys - throw Exception("This apk is not a signed with the official tachiyomi signature") - } - - val isNsfw = packageInfo.applicationInfo.metaData.getString(METADATA_NSFW) == "1" - - val className = packageInfo.packageName + packageInfo.applicationInfo.metaData.getString(METADATA_SOURCE_CLASS) - - logger.debug("Main class for extension is $className") - - dex2jar(apkFilePath, jarFilePath, fileNameWithoutType) - - // clean up -// File(apkFilePath).delete() - File(dexFilePath).delete() - - // collect sources from the extension - val sources: List = when (val instance = loadExtensionSources(jarFilePath, className)) { - is Source -> listOf(instance) - is SourceFactory -> instance.createSources() - else -> throw RuntimeException("Unknown source class type! ${instance.javaClass}") - }.map { it as CatalogueSource } - - val langs = sources.map { it.lang }.toSet() - val extensionLang = when (langs.size) { - 0 -> "" - 1 -> langs.first() - else -> "all" - } - - val extensionName = packageInfo.applicationInfo.nonLocalizedLabel.toString().substringAfter("Tachiyomi: ") - - // update extension info - transaction { - if (ExtensionTable.select { ExtensionTable.pkgName eq pkgName }.firstOrNull() == null) { - ExtensionTable.insert { - it[this.apkName] = apkName - it[name] = extensionName - it[this.pkgName] = packageInfo.packageName - it[versionName] = packageInfo.versionName - it[versionCode] = packageInfo.versionCode - it[lang] = extensionLang - it[this.isNsfw] = isNsfw - } - } - - ExtensionTable.update({ ExtensionTable.pkgName eq pkgName }) { - it[this.isInstalled] = true - it[this.classFQName] = className - } - - val extensionId = ExtensionTable.select { ExtensionTable.pkgName eq pkgName }.first()[ExtensionTable.id].value - - sources.forEach { httpSource -> - SourceTable.insert { - it[id] = httpSource.id - it[name] = httpSource.name - it[lang] = httpSource.lang - it[extension] = extensionId - } - logger.debug("Installed source ${httpSource.name} (${httpSource.lang}) with id:${httpSource.id}") - } - } - return 201 // we installed successfully - } else { - return 302 // extension was already installed - } - } - - private val network: NetworkHelper by injectLazy() - - private suspend fun downloadAPKFile(url: String, savePath: String) { - val request = Request.Builder().url(url).build() - val response = network.client.newCall(request).await() - - val downloadedFile = File(savePath) - downloadedFile.sink().buffer().use { sink -> - response.body!!.source().use { source -> - sink.writeAll(source) - sink.flush() - } - } - } - - fun uninstallExtension(pkgName: String) { - logger.debug("Uninstalling $pkgName") - - val extensionRecord = transaction { ExtensionTable.select { ExtensionTable.pkgName eq pkgName }.first() } - val fileNameWithoutType = extensionRecord[ExtensionTable.apkName].substringBefore(".apk") - val jarPath = "${applicationDirs.extensionsRoot}/$fileNameWithoutType.jar" - transaction { - val extensionId = extensionRecord[ExtensionTable.id].value - - SourceTable.deleteWhere { SourceTable.extension eq extensionId } - if (extensionRecord[ExtensionTable.isObsolete]) - ExtensionTable.deleteWhere { ExtensionTable.pkgName eq pkgName } - else - ExtensionTable.update({ ExtensionTable.pkgName eq pkgName }) { - it[isInstalled] = false - } + if (!packageInfo.reqFeatures.orEmpty().any { it.name == EXTENSION_FEATURE }) { + throw Exception("This apk is not a Tachiyomi extension") } - if (File(jarPath).exists()) { - File(jarPath).delete() + // Validate lib version + val libVersion = packageInfo.versionName.substringBeforeLast('.').toDouble() + if (libVersion < LIB_VERSION_MIN || libVersion > LIB_VERSION_MAX) { + throw Exception( + "Lib version is $libVersion, while only versions " + + "$LIB_VERSION_MIN to $LIB_VERSION_MAX are allowed" + ) } - } - suspend fun updateExtension(pkgName: String): Int { - val targetExtension = ExtensionsList.updateMap.remove(pkgName)!! - uninstallExtension(pkgName) - transaction { - ExtensionTable.update({ ExtensionTable.pkgName eq pkgName }) { - it[name] = targetExtension.name - it[versionName] = targetExtension.versionName - it[versionCode] = targetExtension.versionCode - it[lang] = targetExtension.lang - it[isNsfw] = targetExtension.isNsfw - it[apkName] = targetExtension.apkName - it[iconUrl] = targetExtension.iconUrl - it[hasUpdate] = false - } - } - return installExtension(pkgName) - } + /*val signatureHash = getSignatureHash(packageInfo) - suspend fun getExtensionIcon(apkName: String): Pair { - val iconUrl = transaction { ExtensionTable.select { ExtensionTable.apkName eq apkName }.first() }[ExtensionTable.iconUrl] + if (signatureHash == null) { + throw Exception("Package $pkgName isn't signed") + } else if (signatureHash !in trustedSignatures) { + // TODO: allow trusting keys + throw Exception("This apk is not a signed with the official tachiyomi signature") + }*/ - val saveDir = "${applicationDirs.extensionsRoot}/icon" + val className = packageInfo.packageName + packageInfo.applicationInfo.metaData.getString(METADATA_SOURCE_CLASS) - return getCachedImageResponse(saveDir, apkName) { - network.client.newCall( - GET(iconUrl) - ).await() - } - } + logger.debug("Main class for extension is $className") - fun getExtensionIconUrl(apkName: String): String { - return "/api/v1/extension/icon/$apkName" + dex2jar(apkFile, jarFile) + + // collect sources from the extension + return packageInfo.packageName to when (val instance = loadExtensionSources(jarFile.absolutePath, className)) { + is Source -> listOf(instance) + is SourceFactory -> instance.createSources() + else -> throw RuntimeException("Unknown source class type! ${instance.javaClass}") + }.filterIsInstance() } } diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/ExtensionsList.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/ExtensionsList.kt deleted file mode 100644 index 5ce9ace..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/ExtensionsList.kt +++ /dev/null @@ -1,132 +0,0 @@ -package suwayomi.tachidesk.manga.impl.extension - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import mu.KotlinLogging -import org.jetbrains.exposed.sql.deleteWhere -import org.jetbrains.exposed.sql.insert -import org.jetbrains.exposed.sql.select -import org.jetbrains.exposed.sql.selectAll -import org.jetbrains.exposed.sql.transactions.transaction -import org.jetbrains.exposed.sql.update -import suwayomi.tachidesk.manga.impl.extension.Extension.getExtensionIconUrl -import suwayomi.tachidesk.manga.impl.extension.github.ExtensionGithubApi -import suwayomi.tachidesk.manga.impl.extension.github.OnlineExtension -import suwayomi.tachidesk.manga.model.dataclass.ExtensionDataClass -import suwayomi.tachidesk.manga.model.table.ExtensionTable -import java.util.concurrent.ConcurrentHashMap - -object ExtensionsList { - private val logger = KotlinLogging.logger {} - - var lastUpdateCheck: Long = 0 - var updateMap = ConcurrentHashMap() - - /** 60,000 milliseconds = 60 seconds */ - private const val ExtensionUpdateDelayTime = 60 * 1000 - - suspend fun getExtensionList(): List { - // update if {ExtensionUpdateDelayTime} seconds has passed or requested offline and database is empty - if (lastUpdateCheck + ExtensionUpdateDelayTime < System.currentTimeMillis()) { - logger.debug("Getting extensions list from the internet") - lastUpdateCheck = System.currentTimeMillis() - - val foundExtensions = ExtensionGithubApi.findExtensions() - updateExtensionDatabase(foundExtensions) - } else { - logger.debug("used cached extension list") - } - - return extensionTableAsDataClass() - } - - fun extensionTableAsDataClass() = transaction { - ExtensionTable.selectAll().map { - ExtensionDataClass( - it[ExtensionTable.apkName], - getExtensionIconUrl(it[ExtensionTable.apkName]), - it[ExtensionTable.name], - it[ExtensionTable.pkgName], - it[ExtensionTable.versionName], - it[ExtensionTable.versionCode], - it[ExtensionTable.lang], - it[ExtensionTable.isNsfw], - it[ExtensionTable.isInstalled], - it[ExtensionTable.hasUpdate], - it[ExtensionTable.isObsolete], - ) - } - } - - private fun updateExtensionDatabase(foundExtensions: List) { - transaction { - foundExtensions.forEach { foundExtension -> - val extensionRecord = ExtensionTable.select { ExtensionTable.pkgName eq foundExtension.pkgName }.firstOrNull() - if (extensionRecord != null) { - if (extensionRecord[ExtensionTable.isInstalled]) { - when { - foundExtension.versionCode > extensionRecord[ExtensionTable.versionCode] -> { - // there is an update - ExtensionTable.update({ ExtensionTable.pkgName eq foundExtension.pkgName }) { - it[hasUpdate] = true - } - updateMap.putIfAbsent(foundExtension.pkgName, foundExtension) - } - foundExtension.versionCode < extensionRecord[ExtensionTable.versionCode] -> { - // some how the user installed an invalid version - ExtensionTable.update({ ExtensionTable.pkgName eq foundExtension.pkgName }) { - it[isObsolete] = true - } - } - } - } else { - // extension is not installed so we can overwrite the data without a care - ExtensionTable.update({ ExtensionTable.pkgName eq foundExtension.pkgName }) { - it[name] = foundExtension.name - it[versionName] = foundExtension.versionName - it[versionCode] = foundExtension.versionCode - it[lang] = foundExtension.lang - it[isNsfw] = foundExtension.isNsfw - it[apkName] = foundExtension.apkName - it[iconUrl] = foundExtension.iconUrl - } - } - } else { - // insert new record - ExtensionTable.insert { - it[name] = foundExtension.name - it[pkgName] = foundExtension.pkgName - it[versionName] = foundExtension.versionName - it[versionCode] = foundExtension.versionCode - it[lang] = foundExtension.lang - it[isNsfw] = foundExtension.isNsfw - it[apkName] = foundExtension.apkName - it[iconUrl] = foundExtension.iconUrl - } - } - } - - // deal with obsolete extensions - ExtensionTable.selectAll().forEach { extensionRecord -> - val foundExtension = foundExtensions.find { it.pkgName == extensionRecord[ExtensionTable.pkgName] } - if (foundExtension == null) { - // not in the repo, so this extensions is obsolete - if (extensionRecord[ExtensionTable.isInstalled]) { - // is installed so we should mark it as obsolete - ExtensionTable.update({ ExtensionTable.pkgName eq extensionRecord[ExtensionTable.pkgName] }) { - it[isObsolete] = true - } - } else { - // is not installed so we can remove the record without a care - ExtensionTable.deleteWhere { ExtensionTable.pkgName eq extensionRecord[ExtensionTable.pkgName] } - } - } - } - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/github/ExtensionGithubApi.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/github/ExtensionGithubApi.kt deleted file mode 100644 index 1e22c31..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/github/ExtensionGithubApi.kt +++ /dev/null @@ -1,76 +0,0 @@ -package suwayomi.tachidesk.manga.impl.extension.github - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import com.github.salomonbrys.kotson.int -import com.github.salomonbrys.kotson.string -import com.google.gson.JsonArray -import com.google.gson.JsonParser -import eu.kanade.tachiyomi.network.NetworkHelper -import okhttp3.Request -import suwayomi.tachidesk.manga.impl.util.PackageTools.LIB_VERSION_MAX -import suwayomi.tachidesk.manga.impl.util.PackageTools.LIB_VERSION_MIN -import suwayomi.tachidesk.manga.model.dataclass.ExtensionDataClass -import uy.kohesive.injekt.injectLazy - -object ExtensionGithubApi { - private const val BASE_URL = "https://raw.githubusercontent.com" - private const val REPO_URL_PREFIX = "$BASE_URL/tachiyomiorg/tachiyomi-extensions/repo" - - private fun parseResponse(json: JsonArray): List { - return json - .map { it.asJsonObject } - .filter { element -> - val versionName = element["version"].string - val libVersion = versionName.substringBeforeLast('.').toDouble() - libVersion in LIB_VERSION_MIN..LIB_VERSION_MAX - } - .map { element -> - val name = element["name"].string.substringAfter("Tachiyomi: ") - val pkgName = element["pkg"].string - val apkName = element["apk"].string - val versionName = element["version"].string - val versionCode = element["code"].int - val lang = element["lang"].string - val nsfw = element["nsfw"].int == 1 - val icon = "$REPO_URL_PREFIX/icon/${apkName.replace(".apk", ".png")}" - - OnlineExtension(name, pkgName, versionName, versionCode, lang, nsfw, apkName, icon) - } - } - - suspend fun findExtensions(): List { - val response = getRepo() - return parseResponse(response) - } - - fun getApkUrl(extension: ExtensionDataClass): String { - return "$REPO_URL_PREFIX/apk/${extension.apkName}" - } - - private val client by lazy { - val network: NetworkHelper by injectLazy() - network.client.newBuilder() - .addNetworkInterceptor { chain -> - val originalResponse = chain.proceed(chain.request()) - originalResponse.newBuilder() - .header("Content-Type", "application/json") - .build() - } - .build() - } - - private fun getRepo(): JsonArray { - val request = Request.Builder() - .url("$REPO_URL_PREFIX/index.min.json") - .build() - - val response = client.newCall(request).execute().use { response -> response.body!!.string() } - return JsonParser.parseString(response).asJsonArray - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/github/OnlineExtension.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/github/OnlineExtension.kt deleted file mode 100644 index 893ed6f..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/github/OnlineExtension.kt +++ /dev/null @@ -1,19 +0,0 @@ -package suwayomi.tachidesk.manga.impl.extension.github - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -data class OnlineExtension( - val name: String, - val pkgName: String, - val versionName: String, - val versionCode: Int, - val lang: String, - val isNsfw: Boolean, - val apkName: String, - val iconUrl: String -) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/GetHttpSource.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/GetHttpSource.kt deleted file mode 100644 index 09ec499..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/GetHttpSource.kt +++ /dev/null @@ -1,57 +0,0 @@ -package suwayomi.tachidesk.manga.impl.util - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import eu.kanade.tachiyomi.source.Source -import eu.kanade.tachiyomi.source.SourceFactory -import eu.kanade.tachiyomi.source.online.HttpSource -import org.jetbrains.exposed.sql.select -import org.jetbrains.exposed.sql.transactions.transaction -import org.kodein.di.DI -import org.kodein.di.conf.global -import org.kodein.di.instance -import suwayomi.tachidesk.manga.impl.util.PackageTools.loadExtensionSources -import suwayomi.tachidesk.manga.model.table.ExtensionTable -import suwayomi.tachidesk.manga.model.table.SourceTable -import suwayomi.tachidesk.server.ApplicationDirs -import java.util.concurrent.ConcurrentHashMap - -object GetHttpSource { - private val sourceCache = ConcurrentHashMap() - private val applicationDirs by DI.global.instance() - - fun getHttpSource(sourceId: Long): HttpSource { - val cachedResult: HttpSource? = sourceCache[sourceId] - if (cachedResult != null) { - return cachedResult - } - - val sourceRecord = transaction { - SourceTable.select { SourceTable.id eq sourceId }.first() - } - - val extensionId = sourceRecord[SourceTable.extension] - val extensionRecord = transaction { - ExtensionTable.select { ExtensionTable.id eq extensionId }.first() - } - - val apkName = extensionRecord[ExtensionTable.apkName] - val className = extensionRecord[ExtensionTable.classFQName] - val jarName = apkName.substringBefore(".apk") + ".jar" - val jarPath = "${applicationDirs.extensionsRoot}/$jarName" - - when (val instance = loadExtensionSources(jarPath, className)) { - is Source -> listOf(instance) - is SourceFactory -> instance.createSources() - else -> throw Exception("Unknown source class type! ${instance.javaClass}") - }.forEach { - sourceCache[it.id] = it as HttpSource - } - return sourceCache[sourceId]!! - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/PackageTools.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/PackageTools.kt index c4ff106..bec89e5 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/PackageTools.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/PackageTools.kt @@ -17,12 +17,8 @@ import eu.kanade.tachiyomi.util.lang.Hash import mu.KotlinLogging import net.dongliu.apk.parser.ApkFile import net.dongliu.apk.parser.ApkParsers -import org.kodein.di.DI -import org.kodein.di.conf.global -import org.kodein.di.instance import org.w3c.dom.Element import org.w3c.dom.Node -import suwayomi.tachidesk.server.ApplicationDirs import xyz.nulldev.androidcompat.pm.InstalledPackage.Companion.toList import xyz.nulldev.androidcompat.pm.toPackageInfo import java.io.File @@ -34,7 +30,6 @@ import javax.xml.parsers.DocumentBuilderFactory object PackageTools { private val logger = KotlinLogging.logger {} - private val applicationDirs by DI.global.instance() const val EXTENSION_FEATURE = "tachiyomi.extension" const val METADATA_SOURCE_CLASS = "tachiyomi.extension.class" @@ -50,12 +45,12 @@ object PackageTools { /** * Convert dex to jar, a wrapper for the dex2jar library */ - fun dex2jar(dexFile: String, jarFile: String, fileNameWithoutType: String) { + fun dex2jar(dexFile: File, jarFile: File) { // adopted from com.googlecode.dex2jar.tools.Dex2jarCmd.doCommandLine // source at: https://github.com/DexPatcher/dex2jar/tree/v2.1-20190905-lanchon/dex-tools/src/main/java/com/googlecode/dex2jar/tools/Dex2jarCmd.java - val jarFilePath = File(jarFile).toPath() - val reader = MultiDexFileReader.open(Files.readAllBytes(File(dexFile).toPath())) + val jarFilePath = jarFile.toPath() + val reader = MultiDexFileReader.open(Files.readAllBytes(dexFile.toPath())) val handler = BaksmaliBaseDexExceptionHandler() Dex2jar .from(reader) @@ -69,7 +64,7 @@ object PackageTools { .skipExceptions(false) .to(jarFilePath) if (handler.hasException()) { - val errorFile: Path = File(applicationDirs.extensionsRoot).toPath().resolve("$fileNameWithoutType-error.txt") + val errorFile: Path = jarFilePath.parent.resolve("${dexFile.nameWithoutExtension}-error.txt") logger.error( """ Detail Error Information in File $errorFile diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/lang/RxCoroutineBridge.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/lang/RxCoroutineBridge.kt deleted file mode 100644 index 6f8a80b..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/lang/RxCoroutineBridge.kt +++ /dev/null @@ -1,62 +0,0 @@ -package suwayomi.tachidesk.manga.impl.util.lang - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import kotlinx.coroutines.CancellableContinuation -import kotlinx.coroutines.suspendCancellableCoroutine -import rx.Observable -import rx.Subscriber -import rx.Subscription -import kotlin.coroutines.resume -import kotlin.coroutines.resumeWithException - -// source: https://github.com/jobobby04/TachiyomiSY/blob/9320221a4e8b118ef68deb60d8c4c32bcbb9e06f/app/src/main/java/eu/kanade/tachiyomi/util/lang/RxCoroutineBridge.kt -/* - * Util functions for bridging RxJava and coroutines. Taken from TachiyomiEH/SY. - */ - -suspend fun Observable.awaitSingle(): T = single().awaitOne() - -private suspend fun Observable.awaitOne(): T = suspendCancellableCoroutine { cont -> - cont.unsubscribeOnCancellation( - subscribe( - object : Subscriber() { - override fun onStart() { - request(1) - } - - override fun onNext(t: T) { - cont.resume(t) - } - - override fun onCompleted() { - if (cont.isActive) cont.resumeWithException( - IllegalStateException( - "Should have invoked onNext" - ) - ) - } - - override fun onError(e: Throwable) { - /* - * Rx1 observable throws NoSuchElementException if cancellation happened before - * element emission. To mitigate this we try to atomically resume continuation with exception: - * if resume failed, then we know that continuation successfully cancelled itself - */ - val token = cont.tryResumeWithException(e) - if (token != null) { - cont.completeResume(token) - } - } - } - ) - ) -} - -private fun CancellableContinuation.unsubscribeOnCancellation(sub: Subscription) = - invokeOnCancellation { sub.unsubscribe() } diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/network/OkHttp.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/network/OkHttp.kt deleted file mode 100644 index 1c88f3d..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/network/OkHttp.kt +++ /dev/null @@ -1,50 +0,0 @@ -package suwayomi.tachidesk.manga.impl.util.network - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import kotlinx.coroutines.suspendCancellableCoroutine -import okhttp3.Call -import okhttp3.Callback -import okhttp3.Response -import okhttp3.internal.closeQuietly -import java.io.IOException -import kotlin.coroutines.resumeWithException - -// Based on https://github.com/gildor/kotlin-coroutines-okhttp -suspend fun Call.await(): Response { - return suspendCancellableCoroutine { continuation -> - enqueue( - object : Callback { - override fun onResponse(call: Call, response: Response) { - if (!response.isSuccessful) { - continuation.resumeWithException(Exception("HTTP error ${response.code}")) - return - } - - continuation.resume(response) { - response.body?.closeQuietly() - } - } - - override fun onFailure(call: Call, e: IOException) { - // Don't bother with resuming the continuation if it is already cancelled. - if (continuation.isCancelled) return - continuation.resumeWithException(e) - } - } - ) - - continuation.invokeOnCancellation { - try { - cancel() - } catch (ex: Throwable) { - // Ignore cancel exception - } - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/network/UnzippingInterceptor.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/network/UnzippingInterceptor.kt deleted file mode 100644 index 10c24cb..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/network/UnzippingInterceptor.kt +++ /dev/null @@ -1,49 +0,0 @@ -package suwayomi.tachidesk.manga.impl.util.network - -import okhttp3.Headers -import okhttp3.Interceptor -import okhttp3.Interceptor.Chain -import okhttp3.Response -import okhttp3.internal.http.RealResponseBody -import okio.GzipSource -import okio.buffer -import java.io.IOException - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -// ref: https://stackoverflow.com/questions/51901333/okhttp-3-how-to-decompress-gzip-deflate-response-manually-using-java-android -class UnzippingInterceptor : Interceptor { - @Throws(IOException::class) - override fun intercept(chain: Chain): Response { - val response: Response = chain.proceed(chain.request()) - return unzip(response) - } - - @Throws(IOException::class) - private fun unzip(response: Response): Response { - if (response.body == null) { - return response - } - - // check if we have gzip response - val contentEncoding: String? = response.headers["Content-Encoding"] - - // this is used to decompress gzipped responses - return if (contentEncoding != null && contentEncoding == "gzip") { - val body = response.body!! - val contentLength: Long = body.contentLength() - val responseBody = GzipSource(body.source()) - val strippedHeaders: Headers = response.headers.newBuilder().build() - response.newBuilder().headers(strippedHeaders) - .body(RealResponseBody(body.contentType().toString(), contentLength, responseBody.buffer())) - .build() - } else { - response - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/storage/CachedImageResponse.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/storage/CachedImageResponse.kt deleted file mode 100644 index 22f1cc1..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/storage/CachedImageResponse.kt +++ /dev/null @@ -1,71 +0,0 @@ -package suwayomi.tachidesk.manga.impl.util.storage - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import okhttp3.Response -import okhttp3.internal.closeQuietly -import java.io.File -import java.io.FileInputStream -import java.io.InputStream - -object CachedImageResponse { - private fun pathToInputStream(path: String): InputStream { - return FileInputStream(path).buffered() - } - - private fun findFileNameStartingWith(directoryPath: String, fileName: String): String? { - val target = "$fileName." - File(directoryPath).listFiles().orEmpty().forEach { file -> - if (file.name.startsWith(target)) - return "$directoryPath/${file.name}" - } - return null - } - - /** fetch a cached image response, calls `fetcher` if cache fails */ - suspend fun getCachedImageResponse(saveDir: String, fileName: String, fetcher: suspend () -> Response): Pair { - val cachedFile = findFileNameStartingWith(saveDir, fileName) - val filePath = "$saveDir/$fileName" - if (cachedFile != null) { - val fileType = cachedFile.substringAfter("$filePath.") - return Pair( - pathToInputStream(cachedFile), - "image/$fileType" - ) - } - - val response = fetcher() - - if (response.code == 200) { - val tmpSavePath = "$filePath.tmp" - val tmpSaveFile = File(tmpSavePath) - response.body!!.source().saveTo(tmpSaveFile) - - // find image type - val imageType = response.headers["content-type"] - ?: ImageUtil.findImageType { tmpSaveFile.inputStream() }?.mime - ?: "image/jpeg" - - val actualSavePath = "$filePath.${imageType.substringAfter("/")}" - - tmpSaveFile.renameTo(File(actualSavePath)) - - return pathToInputStream(actualSavePath) to imageType - } else { - response.closeQuietly() - throw Exception("request error! ${response.code}") - } - } - - fun clearCachedImage(saveDir: String, fileName: String) { - val cachedFile = findFileNameStartingWith(saveDir, fileName) - cachedFile?.also { - File(it).delete() - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/storage/ImageUtil.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/storage/ImageUtil.kt deleted file mode 100644 index 85c9949..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/storage/ImageUtil.kt +++ /dev/null @@ -1,73 +0,0 @@ -package suwayomi.tachidesk.manga.impl.util.storage - -import suwayomi.tachidesk.manga.impl.util.storage.ImageUtil.ImageType.GIF -import suwayomi.tachidesk.manga.impl.util.storage.ImageUtil.ImageType.JPG -import suwayomi.tachidesk.manga.impl.util.storage.ImageUtil.ImageType.PNG -import suwayomi.tachidesk.manga.impl.util.storage.ImageUtil.ImageType.WEBP -import java.io.InputStream - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -// adopted from: https://github.com/tachiyomiorg/tachiyomi/blob/ff369010074b058bb734ce24c66508300e6e9ac6/app/src/main/java/eu/kanade/tachiyomi/util/system/ImageUtil.kt -object ImageUtil { - - fun findImageType(openStream: () -> InputStream): ImageType? { - return openStream().use { findImageType(it) } - } - - fun findImageType(stream: InputStream): ImageType? { - try { - val bytes = ByteArray(8) - - val length = if (stream.markSupported()) { - stream.mark(bytes.size) - stream.read(bytes, 0, bytes.size).also { stream.reset() } - } else { - stream.read(bytes, 0, bytes.size) - } - - if (length == -1) { - return null - } - - if (bytes.compareWith(charByteArrayOf(0xFF, 0xD8, 0xFF))) { - return JPG - } - if (bytes.compareWith(charByteArrayOf(0x89, 0x50, 0x4E, 0x47))) { - return PNG - } - if (bytes.compareWith("GIF8".toByteArray())) { - return GIF - } - if (bytes.compareWith("RIFF".toByteArray())) { - return WEBP - } - } catch (e: Exception) { - } - return null - } - - private fun ByteArray.compareWith(magic: ByteArray): Boolean { - return magic.indices.none { this[it] != magic[it] } - } - - private fun charByteArrayOf(vararg bytes: Int): ByteArray { - return ByteArray(bytes.size).apply { - for (i in bytes.indices) { - set(i, bytes[i].toByte()) - } - } - } - - enum class ImageType(val mime: String) { - JPG("image/jpeg"), - PNG("image/png"), - GIF("image/gif"), - WEBP("image/webp") - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/storage/SafePath.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/storage/SafePath.kt deleted file mode 100644 index 96a37b2..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/storage/SafePath.kt +++ /dev/null @@ -1,47 +0,0 @@ -package suwayomi.tachidesk.manga.impl.util.storage - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -// adopted from: https://github.com/tachiyomiorg/tachiyomi/blob/4cefbce7c34e724b409b6ba127f3c6c5c346ad8d/app/src/main/java/eu/kanade/tachiyomi/util/storage/DiskUtil.kt -object SafePath { - /** - * Mutate the given filename to make it valid for a FAT filesystem, - * replacing any invalid characters with "_". This method doesn't allow hidden files (starting - * with a dot), but you can manually add it later. - */ - fun buildValidFilename(origName: String): String { - val name = origName.trim('.', ' ') - if (name.isEmpty()) { - return "(invalid)" - } - val sb = StringBuilder(name.length) - name.forEach { c -> - if (isValidFatFilenameChar(c)) { - sb.append(c) - } else { - sb.append('_') - } - } - // Even though vfat allows 255 UCS-2 chars, we might eventually write to - // ext4 through a FUSE layer, so use that limit minus 15 reserved characters. - return sb.toString().take(240) - } - - /** - * Returns true if the given character is a valid filename character, false otherwise. - */ - private fun isValidFatFilenameChar(c: Char): Boolean { - if (0x00.toChar() <= c && c <= 0x1f.toChar()) { - return false - } - return when (c) { - '"', '*', '/', ':', '<', '>', '?', '\\', '|', 0x7f.toChar() -> false - else -> true - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/dataclass/CategoryDataClass.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/model/dataclass/CategoryDataClass.kt deleted file mode 100644 index 726cfcc..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/dataclass/CategoryDataClass.kt +++ /dev/null @@ -1,15 +0,0 @@ -package suwayomi.tachidesk.manga.model.dataclass - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -data class CategoryDataClass( - val id: Int, - val order: Int, - val name: String, - val default: Boolean -) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/dataclass/ChapterDataClass.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/model/dataclass/ChapterDataClass.kt deleted file mode 100644 index 805ac00..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/dataclass/ChapterDataClass.kt +++ /dev/null @@ -1,44 +0,0 @@ -package suwayomi.tachidesk.manga.model.dataclass - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -data class ChapterDataClass( - val url: String, - val name: String, - val uploadDate: Long, - val chapterNumber: Float, - val scanlator: String?, - val mangaId: Int, - - /** chapter is read */ - val read: Boolean, - - /** chapter is bookmarked */ - val bookmarked: Boolean, - - /** last read page, zero means not read/no data */ - val lastPageRead: Int, - - /** last read page, zero means not read/no data */ - val lastReadAt: Long, - - /** this chapter's index, starts with 1 */ - val index: Int, - - /** is chapter downloaded */ - val downloaded: Boolean, - - /** used to construct pages in the front-end */ - val pageCount: Int = -1, - - /** total chapter count, used to calculate if there's a next and prev chapter */ - val chapterCount: Int? = null, - - /** used to store client specific values */ - val meta: Map = emptyMap(), -) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/dataclass/ExtensionDataClass.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/model/dataclass/ExtensionDataClass.kt deleted file mode 100644 index af062ce..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/dataclass/ExtensionDataClass.kt +++ /dev/null @@ -1,24 +0,0 @@ -package suwayomi.tachidesk.manga.model.dataclass - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -data class ExtensionDataClass( - val apkName: String, - val iconUrl: String, - - val name: String, - val pkgName: String, - val versionName: String, - val versionCode: Int, - val lang: String, - val isNsfw: Boolean, - - val installed: Boolean, - val hasUpdate: Boolean, - val obsolete: Boolean, -) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/dataclass/MangaDataClass.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/model/dataclass/MangaDataClass.kt deleted file mode 100644 index ee3d054..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/dataclass/MangaDataClass.kt +++ /dev/null @@ -1,37 +0,0 @@ -package suwayomi.tachidesk.manga.model.dataclass - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import suwayomi.tachidesk.manga.model.table.MangaStatus - -data class MangaDataClass( - val id: Int, - val sourceId: String, - - val url: String, - val title: String, - val thumbnailUrl: String? = null, - - val initialized: Boolean = false, - - val artist: String? = null, - val author: String? = null, - val description: String? = null, - val genre: String? = null, - val status: String = MangaStatus.UNKNOWN.name, - val inLibrary: Boolean = false, - val source: SourceDataClass? = null, - val meta: Map = emptyMap(), - - val freshData: Boolean = false -) - -data class PagedMangaListDataClass( - val mangaList: List, - val hasNextPage: Boolean -) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/dataclass/PageDataClass.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/model/dataclass/PageDataClass.kt deleted file mode 100644 index 9633e06..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/dataclass/PageDataClass.kt +++ /dev/null @@ -1,13 +0,0 @@ -package suwayomi.tachidesk.manga.model.dataclass - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -data class PageDataClass( - val index: Int, - var imageUrl: String, -) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/dataclass/SourceDataClass.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/model/dataclass/SourceDataClass.kt deleted file mode 100644 index 939a356..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/dataclass/SourceDataClass.kt +++ /dev/null @@ -1,16 +0,0 @@ -package suwayomi.tachidesk.manga.model.dataclass - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -data class SourceDataClass( - val id: String, - val name: String?, - val lang: String?, - val iconUrl: String?, - val supportsLatest: Boolean? -) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/CategoryMangaTable.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/CategoryMangaTable.kt deleted file mode 100644 index ff24d47..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/CategoryMangaTable.kt +++ /dev/null @@ -1,15 +0,0 @@ -package suwayomi.tachidesk.manga.model.table - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import org.jetbrains.exposed.dao.id.IntIdTable - -object CategoryMangaTable : IntIdTable() { - val category = reference("category", CategoryTable) - val manga = reference("manga", MangaTable) -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/CategoryTable.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/CategoryTable.kt deleted file mode 100644 index 2e96471..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/CategoryTable.kt +++ /dev/null @@ -1,25 +0,0 @@ -package suwayomi.tachidesk.manga.model.table - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import org.jetbrains.exposed.dao.id.IntIdTable -import org.jetbrains.exposed.sql.ResultRow -import suwayomi.tachidesk.manga.model.dataclass.CategoryDataClass - -object CategoryTable : IntIdTable() { - val name = varchar("name", 64) - val order = integer("order").default(0) - val isDefault = bool("is_default").default(false) -} - -fun CategoryTable.toDataClass(categoryEntry: ResultRow) = CategoryDataClass( - categoryEntry[this.id].value, - categoryEntry[order], - categoryEntry[name], - categoryEntry[isDefault], -) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/ChapterMetaTable.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/ChapterMetaTable.kt deleted file mode 100644 index 223b202..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/ChapterMetaTable.kt +++ /dev/null @@ -1,10 +0,0 @@ -package suwayomi.tachidesk.manga.model.table - -import org.jetbrains.exposed.dao.id.IntIdTable -import org.jetbrains.exposed.sql.ReferenceOption - -object ChapterMetaTable : IntIdTable() { - val key = varchar("key", 256) - val value = varchar("value", 4096) - val ref = reference("chapter_ref", ChapterTable, ReferenceOption.CASCADE) -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/ChapterTable.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/ChapterTable.kt deleted file mode 100644 index 50ce64a..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/ChapterTable.kt +++ /dev/null @@ -1,56 +0,0 @@ -package suwayomi.tachidesk.manga.model.table - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import org.jetbrains.exposed.dao.id.IntIdTable -import org.jetbrains.exposed.sql.ResultRow -import org.jetbrains.exposed.sql.select -import org.jetbrains.exposed.sql.transactions.transaction -import suwayomi.tachidesk.manga.impl.Chapter.getChapterMetaMap -import suwayomi.tachidesk.manga.model.dataclass.ChapterDataClass - -object ChapterTable : IntIdTable() { - val url = varchar("url", 2048) - val name = varchar("name", 512) - val date_upload = long("date_upload").default(0) - val chapter_number = float("chapter_number").default(-1f) - val scanlator = varchar("scanlator", 128).nullable() - - val isRead = bool("read").default(false) - val isBookmarked = bool("bookmark").default(false) - val lastPageRead = integer("last_page_read").default(0) - val lastReadAt = long("last_read_at").default(0) - - // index is reserved by a function - val chapterIndex = integer("index") - - val isDownloaded = bool("is_downloaded").default(false) - - val pageCount = integer("page_count").default(-1) - - val manga = reference("manga", MangaTable) -} - -fun ChapterTable.toDataClass(chapterEntry: ResultRow) = - ChapterDataClass( - chapterEntry[url], - chapterEntry[name], - chapterEntry[date_upload], - chapterEntry[chapter_number], - chapterEntry[scanlator], - chapterEntry[manga].value, - chapterEntry[isRead], - chapterEntry[isBookmarked], - chapterEntry[lastPageRead], - chapterEntry[lastReadAt], - chapterEntry[chapterIndex], - chapterEntry[isDownloaded], - chapterEntry[pageCount], - transaction { ChapterTable.select { manga eq chapterEntry[manga].value }.count().toInt() }, - getChapterMetaMap(chapterEntry[id]), - ) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/ExtensionTable.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/ExtensionTable.kt deleted file mode 100644 index 2a50873..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/ExtensionTable.kt +++ /dev/null @@ -1,31 +0,0 @@ -package suwayomi.tachidesk.manga.model.table - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import org.jetbrains.exposed.dao.id.IntIdTable - -object ExtensionTable : IntIdTable() { - val apkName = varchar("apk_name", 1024) - - // default is the local source icon from tachiyomi - val iconUrl = varchar("icon_url", 2048) - .default("https://raw.githubusercontent.com/tachiyomiorg/tachiyomi/64ba127e7d43b1d7e6d58a6f5c9b2bd5fe0543f7/app/src/main/res/mipmap-xxxhdpi/ic_local_source.webp") - - val name = varchar("name", 128) - val pkgName = varchar("pkg_name", 128) - val versionName = varchar("version_name", 16) - val versionCode = integer("version_code") - val lang = varchar("lang", 10) - val isNsfw = bool("is_nsfw") - - val isInstalled = bool("is_installed").default(false) - val hasUpdate = bool("has_update").default(false) - val isObsolete = bool("is_obsolete").default(false) - - val classFQName = varchar("class_name", 1024).default("") // fully qualified name -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/MangaMetaTable.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/MangaMetaTable.kt deleted file mode 100644 index 1e83486..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/MangaMetaTable.kt +++ /dev/null @@ -1,10 +0,0 @@ -package suwayomi.tachidesk.manga.model.table - -import org.jetbrains.exposed.dao.id.IntIdTable -import org.jetbrains.exposed.sql.ReferenceOption - -object MangaMetaTable : IntIdTable() { - val key = varchar("key", 256) - val value = varchar("value", 4096) - val ref = reference("manga_ref", MangaTable, ReferenceOption.CASCADE) -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/MangaTable.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/MangaTable.kt deleted file mode 100644 index ddb1765..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/MangaTable.kt +++ /dev/null @@ -1,67 +0,0 @@ -package suwayomi.tachidesk.manga.model.table - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import eu.kanade.tachiyomi.source.model.SManga -import org.jetbrains.exposed.dao.id.IntIdTable -import org.jetbrains.exposed.sql.ResultRow -import suwayomi.tachidesk.manga.impl.Manga.getMangaMetaMap -import suwayomi.tachidesk.manga.impl.MangaList.proxyThumbnailUrl -import suwayomi.tachidesk.manga.model.dataclass.MangaDataClass -import suwayomi.tachidesk.manga.model.table.MangaStatus.Companion - -object MangaTable : IntIdTable() { - val url = varchar("url", 2048) - val title = varchar("title", 512) - val initialized = bool("initialized").default(false) - - val artist = varchar("artist", 64).nullable() - val author = varchar("author", 64).nullable() - val description = varchar("description", 4096).nullable() - val genre = varchar("genre", 1024).nullable() - - val status = integer("status").default(SManga.UNKNOWN) - val thumbnail_url = varchar("thumbnail_url", 2048).nullable() - - val inLibrary = bool("in_library").default(false) - val defaultCategory = bool("default_category").default(true) - - // source is used by some ancestor of IntIdTable - val sourceReference = long("source") -} - -fun MangaTable.toDataClass(mangaEntry: ResultRow) = - MangaDataClass( - mangaEntry[this.id].value, - mangaEntry[sourceReference].toString(), - - mangaEntry[url], - mangaEntry[title], - proxyThumbnailUrl(mangaEntry[this.id].value), - - mangaEntry[initialized], - - mangaEntry[artist], - mangaEntry[author], - mangaEntry[description], - mangaEntry[genre], - Companion.valueOf(mangaEntry[status]).name, - mangaEntry[inLibrary], - meta = getMangaMetaMap(mangaEntry[id]) - ) - -enum class MangaStatus(val status: Int) { - UNKNOWN(0), - ONGOING(1), - COMPLETED(2), - LICENSED(3); - - companion object { - fun valueOf(value: Int): MangaStatus = values().find { it.status == value } ?: UNKNOWN - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/PageTable.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/PageTable.kt deleted file mode 100644 index 392aefa..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/PageTable.kt +++ /dev/null @@ -1,18 +0,0 @@ -package suwayomi.tachidesk.manga.model.table - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import org.jetbrains.exposed.dao.id.IntIdTable - -object PageTable : IntIdTable() { - val index = integer("index") - val url = varchar("url", 2048) - val imageUrl = varchar("imageUrl", 2048).nullable() - - val chapter = reference("chapter", ChapterTable) -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/SourceTable.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/SourceTable.kt deleted file mode 100644 index fb66f3b..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/SourceTable.kt +++ /dev/null @@ -1,18 +0,0 @@ -package suwayomi.tachidesk.manga.model.table - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import org.jetbrains.exposed.dao.id.IdTable - -object SourceTable : IdTable() { - override val id = long("id").entityId() - val name = varchar("name", 128) - val lang = varchar("lang", 10) - val extension = reference("extension", ExtensionTable) - val partOfFactorySource = bool("part_of_factory_source").default(false) -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/JavalinSetup.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/JavalinSetup.kt deleted file mode 100644 index abe53b6..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/JavalinSetup.kt +++ /dev/null @@ -1,81 +0,0 @@ -package suwayomi.tachidesk.server - -import io.javalin.Javalin -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.SupervisorJob -import kotlinx.coroutines.future.future -import mu.KotlinLogging -import suwayomi.tachidesk.anime.AnimeAPI -import suwayomi.tachidesk.manga.TachideskAPI -import suwayomi.tachidesk.server.util.Browser -import java.io.IOException -import java.util.concurrent.CompletableFuture -import kotlin.concurrent.thread - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -object JavalinSetup { - private val logger = KotlinLogging.logger {} - - private val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO) - - fun future(block: suspend CoroutineScope.() -> T): CompletableFuture { - return scope.future(block = block) - } - - fun javalinSetup() { - var hasWebUiBundled = false - - val app = Javalin.create { config -> - try { - // if the bellow line throws an exception then webUI is not bundled - this::class.java.getResource("/webUI/index.html") - - // no exception so we can tell javalin to serve webUI - hasWebUiBundled = true - config.addStaticFiles("/webUI") - config.addSinglePageRoot("/", "/webUI/index.html") - } catch (e: RuntimeException) { - logger.warn("react build files are missing.") - hasWebUiBundled = false - } - config.enableCorsForAllOrigins() - }.events { event -> - event.serverStarted { - if (hasWebUiBundled && serverConfig.initialOpenInBrowserEnabled) { - Browser.openInBrowser() - } - } - }.start(serverConfig.ip, serverConfig.port) - - // when JVM is prompted to shutdown, stop javalin gracefully - Runtime.getRuntime().addShutdownHook( - thread(start = false) { - app.stop() - } - ) - - app.exception(NullPointerException::class.java) { e, ctx -> - logger.error("NullPointerException while handling the request", e) - ctx.status(404) - } - app.exception(NoSuchElementException::class.java) { e, ctx -> - logger.error("NoSuchElementException while handling the request", e) - ctx.status(404) - } - app.exception(IOException::class.java) { e, ctx -> - logger.error("IOException while handling the request", e) - ctx.status(500) - ctx.result(e.message ?: "Internal Server Error") - } - - TachideskAPI.defineEndpoints(app) - AnimeAPI.defineEndpoints(app) - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/ServerConfig.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/ServerConfig.kt deleted file mode 100644 index cf2c219..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/ServerConfig.kt +++ /dev/null @@ -1,33 +0,0 @@ -package suwayomi.tachidesk.server - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import com.typesafe.config.Config -import io.github.config4k.getValue -import xyz.nulldev.ts.config.ConfigModule -import xyz.nulldev.ts.config.GlobalConfigManager -import xyz.nulldev.ts.config.debugLogsEnabled - -class ServerConfig(config: Config) : ConfigModule(config) { - val ip: String by config - val port: Int by config - - // proxy - val socksProxyEnabled: Boolean by config - val socksProxyHost: String by config - val socksProxyPort: String by config - - // misc - val debugLogsEnabled: Boolean = debugLogsEnabled(GlobalConfigManager.config) - val systemTrayEnabled: Boolean by config - val initialOpenInBrowserEnabled: Boolean by config - - companion object { - fun register(config: Config) = ServerConfig(config.getConfig("server")) - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/ServerSetup.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/ServerSetup.kt index 867103a..94ba921 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/ServerSetup.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/server/ServerSetup.kt @@ -10,66 +10,18 @@ package suwayomi.tachidesk.server import eu.kanade.tachiyomi.App import mu.KotlinLogging import org.kodein.di.DI -import org.kodein.di.bind import org.kodein.di.conf.global -import org.kodein.di.singleton import suwayomi.server.BuildConfig -import suwayomi.tachidesk.server.database.databaseUp -import suwayomi.tachidesk.server.util.AppMutex.handleAppMutex -import suwayomi.tachidesk.server.util.SystemTray.systemTray import xyz.nulldev.androidcompat.AndroidCompat import xyz.nulldev.androidcompat.AndroidCompatInitializer -import xyz.nulldev.ts.config.ApplicationRootDir import xyz.nulldev.ts.config.ConfigKodeinModule -import xyz.nulldev.ts.config.GlobalConfigManager -import java.io.File private val logger = KotlinLogging.logger {} -class ApplicationDirs( - val dataRoot: String = ApplicationRootDir -) { - val extensionsRoot = "$dataRoot/extensions" - val mangaThumbnailsRoot = "$dataRoot/manga-thumbnails" - val animeThumbnailsRoot = "$dataRoot/anime-thumbnails" - val mangaRoot = "$dataRoot/manga" -} - -val serverConfig: ServerConfig by lazy { GlobalConfigManager.module() } - -val systemTrayInstance by lazy { systemTray() } - val androidCompat by lazy { AndroidCompat() } fun applicationSetup() { - logger.info("Running Tachidesk ${BuildConfig.VERSION} revision ${BuildConfig.REVISION}") - - // Application dirs - val applicationDirs = ApplicationDirs() - DI.global.addImport( - DI.Module("Server") { - bind() with singleton { applicationDirs } - } - ) - - // make dirs we need - listOf( - applicationDirs.dataRoot, - applicationDirs.extensionsRoot, - applicationDirs.extensionsRoot + "/icon", - applicationDirs.mangaThumbnailsRoot, - applicationDirs.animeThumbnailsRoot, - ).forEach { - File(it).mkdirs() - } - - // register Tachidesk's config which is dubbed "ServerConfig" - GlobalConfigManager.registerModule( - ServerConfig.register(GlobalConfigManager.config) - ) - - // Make sure only one instance of the app is running - handleAppMutex() + logger.info("Running Inspector ${BuildConfig.VERSION} revision ${BuildConfig.REVISION}") // Load config API DI.global.addImport(ConfigKodeinModule().create()) @@ -77,41 +29,4 @@ fun applicationSetup() { AndroidCompatInitializer().init() // start app androidCompat.startApp(App()) - - // create conf file if doesn't exist - try { - val dataConfFile = File("${applicationDirs.dataRoot}/server.conf") - if (!dataConfFile.exists()) { - JavalinSetup::class.java.getResourceAsStream("/server-reference.conf").use { input -> - dataConfFile.outputStream().use { output -> - input.copyTo(output) - } - } - } - } catch (e: Exception) { - logger.error("Exception while creating initial server.conf:\n", e) - } - - databaseUp() - - // create system tray - if (serverConfig.systemTrayEnabled) { - try { - systemTrayInstance - } catch (e: Throwable) { // cover both java.lang.Exception and java.lang.Error - e.printStackTrace() - } - } - - // Disable jetty's logging - System.setProperty("org.eclipse.jetty.util.log.announce", "false") - System.setProperty("org.eclipse.jetty.util.log.class", "org.eclipse.jetty.util.log.StdErrLog") - System.setProperty("org.eclipse.jetty.LEVEL", "OFF") - - // socks proxy settings - if (serverConfig.socksProxyEnabled) { - System.getProperties()["socksProxyHost"] = serverConfig.socksProxyHost - System.getProperties()["socksProxyPort"] = serverConfig.socksProxyPort - logger.info("Socks Proxy is enabled to ${serverConfig.socksProxyHost}:${serverConfig.socksProxyPort}") - } } diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/database/DBManager.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/database/DBManager.kt deleted file mode 100644 index 553afa2..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/database/DBManager.kt +++ /dev/null @@ -1,32 +0,0 @@ -package suwayomi.tachidesk.server.database - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import org.jetbrains.exposed.sql.Database -import org.kodein.di.DI -import org.kodein.di.conf.global -import org.kodein.di.instance -import suwayomi.tachidesk.server.ApplicationDirs -import suwayomi.tachidesk.server.database.migration.lib.loadMigrationsFrom -import suwayomi.tachidesk.server.database.migration.lib.runMigrations - -object DBManager { - val db by lazy { - val applicationDirs by DI.global.instance() - Database.connect("jdbc:h2:${applicationDirs.dataRoot}/database", "org.h2.Driver") - } -} - -fun databaseUp() { - // must mention db object so the lazy block executes - val db = DBManager.db - db.useNestedTransactions = true - - val migrations = loadMigrationsFrom("suwayomi.tachidesk.server.database.migration") - runMigrations(migrations) -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0001_Initial.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0001_Initial.kt deleted file mode 100644 index 12dc1ed..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0001_Initial.kt +++ /dev/null @@ -1,135 +0,0 @@ -package suwayomi.tachidesk.server.database.migration - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import eu.kanade.tachiyomi.source.model.SManga -import org.jetbrains.exposed.dao.id.IdTable -import org.jetbrains.exposed.dao.id.IntIdTable -import org.jetbrains.exposed.sql.SchemaUtils -import org.jetbrains.exposed.sql.transactions.transaction -import suwayomi.tachidesk.server.database.migration.lib.Migration - -@Suppress("ClassName", "unused") -class M0001_Initial : Migration() { - private class ExtensionTable : IntIdTable() { - init { - varchar("apk_name", 1024) - // default is the local source icon from tachiyomi - varchar("icon_url", 2048) - .default("https://raw.githubusercontent.com/tachiyomiorg/tachiyomi/64ba127e7d43b1d7e6d58a6f5c9b2bd5fe0543f7/app/src/main/res/mipmap-xxxhdpi/ic_local_source.webp") - varchar("name", 128) - varchar("pkg_name", 128) - varchar("version_name", 16) - integer("version_code") - varchar("lang", 10) - bool("is_nsfw") - - bool("is_installed").default(false) - bool("has_update").default(false) - bool("is_obsolete").default(false) - - varchar("class_name", 1024).default("") // fully qualified name - } - } - - private class SourceTable(extensionTable: ExtensionTable) : IdTable() { - override val id = long("id").entityId() - init { - varchar("name", 128) - varchar("lang", 10) - reference("extension", extensionTable) - bool("part_of_factory_source").default(false) - } - } - - private class MangaTable : IntIdTable() { - init { - varchar("url", 2048) - varchar("title", 512) - bool("initialized").default(false) - - varchar("artist", 64).nullable() - varchar("author", 64).nullable() - varchar("description", 4096).nullable() - varchar("genre", 1024).nullable() - - // val status = enumeration("status", MangaStatus::class).default(MangaStatus.UNKNOWN) - integer("status").default(SManga.UNKNOWN) - varchar("thumbnail_url", 2048).nullable() - - bool("in_library").default(false) - bool("default_category").default(true) - - // source is used by some ancestor of IntIdTable - long("source") - } - } - - private class ChapterTable(mangaTable: MangaTable) : IntIdTable() { - init { - varchar("url", 2048) - varchar("name", 512) - long("date_upload").default(0) - float("chapter_number").default(-1f) - varchar("scanlator", 128).nullable() - - bool("read").default(false) - bool("bookmark").default(false) - integer("last_page_read").default(0) - - integer("number_in_list") - reference("manga", mangaTable) - } - } - - private class PageTable(chapterTable: ChapterTable) : IntIdTable() { - init { - integer("index") - varchar("url", 2048) - varchar("imageUrl", 2048).nullable() - reference("chapter", chapterTable) - } - } - - private class CategoryTable : IntIdTable() { - init { - varchar("name", 64) - bool("is_landing").default(false) - integer("order").default(0) - } - } - - private class CategoryMangaTable(categoryTable: CategoryTable, mangaTable: MangaTable) : IntIdTable() { - init { - reference("category", categoryTable) - reference("manga", mangaTable) - } - } - - /** initial migration, create all tables */ - override fun run() { - transaction { - val extensionTable = ExtensionTable() - val sourceTable = SourceTable(extensionTable) - val mangaTable = MangaTable() - val chapterTable = ChapterTable(mangaTable) - val pageTable = PageTable(chapterTable) - val categoryTable = CategoryTable() - val categoryMangaTable = CategoryMangaTable(categoryTable, mangaTable) - SchemaUtils.create( - extensionTable, - sourceTable, - mangaTable, - chapterTable, - pageTable, - categoryTable, - categoryMangaTable, - ) - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0002_ChapterTableIndexRename.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0002_ChapterTableIndexRename.kt deleted file mode 100644 index 582dd9f..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0002_ChapterTableIndexRename.kt +++ /dev/null @@ -1,24 +0,0 @@ -package suwayomi.tachidesk.server.database.migration - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import org.jetbrains.exposed.sql.transactions.TransactionManager -import org.jetbrains.exposed.sql.vendors.currentDialect -import suwayomi.tachidesk.server.database.migration.lib.Migration - -@Suppress("ClassName", "unused") -class M0002_ChapterTableIndexRename : Migration() { - /** this migration renamed ChapterTable.NUMBER_IN_LIST to ChapterTable.INDEX */ - override fun run() { - with(TransactionManager.current()) { - exec("ALTER TABLE CHAPTER ALTER COLUMN NUMBER_IN_LIST RENAME TO INDEX") - commit() - currentDialect.resetCaches() - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0003_DefaultCategory.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0003_DefaultCategory.kt deleted file mode 100644 index 5a3dc46..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0003_DefaultCategory.kt +++ /dev/null @@ -1,24 +0,0 @@ -package suwayomi.tachidesk.server.database.migration - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import org.jetbrains.exposed.sql.transactions.TransactionManager -import org.jetbrains.exposed.sql.vendors.currentDialect -import suwayomi.tachidesk.server.database.migration.lib.Migration - -@Suppress("ClassName", "unused") -class M0003_DefaultCategory : Migration() { - /** this migration renamed CategoryTable.IS_LANDING to ChapterTable.IS_DEFAULT */ - override fun run() { - with(TransactionManager.current()) { - exec("ALTER TABLE CATEGORY ALTER COLUMN IS_LANDING RENAME TO IS_DEFAULT") - commit() - currentDialect.resetCaches() - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0004_AnimeTablesBatch1.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0004_AnimeTablesBatch1.kt deleted file mode 100644 index 1abee83..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0004_AnimeTablesBatch1.kt +++ /dev/null @@ -1,54 +0,0 @@ -package suwayomi.tachidesk.server.database.migration - -import org.jetbrains.exposed.dao.id.IdTable -import org.jetbrains.exposed.dao.id.IntIdTable -import org.jetbrains.exposed.sql.SchemaUtils -import org.jetbrains.exposed.sql.transactions.transaction -import suwayomi.tachidesk.server.database.migration.lib.Migration - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -class M0004_AnimeTablesBatch1 : Migration() { - private class AnimeExtensionTable : IntIdTable() { - val apkName = varchar("apk_name", 1024) - - // default is the local source icon from tachiyomi - val iconUrl = varchar("icon_url", 2048) - .default("https://raw.githubusercontent.com/tachiyomiorg/tachiyomi/64ba127e7d43b1d7e6d58a6f5c9b2bd5fe0543f7/app/src/main/res/mipmap-xxxhdpi/ic_local_source.webp") - - val name = varchar("name", 128) - val pkgName = varchar("pkg_name", 128) - val versionName = varchar("version_name", 16) - val versionCode = integer("version_code") - val lang = varchar("lang", 10) - val isNsfw = bool("is_nsfw") - - val isInstalled = bool("is_installed").default(false) - val hasUpdate = bool("has_update").default(false) - val isObsolete = bool("is_obsolete").default(false) - - val classFQName = varchar("class_name", 1024).default("") // fully qualified name - } - - private class AnimeSourceTable : IdTable() { - override val id = long("id").entityId() - val name = varchar("name", 128) - val lang = varchar("lang", 10) - val extension = reference("extension", suwayomi.tachidesk.anime.model.table.AnimeExtensionTable) - val partOfFactorySource = bool("part_of_factory_source").default(false) - } - - override fun run() { - transaction { - SchemaUtils.create( - AnimeExtensionTable(), - AnimeSourceTable() - ) - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0005_AnimeTablesBatch2.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0005_AnimeTablesBatch2.kt deleted file mode 100644 index 62fcc1a..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0005_AnimeTablesBatch2.kt +++ /dev/null @@ -1,45 +0,0 @@ -package suwayomi.tachidesk.server.database.migration - -import eu.kanade.tachiyomi.animesource.model.SAnime -import org.jetbrains.exposed.dao.id.IntIdTable -import org.jetbrains.exposed.sql.SchemaUtils -import org.jetbrains.exposed.sql.transactions.transaction -import suwayomi.tachidesk.server.database.migration.lib.Migration - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -class M0005_AnimeTablesBatch2 : Migration() { - private class AnimeTable : IntIdTable() { - val url = varchar("url", 2048) - val title = varchar("title", 512) - val initialized = bool("initialized").default(false) - - val artist = varchar("artist", 64).nullable() - val author = varchar("author", 64).nullable() - val description = varchar("description", 4096).nullable() - val genre = varchar("genre", 1024).nullable() - - // val status = enumeration("status", MangaStatus::class).default(MangaStatus.UNKNOWN) - val status = integer("status").default(SAnime.UNKNOWN) - val thumbnail_url = varchar("thumbnail_url", 2048).nullable() - - val inLibrary = bool("in_library").default(false) - val defaultCategory = bool("default_category").default(true) - - // source is used by some ancestor of IntIdTable - val sourceReference = long("source") - } - - override fun run() { - transaction { - SchemaUtils.create( - AnimeTable() - ) - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0006_AnimeTablesBatch3.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0006_AnimeTablesBatch3.kt deleted file mode 100644 index 17d8c20..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0006_AnimeTablesBatch3.kt +++ /dev/null @@ -1,41 +0,0 @@ -package suwayomi.tachidesk.server.database.migration - -import org.jetbrains.exposed.dao.id.IntIdTable -import org.jetbrains.exposed.sql.SchemaUtils -import org.jetbrains.exposed.sql.transactions.transaction -import suwayomi.tachidesk.anime.model.table.AnimeTable -import suwayomi.tachidesk.server.database.migration.lib.Migration - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -class M0006_AnimeTablesBatch3 : Migration() { - private class EpisodeTable : IntIdTable() { - val url = varchar("url", 2048) - val name = varchar("name", 512) - val date_upload = long("date_upload").default(0) - val episode_number = float("episode_number").default(-1f) - val scanlator = varchar("scanlator", 128).nullable() - - val isRead = bool("read").default(false) - val isBookmarked = bool("bookmark").default(false) - val lastPageRead = integer("last_page_read").default(0) - - // index is reserved by a function - val animeIndex = integer("index") - - val anime = reference("anime", AnimeTable) - } - - override fun run() { - transaction { - SchemaUtils.create( - EpisodeTable() - ) - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0007_ChapterIsDownloaded.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0007_ChapterIsDownloaded.kt deleted file mode 100644 index ef6cd29..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0007_ChapterIsDownloaded.kt +++ /dev/null @@ -1,24 +0,0 @@ -package suwayomi.tachidesk.server.database.migration - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import org.jetbrains.exposed.sql.transactions.TransactionManager -import org.jetbrains.exposed.sql.vendors.currentDialect -import suwayomi.tachidesk.server.database.migration.lib.Migration - -@Suppress("ClassName", "unused") -class M0007_ChapterIsDownloaded : Migration() { - /** this migration added IS_DOWNLOADED to CHAPTER */ - override fun run() { - with(TransactionManager.current()) { - exec("ALTER TABLE CHAPTER ADD COLUMN IS_DOWNLOADED BOOLEAN DEFAULT FALSE") - commit() - currentDialect.resetCaches() - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0008_ChapterPageCount.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0008_ChapterPageCount.kt deleted file mode 100644 index 9b038e2..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0008_ChapterPageCount.kt +++ /dev/null @@ -1,24 +0,0 @@ -package suwayomi.tachidesk.server.database.migration - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import org.jetbrains.exposed.sql.transactions.TransactionManager -import org.jetbrains.exposed.sql.vendors.currentDialect -import suwayomi.tachidesk.server.database.migration.lib.Migration - -@Suppress("ClassName", "unused") -class M0008_ChapterPageCount : Migration() { - /** this migration added PAGE_COUNT to CHAPTER */ - override fun run() { - with(TransactionManager.current()) { - exec("ALTER TABLE CHAPTER ADD COLUMN PAGE_COUNT INT DEFAULT -1") - commit() - currentDialect.resetCaches() - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0009_ChapterLastReadAt.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0009_ChapterLastReadAt.kt deleted file mode 100644 index 81a2603..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0009_ChapterLastReadAt.kt +++ /dev/null @@ -1,25 +0,0 @@ -package suwayomi.tachidesk.server.database.migration - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import org.jetbrains.exposed.sql.transactions.TransactionManager -import org.jetbrains.exposed.sql.vendors.currentDialect -import suwayomi.tachidesk.server.database.migration.lib.Migration - -@Suppress("ClassName", "unused") -class M0009_ChapterLastReadAt : Migration() { - /** this migration added PAGE_COUNT to CHAPTER */ - override fun run() { - with(TransactionManager.current()) { - // BIGINT == Long - exec("ALTER TABLE CHAPTER ADD COLUMN LAST_READ_AT BIGINT DEFAULT 0") - commit() - currentDialect.resetCaches() - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0010_MangaAndChapterMeta.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0010_MangaAndChapterMeta.kt deleted file mode 100644 index c47e74b..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0010_MangaAndChapterMeta.kt +++ /dev/null @@ -1,38 +0,0 @@ -package suwayomi.tachidesk.server.database.migration - -import org.jetbrains.exposed.dao.id.IntIdTable -import org.jetbrains.exposed.sql.ReferenceOption -import org.jetbrains.exposed.sql.SchemaUtils -import org.jetbrains.exposed.sql.transactions.transaction -import suwayomi.tachidesk.manga.model.table.ChapterTable -import suwayomi.tachidesk.manga.model.table.MangaTable -import suwayomi.tachidesk.server.database.migration.lib.Migration - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -class M0010_MangaAndChapterMeta : Migration() { - private class ChapterMetaTable : IntIdTable() { - val key = varchar("key", 256) - val value = varchar("value", 4096) - val ref = reference("chapter_ref", ChapterTable, ReferenceOption.CASCADE) - } - private class MangaMetaTable : IntIdTable() { - val key = varchar("key", 256) - val value = varchar("value", 4096) - val ref = reference("manga_ref", MangaTable, ReferenceOption.CASCADE) - } - - override fun run() { - transaction { - SchemaUtils.create( - ChapterMetaTable(), - MangaMetaTable() - ) - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/lib/LICENSE b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/lib/LICENSE deleted file mode 100644 index bb6a909..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/lib/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2020 Andreas Mausch - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/lib/Migration.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/lib/Migration.kt deleted file mode 100644 index 6dbba20..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/lib/Migration.kt +++ /dev/null @@ -1,25 +0,0 @@ -package suwayomi.tachidesk.server.database.migration.lib - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -// originally licenced under MIT by Andreas Mausch, Changes are licenced under Mozilla Public License, v. 2.0. -// adopted from: https://gitlab.com/andreas-mausch/exposed-migrations/-/tree/4bf853c18a24d0170eda896ddbb899cb01233595 - -abstract class Migration { - val name: String - val version: Int - - init { - val groups = Regex("^M(\\d+)_(.*)$").matchEntire(this::class.simpleName!!)?.groupValues - ?: throw IllegalArgumentException("Migration class name doesn't match convention") - version = groups[1].toInt() - name = groups[2] - } - - abstract fun run() -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/lib/MigrationEntity.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/lib/MigrationEntity.kt deleted file mode 100644 index 04c71c0..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/lib/MigrationEntity.kt +++ /dev/null @@ -1,37 +0,0 @@ -package suwayomi.tachidesk.server.database.migration.lib - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -// originally licenced under MIT by Andreas Mausch, Changes are licenced under Mozilla Public License, v. 2.0. -// adopted from: https://gitlab.com/andreas-mausch/exposed-migrations/-/tree/4bf853c18a24d0170eda896ddbb899cb01233595 - -import org.jetbrains.exposed.dao.IntEntity -import org.jetbrains.exposed.dao.IntEntityClass -import org.jetbrains.exposed.dao.id.EntityID -import org.jetbrains.exposed.dao.id.IdTable -import org.jetbrains.exposed.sql.`java-time`.timestamp - -object MigrationsTable : IdTable() { - override val id = integer("version").entityId() - override val primaryKey = PrimaryKey(id) - - val name = varchar("name", length = 400) - val executedAt = timestamp("executed_at") - - init { - index(true, name) - } -} - -class MigrationEntity(id: EntityID) : IntEntity(id) { - companion object : IntEntityClass(MigrationsTable) - - var version by MigrationsTable.id - var name by MigrationsTable.name - var executedAt by MigrationsTable.executedAt -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/lib/runMigrations.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/lib/runMigrations.kt deleted file mode 100644 index cf1dc33..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/lib/runMigrations.kt +++ /dev/null @@ -1,123 +0,0 @@ -package suwayomi.tachidesk.server.database.migration.lib - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -// originally licenced under MIT by Andreas Mausch, Changes are licenced under Mozilla Public License, v. 2.0. -// adopted from: https://gitlab.com/andreas-mausch/exposed-migrations/-/tree/4bf853c18a24d0170eda896ddbb899cb01233595 - -import mu.KotlinLogging -import org.jetbrains.exposed.dao.id.EntityID -import org.jetbrains.exposed.sql.Database -import org.jetbrains.exposed.sql.SchemaUtils.create -import org.jetbrains.exposed.sql.exists -import org.jetbrains.exposed.sql.transactions.TransactionManager -import org.jetbrains.exposed.sql.transactions.transaction -import suwayomi.tachidesk.server.ServerConfig -import java.nio.file.FileSystems -import java.nio.file.Files -import java.nio.file.Paths -import java.time.Clock -import java.time.Instant.now -import kotlin.io.path.ExperimentalPathApi -import kotlin.io.path.isDirectory -import kotlin.io.path.name -import kotlin.streams.toList - -private val logger = KotlinLogging.logger {} - -fun runMigrations(migrations: List, database: Database = TransactionManager.defaultDatabase!!, clock: Clock = Clock.systemUTC()) { - checkVersions(migrations) - - logger.info { "Running migrations on database ${database.url}" } - - val latestVersion = transaction(database) { - createTableIfNotExists(database) - MigrationEntity.all().maxByOrNull { it.version }?.version?.value - } - - logger.info { "Database version before migrations: $latestVersion" } - - migrations - .sortedBy { it.version } - .filter { shouldRun(latestVersion, it) } - .forEach { - logger.info { "Running migration version ${it.version}: ${it.name}" } - transaction(database) { - it.run() - - MigrationEntity.new { - version = EntityID(it.version, MigrationsTable) - name = it.name - executedAt = now(clock) - } - } - } - - logger.info { "Migrations finished successfully" } -} - -@OptIn(ExperimentalPathApi::class) -private fun getTopLevelClasses(packageName: String): List> { - ServerConfig::class.java.getResource("/" + packageName.replace('.', '/')) - val path = "/" + packageName.replace('.', '/') - val uri = ServerConfig::class.java.getResource(path).toURI() - - return when (uri.scheme) { - "jar" -> { - val fileSystem = FileSystems.newFileSystem(uri, emptyMap()) - fileSystem.getPath(path) - } - else -> Paths.get(uri) - }.let { Files.walk(it, 1) } - .toList() - .filterNot { it.isDirectory() || it.name.contains('$') } // '$' means it's not a top level class - .filter { it.name.endsWith(".class") } - .map { Class.forName("$packageName.${it.name.substringBefore(".class")}") } -} - -@Suppress("UnstableApiUsage") -fun loadMigrationsFrom(packageName: String): List { - return getTopLevelClasses(packageName) - .map { - logger.debug("found Migration class ${it.name}") - val clazz = it.getDeclaredConstructor().newInstance() - if (clazz is Migration) - clazz - else - throw RuntimeException("found a class that's not a Migration") - } -} - -private fun checkVersions(migrations: List) { - val sorted = migrations.map { it.version }.sorted() - if ((1..migrations.size).toList() != sorted) { - throw IllegalStateException("List of migrations version is not consecutive: $sorted") - } -} - -private fun createTableIfNotExists(database: Database) { - if (MigrationsTable.exists()) { - return - } - val tableNames = database.dialect.allTablesNames() - when (tableNames.isEmpty()) { - true -> { - logger.info { "Empty database found, creating table for migrations" } - create(MigrationsTable) - } - false -> throw IllegalStateException("Tried to run migrations against a non-empty database without a Migrations table. This is not supported.") - } -} - -private fun shouldRun(latestVersion: Int?, migration: Migration): Boolean { - val run = latestVersion?.let { migration.version > it } ?: true - if (!run) { - logger.debug { "Skipping migration version ${migration.version}: ${migration.name}" } - } - return run -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/impl/About.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/impl/About.kt deleted file mode 100644 index 6388e4b..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/impl/About.kt +++ /dev/null @@ -1,34 +0,0 @@ -package suwayomi.tachidesk.server.impl - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import suwayomi.server.BuildConfig - -data class AboutDataClass( - val name: String, - val version: String, - val revision: String, - val buildType: String, - val buildTime: Long, - val github: String, - val discord: String, -) - -object About { - fun getAbout(): AboutDataClass { - return AboutDataClass( - BuildConfig.NAME, - BuildConfig.VERSION, - BuildConfig.REVISION, - BuildConfig.BUILD_TYPE, - BuildConfig.BUILD_TIME, - BuildConfig.GITHUB, - BuildConfig.DISCORD, - ) - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/util/AppExit.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/util/AppExit.kt deleted file mode 100644 index b636045..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/util/AppExit.kt +++ /dev/null @@ -1,25 +0,0 @@ -package suwayomi.tachidesk.server.util - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import mu.KotlinLogging -import kotlin.system.exitProcess - -private val logger = KotlinLogging.logger {} - -enum class ExitCode(val code: Int) { - Success(0), - MutexCheckFailedTachideskRunning(1), - MutexCheckFailedAnotherAppRunning(2); -} - -fun shutdownApp(exitCode: ExitCode) { - logger.info("Shutting Down Tachidesk. Goodbye!") - - exitProcess(exitCode.code) -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/util/AppMutex.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/util/AppMutex.kt deleted file mode 100644 index f8b33ed..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/util/AppMutex.kt +++ /dev/null @@ -1,77 +0,0 @@ -package suwayomi.tachidesk.server.util - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import io.javalin.plugin.json.JavalinJackson -import mu.KotlinLogging -import okhttp3.OkHttpClient -import okhttp3.Request.Builder -import suwayomi.tachidesk.server.impl.AboutDataClass -import suwayomi.tachidesk.server.serverConfig -import suwayomi.tachidesk.server.util.Browser.openInBrowser -import suwayomi.tachidesk.server.util.ExitCode.MutexCheckFailedAnotherAppRunning -import suwayomi.tachidesk.server.util.ExitCode.MutexCheckFailedTachideskRunning -import java.io.IOException -import java.util.concurrent.TimeUnit - -object AppMutex { - private val logger = KotlinLogging.logger {} - - private enum class AppMutexState(val stat: Int) { - Clear(0), - TachideskInstanceRunning(1), - OtherApplicationRunning(2) - } - - private val appIP = if (serverConfig.ip == "0.0.0.0") "127.0.0.1" else serverConfig.ip - - private fun checkAppMutex(): AppMutexState { - val client = OkHttpClient.Builder() - .connectTimeout(200, TimeUnit.MILLISECONDS) - .build() - - val request = Builder() - .url("http://$appIP:${serverConfig.port}/api/v1/about/") - .build() - - val response = try { - client.newCall(request).execute().use { response -> response.body!!.string() } - } catch (e: IOException) { - return AppMutexState.Clear - } - - return try { - JavalinJackson.fromJson(response, AboutDataClass::class.java) - AppMutexState.TachideskInstanceRunning - } catch (e: IOException) { - AppMutexState.OtherApplicationRunning - } - } - - fun handleAppMutex() { - when (checkAppMutex()) { - AppMutexState.Clear -> { - logger.info("Mutex status is clear, Resuming startup.") - } - AppMutexState.TachideskInstanceRunning -> { - logger.info("Another instance of Tachidesk is running on $appIP:${serverConfig.port}") - - logger.info("Probably user thought tachidesk is closed so, opening webUI in browser again.") - openInBrowser() - - logger.info("Aborting startup.") - - shutdownApp(MutexCheckFailedTachideskRunning) - } - AppMutexState.OtherApplicationRunning -> { - logger.error("A non Tachidesk application is running on $appIP:${serverConfig.port}, aborting startup.") - shutdownApp(MutexCheckFailedAnotherAppRunning) - } - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/util/Browser.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/util/Browser.kt deleted file mode 100644 index 9fbf97a..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/util/Browser.kt +++ /dev/null @@ -1,38 +0,0 @@ -package suwayomi.tachidesk.server.util - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import dorkbox.util.Desktop -import suwayomi.tachidesk.server.serverConfig - -object Browser { - private val appIP = if (serverConfig.ip == "0.0.0.0") "127.0.0.1" else serverConfig.ip - private val appBaseUrl = "http://$appIP:${serverConfig.port}" - - private val electronInstances = mutableListOf() - - fun openInBrowser() { - - val openInElectron = System.getProperty("suwayomi.tachidesk.server.webInterface")?.equals("electron") - - if (openInElectron == true) { - try { - val electronPath = System.getProperty("suwayomi.tachidesk.server.electronPath")!! - electronInstances.add(ProcessBuilder(electronPath, appBaseUrl).start()) - } catch (e: Throwable) { // cover both java.lang.Exception and java.lang.Error - e.printStackTrace() - } - } else { - try { - Desktop.browseURL(appBaseUrl) - } catch (e: Throwable) { // cover both java.lang.Exception and java.lang.Error - e.printStackTrace() - } - } - } -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/util/SystemTray.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/util/SystemTray.kt deleted file mode 100644 index 774c937..0000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/util/SystemTray.kt +++ /dev/null @@ -1,62 +0,0 @@ -package suwayomi.tachidesk.server.util - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import dorkbox.systemTray.MenuItem -import dorkbox.systemTray.SystemTray -import dorkbox.util.CacheUtil -import suwayomi.server.BuildConfig -import suwayomi.tachidesk.server.ServerConfig -import suwayomi.tachidesk.server.serverConfig -import suwayomi.tachidesk.server.util.Browser.openInBrowser -import suwayomi.tachidesk.server.util.ExitCode.Success - -object SystemTray { - fun systemTray(): SystemTray? { - try { - // ref: https://github.com/dorkbox/SystemTray/blob/master/test/dorkbox/TestTray.java - SystemTray.DEBUG = serverConfig.debugLogsEnabled - - CacheUtil.clear(BuildConfig.NAME) - - if (System.getProperty("os.name").startsWith("Mac")) { - SystemTray.FORCE_TRAY_TYPE = SystemTray.TrayType.Awt - } - - val systemTray = SystemTray.get(BuildConfig.NAME) ?: return null - val mainMenu = systemTray.menu - - mainMenu.add( - MenuItem( - "Open Tachidesk" - ) { - openInBrowser() - } - ) - - val icon = ServerConfig::class.java.getResource("/icon/faviconlogo.png") - - // systemTray.setTooltip("Tachidesk") - systemTray.setImage(icon) - // systemTray.status = "No Mail" - - mainMenu.add( - MenuItem("Quit") { - shutdownApp(Success) - } - ) - - systemTray.installShutdownHook() - - return systemTray - } catch (e: Exception) { - e.printStackTrace() - return null - } - } -} diff --git a/server/src/main/resources/icon/faviconlogo.ico b/server/src/main/resources/icon/faviconlogo.ico deleted file mode 100644 index eac577b06daaccde4da145f40f8518d3430299ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113318 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 z zgFbZNsS2B+OVujMX5QA~pJ&XE7rz1{op-^U7WH}PgMZsA1E|Y_*_!?)oWHY`0hDRj z0vlyMfZH6fZbMHfKWjG~K1>2%dkBV-`-1DIL+fzsgoD)Gqya2awaSM5zh3#m8SJxF zc^dZjH?kr@k*1ey_AQva9yMIptuZ}jobj=xtN2w3H{XrrTt@XY6r#WkgdZBFa)pdW zai42}bOpU=aKAgiZaBqYj`)RkvO{gyMSPIMOEP|BBD;I%x7k5nN`z;{^gw$Y^3LY3 z>OyV2G%#fWN@LJaWuel=1I8u6^JlhRxv;3(Ut20id9JlJ1?y?3oPPf7G-FUe!<~o-@b)^vpO6wJGuNxnMTz4$=eGbI$um+iC(zyu=Bj~jN|zMvX_2OpWeAe zNE7Oo`?cvf*U>Yi_~#NbO0ycaa^RT?mS^yDw6xnZGEq0$Gsm@J%D2|?trDhNR@&*Y za84_EF*tc!3)M;=!onei{pCN_N-yiLB?L}+$#b=m)cg!yhp_R{|2Z(u%x&K5%CfnB zcY5=1Mp((I=W1qWNJU1j3kV5yvecN}l}N*Uc>6E@{a=*;)`PY(n!mnxdo3?+VezMg zv>&!#m1M$o5EFZU270|IS?BAld+XNphUJc^;EdGQN>%av$9ePnCnhJ|jlpf#C8uJl zf)9T3&Q=HR;o_^${rKCycYYR6gdNtt6*g}kG&-tt#OR^a4uudURIb0qezxY7npv;q zR=3oY(8rLOvm2Xj4bFUj-%n3ZFDcRL;7Yecs(){MmxlOaMTag~UO#p42SP4Y$v8fZ z-qdRO!AI2i4EkVIG@;Vfl65BS-1bFTz2goNLWg7hs;HwKib#lw>4bxWUAh0)tE0JL z&my&P5B``b=}Wb8_0$O_E{^vzM1Ihc>q@*L9LMf|rTfO$C(@|&PsWIW>!-t;aFLh_ zrr;Wy=-E?ZWCw^6hRm@VUJQafM1L1J^ryZs7$+g+TBi7N*nWR^i1dJ$RDIfpw$Ckp=3YFrg83v&HWq2@x&2)Ab|nJpv*l1L+kYdgs4UC>+SCbP_D;uk>t9 zBTO+G^c*)ScXyzQ!tO_U-q@1#Fzs5wBVo~-fajdQ-Y+K+w>5X?g6N6C(`?87p!_!5 zg&47V(nC&IK4)%AfyD%gglhX9*W=8%k|6T4KsDh+jRhjQMU7NX4PS%|H_@Aw$Pize zssdHH*zeR_URm_hF(mZ7~j&jPq+{-bx zE@L2RC9`W{yUCaDZIw-4yO<~BvW3u8oVsRokrH*cq1@5V&Q7s6`;pI{<}i3wMH4I& zRw>q03e&!LixziXf=-z?nb!>YxYRC-^DVIEF%cwI_u7w#709I)7*GUoJNkPp*1H4{ zhjKbU3oz_sigPK+DUFINSxu$HE1a^tZsQ@oxm9BpDCed^iqn6ZhDMA}QAYU+M$K4* zVUr#&Ia@_eoxp4s^UGb$Lp&yY!IqNk!JX#+IPQtj?CBSz&}W6n5nO}ygSMp}3oYd; zsgVso#bQNWu+5wWh~86~=XX6Xp$>iiZ##wPI{E@NES8Hal4wd$pw!YbQp^?fvtLD_ zW^3(5r3=e+aPyM89J1*QGBwbB^qpZ~THy6Lm0Eh*&Tcp5lOp{Q-JTU6ry213Vw9Ls zUrhL9t=yhd1VTdE76Gf@BGofrdu#viSMRQTTnT8T6Yi=lUvvAbhQ+X<9X6;2Vyn=| zO?z&vb#Qks=ybc_{74V*s+?Jr1}6wc-R9GdIcBW2-#nj|XCP3pZ5B%@kP6nzRpp?# z?UQWE#}zL9eQd>EZOPP=11CiV{!JCd6j8G{twOuiNfkcjY8(%*H)&Y$#1k0#rabbE zIyE)bBevd*g?h~CgB}?~dLcs6M{pMWX`3$7TdoK(sVDcW3pJIObWMsE^~!*^eJ)t zv{febr%h43G3MB&)~)DDajXNiz+V8PkR?yrOT_CkEif1aP)L{SLEM# z|L_)Nr(Wuw(SCsd=J6E6EXBXxhxv>dhp}$CUW+UfSIpGOXkUnr;GAQlLvA&p<&AfG zyIL$$rBa4XV>NIeFt~QT^~S5bC?VlNL;dfk4*1~IQKYNTDp-{~xG9IEc(HiNf;kQEPkTdfIJ3g#RwI)g)Gk39WO-?z9k_b_;+!|N1XOMInwP5T zHu;F&=K#pJD*- zJ3r3g*n##7KibdBS~E>=K|`J@w&tD~6||)Eu&OAD0=L>ql16mQkgIjTf@;xNpjK-Erp2eWOkV34If&gl14%SL^aXKiT&} zFL2dDA~9Cd>ht9O&_tEB5sYlzzR+AKP!Lr*Z14>kBR-ik6zY6&WJx~aVX|+ zkZj9waWRu{F>geg2Ozil+S&>vf@_rOH#na>!bk}(HE^5xYJ>j~+BLwcUavk#R%EId z^=@@#hc>E8i6C+J=t?d1L@qz@W9!fg#eUI7=>AoB=`HvNx5KO%;w;P^9Ur7RU(H;T zS{nT)Oy-hBzZ#M>Y&uLsk>VjYZW5eoEI4puX@$3M*=Ftud+9=Mz}2`lvqoIsK;})c z80D>h7#5y%x*o@@fDEji@`l-Qj5tA}u}frx%!!vb3={t8W705Z6n*Ku`?>UEh{nDO zlfiJ*Sn~BovPoEki^KW3#HldmQneADw7kC7S7XDX_ql~!&&4x3#h?UhcikGIn|#1`w!4R) zeb)=`TQB%F{X7OoQ+Vr{_n76g)S9_MENTi2>hDw?4zK523a0-vlWkB7NfRql!FOrFNMy%Lykn97s)O46sY- z6j2*lBr!cDBYutq37JR5#-rCZfSPjsZT;y%UdK3cl0_&_csI9RX{ksm*s5r~EPqw~ z{K=`qEt_}QgbZD2G%b!Q^>|^sY&d?eS}5WcMU9z1=qM^G>VJdww8uVI1wmv%=n#NV zVW?1*0$S0(Y-IUS9j&;~c}w}Jg~AJ8y>~acz%*0WJn%Uycij4(s|q<4wYIHQAnv7^ zL<9oyd_1(OZokmfm3u`T@6IJ2DmXWOR$TntRH=NF+t0RBKFM*t;@vJmi-swLXU0B! z)2@DmUw3`rJ_#qy`sYgS32|4Ul`u_qCv)atVUe|FA##ZGFk@~|!DvijzO|QC?Wg>V z81{v17uJNO&uzFE(?n{HaAz(3**h{+IAx=(@B{f^{7#s>TQdM+Gs|zD$JRB4gmdhGWeL~GtgnL+mi*t;|UHlks?$t)iyGeF3RiajwqVm z+a;+g9(MTkyL}o_E*Bav29szwfB->w2`@u)JS{@WER&#>pK1RV((qr@SjZ8EYPp;z z?M?bn5YXb&(6ZU6r*c$294WW<%<&9wJzmjlccvm@?P6h|`@mdnhnN$u)3x2wMs}^w zYgTBP@kapNI|fqK`1ZdB;yG;UXy-F-&CC6vZTk1yHO}vTP9U<%YV$^Y10p9!vCcpv zDMy@p!l|Kry(!_!(v!eI`as32ZRn)2Ey$~qx4|;Q*b-Bk%VZ_>Nv>|ot+^>Da>^-S z`gx*Vf#+nY!Wwt0^+)2CG4hyXIBd0Ty2XSdvp8JIP#h6QQfQvHIr+;WPVCw0qvS>+ zfPOSAw|udeo*5$#RVL54VVph`24grBkBwcZ&n1$L$FzZ5$CanSZ0`v!D2R;LlRPcR z`!dpge2{MfS-?xwZ(>$t3PLoea@7-`%vSSia=oyqdUeRkU?>VLHIu_QX|*7^LR7+yOhQF3o?c%wbTOLyNRGudEr$jH^Yr&SSzPwv?E%?7AsU*GK9 zY;*BuaILPYs*2^O_u+?D2C8dkV9$^=nNR*5y+O>aa=_QovJIb?kT*PpF)VjaEKg1u zQdhdGEcwU=;^Aau6{*EJHNZhSZfCThU~Kj$FA(LmUoWvq+?GVZ>GuYoywzeX$CRNnKt-?|XhE68$~A0MKN zSCuaC?-Ev*j~pzl#%9)A&2L-yg|WR>Zhe+MXb zsn}|AZopb_KTKA{8dH}OX$!ikgS?u1^4a1Ui>*$)6vc$GcW}GZxjAer^83D80nNOj$QHls(Y+T-ki(WY)Q_o7RcRnKHU?nJ??IQH7r%7gm|r&o{Sti z-0YLvtQexL(sr%eC7d|%(3>rIH(o-ky+Z6L^Hn)FEeJsIieamm(_|x4J zD`&xfAbI-a$^$-ONF!r7fJv=E3GHYIsM zvHQnn%+I>M6)rrc){4ysA>*Ff~zJyM)JFaks$H}UEe3G}8N4i7kDl^V%& zeZ85I1e>qXC-q6$$Pq=ZJe!|aZjqod96vWziSllhu&W35@)*<0E#n_!9p#lp@b%`l zSG+_1}T`2OLowo$or-*VDbzh8}?h#DDRRtqn+pkpokeGe1^y&rU(m@*?J*X{Du!&%4e zRdQ;&LjeldZ|Suv$Bd|gM3e(uoaX`#>5I^+56Mww^I!Vf0>tYZ>NY_ki{321t48Z*yc z$QemGbdaOUjA%09sazL(I%TuCm3Ob)VLAYig3&ZG;07c(SU3$ZFQX%khy2qp_2>O- zX0R&+rYF3{(K~s_T=c{UCa)i&DE`@7?pru%X~9o^W8D6-Oq4ED$HAuPbxdJb#At_rRtP>?tt&l}xR) z_IetOOd8C)e<_e&m6bc)%U_U_Qp<@nj!7cGZYT*)RnLes<%`H*S85FTgBn%YICU;Q zbl1!&f{6V=NFvlNxfqj7xMUcl_fwfrT2hpiwk{K28C?d?WU!m191+iVGIz*|kO)>{ z-qHqlj*wqt_5Q8C6UzkbX83>EO^TOfTw$$;gSfK?3Y0Ly9{sAy$iuF_^V6M)$4v%v zr{e04I-E5&;}HeTh^0@})q#yQUPKQd)!2?vqJ6v~qGj4rlab0e$=)|*E$AZ)Z|aCV z>cdm1#miJd(TR(**1wrFe?=et_z?CidGWk>`PxOvZ?74MrW!y9u>^<113%>{uw!cc zr&YX+B&cm0b)ooge{}8zqr|PFV9i>vU$vIsd~lu^Bk^I_;hvW51A$xRM{6bYKw`N?BINdC9u9s2Ts3>j} zBpj@?tfz3(HtN~V_)WBB6~`$(J%rs(RyJp-Pqkc~$5rFL(HG!U&HSJ+BJLyqhZ!HaJ^ zW2_5TZP91q!p3AKkFu(Yrj6RR0zuxp`S$%$iS-nPC=;{rLXbd8gNq%hs|tQw_y+^v zH$(-Ds@o}@o-AIZN9REs9Vr1VgiI+(Hq9xZa!LaqUn(vX8@{g$QW#QOM2Dww{o>W6 z9FBLY8o-X719t2~>CH?`f8q2MFC%B_TXDMo%44AS!k*yVk+OZ(>J$|AA)QkJQ#w^9 z8|`m-J!KfD_r|_oBg5==CbL})f1{W~2N?32&Ae9i0eS*j_Ejmd=CDTYI^Dk9t5$uR zK7crhxWy+gC3f^x#zF{pi#i{HVqDou-p14I&S88Vwx?6?I2XyWdUQ#X;K4v;wCCmu z^>p!IfO|xmsVgMChY(bxpx>y7^QTMyEnYwn5OzNDFj6)ODad@M!A}eEhxZm@120&m ze3AZZL;r$KB;mAq_Jtx9#|A_9(WZpbqw0-097(@9D%GoqbpQDi^&0WqLyu#U2x*f+ z3a!pE2J>eUj2S%(!UV%{2KcXu_{fPHHt6Lcg0XEkMl+uq5!D$5*JgdJZ7t+aao z@K`l3MsG>ebAjB9ukvH!^8G>&J5122m7}KIAMWUJm^+SX*Wv>k`tuie+0VysG;WpZ zw*(be#1pK^JVO$U{$4Gu(#7xGP{`DvRX9;98;;#_Z-G^fNRfj;snH*#qN;~eF98(@yfME= zTdzh&-uK)shCw2U+$||K&6|Dw1aC)8=8Nr;`~~trAOMRe#?3|EmF_Pm;Vv__|MDiX zizPBLQX;6vBsTkf%IkB`y5duDKn~sJ3@-BeT_S%YG^`vrr2gP}b@__-jF_4PsUqT{ zQIXr6_xm|5-vp}wQ^bN%8`Ioyed&EP6URL>vN3Ho!0vH;DS8^gT;i(~rE;Y=M{a8b z5(L6wk=!lqU36yXxWQ6kpj$u8yrR^j8R;kAVP;kYlFmxh#KirA)DxFpL2HB2f-+I= z`>UqEMKjRvcD=|f)yr&~uvSyPH`SGT>=0N)223NGYt3)Qu znwsiok~6F~G~SlWZ7w17C?6r^P)+W%+Trf3BCJQy{O^o`KXUEtunk#&1Wp)IP}36&#PD}3(q<9l+#WGP;zhnOfRc49dlgm0r~Rnp)@lY zh@XIzKRD2W#W=1xE_D(~8c_J-Dkw(N$J>P7*McEQA1@Y}P=q-v$o+^MU$(gziq>L5 zM!QyYR_VB%Rm!4LrtlvOY|(<;Lyw;@UKM(FyfW@`N~Q9}Fw@^u|2Ihi4EUfA8j}jb zhCCL!WgICYyMKAx1ktmZbF1~K5vpXM={e4&arQFOx=F#SSFiRn$Qk0gr|y9l(jR;E z=Kk~b_VdWL6q7b#q+-cURyQ{mi!>kgSN;VWuTMVV{wGQClEoHWLp9Wgmklkpuqy=L z++56u9bBCAMBO=?&CIG}9C*NOnWrt~h)w|ix+5YV$g8?cf^ioeg9%8Ry^0EA+Uv_E|8_sA4$7J0r}py>DQyqEFbR8eE6>{D_P3 z%AOnwa)Z#9>6GGE{9aye3jTECcHxGsNk$8gro>rTr%hvy9JNkZWNKSAW&O3zYhSMO7>C} zzuGgsh7!=&JwhKum1dZD0+IwNtiIc~KNytSJ$W>adSJm$tiE)Q615Oi?Txg zDpq#D?{LjVp66CKE~r(n@gA1-!L6I*($LT_>V0im%TE~_IrbZCp8+}YFeDUA;bv;z zpaEUf=;@#WIp(eJiaxvrD7q={mNeg#!#X<|M!GoyZ?!vLyT5Gx+XkKnmq(1*VucCc zJq<9Ihj6=o(Fzk3`~aXWk!evW_`Y@Tee1+w%(xmGeVv`nu*l!!#_lgvTd_-`YYpv9 zZFvhzBdV@YI=9sIIj=9z>Q{gIM11Xr+wV%CfyFOu-7F>_^F=l$sWenG{MWeOgXW5S z#{_Rja1$8$_tBAwb5kMD=!18_M2I6)odqS`zCMPN-Jb#*qF4N zAL~sn`RW?5`0&Q|d&iB8Cvt~lJl9^eD=tbrw`9*s|$B}RMy%~zZ z8R1*7tK43R&^xejhLx(OwbeNaNvzff7$hVq9-9%Y&8_JI6CZ zhN~XD<{!_K?kcDh_Wd|H@y$9`XgT&E@INE*hjklq4^i`-uL>Pa8#qI^47_><{ZQ;UWYlArb^Dxe{s zHg1pLB)|{@W@dl7CA&3O*Ie_G`{_@g?ly>d{DKnm>?%+L9CrHC@c*7t!9oF; zK=PTRf3icSCUz?(J>p>n&FtLM29>YMFNQnh@GP6e@^)a;$3#XVJwW8JHsWUd38QAD zta&hsXLM>&$H$*sZnki;$UOO&8#ft#yW8b?n4a9OwX z)Qco5Gx^gd!CA&s4b@~VC`A=Y(@P7sPKjJAqZE-}^K!J)W3k8`dD^(Beso8a@=x#v zU*DYW^Rq71YiX4@G^FxtWj*k9*W}M^ykV)mZR8&xcp9GnV{mV07%o9-ZN_69)t;+L zqOcm;75FX!5;oX9TySX>6ZO_oIV}}k6h6Lsc=&3G%vN+nxhJ?}X!eUr{S(Y*2ak5j zq_ib}{6(AOeUqU(5mr!1iInvnSBqZ>YEfhDmX1kOIi^U3lwCvNK27`lct?|N-$5wm z8QeFXbDa>&A05FG9@*pzuZ4>Pe`9m!lor(b#n)6pch@H)4lZfFMS}t|hu?1m_saMEv4agz)k%1AB17I#O-@A9g(3t* z5v5691(hndpI;V~J~OHg>+T2DwC%3Q-1X}lWnwzJyl`N*>stFNAyQTjU@(%B%M1(G z%$!?6ldjc4gv@&{6sptl0?>mD*Rznj{G-{^4OisBtPvKamSo)|5}+1vP7{J5uEu$kI3;yVT1GEW9^ zI|gz8lXAuB3+3UK6yEua-ekfX7F6)gGaX+qe8}>Z-g%EI9ipS$bKyN)f0&EkVe`H2 z`mFBAH$3ofDb!p>X0LkZdIqa+^4^&5fXF#!@}bP;?60H~S(vkkGhbSmw}ZAc=G zzhX;HSkbTeMuq2fdGdb5tE|(z>&z0_)f=?w=IZLYG$}K{34J*J!VcCWLd1!4oT4|y zubOpYHz!s4rMZJ5r=FE+PfaU-h(IX+Yh4q_)D^l^61=m1SXAYOaF?9TJN#?+ z_#)h|foNknBJk5GNb`UrJyR7W>yYsICZDH@m$P!>VT~hOCXSAd)Oyg%(KRg) z+S9shXLrzF{z-p^RV69qg!yN>#Z*%Hda8F zWl_Y41p|{gN!Yp6mMl1~$_>ik0nHT-AT|QH3D8CseN!7Ek#fI4lR#Rfl7)eGa3d9h z!U>5Y0^RTG4pT4fH1-lb2?azc9)7n49(1znsR5OFXOhjfr%%NPOWXY%achoa+q{LKwl#V^ z%dzBW;5zS0ikrdYW40Iv4u-tAQoS(T(bLltB6m&%lm@g(aSR(ul=&x~6%@Pb-!>y; z;+nZQVxSkaRdSv;ze;#S(xkdSTJka0xOpW>giFH|fBt=kl5g5>Zf(&-0A1cN;h&MNeh)i8^S#J!J=bxiZ-DnKjwDLsR z=6^XaJo2lev?yZgZo`J6qGD|h`dWdd#v1lhP#JFgy0Mm|S6ev&;a=9e-@wLS#&&*+ zZJ3DnbN=QjsuZn9F&4Yj86d*thO3}9>q&|@dHuQFex^rPNs;1E9U~%oqG_XGwp%>| zz4sTMDAputOLgs6{*FaKts-*zud*By){I)&zK@RG7*p2o(hX)KgryhP64$@kV za%gY~wy|$WsjKsBN~~NV>0#?NqYa2n@j;DG9d27iw~Q0hX-!YB zT75e8zQf&Pr8|u{RWJ4GdJ(u2W32_?QxhJaaIoiFimF_RBD61wCQ-<9Zph)wA7!>k zNnZJw+p<|Mxix3T#yf@DXbih677*EW7}S>;K_8J>iME<6k$Fdce=venQsVw4rah~< z@2g|%#*9c^Wza*kRmBd2DjDagTnFEb*z^ds6t>jOzU86p%K|-v`{1D4ow2Lm%!OST z_He2Ab}dVrBA|f^m2)zTxIG6TKsD4sF)JC)07^pKxG5Xum3Mnbbf*c^F#0+~G1~vF zaLVvvHX6~^How%|$1}zckmM@i4%5I&riO)u4XwC)IGyL6y3(5Ej~F9nTU8xVSMBZ( zr^6e{&U$i7<)0hN-e75qz~9`Jc=Yl~3(?LVU{68(t@qTH0a8ay#Ec1=+A6%Bj&9hy zMJ0cHQ+Zko`uPIu%-6u&(<>jV)&)z-Qe9dys#8AMTx}?k6m^>)t$h0Q>D3RpLIgW% z5Pu05G?4-`HT*1qXNKviT^zeiW#NfB+)|-mKqBSa`k;ApLgRglL1R~ZUYb2uk6drK zf7sm}AzLQFbrx$WSj&@qjT~uaX{m^E7+VG~m~}gJf6TnrW%eT#i;Rp6GN|TfCNGg9 zKn3e``=*7j#7V|DTs6}oPzZn5vU%m+_^i-ybSc|&Id?~H_X)B`f>7`fr}WthiqikB z0EkRboA2XHvpTn+S$>iLVxt81{|Ht9uQB-*g)Rn~nwz2P zzu>v2RTv250y7NnIk8ISSb=`=ROMm<0MIOg(mVip`o;DMuXZ6Ua$E0|Q61mz<$ym! zJUrq03-&7mM2b`EhJh(*c;Q=2agCK1!F1OJ@@Ri@zVT_(oWCkYsOy4zep!!H_#_bckgGX(i6;dmO$8{IO9&8wR%fP zoByTuH(8B!H(Z3_da0D>IRk?*)G=Hu8Hzw{-T_5owvHpRA94H8hYhE2=@*J=%tl1) zl$;SFWZOZR#^o4-HcFpF73U}1PS2*for4zXX$B9oZVtca@v&)1a}Km=^HPW@JF9a9 z3fVz&HyCX5i&A?r)p^oF;(5p226(IRQXv2nihG#Rhe)_D+i7cPv<3lhATkmb(Zx3s zO`^=>(!eFizvYmDvW!{mO^I;ApRFhakgw|x5Z`3G&G9#}#n60r&?5|QZs#r(Iro#rMOCYz+PR0|goa5_uT z%a!4vC)e#cb){u4@ueT?H0=rRmPXnjW(LFhW2Ttuemnw)yCiWbqkfQU?%HxZo#)SU zwBaGF9*v%HVvRJF%+U^#gbxO`OZN_90`GTq6>YD)wGXmaS7j_MAS}Rk7zk{ab*uYT z3-4s3jE(k}*ig74i|9e=7mV>6=>s4y<53ZHZCCI5$uM4`yf0??f!ACuQ+Mhg@toL; zFCzs{;U<@cus%$F51MNrsf+10Rj5t%L8lXIxp181+SeLHpas55OkRD2wqd#RQd8kq zx;e>4drkE!-*%(fI{wD>p5^6Y&pON)95`S$j&iY%@sJ6suGQ!Tpuz=logj zO>sE?6VImfUmPL3&iC1LZUa*fieVen_-b?lf zcv^Gw^eJY&aJz99%u4aE4FXtN{hpe_7(M}h+$s|e*+UoY(~~A4fNSCT;^>!L_(@lg z11i_)k)4DWuY51^bYFN~9ji2(00IF4{)zDUU*L9zDa;!{J@f*5ijQ9MQKy(uh8T{A z$)F#Rp}~zbI+s>(Ipyc$GiZdfbvI;=rMNx_?Mc!_jf5)|(A*@d_?ww18$CBSWe0ezuFFGuq> z;ck~_#Hmit7W)YcbP^(!kIG7F>vXf7A@4Z-b;jyJ%bsUp=djzzQRH{|R^-|{TjNEd zn#&0nh>9?j1dihsxT0M`_qRsdP1dTYsQ(-gy)6a?L`6fJLiwBo`^GVlk`IOh0M*5x zSK($ofkt%|cj(zJM07m|7`SMFfx{ry?aZ*v2nrMl9W@QVWa+axS+WyIxy0Zr0?&EU zDaa;BdE(@hBxy>Mbhk_JB9;Z&Gl_h|fiB2i0zEBzSv4{}`DJ~=uy-PWhDC1Uou28v zPbwe=v07VQ1qWF;9)aW|5;PkP9rR`1{`Tj8YW)H$2rrco63nfy-3;ihpxmMR#OD#p z>+T=#+1zpA?>MFD!NEoJeoKIlFX%aimWP|!cHY8TZ1m~iQ~=NxU)d-A{y z-&`lf@sKum1w0G-M~iPkEd)8==~>_3HPk2c3Dbihg$>-pnJ%_f>pzAzg$ay)TF=;d zjLq;KFf2C$t}|9#avI_=hPs-Mq7K=HeX^EK$J-O9Kfj7U0~`rYXe(Ecmf*QV{?Pnt zC!xXmbRVO>^MxWg?nm%fPFnF18*0FRZ=eC{4Pl?qBbEr{2@oy-Q#N&dC|Z zTwS17S~e#qCzm`)O&yi4e6$WS(RTqFnKrFA9_oc*B05M{5DzI|Vr@jKuZAV}J(M>7 zzRNaJD@3JhV|R7Fs2-JmLJyOyDem=9<+RGs8j}DmXFaoRm*L8dU}X>obJcAbWynyi z@YFUg`p2<-YRD#CUD~U~YMO^C2Qh)6EIU zB;$gsrAwewQJ*m-1txj`w1i%WPn?tXgBgP257-zbS?86v0N_9U-5=KWJSnfn@Z&)#@9hQaMcjwGj0!YLWi+2Q^wm+_~VIj>UzA zsq8;k@IR#p;J~Jz&*L@Y_F$lmusR&>${Ryffu1D;Wf{>{PjxMvj6m=n2gqZFF83pi zI0?~e-Jn|aFjOm^c*q|Bu0i8S4K$8cUKX_Fz~++ri&Tyz5XK~>c}~4=-Sln{f&_P4 z7ZLfSFCy(%6mut!6-u@!nT>GLH2!Ks+wt${5>`HqZ|km6jwi-hPRJ&{@SN#DF>3P# zC!R=hv~irP&kCe`1x==;vmi)%UvtjIEcka^RYDfJ>1lIif2^yB0M*|Myu2^dPK>9Z zjfOEd&ZGy^8y$ZDq&n&(3wpmnU-PkBfxotVe7QL#w^{wnIrz9Z)>ujB$xpxQA%cp6 zH<-KRSJ``gm%@SVLMcw{zr=C{SSn1Tc83`{M-3J$ z1n>J66*)ypS2o&dUShz1u;u*o^K<$DkRogDwVM$qK|eB}*-VuH6TIwG57;e`iEb(= z(?4r#?L3}Mw`+QTu+F@>FM6SOej%2SnD#1q8%Kmk3XfcxNkc;b*~J7~(T z>pRq(WX@P<1R9*DFf2v|0Vj^`W4|5MD3zfCJ+OF0Fsl30f;E31)()Nk(z?6HUEd34 z71?%++1|U|u(kPK4Hs+VTR%9_!u?)t7+2$;JDHJj_-}v*z^5#v@%5gwFukP+?hW6O zV1T?Qp|_-8ZKBf3g|Dh63I;5+gACpo)`9}FlYw97M0CLf`v(n>Pm^R`V{^)E6Gu`! zTZ~BpO|POa(!E~^Zj7o^jj8J(NuMp!CYRW7#r9mi_M25?;FZO;UF*zzj<-6JS2NVk zCwqmjE`reA1f+(8Q5S9dJcrZlp(L~|_>iq!N2|^2gB?XAP;n2%RMDRWsi{<#XLsME z8jii8-(6Tfp~0a&eV<*LDuw{{G6K|kgTUEgPm*80Yei$o+Q8tUMsPs7hP)G-8j-Yb zn&b27fOoB_&hlfdI3P(}<8?g4YUpOLoF5-hqI3EWp#ZqREE|Jn7t})^Dy3l>dIh0d zZ%W{a5pZ;g;67*opuPpv-G-K91>#yO>*{pOF!nz6fW_P3-jNe0D7daXG4A}F6Pl&8 z)G}Tg94p_NyE5WD-4(u=ARO?8aJ|D_!qezNR801I8#?HG!)#0)svdlTBO$jHDW_-{ zguFJ&Tn;!SDS8tAdb=6Gre<}d4H}N!S(K*6z^Z<@83;XQk%PgP^aUqw&y;wE)Pm?l zLm~s(#OiAjZOBX8<54u1J=QIVqUPDW8=4%8nt6hRGXoikn;SSq`@} z_FnDAOD?&PjeWnG;&)x}s&Y8$ZoZMY8R&U$Z2K@3vdqXT5B{}AkliKyHfzdo0=rC? z&fhv79}{u?PKRw`5P&g-`XKJ$wt(GkEdcgjMAY^bnW1JD3zaz>1%}e&y&~Wup$hQy zygZa2fpV=TJ_9cvXgypdXwNWs-|zy;yPmgizuOtOkcpjE}N zvC&Bkj%r(iS<|Wx!{=TDtk92btk6)j@2fbYD&cUF_cKgj4^iiQbfCJyAi+$k+u*b~ z$8WLkpQWBh31A=^t}sd)Byv-SjtTlhZ^HFPD{WhF5nh?YWrqrCb`bVW6FnF}9RdAd z&F!!c947=~m0RFM84dz@P|IxDyk7xYU<#sK&q5@aXbka{Sp46PwZOeF*o7UV3WMW6 zk@&Vg(<52o)^!V@F9Pe}X{{{`DUs$Q=K{$ZbDS z_3dcq%j;P%`mh4WX&F;=7`MGa0I19@1|bK$(!j1yv*Arc{i7#*0N1qF=u~R_eh;uh z6kwgE0N9ep`Khy-DpD4KeEfEFnpMmivUQ8s0PJRlGhqB^*;`?kH8eEuw;5nnYfyA+@535CkQp%JNKkcN8k(1u z&+^*qk22eBgoo`~4f0F+-z=@X+~|lO39d|rsOY;(xrRH+ti#m$ejGA zgE*W6B)TpE%#;35B5ZyR+^gs_v-xR3+q8%4$e)w_mfFTQzg)fUW@>9$%~-$Qr}NQT zAb*KDxF%|CZH+|p6;Udb&#)8D9M%oJ=!I#6{7WB5UvL{Ii5R7pGR62}aDzZ2^5A)l z4z0A}6T6;z_(j*OyTn!^ILzStcDtbMAFtlLXYbf70r8x&l zoC*p%-h@G3K)&iILc79t>K0>?1nyX~a*^+#g!|dSR-wmF7cg`VsaIo1Tl)I0_AO z+2k8@*A^0OtizD{zaCT7I4cn^#X7JkaT8rMc&K}Fn2+k@6U5JlquF01; zpRtd=_<%M1PmRf&dZutDzoY+0*_8)E*>&+Z5ryy)UWBNSEoB#`5Gi~1H7c^Fv5l>% zx5%z+*>~9^OLmo|QkIcDODbmU%hXJH_A|(R&DlRhCT*2x@0f3axXi47Ap}_ZbiLBR{n+P(sK&9k&NSArG&Y@suJm9m-sTnAWdAgn~u zeKX2X#&C(X#_wkiGU+q{w4!gq}xV>%+96@Sw(Bi2N-Z>6MJm&dx== z_ng?f%b;F&nWUj_&zs%fHG|ELx?IFb#S5Kp2YM)SpKe`D+k$T}KSDEBl63}VEq-H> zO1miJ$jkVvr&bY19Y0Tf4B^hu;XTBEQdX(X%(wQTa2{y+Rag70MvIj}-|&!v(0zon zEzAo1MN;&HXe?Dv+0Yl{*GlVqP+kN6xt+Iav7MNVSBiD+HnnCb9c>DF%shMPUBP$_ zM>0&h%+bnq`uRmM2Id-didipo}S9^4RYlbV|9NTsa%4iBGBEzz+~?%Y50bd(7hm(L?z z?VxAL!K%MPxju$cn@U&PvNA-=h#>eV6K5oa_BYoZNLBFX>DLR{aS0QAjr`?QXhBQm zYVJ(oc#q*6@j)N)>Gqr24y$N1TCJuq9($jkaxjpC%JlFaZL#4)6ml)O$KFpByd5|r zht*uTBIQE2Zd>EZU|mD!!2Y-gQ6G%KWh~Cgs-4snX@Q5S#I4}`^inE5XN}b@eIInt z?$6~zoW0lVYz7nIie_1VK6^Ix;!sO`z`D*^_GpiuA-LjlFc)O!zEm{qFI;TxdpSMd zxEv}we>huowKdb04$p=&te&Z-(5jmQps`1^Dzm@ zR@bxAohK5)cFcv;5sku(7S>|dqlpD27m!WLb^NWee&Ft8ru5d~FwhhC0+Ur~Vo^kP zfSn$Lg^9hTPeKDi^pCDryK>ua(nI+ z?%e^JR34GLb6fxV)P4%SdylZzpy?8xEVaCk}BcXHk zkC(oQ<|*vxFO0N-v&Eh|>eMP$&~l?#XKO(UazP0(MCk*kojb)%m*JOLj+ z&F8V^PLsXeFSzV3BqD%J+Pht*8n$^sD_rq!IgWu=O)F=krG{n&4uRK+)|{M^^aVO& zQX%p;8sCSGjhl1GP~XWdp}5y@A0vqKWP&L&z)CIhqXzrFUqcB5)$}(jqjUG62J?|7 zZxD-~@oooFOL-}JcCIBnl=#z#O6AIXpA5&|qW8SVEsMt=@rK{%?BnI(SwpX^tdz5@ z@#J8473@+K*=-n#f9wHn(+j)EtUjPXG3Dfaw5{s{e7IbYrfadnA|UsbH}6YByLAM*<n-RC zDc#PxJ~=(rk{J0UaR!2(ZddR&Z_L%+y!!;ZanK=E0hLxGCLyJ=4RUEy<%C6e_<3BB zSsEFVSJSRKP%9f;!dkBVKrmwcF+<||2n_DbK5$eT({gi=@3gJdr7BntMkIpk zDvfX6yy>DM{tVlhnu-(TOfoBncRJE7^U*Itfbd_Kdsb)4S|j82)A(l!1!ll4k>dmb zl6=C5TjjGbNsi=bpj*pBLqijzh2?^Hh$p$n9-6Sc=cAbIph^xm`!^Z5Zu4_Y0Xn`i z)Nf?(H`l8r1(3?}dZtJTmvm?EU)^ap;qHJ5b7_oS?m9Zcliv1vzS&!BK_^RNc}_k# zkDEpHw$-yM8{?!p0p<`~RXJ`Bv7DflD${eCRi9Ad@_tW^4b3PHwqfU6)(WEGTYdx`NM_n;DPX(H!E zJ@gJs3$b0~^$=edi@k-K_32#OT&0cSK$wWiW>|+5dlqKT@@Q*)(3pSaAm;3|?qFty zWCHMwMy&W!Io4~AQA|pu&b`#xrHxzeFe((XBu`R3h`D#FkL78eqfU4)b`A0|cUG*g zOz1tI34JO+S)fxWafQITc#4=STvfhL2w=sKkcECz*5hu5Q54I@cSvdnpVbX|CA&~Z z(#NB2YQYq)Uw(zW$qYLkL75ckVSON#AW3stUd3nE9%a|-mx`4bDQx`waw<c z6{=hU6)kt-#p=YC*2mEhNKDn_zO%^bTY0>nu>Rhs8pg>;a9f##pomCu&i^y9w7)%Q zDRTV13fLy?csBtt6^nA#jn)SbET<-o)7-BgtM}&$K5&@fRB~yh$jaLl{Y00dzO(rY zRje5g=SS&#r6Jw=i8BCum+?K!c<}1sqc#q{Cqy9R|UeoCp2Q5Tv zdB0$((Wc1dQ6&M(@R0*?|F)%E$)cXzQoiDc$X%C1z}=55MC!IFuD8`S^prTRSD97P zLEl#NmA-trutu}&uH%VLC&k*i8oYa-xDOQU^1@p(Gz)>GSBFqcg?iCiv_`aTPBimh zh`5Z7-UsRcuF!O1A8j425Awu5$%S`=$C3 z8fp`k`ZLEyD23yK5p2M~>vD!HdM5l$Pxl4M)$j-w^@1wcTB7lO%d8ecp>BAeH%af!l1f&Eo1zgUj{C{&Y2`(xQCDekF|W0Kh~lOBW%J-K|C7 zV2ES=CDi6+xV!B7k|OiR8ctT9c_F;hTZ+m^E=Q4860S~@?&somJD19*m7QDT^7l8y z+KWNu`<2dtBHrFoCIF36jwEwg{F}1Oq1Ag{HtonRmw30zhxnZRODHnLrcczh zUC7goY^bKVYtB0uAsHs0%$bs!I$^C#L5xKwTV}o>Riwj<;ZWu4dgR&=JpQO;^cD$u!8ip^|a&)3CNij;S_dNp@;x@UTjH>kGse z*3Q>(sr{ZYuBXHnzQrSg_In}S5-t% zSJQCNQd5aQK~O>BY_q!5Y`mRFvMR@LGFL0%dllXgRXXTx8OaIGIrD{An4ZZm!4;>h+rjH|1hDX&+}Vt{zez595PtR1 zyiD~7tMTfkvX7U4_fc}>U+}(_CogQ)eLOmxP(d}8_JsK@jof7w8X0b&hYthN6yIe7 z8?3T}eHM^v-T157#{5f@0AAYPHr`&2($&)K{8=ivcOzCPba)*fHl4E4uvHjqrV9bhCq5gX#j0kP9ViWWg z>!cHL!HyXJy+YIp8%9t{@J!Y#(l+y4oCZcY!hMWMAK?5~YQS&{=w9B{Z> z1NR!oflK91^ioh%Qc;-n6z|u^E&UCZMjFC}%GXyqBU9U~(%OuZJdSwxIfvc|o9L@t z&zUG5ig{Dxn7Dsq+Z!c=U|UmO=ja|*z}6e@mY@Mm@`9h2@C;Shq~IPuhqVEJzg$Wj zy5hE$LH{Ezqxp0%k0R(sXX8;3yKhfG$6=?xH>n3nu*j=-+8pF}tk#wQ^-qBqpD=-u z=@D1M7=qhuL;1I&wjB?UzC*4HOJ{ACtB2}%#GGD&61q`!TYG6ej5ZZ*M;02YkU-dp zg4Vq*icDn=931!_RAb6A@EQYWcYI{GwNQ?$ie2sL_~a>3zKB>=3XvtYltOut0kU)i z_`85AtUX(j1!DDR=u+H6td|K8b1zR1-!_rfLnP}qVd*vOKG`_{c*T*Ii*o`Y84|GZ z2LTiG3@F`y8#)$d_wV0d$uA%Qgn2x(!+P=IyEzffh(2yZDH8rsjz&_Dn>HMbu7HjX( zyRCzRgXU0v66MB( z<9dKPjZqiwl|wOu1NY7=P2ERNA;qoL@b{LU;d;mngcMNEa%Pt$IRKv0IZ!9m^ugy? z?UTu9xzHPZ;usSZM;(kM)(??S2ISy1?WDJVvIuOPK&dDxrrreAAm3HAkKon=tc2J# z`s;cNzvnKN$~MYzTuJ5`XHTDnt=_nE=S~Ynkhg^t_MT{?69hoMs=C~GoLqtHgr6%% zHEH#6-6C)Gw_M1Avh>PT=}Zf?gY|p(s*T|`orJenEGOtc>6UF&;Gnk#KOb`!Qf{!` z4k}TF`Y_gt(y2HMtCZr*0A%d@c7S<&|G)~fQFnfj%3Io8GBL#29Ji>)_S4z6|tbdOaRnfMifZfrSD zc3?SZSO)Zij9U(cs{j6aNot~%E~eN!%Z96sq+vW=rvgt+tx`-idkIfmZJ(6*t%>%g zSeVI);+u7eJ-3Wl1<0xf8aMp7%JT)+@+=C4lJ&yMcl8*MFVm1^7?^{w6@10xG~!l{ z@lT44og0vc+{{#T(104n?N@2pU)+8-XCf-r$pVx>h@;!WXJRG*uad$KU;Rjs$5ooG z$5ZJH@|NdWHhv%C0Z4=SI+5-ZzkU+)FVJGJp~EgxuNz8Rj!kEo{SsDftJhsf-@(xm zkA;d@j|l=(2}~NL&#L0SVAPGyFd7;fLorE74;#XQWNdUB=LbxQRdoRt4gB<;4Hp1t znTSU-#>{Jis(M}N0$EbO(d@fb?}$B3U zdB4KzM$RL^oyB1w5L28N`*-!nkm2qWU zPF+Brg~zTH5IZV1Oota}Gfa(h4+97< z#KZ{8&+0f?eBgyt&)Ii=Xlsfa4_1^;GZQgFZY|%IvRZWny9!yT-BsYKY3SJbvF`Z? zF5|^RlRgz4#2c#x&!z!0USiGP4 z=Ue#*gX|BrC&}c)7UBZh+I`2C(1s239JE=miVz{R8Po1Jn*8-W)$K z`_#&aBYO;PV|BDH!IvG##1~#v+J9NtA3#EybzQ%}pGJ;j)vDaULqA!yIDm9xwSaTI z_o>{YcGIgub0KR11)pkGEuyy<8vLjZClGP3my?@xRC8BI7Phnj_naZ61cw=Uj;=f^ zveCB(RNm#W>>H~?;OkaCUQAD;qkC$wEDX{O2)I|$L=1OO24|!Iki*YwVbQCjiB&gm zF9`a>uDY=XswOcxkAzA&_6p^lVxdgoL4H${@8b%Q?-LUjFHhXYS^wz-S;1Vhy%uV` zI-EpDe$7AZu+lX|Wz*5ROi?`|XJS-Ij3G z#r|?8NsHwamU0LK5f@V7CN;K7yoN`}~#uacNFlP7*!x3p_Q{hE2P-ddtnccJ+01e;0G z4c7xgYW%d)na@y#9lEhKEjIup2f|o=438v@zj;%Hh2FS+79IntSw==uJw{B1EZqj) zO`9oMKD#Ug0$)t)ygo5-N>D4z`g}LmXdDEFDwa7oY%l315L`*(S;GH>yI5pH&1_+K z-4%R!Gu%w))<1jBlVppQhm(oOw@*1>C;A3VRBYvL{vLA055;f` zblPPnRDIPp(@eXC|6}ZN%lHnG5({sY*1Kfr8J(QWo-db7r1?w6sxIZcc=2L>{!_N) z!wnPU6ndArz~|l$d$cWJ=p#^EQ6%GS=5qTV%sMQR1O~ z@Jc*h(M|2SuOQBLq}j5?kZv%`ZpF+!zDRE72hwS!ECV#G#wHdT`J44;xa7GHkCP)% zwfcxncZp4%IID%K_q2SQ#>g$ejb-a(%`pvvbo{pq8^4Jz1bm!LY)%huX+p@rR$YNf zuUwF}M8;cn{_eBziocy^)oFSh>x3>gUg4l0&hT?=x~V3=JTklF2xq_gB&3;G>=_1F0;=`TQ_ z%QVz4nkzb?gx37Y=m}3x&&o3(CENiYyM=W*WYSukhP)=>-fLy}SVDShl0QGh5#md@eC-(XaOxSnJkP|nTxgBP#g-RA9#yq_YV7`<(O<;si}o2Zry1z z0Resmxwfl~G|6m7o2BPo`wrk%NFULM9s#>~Ubp_07fdi$+m|+iJx}RZp9CXHK@h|= z{$UO(voX1R4AXqXyKNWb-WmfZhNBw;{sW09;kXnx^f zQ@1rF91k$rIGvB?VTQ#g9K=r#(6G}uWpX6v93~-Ik?bzCD*Y+8|4GugrAw4FmMb_s z6#(MCEUiX593R`(N-8$nnh@PN>q78zc;re9Ve*X2T0yE5;wuH;-xT*L{Q87r`@+^;M@`mD`?@7-W`564N3%@U&c{kF zx2D+xo~gF+V2?M&vsUwhF!fU*Vk|62TJEK93q2#F;vD=3TU%S=aoi%eZ{*u?;_rOTeHIm)mw$w(;rG zil&fW-t+LRn^&WDl5X2+7_-#7WH$=b+PiQsSd%*7>K_{0Tl((LMIotBt}rO0cSGu> zIs_HU&eCg%Zy(AeRgQ@%v;o|;N7JXS3BUO}QwiKc#7INg*b_rqP%i!DF|$3eS=Qw3{5)sMGSTcKT%8(hPy#F^A5?)Hnqj zyGfHA6%r67yV!2>oKJlTB^gGLBsS(K|zX*Dc zDEeDJOi&|XbgNjI^*YBq_S-1xFL>dh&*usp#?vhti;+`q_gSsDuTRl{^4@Z>`aH?- zr%yY5u#6;90TV}^(=5eF>p|KN@q>l}#tJ6pP)6TuZUrC3Tn>4^M~HgLq?vy7a4kM+ zD2C3>(o6?ZVv$4S_gg+l9DZ~@yJX03qO?D=CxG}EoxXA59U z7o(no{-X!goR8u5B2oSjR_1cjt=Xr1!nqw$Dw-*w|Sj4yh zg7kt+_eI^JHb?R2=?oOp;spA{+M#aFw{K4s%*@QpQ-ib?)=)$etVm^itO~_xC?G{3 zFZw;)mz0lz(k~DyAubwv@)9p$%FGZ)E%4T?4CM^oijCon(ULZ6LU z_MhBi{#*n}VQg|k0UwQ^GmN=>d9>F5CYo>@kCv1;>TR%Aau@0uo%>r9M~-xbx0fv^ zl%^I2#6+uxuIsgB{RL3+I3UBsfqxY{#GZqNsL%1hCgi-EiH}pWG%hfI-#1iDD<&#l zQb^@x5W`r`5Xe*a@LApDZOWt(S+Dpff=k2}IDDDYzowu;Dr2?LWa{EawoT;Uz zSUe80GfK5`Q4}V*IK~Rm+r?8Ws1hcU3M zZPh`v0qQ?Qs%>J2PGJ{_5n=;^MOe`7L!Bd8{Sb(r=0~keJiZGhGdNYad3VYM(N9Au$#vfc%=qO)}y$Xa@#|A zes|FgTJ#*XCbw_hgRX{yb7TGusq#Y}u{FbHihkCL{sxC-B$sochq9cAaqje=RM;tW zm-&zC$`Xbvsb{nneQ0c);K?Qk+3+852at9vy4+TRYsvCu;wSQOnK>P03O0hgxd$#w0=tQRLvZ`YN5S4U1Xg#0W(q;VY%+= zU3#_RYDVkYWkA5@Y?r2Vo#ejJF8w&>}Z6$=jhB&A`hvhXd9$Niw8+V9O-G~Vex@wOzGPIBIX z^PFt$skd~0Pu zsi^cNc}|bHL}u@m4BA{JkfCYUb8GHV6T8@`$U#58^btC7fbnhKXx|kjr3qv&_ZGaD z*vBLYwZaA9Y~}Il2$C)Xl==zz9R<#aCB4up;O7H{@|7~BA~Gc+0wp4sN<>t;=DCzm z{J*dN16o$1((gAR=`oj~Hd1)if)C-hI)9;&Bl!(DI?)Y|PMEq}lbpj2pMkeu>QOck zF8kn5X@;LP;WK;t^huyMKvMqhxp&boq?$hlLf7o~-O}8H_Sl{vP-t}~anoU9!yemr zuZ;`ol&;}{%1@8>8X7~_5mKSg%AA?R53o922vP?{4_Xs&=(MO3vp&;zr(2l;s=l(^ zf;C3Ib;g$7T(zvmYTv-fnxOnKIXZ_RLid~Ml>Ddz$IHI9QvAnegT_}0v`0I4vsIpU z=!}1J;{332;{+kuQBmmEhG?+>s_uu_<0_C0K%?n$n~UREB2F$_erA1xLl@dZQ)I*F z;*pOoLPR~N0u8=AQTc5>A7*f%>6pDCU1Z7NiwzqdtbQ9$J9IV7ykMylW5ZwaY*u}B zVN%bB)h%%BRZz#l%DifI`=W_4#zK2ssT1cROs)g+VvT4?R0y<&SL_wlZfz;ZGJ$o4 z+t_Cys-c9sc~bxU%7{a}%#($7#VgGij`;j$rh^-U&_$I>f8|7xc<{u1sG4vuS8w$6 zHzYXvxK<`24r3YSW7H;*)j1?LbROjePj*=wGKpO_FrfE<)-%K7j#0zi8xXErGQ?{i@8o{q`TvBIFX0N+$>GkEJ zFw7Z-mcGtM!4VPQ3=ysAxN{&WRt)TLr&ZYbPNDx$7j#)wjN5(}1Gm{w`}r}(_a3<= zy0`ISGc_`7qGMzG^!120kN%C3PagZ=@J#2|;{Lc)eBiBYsvl};MbLt?x-vtrklzC_ zC*M-pWO$W)-3Lw9-YE4&j-+K&-~7of>~LP2)XQLhbOxq;gg%jcfN!%(%9(MVg;yc~OqSe3@*+R7Dhhzkl1aVcBUr(;QiEUL*bpES%j zGxpn4Zu*YFcNp^#?qzpH+Kq!j-&+Ah762q)z+iR&iy8faznN}n->cAW`(+@wm;7Ae zFy6CiW~o#RKc+xJZ%ka_a08I#ChunLo+D5Lmm#jPe=+L}Q)XUg8vb;DIq$@#Ucy6Y zoO0R@n+_fw|UlLmq!%{);T1S|o5NNPyay95@G3{RTABF&V9zN!nQ?jhU z^s;{x5FvxHowl5E%*oJ?pvjBP6$J%x9cAM8Shr&ZNK)(l=_h_!cg_=m;Jme~ZWM*j zW#Ek=;NV-yKYDo0XLEWqWJxfYV)lo5l!a%n7plUsV+A;fGvh}BZ&-@D&Tl)9lcuOj1fBbJPPJ3 zbW$!g`B8JDzxj=lSx;iqglH{{^~<$dR%?Bi?$CsS04^$z-bM zKYaLL$@}vlTxpArrnl{;6JQtn%^)Qp6!1|{@qYBIPWo%EhzN`&uY(Fh1GP3EL@Z*+ z+WfoFMm=J|UyR|eaxx36qVIKF``libRr*ZFC&;1o`MA%as~}BS4~%sRD@!>tqa4dN zBM$)(lP!EwVK-1lP!R4gGty!`i?Kjz5z3W0k}Pm9J0`jOf;Gc#7>RXOSE270Af)^Vj^DJXu_n(W2ke?;?wtl1xSFNg^and zN4p|ne=sa)@owmg*LWrwTGLfvu|6ECYb|osh+ZCR8o8+^kM&a<>+G%?HH!u9R%!~h zn56g^lWV^r6=d%ta?t?tfjBP5{7Qg(#X$rfVoZ#k^LIq-rX-{CcS2!wQr{?P7M0VR zcqz}dI)KOLi|kY^u%t*0h<#~HbFe4CwtxpY1u)h6xjct!or1&gnw^zJV;Q486C%MW z{D4J#)OTADoyS2X0I@DBYXXC=Azc`=d3J3NTnPzyHpPNxcY8zma^eP;u`S67BfvyorqI_)oZxlq@?7- z=zESi8Ze=+Z=6~bV$H%5<|AAgS&g_YcN6`R34ByUVgKL-FF6Bkif1ZySGtP z@Fug8d=MeUN8tm4&u_>}E8&ja}+J6_|WDijJ!3&~cN#&mx3%HZyl!Bd38$v@2Xnt_Cn%d;tMH3ctzgx}D zv@o@5kg-|eqcddEk09?Mkr7IjVOkGY3Q|-VHvT*7Pc)2Nivn)Wong4vmNkpP%bxN0 zoW^VCWUSxijfVWFo9O%(n?-_*0Nbf+dTYzwZb+jk2!jQnzO^6+m_`v8Y*oDu&H^a-k-vej1MO!3iKYa7<;)foF%#@!i&}%KWXIhdDKt@ z%h8i^IZaa>dzB095JA5%#<+hGR}<5S4N(>JO*su;1-yY6D7Q#{ewYeNqUf9geoj@< zXD3k!Z=nI>VKX`Y&}8%_U~(`*tCYPW?Oot^7dlhaB*=CNu!n2MwBTEM{F{fWL&RlY z%7+@=#{7R^=e*a+Auc*`Ab-0)UtC=L&g+@7;myA`YXR zvJqBryk`oug2J?2kUFIZhUZ}@kKzQ~PvW;DcpcC^qUY45ksZ1KF(ghBGZBt~U4)cS zN79`~0Umwjwpumte|1U$igj0>0BAX4@ow-J#I-|(u*gZRKcX>alh0tq@EN>tO%N@+ zS=-r78|7L(Q{1p_I138kF-PPKy}rC;uT6k`z{ey?xgKE9q$!3qXEA0r=Aer9Oe9Eh znd^GK$7$tFTaKM#7S+P2pNU$#UgaVJ^q&bRw9~hUjsj@6Quxf7>C~cL*vQ%wmsCyc z=8eW2(R`Gez_!C8o0UQ${NlBa(tm|mdaJThm2vhtLVUG3$WSN922@|OtFJW@* zs+P4&%b^{MyCtOE4^1!dgn9}A4EJztka3wK^+%7MEHyIWNS+6zCYg0##p)D~nWhic zDf<9Ys#JQXDy8D9O6-I2)FuFc8Sv;Ld&xh(y;K;0aJ*-w>mNUWUPfX?WJF`xLGK5E zGgGt4BmW!uf=@I(1%!u={XD(L{5?<=VtJZrr5~KCXG#vvj){(Td%4ZE;#MbJ0)!PG z?VH?Oiogaox%SZ4pvRePbqdff5p9^%bv~+DT3@aMEMzhuMmUfH;KR!J?{l|XZV2vA z?qoSp71LhkQeOgEB29Ou;3*wXMh^i?<>&bMcAd~q2@n|&+H>E_C)xUK%tKVfkFFxc zx$zYLX4j^GtmOAg2+*5l<`Uw22l?z>SdBc#j`7WJS}5pQjTc^`nj51|_P83%z1jEQwCBcFDChbqHwlVQZWD?d z0@_>+U6&3!U<$(sGUBx()6A!Fqzc`CoeO-LD(%GaifzH#GZvTpyqc&=OLUJ z!ZYm_H{QCW%RHX`kaq8*wZ*y6>zDk;giF2+=tXrLdl!XzD)7QcqY)JxT6m}H#rvmH zse$>)Qt$>_c5YjvBSc~R2T2KZ#`ozUzdRO%;yoY(EtdD$jdHEd{RJ zVz0Bche0Lyz^;o{3U1inve?dXfW>FU1K}vk_)ucXq>wx`hU^NlT+!rA9CU|O*=4D= zjcJ=ff5^l+n_*oOdfsqO*}ksW@oECNU9q0~&9tj@K3>w;W>RKWAcSbEkZk=KdGv#- zF{%eIIR$It&DmiR%=&4Hfd(Y9WEZL51hK5Y9KV%vF_t#GL2`cL9TVpS!S+{wmi!i) z-F(oBsXD^cduFLf$i}@kx6^WUS_5V;P5_!wHDYZ09Z-IMXZCZu!N%*Vx`-EE%@+tc z?l{vu%o3=2Jr@kDgx1^gi#VAa$aBo(sM#k#C1hZySzxR{osRLL3WTC^XO?nE^z0VQ&IiI4UF~&)R7))1JR~(N`5vl!xZO&P9*Yx5DJJ(% zlU{S&ah@c`AdW7um!3Y6VgGI6hl#XO&GxP^w6QYG_85DQCTQMtAc>RsJZf>mKKitN zSLOOS=pT;F%nnY!W^IJ-YK(GkW(_#999j0MkcYQEuTLCYYi8K+;lnvZo1ggxQxCm+ zmnmuD?&Y?h*Y4vnWm36`N2INHp&}0x$)$pne()NGLvWOqlTtI&g9pq|(PIp&-)j{?0phHrEWda!DMI8{gg;!6F*(e|M$3nm1`BMhZxUsH zn$GXGz$fO({x|x|hOVuJevUouPsoNR+W;j5wYM+735BA2YeV|4Z@emw5qO?i<$S`Q zJP-E?AV3evC1Vegi+m3g{(cigm_*YzlZKc9V~ay`1j#slPZi$?9fm{iplg&#sz)yf!`xwLBYSW3qn4x>!Y5c@>HARcFDQ#D z9+Drb{CJk^awKyPgXSMA81&z&8#Wyk9`n&|^lFFH(&(XIIg%fFErh&#_fCxN>OGSU zPze_W(RBMkgy2tGDl;3hWR0%PHHX01y@}(I@+3!NL0__D;?{!*dKQ_+gHIBMQZL0a zgi;3@^o-<*{j}Uaz2(=%`@}vuz}eU*B>H0QLvWtGfc3S`_XOiUUPIvCfl-4+4F~Mv z(s2MRDCcJSlXWFWapv;yc)`Pc;?2pIs?(Zp9b-S*8i=kP#z#F{d-(AjQFNuFILGPe z1h2jNn*BPS{PZf$KIh&~MYVzkr#1a6G{)jdhhr2t#P8VI*_DyPn(=Qt^-*r_%E8gJKx5&k2m% zx|A6Yk#9b##z$U5>;3*UKB|TT!&&)zOnd@Mv@+{+3}t!k9(sTuwFnab7ET`iIIHZo zH}aNH;e*sp>!hZmD;b*>z67qR&Q9e%TLs^5*a;2@1sw?eVz#jbjW7k`ocQ_Jf>t0< zNGVZLbo0@XfqbMN#%Tv5p@XNzvE1F`^dM)|{z zpJv}g1c$0YYdUj_>Hdw;4X4&m1H8U6dSKa>%H+;fnb zqF&0`KbGkjfy3zM)Ap^hMS9QIA&!RKLfxN94Jas>BErL+UKZD1J-V^dlZp8MGM!`E z-atB6ncYr$Pf^}B|4^$;6#$GorUz>xVMa?505sK*>VtszgF#P}s8Q={Gll|;m?o-T zLVJw4Cn4Z|-XD)o0pG!+XudQD*53AF+~v88eq{cq$5u(f+1ylz+I<58B%2-MMBCq0AYOKbf18Vk^{A2vSut$-HHdJapdiB=0=K@g)C$&_w&y%DX zTfpT$>B+X+{@q`<jiK&O_d|;`MofFO;n%A>bby6GVvX!;0N4P9+yZw@{25TIFeIoQ<5qAip$W?Y={ zVFT!nT8-HZGlq?X&sO!zNn?*}o(&zR2eL7jl*JWnGWnjoI4(G#qd41#M1WIr>dD5ec28=DOGM1Q&Eo| zJ?g2~8~VO6DG233qTBq4pYfAe~v#|=}CiB3&jlB z0p{qhEeS)wZXCd5y&~)H{O&-}&XHjnNV(NHs|f|zl*Q>~uQ4PR)e?P3362o~e|mQ; zRA9-Dg*t>;sFRA15{W63T#VUonk+1QL)P3vJfQWZS`Ct!r%aKN6gkb!+(YGT zJM!#6QmV1rhgu_aopNwSOTx@)v~BfkK*5<@t?a8jeI6!3RW7WsR2=|1?@~Reb@={= zQPGdFR;dw}O*}m7ur|N#1;{Ri-e{C`n(Pk)$Gjbr;5US^c0vmdilz@ua&5KR)_MvN zU>0XwZ9aNm1q{>E__jHe??46|b#>K%G2Fl~npvFbo&?|V)oKoqHQ+3z&iGUN1+vEn zh(Av{?k{qmY)LhQPAaPemcSiBW2|UU1FZBB1M#cQFknwKW~+K0~a8oWYVB4gA!0*x8k&56oL*@CW+f@t@eLDKun2T$HeGQ z<}A*oROXl?)JsE}2drgXLE$&)7;t-B5#!5V}Wxqau&$*^63K-J4*jNuAG`q=Z? zo@0nkZ%H6z1yuKwhQ6Wu2zu~eRQf?+6U61;ML*6e5B!7ex0(0SgTE7l%~#Cz=oWpR zSDr6vP&acO;z+h2e(+l0>({Sj{1tRZur{s$uwLy6H?gOyA#tPx2**UB!?i}x8f7YK zyk?+5AX}jn)UY41IIm{u%T=Nj!H9_-K@je3^)_i2b&eA}Z|=pabmDW*D@R_1>6MRt zDxDa4N7(6P5eUvCweY0=jDI|YXuYrTWScky71+P{Npx`k?w24=Kh;XK

@PhssXm9&Qmo-82$q~ym_ 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 z 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

0S4fpFvr67KSI_@=>quhA?)L~ozs)Y_ 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

L}aEN6$r(|*oBZA;=aCz#pUPB& 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 - private lateinit var sources: List - - private val mangaToFetch = mutableListOf>() - private val failedToFetch = mutableListOf>() - private val mangaFailedToFetch = mutableListOf>() - private val chaptersToFetch = mutableListOf>() - private val chaptersFailedToFetch = mutableListOf>() - private val chaptersPageListFailedToFetch = mutableListOf, Exception>>() - - @BeforeAll - fun setup() { - val dataRoot = File("tmp/TestDesk").absolutePath - System.setProperty("suwayomi.tachidesk.rootDir", dataRoot) - applicationSetup() - setLoggingEnabled(false) - - runBlocking { - extensions = getExtensionList() - extensions.forEach { - when { - it.obsolete -> { - uninstallExtension(it.pkgName) - } - it.hasUpdate -> { - updateExtension(it.pkgName) - } - else -> { - installExtension(it.pkgName) - } - } - } - sources = getSourceList().map { getHttpSource(it.id.toLong()) } - } - setLoggingEnabled(true) - File("tmp/TestDesk/sources.txt").writeText(sources.joinToString("\n") { "${it.name} - ${it.lang.toUpperCase()} - ${it.id}" }) - } - - @Test - fun runTest() { - runBlocking(Dispatchers.Default) { - val semaphore = Semaphore(10) - sources.mapIndexed { index, source -> - async { - semaphore.withPermit { - logger.info { "$index - Now fetching popular manga from $source" } - try { - mangaToFetch += source to ( - source.fetchPopularManga(1) - .awaitSingleRepeat().mangas.firstOrNull() - ?: throw Exception("Source returned no manga") - ) - } catch (e: Exception) { - logger.warn { "Failed to fetch popular manga from $source: ${e.message}" } - failedToFetch += source to e - } - } - } - }.awaitAll() - File("tmp/TestDesk/failedToFetch.txt").writeText( - failedToFetch.joinToString("\n") { (source, exception) -> - "${source.name} (${source.lang.toUpperCase()}, ${source.id}):" + - " ${exception.message}" - } - ) - logger.info { "Now fetching manga info from ${mangaToFetch.size} sources" } - - mangaToFetch.mapIndexed { index, (source, manga) -> - async { - semaphore.withPermit { - logger.info { "$index - Now fetching manga from $source" } - try { - manga.copyFrom(source.fetchMangaDetails(manga).awaitSingleRepeat()) - manga.initialized = true - } catch (e: Exception) { - logger.warn { - "Failed to fetch manga info from $source for ${manga.title} (${source.mangaDetailsRequest(manga).url}): ${e.message}" - } - mangaFailedToFetch += Triple(source, manga, e) - } - } - } - }.awaitAll() - File("tmp/TestDesk/MangaFailedToFetch.txt").writeText( - mangaFailedToFetch.joinToString("\n") { (source, manga, exception) -> - "${source.name} (${source.lang}, ${source.id}):" + - " ${manga.title} (${source.mangaDetailsRequest(manga).url}):" + - " ${exception.message}" - } - ) - logger.info { "Now fetching manga chapters from ${mangaToFetch.size} sources" } - - mangaToFetch.filter { it.second.initialized }.mapIndexed { index, (source, manga) -> - async { - semaphore.withPermit { - logger.info { "$index - Now fetching manga chapters from $source" } - try { - chaptersToFetch += Triple( - source, - manga, - source.fetchChapterList(manga).awaitSingleRepeat().firstOrNull() ?: throw Exception("Source returned no chapters") - ) - } catch (e: Exception) { - logger.warn { - "Failed to fetch manga chapters from $source for ${manga.title} (${source.mangaDetailsRequest(manga).url}): ${e.message}" - } - chaptersFailedToFetch += Triple(source, manga, e) - } catch (e: NoClassDefFoundError) { - logger.warn { - "Failed to fetch manga chapters from $source for ${manga.title} (${source.mangaDetailsRequest(manga).url}): ${e.message}" - } - chaptersFailedToFetch += Triple(source, manga, e) - } - } - } - }.awaitAll() - - File("tmp/TestDesk/ChaptersFailedToFetch.txt").writeText( - chaptersFailedToFetch.joinToString("\n") { (source, manga, exception) -> - "${source.name} (${source.lang}, ${source.id}):" + - " ${manga.title} (${source.mangaDetailsRequest(manga).url}):" + - " ${exception.message}" - } - ) - - chaptersToFetch.mapIndexed { index, (source, manga, chapter) -> - async { - semaphore.withPermit { - logger.info { "$index - Now fetching page list from $source" } - try { - source.fetchPageList(chapter).awaitSingleRepeat() - } catch (e: Exception) { - logger.warn { - "Failed to fetch manga info from $source for ${manga.title} (${source.mangaDetailsRequest(manga).url}): ${e.message}" - } - chaptersPageListFailedToFetch += Triple(source, manga to chapter, e) - } - } - } - }.awaitAll() - - File("tmp/TestDesk/ChapterPageListFailedToFetch.txt").writeText( - chaptersPageListFailedToFetch.joinToString("\n") { (source, manga, exception) -> - "${source.name} (${source.lang}, ${source.id}):" + - " ${manga.first.title} (${source.mangaDetailsRequest(manga.first).url}):" + - " ${manga.second.name} (${manga.second.url}): ${exception.message}" - } - ) - } - } - - private suspend fun Observable.awaitSingleRepeat(): T { - for (i in 1..2) { - try { - return awaitSingle() - } catch (e: Exception) {} - } - return awaitSingle() - } -} diff --git a/server/src/test/kotlin/suwayomi/TestUtils.kt b/server/src/test/kotlin/suwayomi/TestUtils.kt deleted file mode 100644 index 8f0cecd..0000000 --- a/server/src/test/kotlin/suwayomi/TestUtils.kt +++ /dev/null @@ -1,19 +0,0 @@ -package suwayomi - -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import ch.qos.logback.classic.Level -import mu.KotlinLogging -import org.slf4j.Logger - -fun setLoggingEnabled(enabled: Boolean = true) { - val logger = (KotlinLogging.logger(Logger.ROOT_LOGGER_NAME).underlyingLogger as ch.qos.logback.classic.Logger) - logger.level = if (enabled) { - Level.DEBUG - } else Level.ERROR -} diff --git a/settings.gradle.kts b/settings.gradle.kts index bb2fc89..ec5358f 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -2,7 +2,5 @@ rootProject.name = System.getenv("ProductName") ?: "Tachidesk" include("server") -include("webUI") - include("AndroidCompat") include("AndroidCompat:Config") \ No newline at end of file diff --git a/webUI/build.gradle.kts b/webUI/build.gradle.kts deleted file mode 100644 index 267789a..0000000 --- a/webUI/build.gradle.kts +++ /dev/null @@ -1,21 +0,0 @@ -plugins { - id("com.github.node-gradle.node") version "3.0.1" -} - -val nodeRoot = "${project.projectDir}/src" -node { - nodeProjectDir.set(file(nodeRoot)) -} - -tasks { - register("copyBuild") { - from(file("$nodeRoot/build")) - into(file("$rootDir/server/src/main/resources/webUI")) - - dependsOn("yarn_build") - } - - named("yarn_build") { - dependsOn("yarn") // install node_modules - } -} \ No newline at end of file diff --git a/webUI/src/.eslintignore b/webUI/src/.eslintignore deleted file mode 100644 index a9ba028..0000000 --- a/webUI/src/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -.eslintrc.js diff --git a/webUI/src/.eslintrc.js b/webUI/src/.eslintrc.js deleted file mode 100644 index 359020a..0000000 --- a/webUI/src/.eslintrc.js +++ /dev/null @@ -1,19 +0,0 @@ -module.exports = { - extends: ['airbnb-typescript'], - plugins: ['@typescript-eslint'], - parserOptions: { - project: './tsconfig.json', - }, - rules: { - // Indent with 4 spaces - '@typescript-eslint/indent': ['error', 4], - - // Indent JSX with 4 spaces - 'react/jsx-indent': ['error', 4], - - // Indent props with 4 spaces - 'react/jsx-indent-props': ['error', 4], - - 'no-plusplus': ['error', { 'allowForLoopAfterthoughts': true }] - }, -}; diff --git a/webUI/src/.gitignore b/webUI/src/.gitignore deleted file mode 100644 index ac57da4..0000000 --- a/webUI/src/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules/ -.eslintcache -.vscode -.env diff --git a/webUI/src/README.md b/webUI/src/README.md deleted file mode 100644 index 02aac3f..0000000 --- a/webUI/src/README.md +++ /dev/null @@ -1,70 +0,0 @@ -# Getting Started with Create React App - -This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). - -## Available Scripts - -In the project directory, you can run: - -### `yarn start` - -Runs the app in the development mode.\ -Open [http://localhost:3000](http://localhost:3000) to view it in the browser. - -The page will reload if you make edits.\ -You will also see any lint errors in the console. - -### `yarn test` - -Launches the test runner in the interactive watch mode.\ -See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. - -### `yarn build` - -Builds the app for production to the `build` folder.\ -It correctly bundles React in production mode and optimizes the build for the best performance. - -The build is minified and the filenames include the hashes.\ -Your app is ready to be deployed! - -See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. - -### `yarn eject` - -**Note: this is a one-way operation. Once you `eject`, you can’t go back!** - -If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. - -Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. - -You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. - -## Learn More - -You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). - -To learn React, check out the [React documentation](https://reactjs.org/). - -### Code Splitting - -This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting) - -### Analyzing the Bundle Size - -This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size) - -### Making a Progressive Web App - -This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app) - -### Advanced Configuration - -This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration) - -### Deployment - -This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment) - -### `yarn build` fails to minify - -This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify) diff --git a/webUI/src/package.json b/webUI/src/package.json deleted file mode 100644 index 834b2ff..0000000 --- a/webUI/src/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "project", - "version": "0.1.0", - "private": true, - "dependencies": { - "@fontsource/roboto": "^4.3.0", - "@material-ui/core": "^4.11.4", - "@material-ui/icons": "^4.11.2", - "@material-ui/lab": "^4.0.0-alpha.58", - "axios": "^0.21.1", - "file-selector": "^0.2.4", - "react": "^17.0.2", - "react-beautiful-dnd": "^13.0.0", - "react-dom": "^17.0.2", - "react-lazyload": "^3.2.0", - "react-router-dom": "^5.2.0", - "react-scripts": "4.0.3", - "react-virtuoso": "^1.8.6", - "web-vitals": "^0.2.4" - }, - "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test", - "eject": "react-scripts eject" - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - }, - "devDependencies": { - "@types/react": "^17.0.2", - "@types/react-beautiful-dnd": "^13.0.0", - "@types/react-dom": "^17.0.2", - "@types/react-lazyload": "^3.1.0", - "@types/react-router-dom": "^5.1.7", - "@typescript-eslint/eslint-plugin": "4.23.0", - "@typescript-eslint/parser": "4.23.0", - "eslint": "^7.26.0", - "eslint-config-airbnb-typescript": "^12.3.1", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-jsx-a11y": "^6.4.1", - "eslint-plugin-react": "^7.23.2", - "eslint-plugin-react-hooks": "^4.2.0", - "typescript": "^4.2.4" - } -} diff --git a/webUI/src/public/favicon.ico b/webUI/src/public/favicon.ico deleted file mode 100644 index eac577b06daaccde4da145f40f8518d3430299ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113318 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 z 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

@PhssXm9&Qmo-82$q~ym_ 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 z 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

0S4fpFvr67KSI_@=>quhA?)L~ozs)Y_ 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

L}aEN6$r(|*oBZA;=aCz#pUPB& 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 - - - - - - - - - - - - Tachidesk - - - -

- - - diff --git a/webUI/src/public/manifest.json b/webUI/src/public/manifest.json deleted file mode 100644 index d5fff12..0000000 --- a/webUI/src/public/manifest.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "short_name": "Tachidesk", - "name": "Tachidesk", - "icons": [ - { - "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - }, - { - "src": "favicon.png", - "type": "image/png", - "sizes": "192x192" - }, - { - "src": "favicon.png", - "type": "image/png", - "sizes": "512x512" - }, - { - "src": "favicon.png", - "type": "image/png", - "sizes": "512x512", - "purpose": "maskable" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#ff2323", - "background_color": "#ff2323" -} diff --git a/webUI/src/public/robots.txt b/webUI/src/public/robots.txt deleted file mode 100644 index e9e57dc..0000000 --- a/webUI/src/public/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# https://www.robotstxt.org/robotstxt.html -User-agent: * -Disallow: diff --git a/webUI/src/src/App.tsx b/webUI/src/src/App.tsx deleted file mode 100644 index 8d7de06..0000000 --- a/webUI/src/src/App.tsx +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React, { useState } from 'react'; -import { - BrowserRouter as Router, Switch, - Route, - Redirect, -} from 'react-router-dom'; -import { Container } from '@material-ui/core'; -import CssBaseline from '@material-ui/core/CssBaseline'; -import { createMuiTheme, ThemeProvider } from '@material-ui/core/styles'; -import NavBar from 'components/navbar/NavBar'; -import NavbarContext from 'context/NavbarContext'; -import DarkTheme from 'context/DarkTheme'; -import useLocalStorage from 'util/useLocalStorage'; -import MangaSources from 'screens/manga/MangaSources'; -import AnimeSources from 'screens/anime/AnimeSources'; -import Settings from 'screens/Settings'; -import About from 'screens/settings/About'; -import Categories from 'screens/settings/Categories'; -import Backup from 'screens/settings/Backup'; -import Library from 'screens/manga/Library'; -import SearchSingle from 'screens/manga/SearchSingle'; -import Manga from 'screens/manga/Manga'; -import Anime from 'screens/anime/Anime'; -import MangaExtensions from 'screens/manga/MangaExtensions'; -import SourceMangas from 'screens/manga/SourceMangas'; -import SourceAnimes from 'screens/anime/SourceAnimes'; -import Reader from 'screens/manga/Reader'; -import Player from 'screens/anime/Player'; -import AnimeExtensions from 'screens/anime/AnimeExtensions'; -import DownloadQueue from 'screens/manga/DownloadQueue'; - -export default function App() { - const [title, setTitle] = useState('Tachidesk'); - const [action, setAction] = useState(
); - const [override, setOverride] = useState({ status: false, value:
}); - - const [darkTheme, setDarkTheme] = useLocalStorage('darkTheme', true); - - const navBarContext = { - title, setTitle, action, setAction, override, setOverride, - }; - const darkThemeContext = { darkTheme, setDarkTheme }; - - const theme = React.useMemo( - () => createMuiTheme({ - palette: { - type: darkTheme ? 'dark' : 'light', - }, - overrides: { - MuiCssBaseline: { - '@global': { - '*::-webkit-scrollbar': { - width: '10px', - background: darkTheme ? '#222' : '#e1e1e1', - - }, - '*::-webkit-scrollbar-thumb': { - background: darkTheme ? '#111' : '#aaa', - borderRadius: '5px', - }, - }, - }, - }, - }), - [darkTheme], - ); - - return ( - - - - - - - - {/* general routes */} - ( - - )} - /> - - - - - - - - - - - - - - - - - {/* Manga Routes */} - - - - - - - - - - - - - - - - - - - - - <> - - - - - - - - - {/* Anime Routes */} - - - - - - - - - - - - - - - - - - - - - - } - /> - - - - - ); -} diff --git a/webUI/src/src/components/LoadingPlaceholder.tsx b/webUI/src/src/components/LoadingPlaceholder.tsx deleted file mode 100644 index 15a7308..0000000 --- a/webUI/src/src/components/LoadingPlaceholder.tsx +++ /dev/null @@ -1,56 +0,0 @@ -/* eslint-disable react/jsx-props-no-spreading */ -/* eslint-disable react/require-default-props */ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React from 'react'; -import { makeStyles } from '@material-ui/core/styles'; -import CircularProgress from '@material-ui/core/CircularProgress'; - -const useStyles = makeStyles({ - loading: { - margin: '10px auto', - display: 'flex', - justifyContent: 'center', - }, -}); - -interface IProps { - shouldRender: boolean | (() => boolean) - children?: React.ReactNode - component?: string | React.FunctionComponent | React.ComponentClass - componentProps?: any -} - -export default function LoadingPlaceholder(props: IProps) { - const { - children, shouldRender, component, componentProps, - } = props; - const classes = useStyles(); - - const condition = shouldRender instanceof Function ? shouldRender() : shouldRender; - - if (condition) { - if (component) { - return React.createElement(component, componentProps); - } - - if (children) { - return ( - <> - {children} - - ); - } - } - - return ( -
- -
- ); -} diff --git a/webUI/src/src/components/SpinnerImage.tsx b/webUI/src/src/components/SpinnerImage.tsx deleted file mode 100644 index 3bfe49b..0000000 --- a/webUI/src/src/components/SpinnerImage.tsx +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React, { useEffect, useState } from 'react'; -import CircularProgress from '@material-ui/core/CircularProgress'; - -interface IProps { - src: string - alt: string - - imgRef?: React.RefObject - - spinnerClassName?: string - imgClassName?: string - - onImageLoad?: () => void -} - -export default function SpinnerImage(props: IProps) { - const { - src, alt, onImageLoad, imgRef, spinnerClassName, imgClassName, - } = props; - const [imageSrc, setImagsrc] = useState(''); - - useEffect(() => { - const img = new Image(); - img.src = src; - - img.onload = () => { - setImagsrc(src); - onImageLoad?.(); - }; - - return () => { - img.onload = null; - }; - }, [src]); - - if (imageSrc.length === 0) { - return ( - //
-
- -
- ); - } - - return ( - {alt} - ); -} - -SpinnerImage.defaultProps = { - spinnerClassName: '', - imgClassName: '', - onImageLoad: () => {}, - imgRef: undefined, -}; diff --git a/webUI/src/src/components/TemporaryDrawer.tsx b/webUI/src/src/components/TemporaryDrawer.tsx deleted file mode 100644 index cab3bd3..0000000 --- a/webUI/src/src/components/TemporaryDrawer.tsx +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React from 'react'; -import { makeStyles } from '@material-ui/core/styles'; -import Drawer from '@material-ui/core/Drawer'; -import List from '@material-ui/core/List'; -import ListItem from '@material-ui/core/ListItem'; -import ListItemIcon from '@material-ui/core/ListItemIcon'; -import CollectionsBookmarkIcon from '@material-ui/icons/CollectionsBookmark'; -import ExploreIcon from '@material-ui/icons/Explore'; -import ExtensionIcon from '@material-ui/icons/Extension'; -import GetAppIcon from '@material-ui/icons/GetApp'; -import ListItemText from '@material-ui/core/ListItemText'; -import SettingsIcon from '@material-ui/icons/Settings'; -import { Link } from 'react-router-dom'; - -const useStyles = makeStyles({ - list: { - width: 250, - }, -}); - -interface IProps { - drawerOpen: boolean - - setDrawerOpen: React.Dispatch> -} - -export default function TemporaryDrawer({ drawerOpen, setDrawerOpen }: IProps) { - const classes = useStyles(); - - return ( -
- setDrawerOpen(false)} - > -
setDrawerOpen(false)} - onKeyDown={() => setDrawerOpen(false)} - > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- ); -} diff --git a/webUI/src/src/components/Toast.tsx b/webUI/src/src/components/Toast.tsx deleted file mode 100644 index ba0fa56..0000000 --- a/webUI/src/src/components/Toast.tsx +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import ReactDOM from 'react-dom'; -import React from 'react'; -import Slide, { SlideProps } from '@material-ui/core/Slide'; -import Snackbar from '@material-ui/core/Snackbar'; -import MuiAlert, { Color as Severity } from '@material-ui/lab/Alert'; - -function removeToast(id: string) { - const container = document.querySelector(`#${id}`)!!; - ReactDOM.unmountComponentAtNode(container); - document.body.removeChild(container); -} - -function Transition(props: SlideProps) { - // eslint-disable-next-line react/jsx-props-no-spreading - return ; -} - -interface IToastProps{ - message: string - severity: Severity -} - -function Toast(props: IToastProps) { - const { message, severity } = props; - const [open, setOpen] = React.useState(true); - - const handleClose = () => { - setOpen(false); - }; - - return ( - - - {message} - - - ); -} - -export default function makeToast(message: string, severity: Severity) { - const id = Math.floor(Math.random() * 1000); - const container = document.createElement('div'); - container.id = `alert-${id}`; - - document.body.appendChild(container); - - ReactDOM.render(, container); - - setTimeout(() => removeToast(container.id), 3500); -} diff --git a/webUI/src/src/components/anime/AnimeCard.tsx b/webUI/src/src/components/anime/AnimeCard.tsx deleted file mode 100644 index 134374e..0000000 --- a/webUI/src/src/components/anime/AnimeCard.tsx +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React from 'react'; -import { makeStyles } from '@material-ui/core/styles'; -import Card from '@material-ui/core/Card'; -import CardActionArea from '@material-ui/core/CardActionArea'; -import CardMedia from '@material-ui/core/CardMedia'; -import Typography from '@material-ui/core/Typography'; -import { Link } from 'react-router-dom'; -import { Grid } from '@material-ui/core'; -import useLocalStorage from 'util/useLocalStorage'; - -const useStyles = makeStyles({ - root: { - height: '100%', - width: '100%', - display: 'flex', - }, - wrapper: { - position: 'relative', - height: '100%', - }, - gradient: { - position: 'absolute', - top: 0, - width: '100%', - height: '100%', - background: 'linear-gradient(to bottom, transparent, #000000)', - opacity: 0.5, - }, - title: { - position: 'absolute', - bottom: 0, - padding: '0.5em', - color: 'white', - }, - image: { - height: '100%', - width: '100%', - }, -}); - -interface IProps { - manga: IMangaCard -} -const AnimeCard = React.forwardRef((props: IProps, ref) => { - const { - manga: { - id, title, thumbnailUrl, - }, - } = props; - const classes = useStyles(); - const [serverAddress] = useLocalStorage('serverBaseURL', ''); - - return ( - - - - -
- -
- {title} -
- - - - - ); -}); - -export default AnimeCard; diff --git a/webUI/src/src/components/anime/AnimeDetails.tsx b/webUI/src/src/components/anime/AnimeDetails.tsx deleted file mode 100644 index a3c1f25..0000000 --- a/webUI/src/src/components/anime/AnimeDetails.tsx +++ /dev/null @@ -1,257 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import { makeStyles } from '@material-ui/core'; -import IconButton from '@material-ui/core/IconButton'; -import { Theme } from '@material-ui/core/styles'; -import FavoriteIcon from '@material-ui/icons/Favorite'; -import FavoriteBorderIcon from '@material-ui/icons/FavoriteBorder'; -import FilterListIcon from '@material-ui/icons/FilterList'; -import PublicIcon from '@material-ui/icons/Public'; -import React, { useContext, useEffect, useState } from 'react'; -import NavbarContext from 'context/NavbarContext'; -import client from 'util/client'; -import useLocalStorage from 'util/useLocalStorage'; -import CategorySelect from 'components/manga/CategorySelect'; - -const useStyles = (inLibrary: string) => makeStyles((theme: Theme) => ({ - root: { - width: '100%', - [theme.breakpoints.up('md')]: { - position: 'sticky', - top: '64px', - left: '0px', - width: '50vw', - height: 'calc(100vh - 64px)', - alignSelf: 'flex-start', - overflowY: 'auto', - }, - }, - top: { - padding: '10px', - // [theme.breakpoints.up('md')]: { - // minWidth: '50%', - // }, - }, - leftRight: { - display: 'flex', - }, - leftSide: { - '& img': { - borderRadius: 4, - maxWidth: '100%', - minWidth: '100%', - height: 'auto', - }, - maxWidth: '50%', - // [theme.breakpoints.up('md')]: { - // minWidth: '100px', - // }, - }, - rightSide: { - marginLeft: 15, - maxWidth: '100%', - '& span': { - fontWeight: '400', - }, - [theme.breakpoints.up('lg')]: { - fontSize: '1.3em', - }, - }, - buttons: { - display: 'flex', - justifyContent: 'space-around', - '& button': { - color: inLibrary === 'In Library' ? '#2196f3' : 'inherit', - }, - '& span': { - display: 'block', - fontSize: '0.85em', - }, - '& a': { - textDecoration: 'none', - color: '#858585', - '& button': { - color: 'inherit', - }, - }, - }, - bottom: { - paddingLeft: '10px', - paddingRight: '10px', - [theme.breakpoints.up('md')]: { - fontSize: '1.2em', - // maxWidth: '50%', - }, - [theme.breakpoints.up('lg')]: { - fontSize: '1.3em', - }, - }, - description: { - '& h4': { - marginTop: '1em', - marginBottom: 0, - }, - '& p': { - textAlign: 'justify', - textJustify: 'inter-word', - }, - }, - genre: { - display: 'flex', - flexWrap: 'wrap', - '& h5': { - border: '2px solid #2196f3', - borderRadius: '1.13em', - marginRight: '1em', - marginTop: 0, - marginBottom: '10px', - padding: '0.3em', - color: '#2196f3', - }, - }, -})); - -interface IProps{ - manga: IManga -} - -function getSourceName(source: ISource) { - if (source.name !== null) { - return `${source.name} (${source.lang.toLocaleUpperCase()})`; - } - return source.id; -} - -function getValueOrUnknown(val: string) { - return val || 'UNKNOWN'; -} - -export default function AnimeDetails(props: IProps) { - const { setAction } = useContext(NavbarContext); - - const { manga } = props; - if (manga.genre == null) { - manga.genre = ''; - } - const [inLibrary, setInLibrary] = useState( - manga.inLibrary ? 'In Library' : 'Add To Library', - ); - - const [categoryDialogOpen, setCategoryDialogOpen] = useState(false); - - useEffect(() => { - if (inLibrary === 'In Library') { - setAction( - <> - setCategoryDialogOpen(true)} - aria-label="display more actions" - edge="end" - color="inherit" - > - - - - , - - ); - } else { setAction(<>); } - }, [inLibrary, categoryDialogOpen]); - - const [serverAddress] = useLocalStorage('serverBaseURL', ''); - - const classes = useStyles(inLibrary)(); - - function addToLibrary() { - // setInLibrary('adding'); - client.get(`/api/v1/anime/anime/${manga.id}/library/`).then(() => { - setInLibrary('In Library'); - }); - } - - function removeFromLibrary() { - // setInLibrary('removing'); - client.delete(`/api/v1/anime/anime/${manga.id}/library/`).then(() => { - setInLibrary('Add To Library'); - }); - } - - function handleButtonClick() { - if (inLibrary === 'Add To Library') { - addToLibrary(); - } else { - removeFromLibrary(); - } - } - - return ( -
- ); -} diff --git a/webUI/src/src/components/anime/AnimeGrid.tsx b/webUI/src/src/components/anime/AnimeGrid.tsx deleted file mode 100644 index 9086682..0000000 --- a/webUI/src/src/components/anime/AnimeGrid.tsx +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React, { useEffect, useRef } from 'react'; -import Grid from '@material-ui/core/Grid'; -import AnimeCard from './AnimeCard'; - -interface IProps{ - mangas: IMangaCard[] - message?: string - hasNextPage: boolean - lastPageNum: number - setLastPageNum: (lastPageNum: number) => void -} - -export default function AnimeGrid(props: IProps) { - const { - mangas, message, hasNextPage, lastPageNum, setLastPageNum, - } = props; - let mapped; - const lastManga = useRef(); - - const scrollHandler = () => { - if (lastManga.current) { - const rect = lastManga.current.getBoundingClientRect(); - if (((rect.y + rect.height) / window.innerHeight < 2) && hasNextPage) { - setLastPageNum(lastPageNum + 1); - } - } - }; - useEffect(() => { - window.addEventListener('scroll', scrollHandler, true); - return () => { - window.removeEventListener('scroll', scrollHandler, true); - }; - }, [hasNextPage, mangas]); - - if (mangas.length === 0) { - mapped =

{message}

; - } else { - mapped = mangas.map((it, idx) => { - if (idx === mangas.length - 1) { - return ; - } - return ; - }); - } - - return ( - - {mapped} - - ); -} - -AnimeGrid.defaultProps = { - message: 'loading...', -}; diff --git a/webUI/src/src/components/anime/EpisodeCard.tsx b/webUI/src/src/components/anime/EpisodeCard.tsx deleted file mode 100644 index 9aa4411..0000000 --- a/webUI/src/src/components/anime/EpisodeCard.tsx +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React from 'react'; -import { makeStyles, useTheme } from '@material-ui/core/styles'; -import Card from '@material-ui/core/Card'; -import CardContent from '@material-ui/core/CardContent'; -import IconButton from '@material-ui/core/IconButton'; -import MoreVertIcon from '@material-ui/icons/MoreVert'; -import Typography from '@material-ui/core/Typography'; -import { Link } from 'react-router-dom'; -import Menu from '@material-ui/core/Menu'; -import MenuItem from '@material-ui/core/MenuItem'; -import BookmarkIcon from '@material-ui/icons/Bookmark'; -import client from 'util/client'; - -const useStyles = makeStyles((theme) => ({ - root: { - display: 'flex', - justifyContent: 'space-between', - alignItems: 'center', - padding: 16, - }, - bullet: { - display: 'inline-block', - margin: '0 2px', - transform: 'scale(0.8)', - }, - title: { - fontSize: 14, - }, - pos: { - marginBottom: 12, - }, - icon: { - width: theme.spacing(7), - height: theme.spacing(7), - flex: '0 0 auto', - marginRight: 16, - }, -})); - -interface IProps{ - episode: IEpisode - triggerEpisodesUpdate: () => void -} - -export default function EpisodeCard(props: IProps) { - const classes = useStyles(); - const theme = useTheme(); - const { episode, triggerEpisodesUpdate } = props; - - const dateStr = episode.uploadDate && new Date(episode.uploadDate).toISOString().slice(0, 10); - - const [anchorEl, setAnchorEl] = React.useState(null); - - const handleClick = (event: React.MouseEvent) => { - setAnchorEl(event.currentTarget); - }; - - const handleClose = () => { - setAnchorEl(null); - }; - - const sendChange = (key: string, value: any) => { - handleClose(); - - const formData = new FormData(); - formData.append(key, value); - client.patch(`/api/v1/anime/anime/${episode.animeId}/episode/${episode.index}`, formData) - .then(() => triggerEpisodesUpdate()); - }; - - const readChapterColor = theme.palette.type === 'dark' ? '#acacac' : '#b0b0b0'; - return ( - <> -
  • - - - -
    -
    - - - {episode.bookmarked && } - - {episode.name} - {episode.episodeNumber > 0 && ` : ${episode.episodeNumber}`} - - - {episode.scanlator} - {episode.scanlator && ' '} - {dateStr} - -
    -
    - - - - - - - {/* Download */} - sendChange('bookmarked', !episode.bookmarked)}> - {episode.bookmarked && 'Remove bookmark'} - {!episode.bookmarked && 'Bookmark'} - - sendChange('read', !episode.read)}> - Mark as - {' '} - {episode.read && 'unread'} - {!episode.read && 'read'} - - sendChange('markPrevRead', true)}> - Mark previous as Read - - -
    -
    -
  • - - ); -} diff --git a/webUI/src/src/components/anime/ExtensionCard.tsx b/webUI/src/src/components/anime/ExtensionCard.tsx deleted file mode 100644 index 0335e3a..0000000 --- a/webUI/src/src/components/anime/ExtensionCard.tsx +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React, { useState } from 'react'; -import { makeStyles } from '@material-ui/core/styles'; -import Card from '@material-ui/core/Card'; -import CardContent from '@material-ui/core/CardContent'; -import Button from '@material-ui/core/Button'; -import Avatar from '@material-ui/core/Avatar'; -import Typography from '@material-ui/core/Typography'; -import client from 'util/client'; -import useLocalStorage from 'util/useLocalStorage'; - -const useStyles = makeStyles((theme) => ({ - root: { - display: 'flex', - justifyContent: 'space-between', - alignItems: 'center', - padding: 16, - }, - bullet: { - display: 'inline-block', - margin: '0 2px', - transform: 'scale(0.8)', - }, - title: { - fontSize: 14, - }, - pos: { - marginBottom: 12, - }, - icon: { - width: theme.spacing(7), - height: theme.spacing(7), - flex: '0 0 auto', - marginRight: 16, - }, -})); - -interface IProps { - extension: IExtension - notifyInstall: () => void -} - -export default function ExtensionCard(props: IProps) { - const { - extension: { - name, lang, versionName, installed, hasUpdate, obsolete, pkgName, iconUrl, - }, - notifyInstall, - } = props; - const [installedState, setInstalledState] = useState( - () => { - if (obsolete) { return 'obsolete'; } - if (hasUpdate) { return 'update'; } - return (installed ? 'uninstall' : 'install'); - }, - ); - - const [serverAddress] = useLocalStorage('serverBaseURL', ''); - - const classes = useStyles(); - const langPress = lang === 'all' ? 'All' : lang.toUpperCase(); - - function install() { - setInstalledState('installing'); - client.get(`/api/v1/anime/extension/install/${pkgName}`) - .then(() => { - setInstalledState('uninstall'); - notifyInstall(); - }); - } - - function update() { - setInstalledState('updating'); - client.get(`/api/v1/anime/extension/update/${pkgName}`) - .then(() => { - setInstalledState('uninstall'); - notifyInstall(); - }); - } - - function uninstall() { - setInstalledState('uninstalling'); - client.get(`/api/v1/anime/extension/uninstall/${pkgName}`) - .then(() => { - // setInstalledState('install'); - notifyInstall(); - }); - } - - function handleButtonClick() { - switch (installedState) { - case 'install': - install(); - break; - case 'update': - update(); - break; - case 'obsolete': - uninstall(); - setTimeout(() => window.location.reload(), 3000); - break; - case 'uninstall': - uninstall(); - break; - default: - break; - } - } - - return ( - - -
    - -
    - - {name} - - - {langPress} - {' '} - {versionName} - -
    -
    - - -
    -
    - ); -} diff --git a/webUI/src/src/components/anime/SourceCard.tsx b/webUI/src/src/components/anime/SourceCard.tsx deleted file mode 100644 index ecc08d8..0000000 --- a/webUI/src/src/components/anime/SourceCard.tsx +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React from 'react'; -import { makeStyles } from '@material-ui/core/styles'; -import Card from '@material-ui/core/Card'; -import CardContent from '@material-ui/core/CardContent'; -import Button from '@material-ui/core/Button'; -import Avatar from '@material-ui/core/Avatar'; -import Typography from '@material-ui/core/Typography'; -import useLocalStorage from 'util/useLocalStorage'; -import { langCodeToName } from 'util/language'; - -const useStyles = makeStyles((theme) => ({ - root: { - display: 'flex', - justifyContent: 'space-between', - alignItems: 'center', - padding: 16, - }, - bullet: { - display: 'inline-block', - margin: '0 2px', - transform: 'scale(0.8)', - }, - title: { - fontSize: 14, - }, - pos: { - marginBottom: 12, - }, - icon: { - width: theme.spacing(7), - height: theme.spacing(7), - flex: '0 0 auto', - marginRight: 16, - }, -})); - -interface IProps { - source: ISource -} - -export default function SourceCard(props: IProps) { - const { - source: { - id, name, lang, iconUrl, supportsLatest, - }, - } = props; - - const [serverAddress] = useLocalStorage('serverBaseURL', ''); - - const classes = useStyles(); - - return ( - - -
    - -
    - - {name} - - - {langCodeToName(lang)} - -
    -
    -
    - - {supportsLatest && } - -
    -
    -
    - ); -} diff --git a/webUI/src/src/components/manga/CategorySelect.tsx b/webUI/src/src/components/manga/CategorySelect.tsx deleted file mode 100644 index 6265c3a..0000000 --- a/webUI/src/src/components/manga/CategorySelect.tsx +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React, { useEffect, useState } from 'react'; -import { makeStyles, createStyles } from '@material-ui/core/styles'; -import Button from '@material-ui/core/Button'; -import DialogTitle from '@material-ui/core/DialogTitle'; -import DialogContent from '@material-ui/core/DialogContent'; -import DialogActions from '@material-ui/core/DialogActions'; -import Dialog from '@material-ui/core/Dialog'; -import Checkbox from '@material-ui/core/Checkbox'; -import FormControlLabel from '@material-ui/core/FormControlLabel'; -import FormGroup from '@material-ui/core/FormGroup'; -import client from 'util/client'; - -const useStyles = makeStyles(() => createStyles({ - paper: { - maxHeight: 435, - width: '80%', - }, -})); - -interface IProps { - open: boolean - setOpen: (value: boolean) => void - mangaId: number -} - -interface ICategoryInfo { - category: ICategory - selected: boolean -} - -export default function CategorySelect(props: IProps) { - const classes = useStyles(); - const { open, setOpen, mangaId } = props; - const [categoryInfos, setCategoryInfos] = useState([]); - - const [updateTriggerHolder, setUpdateTriggerHolder] = useState(0); // just a hack - const triggerUpdate = () => setUpdateTriggerHolder(updateTriggerHolder + 1); // just a hack - - useEffect(() => { - let tmpCategoryInfos: ICategoryInfo[] = []; - client.get('/api/v1/category/') - .then((response) => response.data) - .then((data: ICategory[]) => { - tmpCategoryInfos = data.map((category) => ({ category, selected: false })); - }) - .then(() => { - client.get(`/api/v1/manga/${mangaId}/category/`) - .then((response) => response.data) - .then((data: ICategory[]) => { - data.forEach((category) => { - tmpCategoryInfos[category.order - 1].selected = true; - }); - setCategoryInfos(tmpCategoryInfos); - }); - }); - }, [updateTriggerHolder, open]); - - const handleCancel = () => { - setOpen(false); - }; - - const handleOk = () => { - setOpen(false); - }; - - const handleChange = (event: React.ChangeEvent, categoryId: number) => { - const { checked } = event.target as HTMLInputElement; - - const method = checked ? client.get : client.delete; - method(`/api/v1/manga/${mangaId}/category/${categoryId}`) - .then(() => triggerUpdate()); - }; - - return ( - - Set categories - - - {categoryInfos.length === 0 - && ( - - No categories found! -
    - You should make some from settings. -
    - )} - {categoryInfos.map((categoryInfo) => ( - handleChange(e, categoryInfo.category.id)} - color="default" - /> - )} - label={categoryInfo.category.name} - /> - ))} -
    - -
    - - - - -
    - ); -} diff --git a/webUI/src/src/components/manga/ChapterCard.tsx b/webUI/src/src/components/manga/ChapterCard.tsx deleted file mode 100644 index 949fb60..0000000 --- a/webUI/src/src/components/manga/ChapterCard.tsx +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React from 'react'; -import { makeStyles, useTheme } from '@material-ui/core/styles'; -import Card from '@material-ui/core/Card'; -import CardContent from '@material-ui/core/CardContent'; -import IconButton from '@material-ui/core/IconButton'; -import MoreVertIcon from '@material-ui/icons/MoreVert'; -import Typography from '@material-ui/core/Typography'; -import { Link } from 'react-router-dom'; -import Menu from '@material-ui/core/Menu'; -import MenuItem from '@material-ui/core/MenuItem'; -import BookmarkIcon from '@material-ui/icons/Bookmark'; -import client from 'util/client'; - -const useStyles = makeStyles((theme) => ({ - root: { - display: 'flex', - justifyContent: 'space-between', - alignItems: 'center', - padding: 16, - }, - bullet: { - display: 'inline-block', - margin: '0 2px', - transform: 'scale(0.8)', - }, - title: { - fontSize: 14, - }, - pos: { - marginBottom: 12, - }, - icon: { - width: theme.spacing(7), - height: theme.spacing(7), - flex: '0 0 auto', - marginRight: 16, - }, -})); - -interface IProps{ - chapter: IChapter - triggerChaptersUpdate: () => void - downloadingString: string -} - -export default function ChapterCard(props: IProps) { - const classes = useStyles(); - const theme = useTheme(); - const { chapter, triggerChaptersUpdate, downloadingString } = props; - - const dateStr = chapter.uploadDate && new Date(chapter.uploadDate).toISOString().slice(0, 10); - - const [anchorEl, setAnchorEl] = React.useState(null); - - const handleClick = (event: React.MouseEvent) => { - setAnchorEl(event.currentTarget); - }; - - const handleClose = () => { - setAnchorEl(null); - }; - - const sendChange = (key: string, value: any) => { - handleClose(); - - const formData = new FormData(); - formData.append(key, value); - client.patch(`/api/v1/manga/${chapter.mangaId}/chapter/${chapter.index}`, formData) - .then(() => triggerChaptersUpdate()); - }; - - const downloadChapter = () => { - client.get(`/api/v1/download/${chapter.mangaId}/chapter/${chapter.index}`); - handleClose(); - }; - - const readChapterColor = theme.palette.type === 'dark' ? '#acacac' : '#b0b0b0'; - return ( - <> -
  • - - - -
    -
    - - - {chapter.bookmarked && } - - {chapter.name} - {chapter.chapterNumber > 0 && ` : ${chapter.chapterNumber}`} - - - {chapter.scanlator} - {chapter.scanlator && ' '} - {dateStr} - {downloadingString} - -
    -
    - - - - - - - {downloadingString.length === 0 - && Download } - sendChange('bookmarked', !chapter.bookmarked)}> - {chapter.bookmarked && 'Remove bookmark'} - {!chapter.bookmarked && 'Bookmark'} - - sendChange('read', !chapter.read)}> - Mark as - {' '} - {chapter.read && 'unread'} - {!chapter.read && 'read'} - - sendChange('markPrevRead', true)}> - Mark previous as Read - - -
    -
    -
  • - - ); -} diff --git a/webUI/src/src/components/manga/ExtensionCard.tsx b/webUI/src/src/components/manga/ExtensionCard.tsx deleted file mode 100644 index 806c075..0000000 --- a/webUI/src/src/components/manga/ExtensionCard.tsx +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React, { useState } from 'react'; -import { makeStyles } from '@material-ui/core/styles'; -import Card from '@material-ui/core/Card'; -import CardContent from '@material-ui/core/CardContent'; -import Button from '@material-ui/core/Button'; -import Avatar from '@material-ui/core/Avatar'; -import Typography from '@material-ui/core/Typography'; -import client from 'util/client'; -import useLocalStorage from 'util/useLocalStorage'; - -const useStyles = makeStyles((theme) => ({ - root: { - display: 'flex', - justifyContent: 'space-between', - alignItems: 'center', - padding: 16, - }, - bullet: { - display: 'inline-block', - margin: '0 2px', - transform: 'scale(0.8)', - }, - title: { - fontSize: 14, - }, - pos: { - marginBottom: 12, - }, - icon: { - width: theme.spacing(7), - height: theme.spacing(7), - flex: '0 0 auto', - marginRight: 16, - }, -})); - -interface IProps { - extension: IExtension - notifyInstall: () => void -} - -export default function ExtensionCard(props: IProps) { - const { - extension: { - name, lang, versionName, installed, hasUpdate, obsolete, pkgName, iconUrl, - }, - notifyInstall, - } = props; - const [installedState, setInstalledState] = useState( - () => { - if (obsolete) { return 'obsolete'; } - if (hasUpdate) { return 'update'; } - return (installed ? 'uninstall' : 'install'); - }, - ); - - const [serverAddress] = useLocalStorage('serverBaseURL', ''); - - const classes = useStyles(); - const langPress = lang === 'all' ? 'All' : lang.toUpperCase(); - - function install() { - setInstalledState('installing'); - client.get(`/api/v1/extension/install/${pkgName}`) - .then(() => { - setInstalledState('uninstall'); - notifyInstall(); - }); - } - - function update() { - setInstalledState('updating'); - client.get(`/api/v1/extension/update/${pkgName}`) - .then(() => { - setInstalledState('uninstall'); - notifyInstall(); - }); - } - - function uninstall() { - setInstalledState('uninstalling'); - client.get(`/api/v1/extension/uninstall/${pkgName}`) - .then(() => { - // setInstalledState('install'); - notifyInstall(); - }); - } - - function handleButtonClick() { - switch (installedState) { - case 'install': - install(); - break; - case 'update': - update(); - break; - case 'obsolete': - uninstall(); - setTimeout(() => window.location.reload(), 3000); - break; - case 'uninstall': - uninstall(); - break; - default: - break; - } - } - - return ( - - -
    - -
    - - {name} - - - {langPress} - {' '} - {versionName} - -
    -
    - - -
    -
    - ); -} diff --git a/webUI/src/src/components/manga/ExtensionLangSelect.tsx b/webUI/src/src/components/manga/ExtensionLangSelect.tsx deleted file mode 100644 index 6480034..0000000 --- a/webUI/src/src/components/manga/ExtensionLangSelect.tsx +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React, { useState } from 'react'; -import { makeStyles, createStyles } from '@material-ui/core/styles'; -import Button from '@material-ui/core/Button'; -import DialogTitle from '@material-ui/core/DialogTitle'; -import DialogContent from '@material-ui/core/DialogContent'; -import DialogActions from '@material-ui/core/DialogActions'; -import Dialog from '@material-ui/core/Dialog'; -import Switch from '@material-ui/core/Switch'; -import IconButton from '@material-ui/core/IconButton'; -import FilterListIcon from '@material-ui/icons/FilterList'; -import { List, ListItemSecondaryAction, ListItemText } from '@material-ui/core'; -import ListItem from '@material-ui/core/ListItem'; -import { langCodeToName } from 'util/language'; -import cloneObject from 'util/cloneObject'; - -const useStyles = makeStyles(() => createStyles({ - paper: { - maxHeight: 435, - width: '80%', - }, -})); - -interface IProps { - shownLangs: string[] - setShownLangs: (arg0: string[]) => void - allLangs: string[] -} - -export default function ExtensionLangSelect(props: IProps) { - const { shownLangs, setShownLangs, allLangs } = props; - // hold a copy and only sate state on parent when OK pressed, improves performance - const [mShownLangs, setMShownLangs] = useState(shownLangs); - const classes = useStyles(); - const [open, setOpen] = useState(false); - - const handleCancel = () => { - setOpen(false); - }; - - const handleOk = () => { - setOpen(false); - setShownLangs(mShownLangs); - }; - - const handleChange = (event: React.ChangeEvent, lang: string) => { - const { checked } = event.target as HTMLInputElement; - - if (checked) { - setMShownLangs([...mShownLangs, lang]); - } else { - const clone = cloneObject(mShownLangs); - clone.splice(clone.indexOf(lang), 1); - setMShownLangs(clone); - } - }; - - return ( - <> - setOpen(true)} - aria-label="display more actions" - edge="end" - color="inherit" - > - - - - Enabled Languages - - - {allLangs.map((lang) => ( - - - - - handleChange(e, lang)} - /> - - - - ))} - - - - - - - - - - ); -} diff --git a/webUI/src/src/components/manga/MangaCard.tsx b/webUI/src/src/components/manga/MangaCard.tsx deleted file mode 100644 index b496603..0000000 --- a/webUI/src/src/components/manga/MangaCard.tsx +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React from 'react'; -import { makeStyles } from '@material-ui/core/styles'; -import Card from '@material-ui/core/Card'; -import CardActionArea from '@material-ui/core/CardActionArea'; -import Typography from '@material-ui/core/Typography'; -import { Link } from 'react-router-dom'; -import { Grid } from '@material-ui/core'; -import useLocalStorage from 'util/useLocalStorage'; -import SpinnerImage from 'components/SpinnerImage'; - -const useStyles = makeStyles({ - root: { - height: '100%', - width: '100%', - display: 'flex', - }, - wrapper: { - position: 'relative', - height: '100%', - }, - gradient: { - position: 'absolute', - top: 0, - width: '100%', - height: '100%', - background: 'linear-gradient(to bottom, transparent, #000000)', - opacity: 0.5, - }, - title: { - position: 'absolute', - bottom: 0, - padding: '0.5em', - color: 'white', - }, - image: { - height: '100%', - width: '100%', - }, - - spinner: { - minHeight: '400px', - padding: '180px calc(50% - 20px)', - }, -}); - -interface IProps { - manga: IMangaCard -} -const MangaCard = React.forwardRef((props: IProps, ref) => { - const { - manga: { - id, title, thumbnailUrl, - }, - } = props; - const classes = useStyles(); - const [serverAddress] = useLocalStorage('serverBaseURL', ''); - - return ( - - - - -
    - -
    - {title} -
    - - - - - ); -}); - -export default MangaCard; diff --git a/webUI/src/src/components/manga/MangaDetails.tsx b/webUI/src/src/components/manga/MangaDetails.tsx deleted file mode 100644 index abe05d9..0000000 --- a/webUI/src/src/components/manga/MangaDetails.tsx +++ /dev/null @@ -1,257 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import { makeStyles } from '@material-ui/core'; -import IconButton from '@material-ui/core/IconButton'; -import { Theme } from '@material-ui/core/styles'; -import FavoriteIcon from '@material-ui/icons/Favorite'; -import FavoriteBorderIcon from '@material-ui/icons/FavoriteBorder'; -import FilterListIcon from '@material-ui/icons/FilterList'; -import PublicIcon from '@material-ui/icons/Public'; -import React, { useContext, useEffect, useState } from 'react'; -import NavbarContext from 'context/NavbarContext'; -import client from 'util/client'; -import useLocalStorage from 'util/useLocalStorage'; -import CategorySelect from './CategorySelect'; - -const useStyles = (inLibrary: string) => makeStyles((theme: Theme) => ({ - root: { - width: '100%', - [theme.breakpoints.up('md')]: { - position: 'sticky', - top: '64px', - left: '0px', - width: '50vw', - height: 'calc(100vh - 64px)', - alignSelf: 'flex-start', - overflowY: 'auto', - }, - }, - top: { - padding: '10px', - // [theme.breakpoints.up('md')]: { - // minWidth: '50%', - // }, - }, - leftRight: { - display: 'flex', - }, - leftSide: { - '& img': { - borderRadius: 4, - maxWidth: '100%', - minWidth: '100%', - height: 'auto', - }, - maxWidth: '50%', - // [theme.breakpoints.up('md')]: { - // minWidth: '100px', - // }, - }, - rightSide: { - marginLeft: 15, - maxWidth: '100%', - '& span': { - fontWeight: '400', - }, - [theme.breakpoints.up('lg')]: { - fontSize: '1.3em', - }, - }, - buttons: { - display: 'flex', - justifyContent: 'space-around', - '& button': { - color: inLibrary === 'In Library' ? '#2196f3' : 'inherit', - }, - '& span': { - display: 'block', - fontSize: '0.85em', - }, - '& a': { - textDecoration: 'none', - color: '#858585', - '& button': { - color: 'inherit', - }, - }, - }, - bottom: { - paddingLeft: '10px', - paddingRight: '10px', - [theme.breakpoints.up('md')]: { - fontSize: '1.2em', - // maxWidth: '50%', - }, - [theme.breakpoints.up('lg')]: { - fontSize: '1.3em', - }, - }, - description: { - '& h4': { - marginTop: '1em', - marginBottom: 0, - }, - '& p': { - textAlign: 'justify', - textJustify: 'inter-word', - }, - }, - genre: { - display: 'flex', - flexWrap: 'wrap', - '& h5': { - border: '2px solid #2196f3', - borderRadius: '1.13em', - marginRight: '1em', - marginTop: 0, - marginBottom: '10px', - padding: '0.3em', - color: '#2196f3', - }, - }, -})); - -interface IProps{ - manga: IManga -} - -function getSourceName(source: ISource) { - if (source.name !== null) { - return `${source.name} (${source.lang.toLocaleUpperCase()})`; - } - return source.id; -} - -function getValueOrUnknown(val: string) { - return val || 'UNKNOWN'; -} - -export default function MangaDetails(props: IProps) { - const { setAction } = useContext(NavbarContext); - - const { manga } = props; - if (manga.genre == null) { - manga.genre = ''; - } - const [inLibrary, setInLibrary] = useState( - manga.inLibrary ? 'In Library' : 'Add To Library', - ); - - const [categoryDialogOpen, setCategoryDialogOpen] = useState(false); - - useEffect(() => { - if (inLibrary === 'In Library') { - setAction( - <> - setCategoryDialogOpen(true)} - aria-label="display more actions" - edge="end" - color="inherit" - > - - - - , - - ); - } else { setAction(<>); } - }, [inLibrary, categoryDialogOpen]); - - const [serverAddress] = useLocalStorage('serverBaseURL', ''); - - const classes = useStyles(inLibrary)(); - - function addToLibrary() { - // setInLibrary('adding'); - client.get(`/api/v1/manga/${manga.id}/library/`).then(() => { - setInLibrary('In Library'); - }); - } - - function removeFromLibrary() { - // setInLibrary('removing'); - client.delete(`/api/v1/manga/${manga.id}/library/`).then(() => { - setInLibrary('Add To Library'); - }); - } - - function handleButtonClick() { - if (inLibrary === 'Add To Library') { - addToLibrary(); - } else { - removeFromLibrary(); - } - } - - return ( -
    -
    -
    -
    - Manga Thumbnail -
    -
    -

    - {manga.title} -

    -

    - Author: - {' '} - {getValueOrUnknown(manga.author)} -

    -

    - Artist: - {' '} - {getValueOrUnknown(manga.artist)} -

    -

    - Status: - {' '} - {manga.status} -

    -

    - Source: - {' '} - {getSourceName(manga.source)} -

    -
    -
    -
    -
    - handleButtonClick()}> - {inLibrary === 'In Library' && } - {inLibrary !== 'In Library' && } - {inLibrary} - -
    - { /* eslint-disable-next-line react/jsx-no-target-blank */ } - - - - Open Site - - -
    -
    -
    -
    -

    About

    -

    {manga.description}

    -
    -
    - {manga.genre.split(', ').map((g) =>
    {g}
    )} -
    -
    -
    - ); -} diff --git a/webUI/src/src/components/manga/MangaGrid.tsx b/webUI/src/src/components/manga/MangaGrid.tsx deleted file mode 100644 index 2af00d4..0000000 --- a/webUI/src/src/components/manga/MangaGrid.tsx +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React, { useEffect, useRef } from 'react'; -import Grid from '@material-ui/core/Grid'; -import MangaCard from './MangaCard'; - -interface IProps{ - mangas: IMangaCard[] - message?: string - hasNextPage: boolean - lastPageNum: number - setLastPageNum: (lastPageNum: number) => void -} - -export default function MangaGrid(props: IProps) { - const { - mangas, message, hasNextPage, lastPageNum, setLastPageNum, - } = props; - let mapped; - const lastManga = useRef(); - - const scrollHandler = () => { - if (lastManga.current) { - const rect = lastManga.current.getBoundingClientRect(); - if (((rect.y + rect.height) / window.innerHeight < 2) && hasNextPage) { - setLastPageNum(lastPageNum + 1); - } - } - }; - useEffect(() => { - window.addEventListener('scroll', scrollHandler, true); - return () => { - window.removeEventListener('scroll', scrollHandler, true); - }; - }, [hasNextPage, mangas]); - - if (mangas.length === 0) { - mapped =

    {message}

    ; - } else { - mapped = mangas.map((it, idx) => { - if (idx === mangas.length - 1) { - return ; - } - return ; - }); - } - - return ( - - {mapped} - - ); -} - -MangaGrid.defaultProps = { - message: 'loading...', -}; diff --git a/webUI/src/src/components/manga/SourceCard.tsx b/webUI/src/src/components/manga/SourceCard.tsx deleted file mode 100644 index 79943b8..0000000 --- a/webUI/src/src/components/manga/SourceCard.tsx +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React from 'react'; -import { makeStyles } from '@material-ui/core/styles'; -import Card from '@material-ui/core/Card'; -import CardContent from '@material-ui/core/CardContent'; -import Button from '@material-ui/core/Button'; -import Avatar from '@material-ui/core/Avatar'; -import Typography from '@material-ui/core/Typography'; -import useLocalStorage from 'util/useLocalStorage'; -import { langCodeToName } from 'util/language'; - -const useStyles = makeStyles((theme) => ({ - root: { - display: 'flex', - justifyContent: 'space-between', - alignItems: 'center', - padding: 16, - }, - bullet: { - display: 'inline-block', - margin: '0 2px', - transform: 'scale(0.8)', - }, - title: { - fontSize: 14, - }, - pos: { - marginBottom: 12, - }, - icon: { - width: theme.spacing(7), - height: theme.spacing(7), - flex: '0 0 auto', - marginRight: 16, - }, -})); - -interface IProps { - source: ISource -} - -export default function SourceCard(props: IProps) { - const { - source: { - id, name, lang, iconUrl, supportsLatest, - }, - } = props; - - const [serverAddress] = useLocalStorage('serverBaseURL', ''); - - const classes = useStyles(); - - return ( - - -
    - -
    - - {name} - - - {langCodeToName(lang)} - -
    -
    -
    - - {supportsLatest && } - -
    -
    -
    - ); -} diff --git a/webUI/src/src/components/manga/reader/DoublePage.tsx b/webUI/src/src/components/manga/reader/DoublePage.tsx deleted file mode 100644 index 7cca28b..0000000 --- a/webUI/src/src/components/manga/reader/DoublePage.tsx +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import { makeStyles } from '@material-ui/core/styles'; -import React from 'react'; - -const useStyles = (settings: IReaderSettings) => makeStyles({ - image: { - display: 'block', - marginBottom: 0, - width: 'auto', - minHeight: '99vh', - height: 'auto', - maxHeight: '99vh', - objectFit: 'contain', - }, - page: { - display: 'flex', - flexDirection: settings.readerType === 'DoubleLTR' ? 'row' : 'row-reverse', - justifyContent: 'center', - margin: '0 auto', - width: 'auto', - height: 'auto', - overflowX: 'scroll', - }, -}); - -interface IProps { - index: number - image1src: string - image2src: string - settings: IReaderSettings -} - -const DoublePage = React.forwardRef((props: IProps, ref: any) => { - const { - image1src, image2src, index, settings, - } = props; - - const classes = useStyles(settings)(); - - return ( -
    - {`Page - {`Page -
    - ); -}); - -export default DoublePage; diff --git a/webUI/src/src/components/manga/reader/Page.tsx b/webUI/src/src/components/manga/reader/Page.tsx deleted file mode 100644 index 5c1d033..0000000 --- a/webUI/src/src/components/manga/reader/Page.tsx +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import { makeStyles } from '@material-ui/core/styles'; -import { CSSProperties } from '@material-ui/core/styles/withStyles'; -import React, { useEffect, useRef } from 'react'; -import SpinnerImage from 'components/SpinnerImage'; - -function imageStyle(settings: IReaderSettings): CSSProperties { - if (settings.readerType === 'DoubleLTR' - || settings.readerType === 'DoubleRTL' - || settings.readerType === 'ContinuesHorizontalLTR' - || settings.readerType === 'ContinuesHorizontalRTL') { - return { - display: 'block', - marginLeft: '7px', - marginRight: '7px', - width: 'auto', - minHeight: '99vh', - height: 'auto', - maxHeight: '99vh', - objectFit: 'contain', - pointerEvents: 'none', - }; - } - - return { - display: 'block', - marginBottom: settings.readerType === 'ContinuesVertical' ? '15px' : 0, - minWidth: '50vw', - width: '100%', - maxWidth: '100%', - }; -} - -const useStyles = (settings: IReaderSettings) => makeStyles({ - loading: { - margin: '100px auto', - height: '100vh', - width: '100vw', - }, - loadingImage: { - height: '100vh', - width: '70vw', - padding: '50px calc(50% - 20px)', - backgroundColor: '#525252', - marginBottom: 10, - }, - image: imageStyle(settings), -}); - -interface IProps { - src: string - index: number - onImageLoad: () => void - setCurPage: React.Dispatch> - settings: IReaderSettings -} - -const Page = React.forwardRef((props: IProps, ref: any) => { - const { - src, index, onImageLoad, setCurPage, settings, - } = props; - - const classes = useStyles(settings)(); - const imgRef = useRef(null); - - const handleVerticalScroll = () => { - if (imgRef.current) { - const rect = imgRef.current.getBoundingClientRect(); - if (rect.y < 0 && rect.y + rect.height > 0) { - setCurPage(index); - } - } - }; - - const handleHorizontalScroll = () => { - if (imgRef.current) { - const rect = imgRef.current.getBoundingClientRect(); - if (rect.left <= window.innerWidth / 2 && rect.right > window.innerWidth / 2) { - setCurPage(index); - } - } - }; - - useEffect(() => { - switch (settings.readerType) { - case 'Webtoon': - case 'ContinuesVertical': - window.addEventListener('scroll', handleVerticalScroll); - return () => window.removeEventListener('scroll', handleVerticalScroll); - case 'ContinuesHorizontalLTR': - case 'ContinuesHorizontalRTL': - window.addEventListener('scroll', handleHorizontalScroll); - return () => window.removeEventListener('scroll', handleHorizontalScroll); - default: - return () => {}; - } - }, [handleVerticalScroll]); - - return ( -
    - -
    - ); -}); - -export default Page; diff --git a/webUI/src/src/components/manga/reader/PageNumber.tsx b/webUI/src/src/components/manga/reader/PageNumber.tsx deleted file mode 100644 index 7a918dc..0000000 --- a/webUI/src/src/components/manga/reader/PageNumber.tsx +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import { makeStyles } from '@material-ui/core/styles'; -import React from 'react'; - -const useStyles = (settings: IReaderSettings) => makeStyles({ - pageNumber: { - display: settings.showPageNumber ? 'block' : 'none', - position: 'fixed', - bottom: '50px', - right: settings.staticNav ? 'calc((100vw - 325px)/2)' : 'calc((100vw - 25px)/2)', - width: '50px', - textAlign: 'center', - backgroundColor: 'rgba(0, 0, 0, 0.3)', - borderRadius: '10px', - }, -}); - -interface IProps { - settings: IReaderSettings - curPage: number - pageCount: number -} - -export default function PageNumber(props: IProps) { - const { settings, curPage, pageCount } = props; - const classes = useStyles(settings)(); - - return ( -
    - {`${curPage + 1} / ${pageCount}`} -
    - ); -} diff --git a/webUI/src/src/components/manga/reader/pager/DoublePagedPager.tsx b/webUI/src/src/components/manga/reader/pager/DoublePagedPager.tsx deleted file mode 100644 index 90f1002..0000000 --- a/webUI/src/src/components/manga/reader/pager/DoublePagedPager.tsx +++ /dev/null @@ -1,212 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import { makeStyles } from '@material-ui/core/styles'; -import React, { useEffect, useRef } from 'react'; -import ReactDOM from 'react-dom'; -import Page from '../Page'; -import DoublePage from '../DoublePage'; - -const useStyles = (settings: IReaderSettings) => makeStyles({ - preload: { - display: 'none', - }, - reader: { - display: 'flex', - flexDirection: (settings.readerType === 'DoubleLTR') ? 'row' : 'row-reverse', - justifyContent: 'center', - margin: '0 auto', - width: 'auto', - height: 'auto', - overflowX: 'scroll', - }, -}); - -export default function DoublePagedPager(props: IReaderProps) { - const { - pages, settings, setCurPage, curPage, nextChapter, prevChapter, - } = props; - - const classes = useStyles(settings)(); - - const selfRef = useRef(null); - const pagesRef = useRef([]); - - const pagesDisplayed = useRef(0); - const pageLoaded = useRef(Array(pages.length).fill(false)); - - function setPagesToDisplay() { - pagesDisplayed.current = 0; - if (curPage < pages.length && pagesRef.current[curPage]) { - if (pageLoaded.current[curPage]) { - pagesDisplayed.current = 1; - const imgElem = pagesRef.current[curPage]; - const aspectRatio = imgElem.height / imgElem.width; - if (aspectRatio < 1) { - return; - } - } - } - if (curPage + 1 < pages.length && pagesRef.current[curPage + 1]) { - if (pageLoaded.current[curPage + 1]) { - const imgElem = pagesRef.current[curPage + 1]; - const aspectRatio = imgElem.height / imgElem.width; - if (aspectRatio < 1) { - return; - } - pagesDisplayed.current = 2; - } - } - } - - function displayPages() { - if (pagesDisplayed.current === 2) { - ReactDOM.render( - , - document.getElementById('display'), - ); - } else { - ReactDOM.render( - {}} - setCurPage={setCurPage} - settings={settings} - />, - document.getElementById('display'), - ); - } - } - - function pagesToGoBack() { - for (let i = 1; i <= 2; i++) { - if (curPage - i > 0 && pagesRef.current[curPage - i]) { - if (pageLoaded.current[curPage - i]) { - const imgElem = pagesRef.current[curPage - i]; - const aspectRatio = imgElem.height / imgElem.width; - if (aspectRatio < 1) { - return 1; - } - } - } - } - return 2; - } - - function nextPage() { - if (curPage < pages.length - 1) { - const nextCurPage = curPage + pagesDisplayed.current; - setCurPage((nextCurPage >= pages.length) ? pages.length - 1 : nextCurPage); - } else if (settings.loadNextonEnding) { - nextChapter(); - } - } - - function prevPage() { - if (curPage > 0) { - const nextCurPage = curPage - pagesToGoBack(); - setCurPage((nextCurPage < 0) ? 0 : nextCurPage); - } else { - prevChapter(); - } - } - - function goLeft() { - if (settings.readerType === 'DoubleLTR') { - prevPage(); - } else { - nextPage(); - } - } - - function goRight() { - if (settings.readerType === 'DoubleLTR') { - nextPage(); - } else { - prevPage(); - } - } - - function keyboardControl(e:KeyboardEvent) { - switch (e.code) { - case 'Space': - e.preventDefault(); - nextPage(); - break; - case 'ArrowRight': - goRight(); - break; - case 'ArrowLeft': - goLeft(); - break; - default: - break; - } - } - - function clickControl(e:MouseEvent) { - if (e.clientX > window.innerWidth / 2) { - goRight(); - } else { - goLeft(); - } - } - - function handleImageLoad(index: number) { - return () => { - pageLoaded.current[index] = true; - }; - } - - useEffect(() => { - const retryDisplay = setInterval(() => { - const isLastPage = (curPage === pages.length - 1); - if ((!isLastPage && pageLoaded.current[curPage] && pageLoaded.current[curPage + 1]) - || pageLoaded.current[curPage]) { - setPagesToDisplay(); - displayPages(); - clearInterval(retryDisplay); - } - }, 50); - - document.addEventListener('keydown', keyboardControl); - selfRef.current?.addEventListener('click', clickControl); - - return () => { - clearInterval(retryDisplay); - document.removeEventListener('keydown', keyboardControl); - selfRef.current?.removeEventListener('click', clickControl); - }; - }, [selfRef, curPage, settings.readerType]); - - return ( -
    -
    - { - pages.map((page) => ( - { pagesRef.current[page.index] = e; }} - key={`${page.index}`} - src={page.src} - onLoad={handleImageLoad(page.index)} - alt={`${page.index}`} - /> - )) - } -
    -
    -
    - ); -} diff --git a/webUI/src/src/components/manga/reader/pager/HorizontalPager.tsx b/webUI/src/src/components/manga/reader/pager/HorizontalPager.tsx deleted file mode 100644 index 4ee5c26..0000000 --- a/webUI/src/src/components/manga/reader/pager/HorizontalPager.tsx +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import { makeStyles } from '@material-ui/core/styles'; -import React, { useEffect, useRef } from 'react'; -import Page from '../Page'; - -const useStyles = (settings: IReaderSettings) => makeStyles({ - reader: { - display: 'flex', - flexDirection: (settings.readerType === 'ContinuesHorizontalLTR') ? 'row' : 'row-reverse', - justifyContent: (settings.readerType === 'ContinuesHorizontalLTR') ? 'flex-start' : 'flex-end', - margin: '0 auto', - width: 'auto', - height: 'auto', - overflowX: 'visible', - userSelect: 'none', - }, -}); - -export default function HorizontalPager(props: IReaderProps) { - const { - pages, curPage, settings, setCurPage, prevChapter, nextChapter, - } = props; - - const classes = useStyles(settings)(); - - const selfRef = useRef(null); - const pagesRef = useRef([]); - - function nextPage() { - if (curPage < pages.length - 1) { - pagesRef.current[curPage + 1]?.scrollIntoView({ inline: 'center' }); - setCurPage((page) => page + 1); - } else if (settings.loadNextonEnding) { - nextChapter(); - } - } - - function prevPage() { - if (curPage > 0) { - pagesRef.current[curPage - 1]?.scrollIntoView({ inline: 'center' }); - setCurPage(curPage - 1); - } else if (curPage === 0) { - prevChapter(); - } - } - - function goLeft() { - if (settings.readerType === 'ContinuesHorizontalLTR') { - prevPage(); - } else { - nextPage(); - } - } - - function goRight() { - if (settings.readerType === 'ContinuesHorizontalLTR') { - nextPage(); - } else { - prevPage(); - } - } - - const mouseXPos = useRef(0); - - function dragScreen(e: MouseEvent) { - window.scrollBy(mouseXPos.current - e.pageX, 0); - } - - function dragControl(e:MouseEvent) { - mouseXPos.current = e.pageX; - selfRef.current?.addEventListener('mousemove', dragScreen); - } - - function removeDragControl() { - selfRef.current?.removeEventListener('mousemove', dragScreen); - } - - function clickControl(e:MouseEvent) { - if (e.clientX >= window.innerWidth * 0.85) { - goRight(); - } else if (e.clientX <= window.innerWidth * 0.15) { - goLeft(); - } - } - - const handleLoadNextonEnding = () => { - if (settings.readerType === 'ContinuesHorizontalLTR') { - if (window.scrollX + window.innerWidth >= document.body.scrollWidth) { - nextChapter(); - } - } else if (settings.readerType === 'ContinuesHorizontalRTL') { - if (window.scrollX <= window.innerWidth) { - nextChapter(); - } - } - }; - - useEffect(() => { - pagesRef.current[curPage]?.scrollIntoView({ inline: 'center' }); - }, [settings.readerType]); - - useEffect(() => { - selfRef.current?.addEventListener('mousedown', dragControl); - selfRef.current?.addEventListener('mouseup', removeDragControl); - - return () => { - selfRef.current?.removeEventListener('mousedown', dragControl); - selfRef.current?.removeEventListener('mouseup', removeDragControl); - }; - }, [selfRef]); - - useEffect(() => { - if (settings.loadNextonEnding) { - document.addEventListener('scroll', handleLoadNextonEnding); - } - selfRef.current?.addEventListener('mousedown', clickControl); - - return () => { - document.removeEventListener('scroll', handleLoadNextonEnding); - selfRef.current?.removeEventListener('mousedown', clickControl); - }; - }, [selfRef, curPage]); - - return ( -
    - { - pages.map((page) => ( - {}} - setCurPage={setCurPage} - settings={settings} - ref={(e:HTMLDivElement) => { pagesRef.current[page.index] = e; }} - /> - )) - } -
    - ); -} diff --git a/webUI/src/src/components/manga/reader/pager/PagedPager.tsx b/webUI/src/src/components/manga/reader/pager/PagedPager.tsx deleted file mode 100644 index bbbc609..0000000 --- a/webUI/src/src/components/manga/reader/pager/PagedPager.tsx +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import { makeStyles } from '@material-ui/core/styles'; -import React, { useEffect, useRef } from 'react'; -import Page from '../Page'; - -const useStyles = makeStyles({ - reader: { - display: 'flex', - flexDirection: 'row', - justifyContent: 'center', - margin: '0 auto', - width: '100%', - height: '100vh', - }, -}); - -export default function PagedReader(props: IReaderProps) { - const { - pages, settings, setCurPage, curPage, nextChapter, prevChapter, - } = props; - - const classes = useStyles(); - - const selfRef = useRef(null); - - function nextPage() { - if (curPage < pages.length - 1) { - setCurPage(curPage + 1); - } else if (settings.loadNextonEnding) { - nextChapter(); - } - } - - function prevPage() { - if (curPage > 0) { - setCurPage(curPage - 1); - } else { - prevChapter(); - } - } - - function goLeft() { - if (settings.readerType === 'SingleLTR') { - prevPage(); - } else if (settings.readerType === 'SingleRTL') { - nextPage(); - } - } - - function goRight() { - if (settings.readerType === 'SingleLTR') { - nextPage(); - } else if (settings.readerType === 'SingleRTL') { - prevPage(); - } - } - - function keyboardControl(e:KeyboardEvent) { - switch (e.code) { - case 'Space': - e.preventDefault(); - nextPage(); - break; - case 'ArrowRight': - goRight(); - break; - case 'ArrowLeft': - goLeft(); - break; - default: - break; - } - } - - function clickControl(e:MouseEvent) { - if (e.clientX > window.innerWidth / 2) { - goRight(); - } else { - goLeft(); - } - } - - useEffect(() => { - document.addEventListener('keydown', keyboardControl); - selfRef.current?.addEventListener('click', clickControl); - - return () => { - document.removeEventListener('keydown', keyboardControl); - selfRef.current?.removeEventListener('click', clickControl); - }; - }, [selfRef, curPage, settings.readerType]); - - return ( -
    - {}} - src={pages[curPage].src} - setCurPage={setCurPage} - settings={settings} - /> -
    - ); -} diff --git a/webUI/src/src/components/manga/reader/pager/VerticalPager.tsx b/webUI/src/src/components/manga/reader/pager/VerticalPager.tsx deleted file mode 100644 index 8331bf9..0000000 --- a/webUI/src/src/components/manga/reader/pager/VerticalPager.tsx +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import { makeStyles } from '@material-ui/core/styles'; -import React, { useEffect, useRef } from 'react'; -import Page from '../Page'; - -const useStyles = makeStyles({ - reader: { - display: 'flex', - flexDirection: 'column', - justifyContent: 'center', - margin: '0 auto', - width: '100%', - }, -}); - -export default function VerticalReader(props: IReaderProps) { - const { - pages, settings, setCurPage, curPage, chapter, nextChapter, prevChapter, - } = props; - - const classes = useStyles(); - - const selfRef = useRef(null); - const pagesRef = useRef([]); - - useEffect(() => { - pagesRef.current = pagesRef.current.slice(0, pages.length); - }, [pages.length]); - - function nextPage() { - if (curPage < pages.length - 1) { - pagesRef.current[curPage + 1]?.scrollIntoView(); - setCurPage((page) => page + 1); - } else if (settings.loadNextonEnding) { - nextChapter(); - } - } - - function prevPage() { - if (curPage > 0) { - const rect = pagesRef.current[curPage].getBoundingClientRect(); - if (rect.y < 0 && rect.y + rect.height > 0) { - pagesRef.current[curPage]?.scrollIntoView(); - } else { - pagesRef.current[curPage - 1]?.scrollIntoView(); - setCurPage(curPage - 1); - } - } else if (curPage === 0) { - prevChapter(); - } - } - - function keyboardControl(e:KeyboardEvent) { - switch (e.code) { - case 'Space': - e.preventDefault(); - nextPage(); - break; - case 'ArrowRight': - nextPage(); - break; - case 'ArrowLeft': - prevPage(); - break; - default: - break; - } - } - - function clickControl(e:MouseEvent) { - if (e.clientX > window.innerWidth / 2) { - nextPage(); - } else { - prevPage(); - } - } - - const handleLoadNextonEnding = () => { - if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight) { - nextChapter(); - } - }; - - useEffect(() => { - if (settings.loadNextonEnding) { document.addEventListener('scroll', handleLoadNextonEnding); } - document.addEventListener('keydown', keyboardControl, false); - selfRef.current?.addEventListener('click', clickControl); - - return () => { - document.removeEventListener('scroll', handleLoadNextonEnding); - document.removeEventListener('keydown', keyboardControl); - selfRef.current?.removeEventListener('click', clickControl); - }; - }, [selfRef, curPage]); - - useEffect(() => { - // scroll last read page into view - let initialPage = (chapter as IChapter).lastPageRead; - if (initialPage > pages.length - 1) { - initialPage = pages.length - 1; - } - if (initialPage > -1) { - pagesRef.current[initialPage].scrollIntoView(); - } - }, [pagesRef.current.length]); - - return ( -
    - { - pages.map((page) => ( - {}} - setCurPage={setCurPage} - settings={settings} - ref={(e:HTMLDivElement) => { pagesRef.current[page.index] = e; }} - /> - )) - } -
    - ); -} diff --git a/webUI/src/src/components/navbar/NavBar.tsx b/webUI/src/src/components/navbar/NavBar.tsx deleted file mode 100644 index b5f27ac..0000000 --- a/webUI/src/src/components/navbar/NavBar.tsx +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React, { useContext, useState } from 'react'; -import { makeStyles } from '@material-ui/core/styles'; -import AppBar from '@material-ui/core/AppBar'; -import Toolbar from '@material-ui/core/Toolbar'; -import Typography from '@material-ui/core/Typography'; -import IconButton from '@material-ui/core/IconButton'; -import MenuIcon from '@material-ui/icons/Menu'; -import NavBarContext from '../../context/NavbarContext'; -import DarkTheme from '../../context/DarkTheme'; -import TemporaryDrawer from '../TemporaryDrawer'; - -const useStyles = makeStyles((theme) => ({ - root: { - flexGrow: 1, - }, - menuButton: { - marginRight: theme.spacing(2), - }, - title: { - flexGrow: 1, - }, -})); - -export default function NavBar() { - const classes = useStyles(); - const [drawerOpen, setDrawerOpen] = useState(false); - const { title, action, override } = useContext(NavBarContext); - - const { darkTheme } = useContext(DarkTheme); - - return ( - <> - {override.status && override.value} - {!override.status - && ( -
    - - - setDrawerOpen(true)} - > - - - - {title} - - {action} - - - -
    - )} - - ); -} diff --git a/webUI/src/src/components/navbar/ReaderNavBar.tsx b/webUI/src/src/components/navbar/ReaderNavBar.tsx deleted file mode 100644 index 4d2f84e..0000000 --- a/webUI/src/src/components/navbar/ReaderNavBar.tsx +++ /dev/null @@ -1,393 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import IconButton from '@material-ui/core/IconButton'; -import CloseIcon from '@material-ui/icons/Close'; -import KeyboardArrowLeftIcon from '@material-ui/icons/KeyboardArrowLeft'; -import KeyboardArrowRightIcon from '@material-ui/icons/KeyboardArrowRight'; -import KeyboardArrowDownIcon from '@material-ui/icons/KeyboardArrowDown'; -import KeyboardArrowUpIcon from '@material-ui/icons/KeyboardArrowUp'; -import { makeStyles } from '@material-ui/core/styles'; -import React, { useContext, useEffect, useState } from 'react'; -import Typography from '@material-ui/core/Typography'; -import { useHistory, Link } from 'react-router-dom'; -import Slide from '@material-ui/core/Slide'; -import Fade from '@material-ui/core/Fade'; -import Zoom from '@material-ui/core/Zoom'; -import { Switch } from '@material-ui/core'; -import List from '@material-ui/core/List'; -import ListItem from '@material-ui/core/ListItem'; -import MenuItem from '@material-ui/core/MenuItem'; -import Select from '@material-ui/core/Select'; -import ListItemText from '@material-ui/core/ListItemText'; -import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction'; -import Collapse from '@material-ui/core/Collapse'; -import Button from '@material-ui/core/Button'; -import NavBarContext from '../../context/NavbarContext'; - -const useStyles = (settings: IReaderSettings) => makeStyles({ - // main container and root div need to change classes... - AppMainContainer: { - display: 'none', - }, - AppRootElment: { - display: 'flex', - }, - - root: { - position: settings.staticNav ? 'sticky' : 'fixed', - top: 0, - left: 0, - width: '300px', - height: '100vh', - overflowY: 'auto', - backgroundColor: '#0a0b0b', - - '& header': { - backgroundColor: '#363b3d', - display: 'flex', - alignItems: 'center', - minHeight: '64px', - paddingLeft: '24px', - paddingRight: '24px', - - transition: 'left 2s ease', - - '& button': { - flexGrow: 0, - flexShrink: 0, - }, - - '& button:nth-child(1)': { - marginRight: '16px', - }, - - '& button:nth-child(3)': { - marginRight: '-12px', - }, - - '& h1': { - fontSize: '1.25rem', - flexGrow: 1, - }, - }, - '& hr': { - margin: '0 16px', - height: '1px', - border: '0', - backgroundColor: 'rgb(38, 41, 43)', - }, - }, - - navigation: { - margin: '0 16px', - - '& > span:nth-child(1)': { - textAlign: 'center', - display: 'block', - marginTop: '16px', - }, - - '& $navigationChapters': { - display: 'grid', - gridTemplateColumns: '1fr 1fr', - gridTemplateAreas: '"prev next"', - gridColumnGap: '5px', - margin: '10px 0', - - '& a': { - flexGrow: 1, - textDecoration: 'none', - - '& button': { - width: '100%', - padding: '5px 8px', - textTransform: 'none', - }, - }, - }, - - }, - navigationChapters: {}, // dummy rule - - settingsCollapsseHeader: { - '& span': { - fontWeight: 'bold', - }, - }, - - openDrawerButton: { - position: 'fixed', - top: 0 + 20, - left: 10 + 20, - height: '40px', - width: '40px', - borderRadius: 5, - backgroundColor: 'black', - - '&:hover': { - backgroundColor: 'black', - }, - }, -}); - -export const defaultReaderSettings = () => ({ - staticNav: false, - showPageNumber: true, - continuesPageGap: false, - loadNextonEnding: false, - readerType: 'ContinuesVertical', -} as IReaderSettings); - -interface IProps { - settings: IReaderSettings - setSettings: React.Dispatch> - manga: IManga | IMangaCard - chapter: IChapter | IPartialChpter - curPage: number -} - -export default function ReaderNavBar(props: IProps) { - const { title } = useContext(NavBarContext); - - const history = useHistory(); - - const { - settings, setSettings, manga, chapter, curPage, - } = props; - - const [drawerOpen, setDrawerOpen] = useState(false || settings.staticNav); - const [hideOpenButton, setHideOpenButton] = useState(false); - const [prevScrollPos, setPrevScrollPos] = useState(0); - const [settingsCollapseOpen, setSettingsCollapseOpen] = useState(true); - - const classes = useStyles(settings)(); - - const setSettingValue = (key: string, value: any) => setSettings({ ...settings, [key]: value }); - - const handleScroll = () => { - const currentScrollPos = window.pageYOffset; - - if (Math.abs(currentScrollPos - prevScrollPos) > 20) { - setHideOpenButton(currentScrollPos > prevScrollPos); - setPrevScrollPos(currentScrollPos); - } - }; - - useEffect(() => { - window.addEventListener('scroll', handleScroll); - - const rootEl = document.querySelector('#root')!; - const mainContainer = document.querySelector('#appMainContainer')!; - - rootEl.classList.add(classes.AppRootElment); - mainContainer.classList.add(classes.AppMainContainer); - - return () => { - rootEl.classList.remove(classes.AppRootElment); - mainContainer.classList.remove(classes.AppMainContainer); - window.removeEventListener('scroll', handleScroll); - }; - }, [handleScroll]);// handleScroll changes on every render - - return ( - <> - -
    -
    - history.push(`/manga/${manga.id}`)} - > - - - - {title} - - {!settings.staticNav - && ( - setDrawerOpen(false)} - > - - - ) } -
    - - - - setSettingsCollapseOpen(!settingsCollapseOpen)} - > - {settingsCollapseOpen && } - {!settingsCollapseOpen && } - - - - - - - - - setSettingValue('staticNav', e.target.checked)} - /> - - - - - - setSettingValue('showPageNumber', e.target.checked)} - /> - - - - - - setSettingValue('loadNextonEnding', e.target.checked)} - /> - - - - - - - - -
    -
    - - Currently on page - {' '} - {curPage + 1} - {' '} - of - {' '} - {chapter.pageCount} - -
    - {chapter.index > 1 - && ( - - - - )} - {chapter.index < chapter.chapterCount - && ( - - - - )} -
    -
    -
    -
    - - - setDrawerOpen(true)} - > - - - - - - ); -} diff --git a/webUI/src/src/context/DarkTheme.tsx b/webUI/src/src/context/DarkTheme.tsx deleted file mode 100644 index 011762c..0000000 --- a/webUI/src/src/context/DarkTheme.tsx +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React from 'react'; - -type ContextType = { - darkTheme: boolean - setDarkTheme: React.Dispatch> -}; - -const DarkTheme = React.createContext({ - darkTheme: true, - setDarkTheme: ():void => {}, -}); - -export default DarkTheme; diff --git a/webUI/src/src/context/NavbarContext.tsx b/webUI/src/src/context/NavbarContext.tsx deleted file mode 100644 index c59b5b5..0000000 --- a/webUI/src/src/context/NavbarContext.tsx +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React from 'react'; - -type ContextType = { - title: string - setTitle: React.Dispatch> - action: any - setAction: React.Dispatch> - override: INavbarOverride - setOverride: React.Dispatch> -}; - -const NavBarContext = React.createContext({ - title: 'Tachidesk', - setTitle: ():void => {}, - action:
    , - setAction: ():void => {}, - override: { status: false, value:
    }, - setOverride: ():void => {}, -}); - -export default NavBarContext; diff --git a/webUI/src/src/index.css b/webUI/src/src/index.css deleted file mode 100644 index 3c9044a..0000000 --- a/webUI/src/src/index.css +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -body { - margin: 0; -} \ No newline at end of file diff --git a/webUI/src/src/index.tsx b/webUI/src/src/index.tsx deleted file mode 100644 index b4100d1..0000000 --- a/webUI/src/src/index.tsx +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React from 'react'; -import ReactDOM from 'react-dom'; -import App from './App'; -import './index.css'; -// roboto font -import '@fontsource/roboto'; - -ReactDOM.render( - - - , - document.getElementById('root'), -); diff --git a/webUI/src/src/react-app-env.d.ts b/webUI/src/src/react-app-env.d.ts deleted file mode 100644 index 87b106f..0000000 --- a/webUI/src/src/react-app-env.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -/// diff --git a/webUI/src/src/screens/Settings.tsx b/webUI/src/src/screens/Settings.tsx deleted file mode 100644 index c672e5a..0000000 --- a/webUI/src/src/screens/Settings.tsx +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React, { useContext, useEffect, useState } from 'react'; -import List from '@material-ui/core/List'; -import ListAltIcon from '@material-ui/icons/ListAlt'; -import BackupIcon from '@material-ui/icons/Backup'; -import Brightness6Icon from '@material-ui/icons/Brightness6'; -import DnsIcon from '@material-ui/icons/Dns'; -import EditIcon from '@material-ui/icons/Edit'; -import InfoIcon from '@material-ui/icons/Info'; -import ListItem from '@material-ui/core/ListItem'; -import ListItemIcon from '@material-ui/core/ListItemIcon'; -import ListItemText from '@material-ui/core/ListItemText'; -import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction'; -import Switch from '@material-ui/core/Switch'; -import Button from '@material-ui/core/Button'; -import IconButton from '@material-ui/core/IconButton'; -import Dialog from '@material-ui/core/Dialog'; -import DialogActions from '@material-ui/core/DialogActions'; -import DialogContent from '@material-ui/core/DialogContent'; -import DialogContentText from '@material-ui/core/DialogContentText'; -import TextField from '@material-ui/core/TextField'; -import NavbarContext from '../context/NavbarContext'; -import DarkTheme from '../context/DarkTheme'; -import useLocalStorage from '../util/useLocalStorage'; -import ListItemLink from '../util/ListItemLink'; - -export default function Settings() { - const { setTitle, setAction } = useContext(NavbarContext); - useEffect(() => { setTitle('Settings'); setAction(<>); }, []); - - const { darkTheme, setDarkTheme } = useContext(DarkTheme); - const [serverAddress, setServerAddress] = useLocalStorage('serverBaseURL', ''); - const [dialogOpen, setDialogOpen] = useState(false); - const [dialogValue, setDialogValue] = useState(serverAddress); - - const handleDialogOpen = () => { - setDialogValue(serverAddress); - setDialogOpen(true); - }; - - const handleDialogCancel = () => { - setDialogOpen(false); - }; - - const handleDialogSubmit = () => { - setDialogOpen(false); - setServerAddress(dialogValue); - }; - - return ( - <> - - - - - - - - - - - - - - - - - - - - setDarkTheme(!darkTheme)} - /> - - - - - - - - - { - handleDialogOpen(); - }} - > - - - - - - - - - - - - - - - - Enter new category name. - - setDialogValue(e.target.value)} - /> - - - - - - - - ); -} diff --git a/webUI/src/src/screens/anime/Anime.tsx b/webUI/src/src/screens/anime/Anime.tsx deleted file mode 100644 index 44e6461..0000000 --- a/webUI/src/src/screens/anime/Anime.tsx +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React, { useEffect, useState, useContext } from 'react'; -import { makeStyles, Theme } from '@material-ui/core/styles'; -import { useParams } from 'react-router-dom'; -import { Virtuoso } from 'react-virtuoso'; -import EpisodeCard from 'components/anime/EpisodeCard'; -import AnimeDetails from 'components/anime/AnimeDetails'; -import NavbarContext from 'context/NavbarContext'; -import client from 'util/client'; -import LoadingPlaceholder from 'components/LoadingPlaceholder'; -import makeToast from 'components/Toast'; - -const useStyles = makeStyles((theme: Theme) => ({ - root: { - [theme.breakpoints.up('md')]: { - display: 'flex', - }, - }, - - chapters: { - listStyle: 'none', - padding: 0, - minHeight: '200px', - [theme.breakpoints.up('md')]: { - width: '50vw', - height: 'calc(100vh - 64px)', - margin: 0, - }, - }, - - loading: { - margin: '10px 0', - display: 'flex', - justifyContent: 'center', - }, -})); - -export default function Anime() { - const classes = useStyles(); - - const { setTitle } = useContext(NavbarContext); - useEffect(() => { setTitle('Anime'); }, []); // delegate setting topbar action to MangaDetails - - const { id } = useParams<{ id: string }>(); - - const [manga, setManga] = useState(); - const [episodes, setEpisodes] = useState([]); - const [fetchedEpisodes, setFetchedEpisodes] = useState(false); - const [noEpisodesFound, setNoEpisodesFound] = useState(false); - const [episodeUpdateTriggerer, setEpisodeUpdateTriggerer] = useState(0); - - function triggerEpisodesUpdate() { - setEpisodeUpdateTriggerer(episodeUpdateTriggerer + 1); - } - - useEffect(() => { - if (manga === undefined || !manga.freshData) { - client.get(`/api/v1/anime/anime/${id}/?onlineFetch=${manga !== undefined}`) - .then((response) => response.data) - .then((data: IManga) => { - setManga(data); - setTitle(data.title); - }); - } - }, [manga]); - - useEffect(() => { - const shouldFetchOnline = fetchedEpisodes && episodeUpdateTriggerer === 0; - client.get(`/api/v1/anime/anime/${id}/episodes?onlineFetch=${shouldFetchOnline}`) - .then((response) => response.data) - .then((data) => { - if (data.length === 0 && fetchedEpisodes) { - makeToast('No episodes found', 'warning'); - setNoEpisodesFound(true); - } - setEpisodes(data); - }) - .then(() => setFetchedEpisodes(true)); - }, [episodes.length, fetchedEpisodes, episodeUpdateTriggerer]); - - return ( -
    - - - 0 || noEpisodesFound} - > - ( - - )} - useWindowScroll={window.innerWidth < 960} - overscan={window.innerHeight * 0.5} - /> - - -
    - ); -} diff --git a/webUI/src/src/screens/anime/AnimeExtensions.tsx b/webUI/src/src/screens/anime/AnimeExtensions.tsx deleted file mode 100644 index 0dac81c..0000000 --- a/webUI/src/src/screens/anime/AnimeExtensions.tsx +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React, { useContext, useEffect, useState } from 'react'; -import ExtensionCard from 'components/anime/ExtensionCard'; -import NavbarContext from 'context/NavbarContext'; -import client from 'util/client'; -import useLocalStorage from 'util/useLocalStorage'; -import ExtensionLangSelect from 'components/manga/ExtensionLangSelect'; -import { defualtLangs, langCodeToName, langSortCmp } from 'util/language'; - -const allLangs: string[] = []; - -function groupExtensions(extensions: IExtension[]) { - allLangs.length = 0; // empty the array - const result = { installed: [], 'updates pending': [] } as any; - extensions.sort((a, b) => ((a.apkName > b.apkName) ? 1 : -1)); - - extensions.forEach((extension) => { - if (result[extension.lang] === undefined) { - result[extension.lang] = []; - if (extension.lang !== 'all') { allLangs.push(extension.lang); } - } - if (extension.installed) { - if (extension.hasUpdate) { - result['updates pending'].push(extension); - } else { - result.installed.push(extension); - } - } else { - result[extension.lang].push(extension); - } - }); - - // put english first for convience - allLangs.sort(langSortCmp); - - return result; -} - -function extensionDefaultLangs() { - return [...defualtLangs(), 'all']; -} - -export default function AnimeExtensions() { - const { setTitle, setAction } = useContext(NavbarContext); - const [shownLangs, setShownLangs] = useLocalStorage('shownExtensionLangs', extensionDefaultLangs()); - - useEffect(() => { - setTitle('Extensions'); - setAction( - , - ); - }, [shownLangs]); - - const [extensionsRaw, setExtensionsRaw] = useState([]); - const [extensions, setExtensions] = useState({}); - - const [updateTriggerHolder, setUpdateTriggerHolder] = useState(0); // just a hack - const triggerUpdate = () => setUpdateTriggerHolder(updateTriggerHolder + 1); // just a hack - - useEffect(() => { - client.get('/api/v1/anime/extension/list') - .then((response) => response.data) - .then((data) => setExtensionsRaw(data)); - }, [updateTriggerHolder]); - - useEffect(() => { - if (extensionsRaw.length > 0) { - const groupedExtension = groupExtensions(extensionsRaw); - setExtensions(groupedExtension); - } - }, [extensionsRaw]); - - if (Object.entries(extensions).length === 0) { - return

    loading...

    ; - } - const groupsToShow = ['updates pending', 'installed', ...shownLangs]; - return ( - <> - { - Object.entries(extensions).map(([lang, list]) => ( - ((groupsToShow.indexOf(lang) !== -1 && (list as []).length > 0) - && ( - -

    - {langCodeToName(lang)} -

    - {(list as IExtension[]).map((it) => ( - { - triggerUpdate(); - }} - /> - ))} -
    - )) - )) - } - - ); -} diff --git a/webUI/src/src/screens/anime/AnimeSources.tsx b/webUI/src/src/screens/anime/AnimeSources.tsx deleted file mode 100644 index 21d2590..0000000 --- a/webUI/src/src/screens/anime/AnimeSources.tsx +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React, { useContext, useEffect, useState } from 'react'; -import ExtensionLangSelect from 'components/manga/ExtensionLangSelect'; -import SourceCard from 'components/anime/SourceCard'; -import NavbarContext from 'context/NavbarContext'; -import client from 'util/client'; -import { defualtLangs, langCodeToName, langSortCmp } from 'util/language'; -import useLocalStorage from 'util/useLocalStorage'; - -function sourceToLangList(sources: ISource[]) { - const result: string[] = []; - - sources.forEach((source) => { - if (result.indexOf(source.lang) === -1) { result.push(source.lang); } - }); - - result.sort(langSortCmp); - return result; -} - -function groupByLang(sources: ISource[]) { - const result = {} as any; - sources.forEach((source) => { - if (result[source.lang] === undefined) { result[source.lang] = [] as ISource[]; } - result[source.lang].push(source); - }); - - return result; -} - -export default function AnimeSources() { - const { setTitle, setAction } = useContext(NavbarContext); - - const [shownLangs, setShownLangs] = useLocalStorage('shownSourceLangs', defualtLangs()); - - const [sources, setSources] = useState([]); - const [fetched, setFetched] = useState(false); - - useEffect(() => { - setTitle('Sources'); - setAction( - , - ); - }, [shownLangs, sources]); - - useEffect(() => { - client.get('/api/v1/anime/source/list') - .then((response) => response.data) - .then((data) => { setSources(data); setFetched(true); }); - }, []); - - if (sources.length === 0) { - if (fetched) return (

    No sources found. Install Some Extensions first.

    ); - return (

    loading...

    ); - } - return ( - <> - {/* eslint-disable-next-line max-len */} - {Object.entries(groupByLang(sources)).sort((a, b) => langSortCmp(a[0], b[0])).map(([lang, list]) => ( - shownLangs.indexOf(lang) !== -1 && ( - -

    {langCodeToName(lang)}

    - {(list as ISource[]).map((source) => ( - - ))} -
    - ) - ))} - - ); -} diff --git a/webUI/src/src/screens/anime/Player.tsx b/webUI/src/src/screens/anime/Player.tsx deleted file mode 100644 index 5a2c4f5..0000000 --- a/webUI/src/src/screens/anime/Player.tsx +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import CircularProgress from '@material-ui/core/CircularProgress'; -import { makeStyles } from '@material-ui/core/styles'; -import React, { useContext, useEffect, useState } from 'react'; -import { useParams } from 'react-router-dom'; -import NavbarContext from 'context/NavbarContext'; -import client from 'util/client'; - -const useStyles = makeStyles({ - root: { - width: 'calc(100vw - 10px)', - height: 'calc(100vh - 64px)', - }, - - loading: { - margin: '50px auto', - }, - - video: { - maxWidth: '100%', - maxHeight: '100%', - }, -}); - -const initialEpisode = () => ({ linkUrl: '', index: -1, episodeCount: 0 }); - -export default function Player() { - const classes = useStyles(); - - const { episodeIndex, animeId } = useParams<{ episodeIndex: string, animeId: string }>(); - const [episode, setEpisode] = useState(initialEpisode()); - const [episodeLink, setEpisodeLink] = useState(); - const { setTitle } = useContext(NavbarContext); - - useEffect(() => { - setTitle('Reader'); - client.get(`/api/v1/anime/anime/${animeId}/`) - .then((response) => response.data) - .then((data: IManga) => { - setTitle(data.title); - }); - }, [episodeIndex]); - - useEffect(() => { - setEpisode(initialEpisode); - client.get(`/api/v1/anime/anime/${animeId}/episode/${episodeIndex}`) - .then((response) => response.data) - .then((data:IEpisode) => { - setEpisode(data); - setEpisodeLink(data.linkUrl); - }); - }, [episodeIndex]); - - // return spinner while chpater data is loading - if (episode.linkUrl === '') { - return ( -
    - -
    - ); - } - - return ( -
    - {/* eslint-disable-next-line jsx-a11y/media-has-caption */} - -
    - ); -} diff --git a/webUI/src/src/screens/anime/SourceAnimes.tsx b/webUI/src/src/screens/anime/SourceAnimes.tsx deleted file mode 100644 index f94d929..0000000 --- a/webUI/src/src/screens/anime/SourceAnimes.tsx +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React, { useContext, useEffect, useState } from 'react'; -import { useParams } from 'react-router-dom'; -import AnimeGrid from 'components/anime/AnimeGrid'; -import NavbarContext from 'context/NavbarContext'; -import client from 'util/client'; - -export default function SourceAnimes(props: { popular: boolean }) { - const { setTitle, setAction } = useContext(NavbarContext); - useEffect(() => { setTitle('Source'); setAction(<>); }, []); - - const { sourceId } = useParams<{ sourceId: string }>(); - const [mangas, setMangas] = useState([]); - const [hasNextPage, setHasNextPage] = useState(false); - const [lastPageNum, setLastPageNum] = useState(1); - - useEffect(() => { - client.get(`/api/v1/anime/source/${sourceId}`) - .then((response) => response.data) - .then((data: { name: string }) => setTitle(data.name)); - }, []); - - useEffect(() => { - const sourceType = props.popular ? 'popular' : 'latest'; - client.get(`/api/v1/anime/source/${sourceId}/${sourceType}/${lastPageNum}`) - .then((response) => response.data) - .then((data: { mangaList: IManga[], hasNextPage: boolean }) => { - setMangas([ - ...mangas, - ...data.mangaList.map((it) => ({ - title: it.title, thumbnailUrl: it.thumbnailUrl, id: it.id, - }))]); - setHasNextPage(data.hasNextPage); - }); - }, [lastPageNum]); - - return ( - - ); -} diff --git a/webUI/src/src/screens/manga/DownloadQueue.tsx b/webUI/src/src/screens/manga/DownloadQueue.tsx deleted file mode 100644 index 1c7c7f2..0000000 --- a/webUI/src/src/screens/manga/DownloadQueue.tsx +++ /dev/null @@ -1,153 +0,0 @@ -/* eslint-disable @typescript-eslint/no-shadow */ -/* eslint-disable react/destructuring-assignment */ -/* eslint-disable react/jsx-props-no-spreading */ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import NavbarContext from 'context/NavbarContext'; -import React, { useContext, useEffect, useState } from 'react'; -import PlayArrowIcon from '@material-ui/icons/PlayArrow'; -import PauseIcon from '@material-ui/icons/Pause'; -import IconButton from '@material-ui/core/IconButton'; -import client from 'util/client'; -import { - DragDropContext, Draggable, DraggingStyle, Droppable, DropResult, NotDraggingStyle, -} from 'react-beautiful-dnd'; -import { useTheme } from '@material-ui/core/styles'; -import { Palette } from '@material-ui/core/styles/createPalette'; -import List from '@material-ui/core/List'; -import DragHandleIcon from '@material-ui/icons/DragHandle'; -import ListItem from '@material-ui/core/ListItem'; -import { ListItemIcon } from '@material-ui/core'; -import ListItemText from '@material-ui/core/ListItemText'; - -const baseWebsocketUrl = JSON.parse(window.localStorage.getItem('serverBaseURL')!).replace('http', 'ws'); - -const getItemStyle = (isDragging: boolean, - draggableStyle: DraggingStyle | NotDraggingStyle | undefined, palette: Palette) => ({ - // styles we need to apply on draggables - ...draggableStyle, - - ...(isDragging && { - background: palette.type === 'dark' ? '#424242' : 'rgb(235,235,235)', - }), -}); - -const initialQueue = { - status: 'Stopped', - queue: [], -} as IQueue; - -export default function DownloadQueue() { - const [, setWsClient] = useState(); - const [queueState, setQueueState] = useState(initialQueue); - const { queue, status } = queueState; - - const theme = useTheme(); - - const { setTitle, setAction } = useContext(NavbarContext); - - const toggleQueueStatus = () => { - if (status === 'Stopped') { - client.get('/api/v1/downloads/start'); - } else { - client.get('/api/v1/downloads/stop'); - } - }; - - useEffect(() => { - setTitle('Download Queue'); - - setAction(() => { - if (status === 'Stopped') { - return ( - - - - ); - } - return ( - - - - ); - }); - }, [status]); - - useEffect(() => { - const wsc = new WebSocket(`${baseWebsocketUrl}/api/v1/downloads`); - wsc.onmessage = (e) => { - setQueueState(JSON.parse(e.data)); - }; - - setWsClient(wsc); - }, []); - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const onDragEnd = (result: DropResult) => { - }; - - return ( - <> - - - {(provided) => ( - - {queue.map((item, index) => ( - - {(provided, snapshot) => ( - - - - - state: ${item.state}` - } - /> - {/* { - handleEditDialogOpen(index); - }} - > - - - { - deleteCategory(index); - }} - > - - */} - - )} - - ))} - {provided.placeholder} - - )} - - - - ); -} diff --git a/webUI/src/src/screens/manga/Library.tsx b/webUI/src/src/screens/manga/Library.tsx deleted file mode 100644 index 5c9983d..0000000 --- a/webUI/src/src/screens/manga/Library.tsx +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import { Tab, Tabs } from '@material-ui/core'; -import React, { useContext, useEffect, useState } from 'react'; -import MangaGrid from 'components/manga/MangaGrid'; -import NavbarContext from 'context/NavbarContext'; -import client from 'util/client'; -import cloneObject from 'util/cloneObject'; - -interface IMangaCategory { - category: ICategory - mangas: IManga[] - isFetched: boolean -} - -interface TabPanelProps { - children: React.ReactNode; - index: any; - value: any; -} - -function TabPanel(props: TabPanelProps) { - const { - children, value, index, - } = props; - - return ( - - ); -} - -export default function Library() { - const { setTitle, setAction } = useContext(NavbarContext); - useEffect(() => { setTitle('Library'); setAction(<>); }, []); - - const [tabs, setTabs] = useState([]); - const [tabNum, setTabNum] = useState(0); - - // a hack so MangaGrid doesn't stop working. I won't change it in case - // if I do manga pagination for library.. - const [lastPageNum, setLastPageNum] = useState(1); - - const handleTabChange = (newTab: number) => { - setTabNum(newTab); - }; - - useEffect(() => { - Promise.all([ - client.get('/api/v1/library').then((response) => response.data), - client.get('/api/v1/category').then((response) => response.data), - ]) - .then( - ([libraryMangas, categories]) => { - const categoryTabs = categories.map((category) => ({ - category, - mangas: [] as IManga[], - isFetched: false, - })); - - if (libraryMangas.length > 0 || categoryTabs.length === 0) { - const defaultCategoryTab = { - category: { - name: 'Default', - default: true, - order: 0, - id: -1, - }, - mangas: libraryMangas, - isFetched: true, - }; - setTabs( - [defaultCategoryTab, ...categoryTabs], - ); - } else { - setTabs(categoryTabs); - setTabNum(1); - } - }, - ); - }, []); - - // console.log(client.defaults.baseURL); - // fetch the current tab - useEffect(() => { - tabs.forEach((tab, index) => { - if (tab.category.order === tabNum && !tab.isFetched) { - // eslint-disable-next-line @typescript-eslint/no-shadow - client.get(`/api/v1/category/${tab.category.id}`) - .then((response) => response.data) - .then((data: IManga[]) => { - const tabsClone = cloneObject(tabs); - tabsClone[index].mangas = data; - tabsClone[index].isFetched = true; - - setTabs(tabsClone); // clone the object - }); - } - }); - }, [tabNum]); - - let toRender; - if (tabs.length > 1) { - // eslint-disable-next-line max-len - const tabDefines = tabs.map((tab) => ()); - - const tabBodies = tabs.map((tab) => ( - - - - )); - - // Visual Hack: 160px is min-width for viewport width of >600 - const scrollableTabs = window.innerWidth < tabs.length * 160; - toRender = ( - <> - handleTabChange(newTab)} - indicatorColor="primary" - textColor="primary" - centered={!scrollableTabs} - variant={scrollableTabs ? 'scrollable' : 'fullWidth'} - scrollButtons="on" - > - {tabDefines} - - {tabBodies} - - ); - } else { - const mangas = tabs.length === 1 ? tabs[0].mangas : []; - toRender = ( - 0 ? 'Library is Empty' : undefined} - /> - ); - } - - return toRender; -} diff --git a/webUI/src/src/screens/manga/Manga.tsx b/webUI/src/src/screens/manga/Manga.tsx deleted file mode 100644 index cbd4c1a..0000000 --- a/webUI/src/src/screens/manga/Manga.tsx +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React, { useEffect, useState, useContext } from 'react'; -import { makeStyles, Theme } from '@material-ui/core/styles'; -import { useParams } from 'react-router-dom'; -import { Virtuoso } from 'react-virtuoso'; -import ChapterCard from 'components/manga/ChapterCard'; -import MangaDetails from 'components/manga/MangaDetails'; -import NavbarContext from 'context/NavbarContext'; -import client from 'util/client'; -import LoadingPlaceholder from 'components/LoadingPlaceholder'; -import makeToast from 'components/Toast'; - -const useStyles = makeStyles((theme: Theme) => ({ - root: { - [theme.breakpoints.up('md')]: { - display: 'flex', - }, - }, - - chapters: { - listStyle: 'none', - padding: 0, - minHeight: '200px', - [theme.breakpoints.up('md')]: { - width: '50vw', - height: 'calc(100vh - 64px)', - margin: 0, - }, - }, - - loading: { - margin: '10px 0', - display: 'flex', - justifyContent: 'center', - }, -})); - -const baseWebsocketUrl = JSON.parse(window.localStorage.getItem('serverBaseURL')!).replace('http', 'ws'); -const initialQueue = { - status: 'Stopped', - queue: [], -} as IQueue; - -export default function Manga() { - const classes = useStyles(); - - const { setTitle } = useContext(NavbarContext); - useEffect(() => { setTitle('Manga'); }, []); // delegate setting topbar action to MangaDetails - - const { id } = useParams<{ id: string }>(); - - const [manga, setManga] = useState(); - const [chapters, setChapters] = useState([]); - const [fetchedChapters, setFetchedChapters] = useState(false); - const [noChaptersFound, setNoChaptersFound] = useState(false); - const [chapterUpdateTriggerer, setChapterUpdateTriggerer] = useState(0); - - const [, setWsClient] = useState(); - const [{ queue }, setQueueState] = useState(initialQueue); - - function triggerChaptersUpdate() { - setChapterUpdateTriggerer(chapterUpdateTriggerer + 1); - } - - useEffect(() => { - const wsc = new WebSocket(`${baseWebsocketUrl}/api/v1/downloads`); - wsc.onmessage = (e) => { - const data = JSON.parse(e.data) as IQueue; - setQueueState(data); - - let shouldUpdate = false; - data.queue.forEach((q) => { - if (q.mangaId === manga?.id && q.state === 'Finished') { - shouldUpdate = true; - } - }); - if (shouldUpdate) { - triggerChaptersUpdate(); - } - }; - - setWsClient(wsc); - - return () => wsc.close(); - }, [queue.length]); - - const downloadingStringFor = (chapter: IChapter) => { - let rtn = ''; - if (chapter.downloaded) { - rtn = ' • Downloaded'; - } - queue.forEach((q) => { - if (chapter.index === q.chapterIndex && chapter.mangaId === q.mangaId) { - rtn = ` • Downloading (${q.progress * 100}%)`; - } - }); - return rtn; - }; - - useEffect(() => { - if (manga === undefined || !manga.freshData) { - client.get(`/api/v1/manga/${id}/?onlineFetch=${manga !== undefined}`) - .then((response) => response.data) - .then((data: IManga) => { - setManga(data); - setTitle(data.title); - }); - } - }, [manga]); - - useEffect(() => { - const shouldFetchOnline = fetchedChapters && chapterUpdateTriggerer === 0; - client.get(`/api/v1/manga/${id}/chapters?onlineFetch=${shouldFetchOnline}`) - .then((response) => response.data) - .then((data) => { - if (data.length === 0 && fetchedChapters) { - makeToast('No chapters found', 'warning'); - setNoChaptersFound(true); - } - setChapters(data); - }) - .then(() => setFetchedChapters(true)); - }, [chapters.length, fetchedChapters, chapterUpdateTriggerer]); - - return ( -
    - - - 0 || noChaptersFound} - > - ( - - )} - useWindowScroll={window.innerWidth < 960} - overscan={window.innerHeight * 0.5} - /> - - -
    - ); -} diff --git a/webUI/src/src/screens/manga/MangaExtensions.tsx b/webUI/src/src/screens/manga/MangaExtensions.tsx deleted file mode 100644 index b92cb57..0000000 --- a/webUI/src/src/screens/manga/MangaExtensions.tsx +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React, { useContext, useEffect, useState } from 'react'; -import ExtensionCard from 'components/manga/ExtensionCard'; -import NavbarContext from 'context/NavbarContext'; -import client from 'util/client'; -import useLocalStorage from 'util/useLocalStorage'; -import ExtensionLangSelect from 'components/manga/ExtensionLangSelect'; -import { defualtLangs, langCodeToName, langSortCmp } from 'util/language'; - -const allLangs: string[] = []; - -function groupExtensions(extensions: IExtension[]) { - allLangs.length = 0; // empty the array - const result = { installed: [], 'updates pending': [] } as any; - extensions.sort((a, b) => ((a.apkName > b.apkName) ? 1 : -1)); - - extensions.forEach((extension) => { - if (result[extension.lang] === undefined) { - result[extension.lang] = []; - if (extension.lang !== 'all') { allLangs.push(extension.lang); } - } - if (extension.installed) { - if (extension.hasUpdate) { - result['updates pending'].push(extension); - } else { - result.installed.push(extension); - } - } else { - result[extension.lang].push(extension); - } - }); - - // put english first for convience - allLangs.sort(langSortCmp); - - return result; -} - -function extensionDefaultLangs() { - return [...defualtLangs(), 'all']; -} - -export default function MangaExtensions() { - const { setTitle, setAction } = useContext(NavbarContext); - const [shownLangs, setShownLangs] = useLocalStorage('shownExtensionLangs', extensionDefaultLangs()); - - useEffect(() => { - setTitle('Extensions'); - setAction( - , - ); - }, [shownLangs]); - - const [extensionsRaw, setExtensionsRaw] = useState([]); - const [extensions, setExtensions] = useState({}); - - const [updateTriggerHolder, setUpdateTriggerHolder] = useState(0); // just a hack - const triggerUpdate = () => setUpdateTriggerHolder(updateTriggerHolder + 1); // just a hack - - useEffect(() => { - client.get('/api/v1/extension/list') - .then((response) => response.data) - .then((data) => setExtensionsRaw(data)); - }, [updateTriggerHolder]); - - useEffect(() => { - if (extensionsRaw.length > 0) { - const groupedExtension = groupExtensions(extensionsRaw); - setExtensions(groupedExtension); - } - }, [extensionsRaw]); - - if (Object.entries(extensions).length === 0) { - return

    loading...

    ; - } - const groupsToShow = ['updates pending', 'installed', ...shownLangs]; - return ( - <> - { - Object.entries(extensions).map(([lang, list]) => ( - ((groupsToShow.indexOf(lang) !== -1 && (list as []).length > 0) - && ( - -

    - {langCodeToName(lang)} -

    - {(list as IExtension[]).map((it) => ( - { - triggerUpdate(); - }} - /> - ))} -
    - )) - )) - } - - ); -} diff --git a/webUI/src/src/screens/manga/MangaSources.tsx b/webUI/src/src/screens/manga/MangaSources.tsx deleted file mode 100644 index 74ccfbe..0000000 --- a/webUI/src/src/screens/manga/MangaSources.tsx +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React, { useContext, useEffect, useState } from 'react'; -import ExtensionLangSelect from 'components/manga/ExtensionLangSelect'; -import SourceCard from 'components/manga/SourceCard'; -import NavbarContext from 'context/NavbarContext'; -import client from 'util/client'; -import { defualtLangs, langCodeToName, langSortCmp } from 'util/language'; -import useLocalStorage from 'util/useLocalStorage'; - -function sourceToLangList(sources: ISource[]) { - const result: string[] = []; - - sources.forEach((source) => { - if (result.indexOf(source.lang) === -1) { result.push(source.lang); } - }); - - result.sort(langSortCmp); - return result; -} - -function groupByLang(sources: ISource[]) { - const result = {} as any; - sources.forEach((source) => { - if (result[source.lang] === undefined) { result[source.lang] = [] as ISource[]; } - result[source.lang].push(source); - }); - - return result; -} - -export default function MangaSources() { - const { setTitle, setAction } = useContext(NavbarContext); - - const [shownLangs, setShownLangs] = useLocalStorage('shownSourceLangs', defualtLangs()); - - const [sources, setSources] = useState([]); - const [fetched, setFetched] = useState(false); - - useEffect(() => { - setTitle('Sources'); - setAction( - , - ); - }, [shownLangs, sources]); - - useEffect(() => { - client.get('/api/v1/source/list') - .then((response) => response.data) - .then((data) => { setSources(data); setFetched(true); }); - }, []); - - if (sources.length === 0) { - if (fetched) return (

    No sources found. Install Some Extensions first.

    ); - return (

    loading...

    ); - } - return ( - <> - {/* eslint-disable-next-line max-len */} - {Object.entries(groupByLang(sources)).sort((a, b) => langSortCmp(a[0], b[0])).map(([lang, list]) => ( - shownLangs.indexOf(lang) !== -1 && ( - -

    {langCodeToName(lang)}

    - {(list as ISource[]).map((source) => ( - - ))} -
    - ) - ))} - - ); -} diff --git a/webUI/src/src/screens/manga/Reader.tsx b/webUI/src/src/screens/manga/Reader.tsx deleted file mode 100644 index 05cf111..0000000 --- a/webUI/src/src/screens/manga/Reader.tsx +++ /dev/null @@ -1,196 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import CircularProgress from '@material-ui/core/CircularProgress'; -import { makeStyles } from '@material-ui/core/styles'; -import React, { useContext, useEffect, useState } from 'react'; -import { useHistory, useParams } from 'react-router-dom'; -import HorizontalPager from 'components/manga/reader/pager/HorizontalPager'; -import PageNumber from 'components/manga/reader/PageNumber'; -import PagedPager from 'components/manga/reader/pager/PagedPager'; -import DoublePagedPager from 'components/manga/reader/pager/DoublePagedPager'; -import VerticalPager from 'components/manga/reader/pager/VerticalPager'; -import ReaderNavBar, { defaultReaderSettings } from 'components/navbar/ReaderNavBar'; -import NavbarContext from 'context/NavbarContext'; -import client from 'util/client'; -import useLocalStorage from 'util/useLocalStorage'; -import cloneObject from 'util/cloneObject'; - -const useStyles = (settings: IReaderSettings) => makeStyles({ - root: { - width: settings.staticNav ? 'calc(100vw - 300px)' : '100vw', - }, - - loading: { - margin: '50px auto', - }, -}); - -const getReaderComponent = (readerType: ReaderType) => { - switch (readerType) { - case 'ContinuesVertical': - case 'Webtoon': - return VerticalPager; - break; - case 'SingleVertical': - case 'SingleRTL': - case 'SingleLTR': - return PagedPager; - break; - case 'DoubleVertical': - case 'DoubleRTL': - case 'DoubleLTR': - return DoublePagedPager; - break; - case 'ContinuesHorizontalLTR': - case 'ContinuesHorizontalRTL': - return HorizontalPager; - default: - return VerticalPager; - break; - } -}; - -const range = (n:number) => Array.from({ length: n }, (value, key) => key); -const initialChapter = () => ({ pageCount: -1, index: -1, chapterCount: 0 }); - -export default function Reader() { - const [settings, setSettings] = useLocalStorage('readerSettings', defaultReaderSettings); - - const classes = useStyles(settings)(); - const history = useHistory(); - - const [serverAddress] = useLocalStorage('serverBaseURL', ''); - - const { chapterIndex, mangaId } = useParams<{ chapterIndex: string, mangaId: string }>(); - const [manga, setManga] = useState({ id: +mangaId, title: '', thumbnailUrl: '' }); - const [chapter, setChapter] = useState(initialChapter()); - const [curPage, setCurPage] = useState(0); - const { setOverride, setTitle } = useContext(NavbarContext); - - useEffect(() => { - // make sure settings has all the keys - const settingsClone = cloneObject(settings) as any; - const defualtSettings = defaultReaderSettings(); - let shouldUpdateSettings = false; - Object.keys(defualtSettings).forEach((key) => { - const keyOf = key as keyof IReaderSettings; - if (settings[keyOf] === undefined) { - settingsClone[keyOf] = defualtSettings[keyOf]; - shouldUpdateSettings = true; - } - }); - if (shouldUpdateSettings) { setSettings(settingsClone); } - - // set the custom navbar - setOverride( - { - status: true, - value: ( - - ), - }, - ); - - // clean up for when we leave the reader - return () => setOverride({ status: false, value:
    }); - }, [manga, chapter, settings, curPage, chapterIndex]); - - useEffect(() => { - setTitle('Reader'); - client.get(`/api/v1/manga/${mangaId}/`) - .then((response) => response.data) - .then((data: IManga) => { - setManga(data); - setTitle(data.title); - }); - }, [chapterIndex]); - - useEffect(() => { - setChapter(initialChapter); - client.get(`/api/v1/manga/${mangaId}/chapter/${chapterIndex}`) - .then((response) => response.data) - .then((data:IChapter) => { - setChapter(data); - setCurPage(data.lastPageRead); - }); - }, [chapterIndex]); - - useEffect(() => { - if (curPage !== -1) { - const formData = new FormData(); - formData.append('lastPageRead', curPage.toString()); - client.patch(`/api/v1/manga/${manga.id}/chapter/${chapter.index}`, formData); - } - - if (curPage === chapter.pageCount - 1) { - const formDataRead = new FormData(); - formDataRead.append('read', 'true'); - client.patch(`/api/v1/manga/${manga.id}/chapter/${chapter.index}`, formDataRead); - } - }, [curPage]); - - // return spinner while chpater data is loading - if (chapter.pageCount === -1) { - return ( -
    - -
    - ); - } - - const nextChapter = () => { - if (chapter.index < chapter.chapterCount) { - const formData = new FormData(); - formData.append('lastPageRead', `${chapter.pageCount - 1}`); - formData.append('read', 'true'); - client.patch(`/api/v1/manga/${manga.id}/chapter/${chapter.index}`, formData); - - history.push(`/manga/${manga.id}/chapter/${chapter.index + 1}`); - } - }; - - const prevChapter = () => { - if (chapter.index > 1) { - history.push(`/manga/${manga.id}/chapter/${chapter.index - 1}`); - } - }; - - const pages = range(chapter.pageCount).map((index) => ({ - index, - src: `${serverAddress}/api/v1/manga/${mangaId}/chapter/${chapterIndex}/page/${index}`, - })); - - const ReaderComponent = getReaderComponent(settings.readerType); - - return ( -
    - - -
    - ); -} diff --git a/webUI/src/src/screens/manga/SearchSingle.tsx b/webUI/src/src/screens/manga/SearchSingle.tsx deleted file mode 100644 index 656b629..0000000 --- a/webUI/src/src/screens/manga/SearchSingle.tsx +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React, { useContext, useEffect, useState } from 'react'; -import { makeStyles } from '@material-ui/core/styles'; -import TextField from '@material-ui/core/TextField'; -import Button from '@material-ui/core/Button'; -import { useParams } from 'react-router-dom'; -import MangaGrid from 'components/manga/MangaGrid'; -import NavbarContext from 'context/NavbarContext'; -import client from 'util/client'; - -const useStyles = makeStyles((theme) => ({ - root: { - TextField: { - margin: theme.spacing(1), - width: '25ch', - }, - }, -})); - -export default function SearchSingle() { - const { setTitle, setAction } = useContext(NavbarContext); - useEffect(() => { setTitle('Search'); setAction(<>); }, []); - - const { sourceId } = useParams<{ sourceId: string }>(); - const classes = useStyles(); - const [error, setError] = useState(false); - const [mangas, setMangas] = useState([]); - const [message, setMessage] = useState(''); - const [searchTerm, setSearchTerm] = useState(''); - const [hasNextPage, setHasNextPage] = useState(false); - const [lastPageNum, setLastPageNum] = useState(1); - - const textInput = React.createRef(); - - useEffect(() => { - client.get(`/api/v1/source/${sourceId}`) - .then((response) => response.data) - .then((data: { name: string }) => setTitle(`Search: ${data.name}`)); - }, []); - - function processInput() { - if (textInput.current) { - const { value } = textInput.current; - if (value === '') { - setError(true); - setMessage('Type something to search'); - } else { - setError(false); - setSearchTerm(value); - setMangas([]); - setMessage('loading...'); - } - } - } - - useEffect(() => { - if (searchTerm.length > 0) { - client.get(`/api/v1/source/${sourceId}/search/${searchTerm}/${lastPageNum}`) - .then((response) => response.data) - .then((data: { mangaList: IManga[], hasNextPage: boolean }) => { - setMessage(''); - if (data.mangaList.length > 0) { - setMangas([ - ...mangas, - ...data.mangaList.map((it) => ({ - title: it.title, thumbnailUrl: it.thumbnailUrl, id: it.id, - }))]); - setHasNextPage(data.hasNextPage); - } else { - setMessage('search query returned nothing.'); - } - }); - } - }, [searchTerm]); - - const mangaGrid = ( - - ); - - return ( - <> -
    - e.key === 'Enter' && processInput()} - /> - -
    - {mangaGrid} - - ); -} diff --git a/webUI/src/src/screens/manga/SourceMangas.tsx b/webUI/src/src/screens/manga/SourceMangas.tsx deleted file mode 100644 index 9cdee01..0000000 --- a/webUI/src/src/screens/manga/SourceMangas.tsx +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React, { useContext, useEffect, useState } from 'react'; -import { useParams } from 'react-router-dom'; -import MangaGrid from 'components/manga/MangaGrid'; -import NavbarContext from 'context/NavbarContext'; -import client from 'util/client'; - -export default function SourceMangas(props: { popular: boolean }) { - const { setTitle, setAction } = useContext(NavbarContext); - useEffect(() => { setTitle('Source'); setAction(<>); }, []); - - const { sourceId } = useParams<{ sourceId: string }>(); - const [mangas, setMangas] = useState([]); - const [hasNextPage, setHasNextPage] = useState(false); - const [lastPageNum, setLastPageNum] = useState(1); - - useEffect(() => { - client.get(`/api/v1/source/${sourceId}`) - .then((response) => response.data) - .then((data: { name: string }) => setTitle(data.name)); - }, []); - - useEffect(() => { - const sourceType = props.popular ? 'popular' : 'latest'; - client.get(`/api/v1/source/${sourceId}/${sourceType}/${lastPageNum}`) - .then((response) => response.data) - .then((data: { mangaList: IManga[], hasNextPage: boolean }) => { - setMangas([ - ...mangas, - ...data.mangaList.map((it) => ({ - title: it.title, thumbnailUrl: it.thumbnailUrl, id: it.id, - }))]); - setHasNextPage(data.hasNextPage); - }); - }, [lastPageNum]); - - return ( - - ); -} diff --git a/webUI/src/src/screens/settings/About.tsx b/webUI/src/src/screens/settings/About.tsx deleted file mode 100644 index 417f5d1..0000000 --- a/webUI/src/src/screens/settings/About.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import React, { useContext, useEffect, useState } from 'react'; -import { CircularProgress, makeStyles } from '@material-ui/core'; -import List from '@material-ui/core/List'; -import ListItem from '@material-ui/core/ListItem'; -import ListItemText from '@material-ui/core/ListItemText'; -import client from '../../util/client'; -import ListItemLink from '../../util/ListItemLink'; -import NavbarContext from '../../context/NavbarContext'; - -const useStyles = makeStyles({ - loading: { - width: '100vw', - '& div': { - margin: '50px auto', - display: 'block', - }, - }, -}); - -export default function About() { - const { setTitle, setAction } = useContext(NavbarContext); - const classes = useStyles(); - - const [about, setAbout] = useState(); - - useEffect(() => { setTitle('About'); setAction(<>); }, []); - - useEffect(() => { - client.get('/api/v1/about') - .then((response) => response.data) - .then((data:IAbout) => { - setAbout(data); - }); - }, []); - - if (about === undefined) { - return ( -
    - -
    - ); - } - - const version = () => { - if (about.buildType === 'Stable') return `${about.version}`; - return `${about.version}-${about.revision}`; - }; - - const buildTime = () => new Date(about.buildTime * 1000).toUTCString(); - - return ( - - - - - - - - - - - - - - - - - - ); -} diff --git a/webUI/src/src/screens/settings/Backup.tsx b/webUI/src/src/screens/settings/Backup.tsx deleted file mode 100644 index ade387f..0000000 --- a/webUI/src/src/screens/settings/Backup.tsx +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React, { useContext, useEffect } from 'react'; -import { ListItemIcon } from '@material-ui/core'; -import List from '@material-ui/core/List'; -import InboxIcon from '@material-ui/icons/Inbox'; -import ListItem from '@material-ui/core/ListItem'; -import ListItemText from '@material-ui/core/ListItemText'; -import { fromEvent } from 'file-selector'; -import ListItemLink from '../../util/ListItemLink'; -import NavbarContext from '../../context/NavbarContext'; -import client from '../../util/client'; - -export default function Backup() { - const { setTitle, setAction } = useContext(NavbarContext); - useEffect(() => { setTitle('Backup'); setAction(<>); }, []); - - const { baseURL } = client.defaults; - - const submitBackup = (file: File) => { - file.text() - .then( - (fileContent: string) => { - client.post('/api/v1/backup/legacy/import', - fileContent, { headers: { 'Content-Type': 'application/json' } }); - }, - ); - }; - - const dropHandler = async (e: Event) => { - e.preventDefault(); - const files = await fromEvent(e); - - submitBackup(files[0] as File); - }; - - const dragOverHandler = (e: Event) => { - e.preventDefault(); - }; - - useEffect(() => { - document.addEventListener('drop', dropHandler); - document.addEventListener('dragover', dragOverHandler); - - const input = document.getElementById('backup-file'); - input?.addEventListener('change', async (evt) => { - const files = await fromEvent(evt); - submitBackup(files[0] as File); - }); - - return () => { - document.removeEventListener('drop', dropHandler); - document.removeEventListener('dragover', dragOverHandler); - }; - }, []); - - return ( - - - - - - - - document.getElementById('backup-file')?.click()}> - - - - - - - - - ); -} diff --git a/webUI/src/src/screens/settings/Categories.tsx b/webUI/src/src/screens/settings/Categories.tsx deleted file mode 100644 index 90c0c50..0000000 --- a/webUI/src/src/screens/settings/Categories.tsx +++ /dev/null @@ -1,249 +0,0 @@ -/* eslint-disable @typescript-eslint/no-shadow */ -/* eslint-disable react/destructuring-assignment */ -/* eslint-disable react/jsx-props-no-spreading */ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React, { useState, useContext, useEffect } from 'react'; -import { - List, - ListItem, - ListItemText, - ListItemIcon, - IconButton, -} from '@material-ui/core'; -import { - DragDropContext, Droppable, Draggable, DropResult, DraggingStyle, NotDraggingStyle, -} from 'react-beautiful-dnd'; -import DragHandleIcon from '@material-ui/icons/DragHandle'; -import EditIcon from '@material-ui/icons/Edit'; -import { useTheme } from '@material-ui/core/styles'; -import Fab from '@material-ui/core/Fab'; -import AddIcon from '@material-ui/icons/Add'; -import DeleteIcon from '@material-ui/icons/Delete'; -import Button from '@material-ui/core/Button'; -import TextField from '@material-ui/core/TextField'; -import Dialog from '@material-ui/core/Dialog'; -import DialogActions from '@material-ui/core/DialogActions'; -import DialogContent from '@material-ui/core/DialogContent'; -import DialogTitle from '@material-ui/core/DialogTitle'; -import Checkbox from '@material-ui/core/Checkbox'; -import FormControlLabel from '@material-ui/core/FormControlLabel'; -import NavbarContext from 'context/NavbarContext'; -import client from 'util/client'; -import { Palette } from '@material-ui/core/styles/createPalette'; - -const getItemStyle = (isDragging: boolean, - draggableStyle: DraggingStyle | NotDraggingStyle | undefined, palette: Palette) => ({ - // styles we need to apply on draggables - ...draggableStyle, - - ...(isDragging && { - background: palette.type === 'dark' ? '#424242' : 'rgb(235,235,235)', - }), -}); - -export default function Categories() { - const { setTitle, setAction } = useContext(NavbarContext); - useEffect(() => { setTitle('Categories'); setAction(<>); }, []); - - const [categories, setCategories] = useState([]); - const [categoryToEdit, setCategoryToEdit] = useState(-1); // -1 means new category - const [dialogOpen, setDialogOpen] = useState(false); - const [dialogName, setDialogName] = useState(''); - const [dialogDefault, setDialogDefault] = useState(false); - const theme = useTheme(); - - const [updateTriggerHolder, setUpdateTriggerHolder] = useState(0); // just a hack - const triggerUpdate = () => setUpdateTriggerHolder(updateTriggerHolder + 1); // just a hack - - useEffect(() => { - if (!dialogOpen) { - client.get('/api/v1/category/') - .then((response) => response.data) - .then((data) => setCategories(data)); - } - }, [updateTriggerHolder]); - - const categoryReorder = (list: ICategory[], from: number, to: number) => { - const category = list[from]; - - const formData = new FormData(); - formData.append('from', `${from + 1}`); - formData.append('to', `${to + 1}`); - client.post(`/api/v1/category/${category.id}/reorder`, formData) - .finally(() => triggerUpdate()); - - // also move it in local state to avoid jarring moving behviour... - const result = Array.from(list); - const [removed] = result.splice(from, 1); - result.splice(to, 0, removed); - return result; - }; - - const onDragEnd = (result: DropResult) => { - // dropped outside the list? - if (!result.destination) { - return; - } - - setCategories(categoryReorder( - categories, - result.source.index, - result.destination.index, - )); - }; - - const resetDialog = () => { - setDialogName(''); - setDialogDefault(false); - setCategoryToEdit(-1); - }; - - const handleDialogOpen = () => { - resetDialog(); - setDialogOpen(true); - }; - - const handleEditDialogOpen = (index:number) => { - setDialogName(categories[index].name); - setDialogDefault(categories[index].default); - setCategoryToEdit(index); - setDialogOpen(true); - }; - - const handleDialogCancel = () => { - setDialogOpen(false); - }; - - const handleDialogSubmit = () => { - setDialogOpen(false); - - const formData = new FormData(); - formData.append('name', dialogName); - formData.append('default', dialogDefault.toString()); - - if (categoryToEdit === -1) { - client.post('/api/v1/category/', formData) - .finally(() => triggerUpdate()); - } else { - const category = categories[categoryToEdit]; - client.patch(`/api/v1/category/${category.id}`, formData) - .finally(() => triggerUpdate()); - } - }; - - const deleteCategory = (index:number) => { - const category = categories[index]; - client.delete(`/api/v1/category/${category.id}`) - .finally(() => triggerUpdate()); - }; - - return ( - <> - - - {(provided) => ( - - {categories.map((item, index) => ( - - {(provided, snapshot) => ( - - - - - - { - handleEditDialogOpen(index); - }} - > - - - { - deleteCategory(index); - }} - > - - - - )} - - ))} - {provided.placeholder} - - )} - - - - - - - - {categoryToEdit === -1 ? 'New Catalog' : 'Edit Catalog'} - - - setDialogName(e.target.value)} - /> - setDialogDefault(e.target.checked)} - color="default" - /> - )} - label="Default category when adding new manga to library" - /> - - - - - - - - - ); -} diff --git a/webUI/src/src/typings.d.ts b/webUI/src/src/typings.d.ts deleted file mode 100644 index 1076101..0000000 --- a/webUI/src/src/typings.d.ts +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -interface IExtension { - name: string - pkgName: string - versionName: string - versionCode: number - lang: string - isNsfw: boolean - apkName: string - iconUrl: string - installed: boolean - hasUpdate: boolean - obsolete: boolean -} - -interface ISource { - id: string - name: string - lang: string - iconUrl: string - supportsLatest: boolean - history: any -} - -interface IMangaCard { - id: number - title: string - thumbnailUrl: string -} - -interface IManga { - id: number - sourceId: string - - url: string - title: string - thumbnailUrl: string - - artist: string - author: string - description: string - genre: string - status: string - - inLibrary: boolean - source: ISource - - freshData: boolean -} - -interface IChapter { - url: string - name: string - uploadDate: number - chapterNumber: number - scanlator: String - mangaId: number - read: boolean - bookmarked: boolean - lastPageRead: number - index: number - chapterCount: number - pageCount: number - downloaded: boolean -} - -interface IEpisode { - url: string - name: string - uploadDate: number - episodeNumber: number - scanlator: String - animeId: number - read: boolean - bookmarked: boolean - lastPageRead: number - index: number - episodeCount: number - linkUrl: string -} - -interface IPartialChpter { - pageCount: number - index: number - chapterCount: number -} - -interface IPartialEpisode { - linkUrl: string - index: number - episodeCount: number -} - -interface ICategory { - id: number - order: number - name: string - default: boolean -} - -interface INavbarOverride { - status: boolean - value: any -} - -type ReaderType = -'ContinuesVertical'| -'Webtoon' | -'SingleVertical' | -'SingleRTL' | -'SingleLTR' | -'DoubleVertical' | -'DoubleRTL' | -'DoubleLTR' | -'ContinuesHorizontalLTR'| -'ContinuesHorizontalRTL'; - -interface IReaderSettings{ - staticNav: boolean - showPageNumber: boolean - loadNextonEnding: boolean - readerType: ReaderType -} - -interface IReaderPage { - index: number - src: string -} - -interface IReaderProps { - pages: Array - pageCount: number - setCurPage: React.Dispatch> - curPage: number - settings: IReaderSettings - manga: IMangaCard | IManga - chapter: IChapter | IPartialChpter - nextChapter: () => void - prevChapter: () => void -} - -interface IAbout { - name: string - version: string - revision: string - buildType: 'Stable' | 'Preview' - buildTime: number - github: string - discord: string -} - -interface IDownloadChapter{ - chapterIndex: number - mangaId: number - state: 'Queued' | 'Downloading' | 'Finished' | 'Error' - progress: number - chapter: IChapter -} - -interface IQueue { - status: 'Stopped' | 'Started' - queue: IDownloadChapter[] -} diff --git a/webUI/src/src/util/ListItemLink.tsx b/webUI/src/src/util/ListItemLink.tsx deleted file mode 100644 index fc1b6b9..0000000 --- a/webUI/src/src/util/ListItemLink.tsx +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React from 'react'; -import ListItem, { ListItemProps } from '@material-ui/core/ListItem'; - -export default function ListItemLink(props: ListItemProps<'a', { button?: true }>) { - // eslint-disable-next-line react/jsx-props-no-spreading - return ; -} diff --git a/webUI/src/src/util/client.tsx b/webUI/src/src/util/client.tsx deleted file mode 100644 index 024d1ae..0000000 --- a/webUI/src/src/util/client.tsx +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import axios from 'axios'; -import storage from './localStorage'; - -const { hostname, port, protocol } = window.location; - -// if port is 3000 it's probably running from webpack devlopment server -let inferredPort; -if (port === '3000') { inferredPort = '4567'; } else { inferredPort = port; } - -const client = axios.create({ - // baseURL must not have traling slash - baseURL: storage.getItem('serverBaseURL', `${protocol}//${hostname}:${inferredPort}`), -}); - -client.interceptors.request.use((config) => { - if (config.data instanceof FormData) { - Object.assign(config.headers, { 'Content-Type': 'multipart/form-data' }); - } - return config; -}); - -export default client; diff --git a/webUI/src/src/util/cloneObject.tsx b/webUI/src/src/util/cloneObject.tsx deleted file mode 100644 index 0460e95..0000000 --- a/webUI/src/src/util/cloneObject.tsx +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -export default function cloneObject(obj: T) { - return JSON.parse(JSON.stringify(obj)) as T; -} diff --git a/webUI/src/src/util/language.tsx b/webUI/src/src/util/language.tsx deleted file mode 100644 index 14d589f..0000000 --- a/webUI/src/src/util/language.tsx +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -export const ISOLanguages = [ - { code: 'all', name: 'All', nativeName: 'All' }, - { code: 'installed', name: 'Installed', nativeName: 'Installed' }, - { code: 'updates pending', name: 'Updates pending', nativeName: 'Updates pending' }, - - // full list: https://github.com/meikidd/iso-639-1/blob/master/src/data.js - { code: 'en', name: 'English', nativeName: 'English' }, - { code: 'ca', name: 'Catalan; Valencian', nativeName: 'Català' }, - { code: 'de', name: 'German', nativeName: 'Deutsch' }, - { code: 'es', name: 'Spanish; Castilian', nativeName: 'Español' }, - { code: 'fr', name: 'French', nativeName: 'Français' }, - { code: 'id', name: 'Indonesian', nativeName: 'Indonesia' }, - { code: 'it', name: 'Italian', nativeName: 'Italiano' }, - { code: 'pt', name: 'Portuguese', nativeName: 'Português' }, - { code: 'vi', name: 'Vietnamese', nativeName: 'Tiếng Việt' }, - { code: 'tr', name: 'Turkish', nativeName: 'Türkçe' }, - { code: 'ru', name: 'Russian', nativeName: 'русский' }, - { code: 'ar', name: 'Arabic', nativeName: 'العربية' }, - { code: 'hi', name: 'Hindi', nativeName: 'हिन्दी' }, - { code: 'th', name: 'Thai', nativeName: 'ไทย' }, - { code: 'zh', name: 'Chinese', nativeName: '中文' }, - { code: 'ja', name: 'Japanese', nativeName: '日本語' }, - { code: 'ko', name: 'Korean', nativeName: '한국어' }, - { code: 'zu', name: 'Zulu', nativeName: 'isiZulu' }, - { code: 'xh', name: 'Xhosa', nativeName: 'isiXhosa' }, - { code: 'uk', name: 'Ukrainian', nativeName: 'Українська' }, - { code: 'ro', name: 'Romanian', nativeName: 'Română' }, - { code: 'bg', name: 'Bulgarian', nativeName: 'български' }, - { code: 'cs', name: 'Czech', nativeName: 'čeština' }, - { code: 'pl', name: 'Polish', nativeName: 'polski' }, - { code: 'no', name: 'Norwegian', nativeName: 'Norsk' }, - { code: 'nl', name: 'Dutch', nativeName: 'Nederlands' }, - { code: 'my', name: 'Burmese', nativeName: 'ဗမာစာ' }, - { code: 'ms', name: 'Malay', nativeName: 'Malaysia' }, - { code: 'mn', name: 'Mongolian', nativeName: 'Монгол' }, - { code: 'ml', name: 'Malayalam', nativeName: 'മലയാളം' }, - { code: 'ku', name: 'Kurdish', nativeName: 'Kurdî' }, - { code: 'hu', name: 'Hungarian', nativeName: 'Magyar' }, - { code: 'hr', name: 'Croatian', nativeName: 'Hrvatski' }, - { code: 'he', name: 'Hebrew', nativeName: 'עברית' }, - { code: 'fil', name: 'Filipino', nativeName: 'Filipino' }, - { code: 'fi', name: 'Finnish', nativeName: 'suomi' }, - { code: 'fa', name: 'Persian', nativeName: 'فارسی' }, - { code: 'eu', name: 'Basque', nativeName: 'euskara' }, - { code: 'el', name: 'Greek', nativeName: 'Ελληνικά' }, - { code: 'da', name: 'Danish', nativeName: 'dansk' }, -]; - -export function langCodeToName(code: string): string { - const whereToCut = code.indexOf('-') !== -1 ? code.indexOf('-') : code.length; - - const proccessedCode = code.toLocaleLowerCase().substring(0, whereToCut); - let result = 'Error'; - - for (let i = 0; i < ISOLanguages.length; i++) { - if (ISOLanguages[i].code === proccessedCode) result = ISOLanguages[i].nativeName; - } - - if (code.indexOf('-') !== -1) { - result = `${result} (${code.substring(whereToCut + 1)})`; - } - - return result; -} - -export function defualtLangs() { - return [ - // todo: infer this from the browser - 'en', - ]; -} - -export const langSortCmp = (a: string, b: string) => { - // puts english first for convience - const aLang = langCodeToName(a); - const bLang = langCodeToName(b); - - if (a === 'en') return -1; - if (b === 'en') return 1; - return aLang > bLang ? 1 : -1; -}; diff --git a/webUI/src/src/util/localStorage.tsx b/webUI/src/src/util/localStorage.tsx deleted file mode 100644 index 1861a5a..0000000 --- a/webUI/src/src/util/localStorage.tsx +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -function getItem(key: string, defaultValue: T) : T { - try { - const item = window.localStorage.getItem(key); - - if (item !== null) { - return JSON.parse(item); - } - - window.localStorage.setItem(key, JSON.stringify(defaultValue)); - - /* eslint-disable no-empty */ - } finally { } - return defaultValue; -} - -function setItem(key: string, value: T): void { - try { - window.localStorage.setItem(key, JSON.stringify(value)); - - // eslint-disable-next-line no-empty - } finally { } -} - -export default { getItem, setItem }; diff --git a/webUI/src/src/util/useLocalStorage.tsx b/webUI/src/src/util/useLocalStorage.tsx deleted file mode 100644 index 8339283..0000000 --- a/webUI/src/src/util/useLocalStorage.tsx +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import React, { useState, Dispatch, SetStateAction } from 'react'; -import storage from './localStorage'; - -// eslint-disable-next-line max-len -export default function useLocalStorage(key: string, defaultValue: T | (() => T)) : [T, Dispatch>] { - const initialState = defaultValue instanceof Function ? defaultValue() : defaultValue; - const [storedValue, setStoredValue] = useState(storage.getItem(key, initialState)); - - const setValue = ((value: T | ((prevState: T) => T)) => { - // Allow value to be a function so we have same API as useState - const valueToStore = value instanceof Function ? value(storedValue) : value; - setStoredValue(valueToStore); - storage.setItem(key, valueToStore); - }) as React.Dispatch>; - - return [storedValue, setValue]; -} diff --git a/webUI/src/tsconfig.json b/webUI/src/tsconfig.json deleted file mode 100644 index 00a1003..0000000 --- a/webUI/src/tsconfig.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": "./src", - "target": "es5", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], - "allowJs": true, - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "noFallthroughCasesInSwitch": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx" - }, - "include": [ - "src" - ] -} \ No newline at end of file diff --git a/webUI/src/yarn.lock b/webUI/src/yarn.lock deleted file mode 100644 index c97da99..0000000 --- a/webUI/src/yarn.lock +++ /dev/null @@ -1,11962 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" - integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.5.5": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" - integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== - dependencies: - "@babel/highlight" "^7.12.13" - -"@babel/compat-data@^7.12.1", "@babel/compat-data@^7.13.11", "@babel/compat-data@^7.13.15", "@babel/compat-data@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.0.tgz#a901128bce2ad02565df95e6ecbf195cf9465919" - integrity sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q== - -"@babel/core@7.12.3": - version "7.12.3" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.3.tgz#1b436884e1e3bff6fb1328dc02b208759de92ad8" - integrity sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.1" - "@babel/helper-module-transforms" "^7.12.1" - "@babel/helpers" "^7.12.1" - "@babel/parser" "^7.12.3" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.12.1" - "@babel/types" "^7.12.1" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.19" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.5", "@babel/core@^7.8.4": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.2.tgz#54e45334ffc0172048e5c93ded36461d3ad4c417" - integrity sha512-OgC1mON+l4U4B4wiohJlQNUU3H73mpTyYY3j/c8U9dr9UagGGSm+WFpzjy/YLdoyjiG++c1kIDgxCo/mLwQJeQ== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.14.2" - "@babel/helper-compilation-targets" "^7.13.16" - "@babel/helper-module-transforms" "^7.14.2" - "@babel/helpers" "^7.14.0" - "@babel/parser" "^7.14.2" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.14.2" - "@babel/types" "^7.14.2" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - source-map "^0.5.0" - -"@babel/generator@^7.12.1", "@babel/generator@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.2.tgz#d5773e8b557d421fd6ce0d5efa5fd7fc22567c30" - integrity sha512-OnADYbKrffDVai5qcpkMxQ7caomHOoEwjkouqnN2QhydAjowFAZcsdecFIRUBdb+ZcruwYE4ythYmF1UBZU5xQ== - dependencies: - "@babel/types" "^7.14.2" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab" - integrity sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz#6bc20361c88b0a74d05137a65cac8d3cbf6f61fc" - integrity sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.12.13" - "@babel/types" "^7.12.13" - -"@babel/helper-compilation-targets@^7.12.1", "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.16": - version "7.13.16" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz#6e91dccf15e3f43e5556dffe32d860109887563c" - integrity sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA== - dependencies: - "@babel/compat-data" "^7.13.15" - "@babel/helper-validator-option" "^7.12.17" - browserslist "^4.14.5" - semver "^6.3.0" - -"@babel/helper-create-class-features-plugin@^7.12.1", "@babel/helper-create-class-features-plugin@^7.13.0", "@babel/helper-create-class-features-plugin@^7.14.0": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.2.tgz#4e455b0329af29c2d3ad254b5dd5aed34595385d" - integrity sha512-6YctwVsmlkchxfGUogvVrrhzyD3grFJyluj5JgDlQrwfMLJSt5tdAzFZfPf4H2Xoi5YLcQ6BxfJlaOBHuctyIw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-function-name" "^7.14.2" - "@babel/helper-member-expression-to-functions" "^7.13.12" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-replace-supers" "^7.13.12" - "@babel/helper-split-export-declaration" "^7.12.13" - -"@babel/helper-create-regexp-features-plugin@^7.12.13": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz#a2ac87e9e319269ac655b8d4415e94d38d663cb7" - integrity sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - regexpu-core "^4.7.1" - -"@babel/helper-define-polyfill-provider@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz#a640051772045fedaaecc6f0c6c69f02bdd34bf1" - integrity sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw== - dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - -"@babel/helper-explode-assignable-expression@^7.12.13": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz#17b5c59ff473d9f956f40ef570cf3a76ca12657f" - integrity sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA== - dependencies: - "@babel/types" "^7.13.0" - -"@babel/helper-function-name@^7.12.13", "@babel/helper-function-name@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz#397688b590760b6ef7725b5f0860c82427ebaac2" - integrity sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ== - dependencies: - "@babel/helper-get-function-arity" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/types" "^7.14.2" - -"@babel/helper-get-function-arity@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" - integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-hoist-variables@^7.13.0": - version "7.13.16" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz#1b1651249e94b51f8f0d33439843e33e39775b30" - integrity sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg== - dependencies: - "@babel/traverse" "^7.13.15" - "@babel/types" "^7.13.16" - -"@babel/helper-member-expression-to-functions@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" - integrity sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw== - dependencies: - "@babel/types" "^7.13.12" - -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" - integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA== - dependencies: - "@babel/types" "^7.13.12" - -"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.14.0", "@babel/helper-module-transforms@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz#ac1cc30ee47b945e3e0c4db12fa0c5389509dfe5" - integrity sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA== - dependencies: - "@babel/helper-module-imports" "^7.13.12" - "@babel/helper-replace-supers" "^7.13.12" - "@babel/helper-simple-access" "^7.13.12" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/helper-validator-identifier" "^7.14.0" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.14.2" - "@babel/types" "^7.14.2" - -"@babel/helper-optimise-call-expression@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" - integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" - integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== - -"@babel/helper-remap-async-to-generator@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz#376a760d9f7b4b2077a9dd05aa9c3927cadb2209" - integrity sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-wrap-function" "^7.13.0" - "@babel/types" "^7.13.0" - -"@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz#6442f4c1ad912502481a564a7386de0c77ff3804" - integrity sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.13.12" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.12" - -"@babel/helper-simple-access@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6" - integrity sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA== - dependencies: - "@babel/types" "^7.13.12" - -"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" - integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== - dependencies: - "@babel/types" "^7.12.1" - -"@babel/helper-split-export-declaration@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" - integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-validator-identifier@^7.12.11", "@babel/helper-validator-identifier@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288" - integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A== - -"@babel/helper-validator-option@^7.12.1", "@babel/helper-validator-option@^7.12.17": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" - integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== - -"@babel/helper-wrap-function@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz#bdb5c66fda8526ec235ab894ad53a1235c79fcc4" - integrity sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA== - dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" - -"@babel/helpers@^7.12.1", "@babel/helpers@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.0.tgz#ea9b6be9478a13d6f961dbb5f36bf75e2f3b8f62" - integrity sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg== - dependencies: - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.14.0" - "@babel/types" "^7.14.0" - -"@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.0.tgz#3197e375711ef6bf834e67d0daec88e4f46113cf" - integrity sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.0" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.12.3", "@babel/parser@^7.14.2", "@babel/parser@^7.7.0": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.2.tgz#0c1680aa44ad4605b16cbdcc5c341a61bde9c746" - integrity sha512-IoVDIHpsgE/fu7eXBeRWt8zLbDrSvD7H1gpomOkPpBoEN8KCruCqSDdqo8dddwQQrui30KSvQBaMUOJiuFu6QQ== - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz#a3484d84d0b549f3fc916b99ee4783f26fabad2a" - integrity sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" - "@babel/plugin-proposal-optional-chaining" "^7.13.12" - -"@babel/plugin-proposal-async-generator-functions@^7.12.1", "@babel/plugin-proposal-async-generator-functions@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz#3a2085abbf5d5f962d480dbc81347385ed62eb1e" - integrity sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-remap-async-to-generator" "^7.13.0" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-proposal-class-properties@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de" - integrity sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.12.1" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-proposal-class-properties@^7.12.1", "@babel/plugin-proposal-class-properties@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz#146376000b94efd001e57a40a88a525afaab9f37" - integrity sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-proposal-class-static-block@^7.13.11": - version "7.13.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.13.11.tgz#6fcbba4a962702c17e5371a0c7b39afde186d703" - integrity sha512-fJTdFI4bfnMjvxJyNuaf8i9mVcZ0UhetaGEUHaHV9KEnibLugJkZAtXikR8KcYj+NYmI4DZMS8yQAyg+hvfSqg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-class-static-block" "^7.12.13" - -"@babel/plugin-proposal-decorators@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.1.tgz#59271439fed4145456c41067450543aee332d15f" - integrity sha512-knNIuusychgYN8fGJHONL0RbFxLGawhXOJNLBk75TniTsZZeA+wdkDuv6wp4lGwzQEKjZi6/WYtnb3udNPmQmQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.12.1" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-decorators" "^7.12.1" - -"@babel/plugin-proposal-dynamic-import@^7.12.1", "@babel/plugin-proposal-dynamic-import@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz#01ebabd7c381cff231fa43e302939a9de5be9d9f" - integrity sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-proposal-export-namespace-from@^7.12.1", "@babel/plugin-proposal-export-namespace-from@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz#62542f94aa9ce8f6dba79eec698af22112253791" - integrity sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.12.1", "@babel/plugin-proposal-json-strings@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz#830b4e2426a782e8b2878fbfe2cba85b70cbf98c" - integrity sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-proposal-logical-assignment-operators@^7.12.1", "@babel/plugin-proposal-logical-assignment-operators@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz#222348c080a1678e0e74ea63fe76f275882d1fd7" - integrity sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-proposal-nullish-coalescing-operator@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c" - integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1", "@babel/plugin-proposal-nullish-coalescing-operator@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz#425b11dc62fc26939a2ab42cbba680bdf5734546" - integrity sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-proposal-numeric-separator@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz#0e2c6774c4ce48be412119b4d693ac777f7685a6" - integrity sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-proposal-numeric-separator@^7.12.1", "@babel/plugin-proposal-numeric-separator@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz#82b4cc06571143faf50626104b335dd71baa4f9e" - integrity sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-proposal-object-rest-spread@^7.12.1", "@babel/plugin-proposal-object-rest-spread@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.2.tgz#e17d418f81cc103fedd4ce037e181c8056225abc" - integrity sha512-hBIQFxwZi8GIp934+nj5uV31mqclC1aYDhctDu5khTi9PCCUOczyy0b34W0oE9U/eJXiqQaKyVsmjeagOaSlbw== - dependencies: - "@babel/compat-data" "^7.14.0" - "@babel/helper-compilation-targets" "^7.13.16" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.14.2" - -"@babel/plugin-proposal-optional-catch-binding@^7.12.1", "@babel/plugin-proposal-optional-catch-binding@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz#150d4e58e525b16a9a1431bd5326c4eed870d717" - integrity sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-proposal-optional-chaining@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz#cce122203fc8a32794296fc377c6dedaf4363797" - integrity sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" - -"@babel/plugin-proposal-optional-chaining@^7.12.1", "@babel/plugin-proposal-optional-chaining@^7.13.12", "@babel/plugin-proposal-optional-chaining@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz#df8171a8b9c43ebf4c1dabe6311b432d83e1b34e" - integrity sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-proposal-private-methods@^7.12.1", "@babel/plugin-proposal-private-methods@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz#04bd4c6d40f6e6bbfa2f57e2d8094bad900ef787" - integrity sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-proposal-private-property-in-object@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz#b1a1f2030586b9d3489cc26179d2eb5883277636" - integrity sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-create-class-features-plugin" "^7.14.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-private-property-in-object" "^7.14.0" - -"@babel/plugin-proposal-unicode-property-regex@^7.12.1", "@babel/plugin-proposal-unicode-property-regex@^7.12.13", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz#bebde51339be829c17aaaaced18641deb62b39ba" - integrity sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.1", "@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz#8e3d674b0613e67975ceac2776c97b60cafc5c9c" - integrity sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-decorators@^7.12.1": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.13.tgz#fac829bf3c7ef4a1bc916257b403e58c6bdaf648" - integrity sha512-Rw6aIXGuqDLr6/LoBBYE57nKOzQpz/aDkKlMqEwH+Vp0MXbG6H/TfRjaY343LKxzAKAMXIHsQ8JzaZKuDZ9MwA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-flow@^7.12.1": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.13.tgz#5df9962503c0a9c918381c929d51d4d6949e7e86" - integrity sha512-J/RYxnlSLXZLVR7wTRsozxKT8qbsx1mNKJzXEEjQ0Kjx1ZACcyHgbanNWNCFtc36IzuWhYWPpvJFFoexoOWFmA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-import-meta@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz#044fb81ebad6698fe62c478875575bcbb9b70f15" - integrity sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz#762a4babec61176fec6c88480dec40372b140c0b" - integrity sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-syntax-top-level-await@^7.12.1", "@babel/plugin-syntax-top-level-await@^7.12.13", "@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178" - integrity sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-typescript@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz#9dff111ca64154cef0f4dc52cf843d9f12ce4474" - integrity sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-arrow-functions@^7.12.1", "@babel/plugin-transform-arrow-functions@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz#10a59bebad52d637a027afa692e8d5ceff5e3dae" - integrity sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-async-to-generator@^7.12.1", "@babel/plugin-transform-async-to-generator@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz#8e112bf6771b82bf1e974e5e26806c5c99aa516f" - integrity sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg== - dependencies: - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-remap-async-to-generator" "^7.13.0" - -"@babel/plugin-transform-block-scoped-functions@^7.12.1", "@babel/plugin-transform-block-scoped-functions@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz#a9bf1836f2a39b4eb6cf09967739de29ea4bf4c4" - integrity sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-block-scoping@^7.12.1", "@babel/plugin-transform-block-scoping@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.2.tgz#761cb12ab5a88d640ad4af4aa81f820e6b5fdf5c" - integrity sha512-neZZcP19NugZZqNwMTH+KoBjx5WyvESPSIOQb4JHpfd+zPfqcH65RMu5xJju5+6q/Y2VzYrleQTr+b6METyyxg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.2.tgz#3f1196c5709f064c252ad056207d87b7aeb2d03d" - integrity sha512-7oafAVcucHquA/VZCsXv/gmuiHeYd64UJyyTYU+MPfNu0KeNlxw06IeENBO8bJjXVbolu+j1MM5aKQtH1OMCNg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-function-name" "^7.14.2" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-replace-supers" "^7.13.12" - "@babel/helper-split-export-declaration" "^7.12.13" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.12.1", "@babel/plugin-transform-computed-properties@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz#845c6e8b9bb55376b1fa0b92ef0bdc8ea06644ed" - integrity sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-destructuring@^7.12.1", "@babel/plugin-transform-destructuring@^7.13.17": - version "7.13.17" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz#678d96576638c19d5b36b332504d3fd6e06dea27" - integrity sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-dotall-regex@^7.12.1", "@babel/plugin-transform-dotall-regex@^7.12.13", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz#3f1601cc29905bfcb67f53910f197aeafebb25ad" - integrity sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-duplicate-keys@^7.12.1", "@babel/plugin-transform-duplicate-keys@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz#6f06b87a8b803fd928e54b81c258f0a0033904de" - integrity sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-exponentiation-operator@^7.12.1", "@babel/plugin-transform-exponentiation-operator@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz#4d52390b9a273e651e4aba6aee49ef40e80cd0a1" - integrity sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-flow-strip-types@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.12.1.tgz#8430decfa7eb2aea5414ed4a3fa6e1652b7d77c4" - integrity sha512-8hAtkmsQb36yMmEtk2JZ9JnVyDSnDOdlB+0nEGzIDLuK4yR3JcEjfuFPYkdEPSh8Id+rAMeBEn+X0iVEyho6Hg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-flow" "^7.12.1" - -"@babel/plugin-transform-for-of@^7.12.1", "@babel/plugin-transform-for-of@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz#c799f881a8091ac26b54867a845c3e97d2696062" - integrity sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-function-name@^7.12.1", "@babel/plugin-transform-function-name@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz#bb024452f9aaed861d374c8e7a24252ce3a50051" - integrity sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ== - dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-literals@^7.12.1", "@babel/plugin-transform-literals@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz#2ca45bafe4a820197cf315794a4d26560fe4bdb9" - integrity sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-member-expression-literals@^7.12.1", "@babel/plugin-transform-member-expression-literals@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz#5ffa66cd59b9e191314c9f1f803b938e8c081e40" - integrity sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-modules-amd@^7.12.1", "@babel/plugin-transform-modules-amd@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.2.tgz#6622806fe1a7c07a1388444222ef9535f2ca17b0" - integrity sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw== - dependencies: - "@babel/helper-module-transforms" "^7.14.2" - "@babel/helper-plugin-utils" "^7.13.0" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-commonjs@^7.12.1", "@babel/plugin-transform-modules-commonjs@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz#52bc199cb581e0992edba0f0f80356467587f161" - integrity sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ== - dependencies: - "@babel/helper-module-transforms" "^7.14.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-simple-access" "^7.13.12" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-systemjs@^7.12.1", "@babel/plugin-transform-modules-systemjs@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz#6d066ee2bff3c7b3d60bf28dec169ad993831ae3" - integrity sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A== - dependencies: - "@babel/helper-hoist-variables" "^7.13.0" - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-identifier" "^7.12.11" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-umd@^7.12.1", "@babel/plugin-transform-modules-umd@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz#2f8179d1bbc9263665ce4a65f305526b2ea8ac34" - integrity sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw== - dependencies: - "@babel/helper-module-transforms" "^7.14.0" - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.12.1", "@babel/plugin-transform-named-capturing-groups-regex@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz#2213725a5f5bbbe364b50c3ba5998c9599c5c9d9" - integrity sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - -"@babel/plugin-transform-new-target@^7.12.1", "@babel/plugin-transform-new-target@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz#e22d8c3af24b150dd528cbd6e685e799bf1c351c" - integrity sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-object-super@^7.12.1", "@babel/plugin-transform-object-super@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz#b4416a2d63b8f7be314f3d349bd55a9c1b5171f7" - integrity sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-replace-supers" "^7.12.13" - -"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz#e4290f72e0e9e831000d066427c4667098decc31" - integrity sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-property-literals@^7.12.1", "@babel/plugin-transform-property-literals@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz#4e6a9e37864d8f1b3bc0e2dce7bf8857db8b1a81" - integrity sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-react-constant-elements@^7.12.1": - version "7.13.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.13.13.tgz#0208b1d942bf939cd4f7aa5b255d42602aa4a920" - integrity sha512-SNJU53VM/SjQL0bZhyU+f4kJQz7bQQajnrZRSaU21hruG/NWY41AEM9AWXeXX90pYr/C2yAmTgI6yW3LlLrAUQ== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-react-display-name@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz#1cbcd0c3b1d6648c55374a22fc9b6b7e5341c00d" - integrity sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-react-display-name@^7.12.1", "@babel/plugin-transform-react-display-name@^7.12.13": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.2.tgz#2e854544d42ab3bb9c21f84e153d62e800fbd593" - integrity sha512-zCubvP+jjahpnFJvPaHPiGVfuVUjXHhFvJKQdNnsmSsiU9kR/rCZ41jHc++tERD2zV+p7Hr6is+t5b6iWTCqSw== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-react-jsx-development@^7.12.1", "@babel/plugin-transform-react-jsx-development@^7.12.17": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.17.tgz#f510c0fa7cd7234153539f9a362ced41a5ca1447" - integrity sha512-BPjYV86SVuOaudFhsJR1zjgxxOhJDt6JHNoD48DxWEIxUCAMjV1ys6DYw4SDYZh0b1QsS2vfIA9t/ZsQGsDOUQ== - dependencies: - "@babel/plugin-transform-react-jsx" "^7.12.17" - -"@babel/plugin-transform-react-jsx-self@^7.12.1": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.13.tgz#422d99d122d592acab9c35ea22a6cfd9bf189f60" - integrity sha512-FXYw98TTJ125GVCCkFLZXlZ1qGcsYqNQhVBQcZjyrwf8FEUtVfKIoidnO8S0q+KBQpDYNTmiGo1gn67Vti04lQ== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-react-jsx-source@^7.12.1": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.14.2.tgz#2620b57e7de775c0687f65d464026d15812941da" - integrity sha512-OMorspVyjxghAjzgeAWc6O7W7vHbJhV69NeTGdl9Mxgz6PaweAuo7ffB9T5A1OQ9dGcw0As4SYMUhyNC4u7mVg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-react-jsx@^7.12.1", "@babel/plugin-transform-react-jsx@^7.12.17", "@babel/plugin-transform-react-jsx@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz#1df5dfaf0f4b784b43e96da6f28d630e775f68b3" - integrity sha512-jcEI2UqIcpCqB5U5DRxIl0tQEProI2gcu+g8VTIqxLO5Iidojb4d77q+fwGseCvd8af/lJ9masp4QWzBXFE2xA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-module-imports" "^7.13.12" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-jsx" "^7.12.13" - "@babel/types" "^7.13.12" - -"@babel/plugin-transform-react-pure-annotations@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz#05d46f0ab4d1339ac59adf20a1462c91b37a1a42" - integrity sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-regenerator@^7.12.1", "@babel/plugin-transform-regenerator@^7.13.15": - version "7.13.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz#e5eb28945bf8b6563e7f818945f966a8d2997f39" - integrity sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ== - dependencies: - regenerator-transform "^0.14.2" - -"@babel/plugin-transform-reserved-words@^7.12.1", "@babel/plugin-transform-reserved-words@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz#7d9988d4f06e0fe697ea1d9803188aa18b472695" - integrity sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-runtime@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz#04b792057eb460389ff6a4198e377614ea1e7ba5" - integrity sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg== - dependencies: - "@babel/helper-module-imports" "^7.12.1" - "@babel/helper-plugin-utils" "^7.10.4" - resolve "^1.8.1" - semver "^5.5.1" - -"@babel/plugin-transform-shorthand-properties@^7.12.1", "@babel/plugin-transform-shorthand-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz#db755732b70c539d504c6390d9ce90fe64aff7ad" - integrity sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-spread@^7.12.1", "@babel/plugin-transform-spread@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz#84887710e273c1815ace7ae459f6f42a5d31d5fd" - integrity sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" - -"@babel/plugin-transform-sticky-regex@^7.12.1", "@babel/plugin-transform-sticky-regex@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz#760ffd936face73f860ae646fb86ee82f3d06d1f" - integrity sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-template-literals@^7.12.1", "@babel/plugin-transform-template-literals@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz#a36049127977ad94438dee7443598d1cefdf409d" - integrity sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-typeof-symbol@^7.12.1", "@babel/plugin-transform-typeof-symbol@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz#785dd67a1f2ea579d9c2be722de8c84cb85f5a7f" - integrity sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-typescript@^7.12.1": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.13.0.tgz#4a498e1f3600342d2a9e61f60131018f55774853" - integrity sha512-elQEwluzaU8R8dbVuW2Q2Y8Nznf7hnjM7+DSCd14Lo5fF63C9qNLbwZYbmZrtV9/ySpSUpkRpQXvJb6xyu4hCQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-typescript" "^7.12.13" - -"@babel/plugin-transform-unicode-escapes@^7.12.1", "@babel/plugin-transform-unicode-escapes@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz#840ced3b816d3b5127dd1d12dcedc5dead1a5e74" - integrity sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-unicode-regex@^7.12.1", "@babel/plugin-transform-unicode-regex@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz#b52521685804e155b1202e83fc188d34bb70f5ac" - integrity sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/preset-env@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.1.tgz#9c7e5ca82a19efc865384bb4989148d2ee5d7ac2" - integrity sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg== - dependencies: - "@babel/compat-data" "^7.12.1" - "@babel/helper-compilation-targets" "^7.12.1" - "@babel/helper-module-imports" "^7.12.1" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-validator-option" "^7.12.1" - "@babel/plugin-proposal-async-generator-functions" "^7.12.1" - "@babel/plugin-proposal-class-properties" "^7.12.1" - "@babel/plugin-proposal-dynamic-import" "^7.12.1" - "@babel/plugin-proposal-export-namespace-from" "^7.12.1" - "@babel/plugin-proposal-json-strings" "^7.12.1" - "@babel/plugin-proposal-logical-assignment-operators" "^7.12.1" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1" - "@babel/plugin-proposal-numeric-separator" "^7.12.1" - "@babel/plugin-proposal-object-rest-spread" "^7.12.1" - "@babel/plugin-proposal-optional-catch-binding" "^7.12.1" - "@babel/plugin-proposal-optional-chaining" "^7.12.1" - "@babel/plugin-proposal-private-methods" "^7.12.1" - "@babel/plugin-proposal-unicode-property-regex" "^7.12.1" - "@babel/plugin-syntax-async-generators" "^7.8.0" - "@babel/plugin-syntax-class-properties" "^7.12.1" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.0" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" - "@babel/plugin-syntax-top-level-await" "^7.12.1" - "@babel/plugin-transform-arrow-functions" "^7.12.1" - "@babel/plugin-transform-async-to-generator" "^7.12.1" - "@babel/plugin-transform-block-scoped-functions" "^7.12.1" - "@babel/plugin-transform-block-scoping" "^7.12.1" - "@babel/plugin-transform-classes" "^7.12.1" - "@babel/plugin-transform-computed-properties" "^7.12.1" - "@babel/plugin-transform-destructuring" "^7.12.1" - "@babel/plugin-transform-dotall-regex" "^7.12.1" - "@babel/plugin-transform-duplicate-keys" "^7.12.1" - "@babel/plugin-transform-exponentiation-operator" "^7.12.1" - "@babel/plugin-transform-for-of" "^7.12.1" - "@babel/plugin-transform-function-name" "^7.12.1" - "@babel/plugin-transform-literals" "^7.12.1" - "@babel/plugin-transform-member-expression-literals" "^7.12.1" - "@babel/plugin-transform-modules-amd" "^7.12.1" - "@babel/plugin-transform-modules-commonjs" "^7.12.1" - "@babel/plugin-transform-modules-systemjs" "^7.12.1" - "@babel/plugin-transform-modules-umd" "^7.12.1" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.1" - "@babel/plugin-transform-new-target" "^7.12.1" - "@babel/plugin-transform-object-super" "^7.12.1" - "@babel/plugin-transform-parameters" "^7.12.1" - "@babel/plugin-transform-property-literals" "^7.12.1" - "@babel/plugin-transform-regenerator" "^7.12.1" - "@babel/plugin-transform-reserved-words" "^7.12.1" - "@babel/plugin-transform-shorthand-properties" "^7.12.1" - "@babel/plugin-transform-spread" "^7.12.1" - "@babel/plugin-transform-sticky-regex" "^7.12.1" - "@babel/plugin-transform-template-literals" "^7.12.1" - "@babel/plugin-transform-typeof-symbol" "^7.12.1" - "@babel/plugin-transform-unicode-escapes" "^7.12.1" - "@babel/plugin-transform-unicode-regex" "^7.12.1" - "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.12.1" - core-js-compat "^3.6.2" - semver "^5.5.0" - -"@babel/preset-env@^7.12.1", "@babel/preset-env@^7.8.4": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.2.tgz#e80612965da73579c84ad2f963c2359c71524ed5" - integrity sha512-7dD7lVT8GMrE73v4lvDEb85cgcQhdES91BSD7jS/xjC6QY8PnRhux35ac+GCpbiRhp8crexBvZZqnaL6VrY8TQ== - dependencies: - "@babel/compat-data" "^7.14.0" - "@babel/helper-compilation-targets" "^7.13.16" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-option" "^7.12.17" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.13.12" - "@babel/plugin-proposal-async-generator-functions" "^7.14.2" - "@babel/plugin-proposal-class-properties" "^7.13.0" - "@babel/plugin-proposal-class-static-block" "^7.13.11" - "@babel/plugin-proposal-dynamic-import" "^7.14.2" - "@babel/plugin-proposal-export-namespace-from" "^7.14.2" - "@babel/plugin-proposal-json-strings" "^7.14.2" - "@babel/plugin-proposal-logical-assignment-operators" "^7.14.2" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.2" - "@babel/plugin-proposal-numeric-separator" "^7.14.2" - "@babel/plugin-proposal-object-rest-spread" "^7.14.2" - "@babel/plugin-proposal-optional-catch-binding" "^7.14.2" - "@babel/plugin-proposal-optional-chaining" "^7.14.2" - "@babel/plugin-proposal-private-methods" "^7.13.0" - "@babel/plugin-proposal-private-property-in-object" "^7.14.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.12.13" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.12.13" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.0" - "@babel/plugin-syntax-top-level-await" "^7.12.13" - "@babel/plugin-transform-arrow-functions" "^7.13.0" - "@babel/plugin-transform-async-to-generator" "^7.13.0" - "@babel/plugin-transform-block-scoped-functions" "^7.12.13" - "@babel/plugin-transform-block-scoping" "^7.14.2" - "@babel/plugin-transform-classes" "^7.14.2" - "@babel/plugin-transform-computed-properties" "^7.13.0" - "@babel/plugin-transform-destructuring" "^7.13.17" - "@babel/plugin-transform-dotall-regex" "^7.12.13" - "@babel/plugin-transform-duplicate-keys" "^7.12.13" - "@babel/plugin-transform-exponentiation-operator" "^7.12.13" - "@babel/plugin-transform-for-of" "^7.13.0" - "@babel/plugin-transform-function-name" "^7.12.13" - "@babel/plugin-transform-literals" "^7.12.13" - "@babel/plugin-transform-member-expression-literals" "^7.12.13" - "@babel/plugin-transform-modules-amd" "^7.14.2" - "@babel/plugin-transform-modules-commonjs" "^7.14.0" - "@babel/plugin-transform-modules-systemjs" "^7.13.8" - "@babel/plugin-transform-modules-umd" "^7.14.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.13" - "@babel/plugin-transform-new-target" "^7.12.13" - "@babel/plugin-transform-object-super" "^7.12.13" - "@babel/plugin-transform-parameters" "^7.14.2" - "@babel/plugin-transform-property-literals" "^7.12.13" - "@babel/plugin-transform-regenerator" "^7.13.15" - "@babel/plugin-transform-reserved-words" "^7.12.13" - "@babel/plugin-transform-shorthand-properties" "^7.12.13" - "@babel/plugin-transform-spread" "^7.13.0" - "@babel/plugin-transform-sticky-regex" "^7.12.13" - "@babel/plugin-transform-template-literals" "^7.13.0" - "@babel/plugin-transform-typeof-symbol" "^7.12.13" - "@babel/plugin-transform-unicode-escapes" "^7.12.13" - "@babel/plugin-transform-unicode-regex" "^7.12.13" - "@babel/preset-modules" "^0.1.4" - "@babel/types" "^7.14.2" - babel-plugin-polyfill-corejs2 "^0.2.0" - babel-plugin-polyfill-corejs3 "^0.2.0" - babel-plugin-polyfill-regenerator "^0.2.0" - core-js-compat "^3.9.0" - semver "^6.3.0" - -"@babel/preset-modules@^0.1.3", "@babel/preset-modules@^0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" - integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/preset-react@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.1.tgz#7f022b13f55b6dd82f00f16d1c599ae62985358c" - integrity sha512-euCExymHCi0qB9u5fKw7rvlw7AZSjw/NaB9h7EkdTt5+yHRrXdiRTh7fkG3uBPpJg82CqLfp1LHLqWGSCrab+g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-transform-react-display-name" "^7.12.1" - "@babel/plugin-transform-react-jsx" "^7.12.1" - "@babel/plugin-transform-react-jsx-development" "^7.12.1" - "@babel/plugin-transform-react-jsx-self" "^7.12.1" - "@babel/plugin-transform-react-jsx-source" "^7.12.1" - "@babel/plugin-transform-react-pure-annotations" "^7.12.1" - -"@babel/preset-react@^7.12.5": - version "7.13.13" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.13.13.tgz#fa6895a96c50763fe693f9148568458d5a839761" - integrity sha512-gx+tDLIE06sRjKJkVtpZ/t3mzCDOnPG+ggHZG9lffUbX8+wC739x20YQc9V35Do6ZAxaUc/HhVHIiOzz5MvDmA== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-option" "^7.12.17" - "@babel/plugin-transform-react-display-name" "^7.12.13" - "@babel/plugin-transform-react-jsx" "^7.13.12" - "@babel/plugin-transform-react-jsx-development" "^7.12.17" - "@babel/plugin-transform-react-pure-annotations" "^7.12.1" - -"@babel/preset-typescript@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.12.1.tgz#86480b483bb97f75036e8864fe404cc782cc311b" - integrity sha512-hNK/DhmoJPsksdHuI/RVrcEws7GN5eamhi28JkO52MqIxU8Z0QpmiSOQxZHWOHV7I3P4UjHV97ay4TcamMA6Kw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-transform-typescript" "^7.12.1" - -"@babel/runtime-corejs3@^7.10.2": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.14.0.tgz#6bf5fbc0b961f8e3202888cb2cd0fb7a0a9a3f66" - integrity sha512-0R0HTZWHLk6G8jIk0FtoX+AatCtKnswS98VhXwGImFc759PJRp4Tru0PQYZofyijTFUr+gT8Mu7sgXVJLQ0ceg== - dependencies: - core-js-pure "^3.0.0" - regenerator-runtime "^0.13.4" - -"@babel/runtime@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.1.tgz#b4116a6b6711d010b2dad3b7b6e43bf1b9954740" - integrity sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.0.tgz#46794bc20b612c5f75e62dd071e24dfd95f1cbe6" - integrity sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.10.4", "@babel/template@^7.12.13", "@babel/template@^7.3.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" - integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/parser" "^7.12.13" - "@babel/types" "^7.12.13" - -"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.13.0", "@babel/traverse@^7.13.15", "@babel/traverse@^7.14.0", "@babel/traverse@^7.14.2", "@babel/traverse@^7.7.0": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.2.tgz#9201a8d912723a831c2679c7ebbf2fe1416d765b" - integrity sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.14.2" - "@babel/helper-function-name" "^7.14.2" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/parser" "^7.14.2" - "@babel/types" "^7.14.2" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.12.6", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.16", "@babel/types@^7.14.0", "@babel/types@^7.14.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.2.tgz#4208ae003107ef8a057ea8333e56eb64d2f6a2c3" - integrity sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw== - dependencies: - "@babel/helper-validator-identifier" "^7.14.0" - to-fast-properties "^2.0.0" - -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - -"@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== - dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" - -"@csstools/convert-colors@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" - integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== - -"@csstools/normalize.css@^10.1.0": - version "10.1.0" - resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-10.1.0.tgz#f0950bba18819512d42f7197e56c518aa491cf18" - integrity sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg== - -"@emotion/hash@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" - integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== - -"@eslint/eslintrc@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.1.tgz#442763b88cecbe3ee0ec7ca6d6dd6168550cbf14" - integrity sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ== - dependencies: - ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^12.1.0" - ignore "^4.0.6" - import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - strip-json-comments "^3.1.1" - -"@fontsource/roboto@^4.3.0": - version "4.3.0" - resolved "https://registry.yarnpkg.com/@fontsource/roboto/-/roboto-4.3.0.tgz#00f1cceca43eff85bb0e1d424311751ee41f6aa6" - integrity sha512-WeFWCWYutLWyEtRmBhn+bLbW4/km0l+HhTpR8wWDxJLiGiMOhVLO/Z0q5w6l20ZOkWnf6Z1rN3o3W2HjvYN6Rg== - -"@hapi/address@2.x.x": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" - integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ== - -"@hapi/bourne@1.x.x": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a" - integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA== - -"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06" - integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow== - -"@hapi/joi@^15.1.0": - version "15.1.1" - resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7" - integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ== - dependencies: - "@hapi/address" "2.x.x" - "@hapi/bourne" "1.x.x" - "@hapi/hoek" "8.x.x" - "@hapi/topo" "3.x.x" - -"@hapi/topo@3.x.x": - version "3.1.6" - resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29" - integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ== - dependencies: - "@hapi/hoek" "^8.3.0" - -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" - -"@istanbuljs/schema@^0.1.2": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jest/console@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" - integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== - dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^26.6.2" - jest-util "^26.6.2" - slash "^3.0.0" - -"@jest/core@^26.6.0", "@jest/core@^26.6.3": - version "26.6.3" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" - integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== - dependencies: - "@jest/console" "^26.6.2" - "@jest/reporters" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-changed-files "^26.6.2" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-resolve-dependencies "^26.6.3" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - jest-watcher "^26.6.2" - micromatch "^4.0.2" - p-each-series "^2.1.0" - rimraf "^3.0.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - -"@jest/environment@^26.6.0", "@jest/environment@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" - integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== - dependencies: - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - jest-mock "^26.6.2" - -"@jest/fake-timers@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" - integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== - dependencies: - "@jest/types" "^26.6.2" - "@sinonjs/fake-timers" "^6.0.1" - "@types/node" "*" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-util "^26.6.2" - -"@jest/globals@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" - integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/types" "^26.6.2" - expect "^26.6.2" - -"@jest/reporters@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" - integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.4" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.3" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - jest-haste-map "^26.6.2" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - slash "^3.0.0" - source-map "^0.6.0" - string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^7.0.0" - optionalDependencies: - node-notifier "^8.0.0" - -"@jest/source-map@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" - integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.2.4" - source-map "^0.6.0" - -"@jest/test-result@^26.6.0", "@jest/test-result@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" - integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== - dependencies: - "@jest/console" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^26.6.3": - version "26.6.3" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" - integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== - dependencies: - "@jest/test-result" "^26.6.2" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" - -"@jest/transform@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" - integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^26.6.2" - babel-plugin-istanbul "^6.0.0" - chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-regex-util "^26.0.0" - jest-util "^26.6.2" - micromatch "^4.0.2" - pirates "^4.0.1" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - -"@jest/types@^26.6.0", "@jest/types@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" - integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - -"@material-ui/core@^4.11.4": - version "4.11.4" - resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.11.4.tgz#4fb9fe5dec5dcf780b687e3a40cff78b2b9640a4" - integrity sha512-oqb+lJ2Dl9HXI9orc6/aN8ZIAMkeThufA5iZELf2LQeBn2NtjVilF5D2w7e9RpntAzDb4jK5DsVhkfOvFY/8fg== - dependencies: - "@babel/runtime" "^7.4.4" - "@material-ui/styles" "^4.11.4" - "@material-ui/system" "^4.11.3" - "@material-ui/types" "5.1.0" - "@material-ui/utils" "^4.11.2" - "@types/react-transition-group" "^4.2.0" - clsx "^1.0.4" - hoist-non-react-statics "^3.3.2" - popper.js "1.16.1-lts" - prop-types "^15.7.2" - react-is "^16.8.0 || ^17.0.0" - react-transition-group "^4.4.0" - -"@material-ui/icons@^4.11.2": - version "4.11.2" - resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-4.11.2.tgz#b3a7353266519cd743b6461ae9fdfcb1b25eb4c5" - integrity sha512-fQNsKX2TxBmqIGJCSi3tGTO/gZ+eJgWmMJkgDiOfyNaunNaxcklJQFaFogYcFl0qFuaEz1qaXYXboa/bUXVSOQ== - dependencies: - "@babel/runtime" "^7.4.4" - -"@material-ui/lab@^4.0.0-alpha.58": - version "4.0.0-alpha.58" - resolved "https://registry.yarnpkg.com/@material-ui/lab/-/lab-4.0.0-alpha.58.tgz#c7ebb66f49863c5acbb20817163737caa299fafc" - integrity sha512-GKHlJqLxUeHH3L3dGQ48ZavYrqGOTXkFkiEiuYMAnAvXAZP4rhMIqeHOPXSUQan4Bd8QnafDcpovOSLnadDmKw== - dependencies: - "@babel/runtime" "^7.4.4" - "@material-ui/utils" "^4.11.2" - clsx "^1.0.4" - prop-types "^15.7.2" - react-is "^16.8.0 || ^17.0.0" - -"@material-ui/styles@^4.11.4": - version "4.11.4" - resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.11.4.tgz#eb9dfccfcc2d208243d986457dff025497afa00d" - integrity sha512-KNTIZcnj/zprG5LW0Sao7zw+yG3O35pviHzejMdcSGCdWbiO8qzRgOYL8JAxAsWBKOKYwVZxXtHWaB5T2Kvxew== - dependencies: - "@babel/runtime" "^7.4.4" - "@emotion/hash" "^0.8.0" - "@material-ui/types" "5.1.0" - "@material-ui/utils" "^4.11.2" - clsx "^1.0.4" - csstype "^2.5.2" - hoist-non-react-statics "^3.3.2" - jss "^10.5.1" - jss-plugin-camel-case "^10.5.1" - jss-plugin-default-unit "^10.5.1" - jss-plugin-global "^10.5.1" - jss-plugin-nested "^10.5.1" - jss-plugin-props-sort "^10.5.1" - jss-plugin-rule-value-function "^10.5.1" - jss-plugin-vendor-prefixer "^10.5.1" - prop-types "^15.7.2" - -"@material-ui/system@^4.11.3": - version "4.11.3" - resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.11.3.tgz#466bc14c9986798fd325665927c963eb47cc4143" - integrity sha512-SY7otguNGol41Mu2Sg6KbBP1ZRFIbFLHGK81y4KYbsV2yIcaEPOmsCK6zwWlp+2yTV3J/VwT6oSBARtGIVdXPw== - dependencies: - "@babel/runtime" "^7.4.4" - "@material-ui/utils" "^4.11.2" - csstype "^2.5.2" - prop-types "^15.7.2" - -"@material-ui/types@5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-5.1.0.tgz#efa1c7a0b0eaa4c7c87ac0390445f0f88b0d88f2" - integrity sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A== - -"@material-ui/utils@^4.11.2": - version "4.11.2" - resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.11.2.tgz#f1aefa7e7dff2ebcb97d31de51aecab1bb57540a" - integrity sha512-Uul8w38u+PICe2Fg2pDKCaIG7kOyhowZ9vjiC1FsVwPABTW8vPPKfF6OvxRq3IiBaI1faOJmgdvMG7rMJARBhA== - dependencies: - "@babel/runtime" "^7.4.4" - prop-types "^15.7.2" - react-is "^16.8.0 || ^17.0.0" - -"@nodelib/fs.scandir@2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" - integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== - dependencies: - "@nodelib/fs.stat" "2.0.4" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" - integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" - integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== - dependencies: - "@nodelib/fs.scandir" "2.1.4" - fastq "^1.6.0" - -"@npmcli/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - -"@pmmmwh/react-refresh-webpack-plugin@0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.3.tgz#1eec460596d200c0236bf195b078a5d1df89b766" - integrity sha512-br5Qwvh8D2OQqSXpd1g/xqXKnK0r+Jz6qVKBbWmpUcrbGOxUrf39V5oZ1876084CGn18uMdR5uvPqBv9UqtBjQ== - dependencies: - ansi-html "^0.0.7" - error-stack-parser "^2.0.6" - html-entities "^1.2.1" - native-url "^0.2.6" - schema-utils "^2.6.5" - source-map "^0.7.3" - -"@rollup/plugin-node-resolve@^7.1.1": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz#80de384edfbd7bfc9101164910f86078151a3eca" - integrity sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q== - dependencies: - "@rollup/pluginutils" "^3.0.8" - "@types/resolve" "0.0.8" - builtin-modules "^3.1.0" - is-module "^1.0.0" - resolve "^1.14.2" - -"@rollup/plugin-replace@^2.3.1": - version "2.4.2" - resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a" - integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg== - dependencies: - "@rollup/pluginutils" "^3.1.0" - magic-string "^0.25.7" - -"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" - integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== - dependencies: - "@types/estree" "0.0.39" - estree-walker "^1.0.1" - picomatch "^2.2.2" - -"@sinonjs/commons@^1.7.0": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" - integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" - integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== - dependencies: - "@sinonjs/commons" "^1.7.0" - -"@surma/rollup-plugin-off-main-thread@^1.1.1": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-1.4.2.tgz#e6786b6af5799f82f7ab3a82e53f6182d2b91a58" - integrity sha512-yBMPqmd1yEJo/280PAMkychuaALyQ9Lkb5q1ck3mjJrFuEobIfhnQ4J3mbvBoISmR3SWMWV+cGB/I0lCQee79A== - dependencies: - ejs "^2.6.1" - magic-string "^0.25.0" - -"@svgr/babel-plugin-add-jsx-attribute@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906" - integrity sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg== - -"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz#6b2c770c95c874654fd5e1d5ef475b78a0a962ef" - integrity sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg== - -"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz#25621a8915ed7ad70da6cea3d0a6dbc2ea933efd" - integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA== - -"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz#0b221fc57f9fcd10e91fe219e2cd0dd03145a897" - integrity sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ== - -"@svgr/babel-plugin-svg-dynamic-title@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz#139b546dd0c3186b6e5db4fefc26cb0baea729d7" - integrity sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg== - -"@svgr/babel-plugin-svg-em-dimensions@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz#6543f69526632a133ce5cabab965deeaea2234a0" - integrity sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw== - -"@svgr/babel-plugin-transform-react-native-svg@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz#00bf9a7a73f1cad3948cdab1f8dfb774750f8c80" - integrity sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q== - -"@svgr/babel-plugin-transform-svg-component@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz#583a5e2a193e214da2f3afeb0b9e8d3250126b4a" - integrity sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ== - -"@svgr/babel-preset@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz#8af54f3e0a8add7b1e2b0fcd5a882c55393df327" - integrity sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig== - dependencies: - "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0" - "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0" - "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1" - "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1" - "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0" - "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0" - "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0" - "@svgr/babel-plugin-transform-svg-component" "^5.5.0" - -"@svgr/core@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz#82e826b8715d71083120fe8f2492ec7d7874a579" - integrity sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ== - dependencies: - "@svgr/plugin-jsx" "^5.5.0" - camelcase "^6.2.0" - cosmiconfig "^7.0.0" - -"@svgr/hast-util-to-babel-ast@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz#5ee52a9c2533f73e63f8f22b779f93cd432a5461" - integrity sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ== - dependencies: - "@babel/types" "^7.12.6" - -"@svgr/plugin-jsx@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz#1aa8cd798a1db7173ac043466d7b52236b369000" - integrity sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA== - dependencies: - "@babel/core" "^7.12.3" - "@svgr/babel-preset" "^5.5.0" - "@svgr/hast-util-to-babel-ast" "^5.5.0" - svg-parser "^2.0.2" - -"@svgr/plugin-svgo@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246" - integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ== - dependencies: - cosmiconfig "^7.0.0" - deepmerge "^4.2.2" - svgo "^1.2.2" - -"@svgr/webpack@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.5.0.tgz#aae858ee579f5fa8ce6c3166ef56c6a1b381b640" - integrity sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g== - dependencies: - "@babel/core" "^7.12.3" - "@babel/plugin-transform-react-constant-elements" "^7.12.1" - "@babel/preset-env" "^7.12.1" - "@babel/preset-react" "^7.12.5" - "@svgr/core" "^5.5.0" - "@svgr/plugin-jsx" "^5.5.0" - "@svgr/plugin-svgo" "^5.5.0" - loader-utils "^2.0.0" - -"@types/anymatch@*": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" - integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA== - -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": - version "7.1.14" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.14.tgz#faaeefc4185ec71c389f4501ee5ec84b170cc402" - integrity sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8" - integrity sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.0.tgz#0c888dd70b3ee9eebb6e4f200e809da0076262be" - integrity sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.11.1" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.1.tgz#654f6c4f67568e24c23b367e947098c6206fa639" - integrity sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw== - dependencies: - "@babel/types" "^7.3.0" - -"@types/eslint@^7.2.6": - version "7.2.10" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.10.tgz#4b7a9368d46c0f8cd5408c23288a59aa2394d917" - integrity sha512-kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*": - version "0.0.47" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.47.tgz#d7a51db20f0650efec24cd04994f523d93172ed4" - integrity sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg== - -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - -"@types/glob@^7.1.1": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" - integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - -"@types/graceful-fs@^4.1.2": - version "4.1.5" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" - integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== - dependencies: - "@types/node" "*" - -"@types/history@*": - version "4.7.8" - resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.8.tgz#49348387983075705fe8f4e02fb67f7daaec4934" - integrity sha512-S78QIYirQcUoo6UJZx9CSP0O2ix9IaeAXwQi26Rhr/+mg7qqPy8TzaxHSUut7eGjL8WmLccT7/MXf304WjqHcA== - -"@types/hoist-non-react-statics@^3.3.0": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" - integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== - dependencies: - "@types/react" "*" - hoist-non-react-statics "^3.3.0" - -"@types/html-minifier-terser@^5.0.0": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#3c9ee980f1a10d6021ae6632ca3e79ca2ec4fb50" - integrity sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA== - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" - integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== - -"@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" - integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" - integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= - -"@types/minimatch@*": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" - integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA== - -"@types/node@*": - version "15.0.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.0.3.tgz#ee09fcaac513576474c327da5818d421b98db88a" - integrity sha512-/WbxFeBU+0F79z9RdEOXH4CsDga+ibi5M8uEYr91u3CkT/pdWcV8MCook+4wDPnZBexRdwWS+PiVZ2xJviAzcQ== - -"@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - -"@types/prettier@^2.0.0": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.2.3.tgz#ef65165aea2924c9359205bf748865b8881753c0" - integrity sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA== - -"@types/prop-types@*": - version "15.7.3" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" - integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== - -"@types/q@^1.5.1": - version "1.5.4" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" - integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== - -"@types/react-beautiful-dnd@^13.0.0": - version "13.0.0" - resolved "https://registry.yarnpkg.com/@types/react-beautiful-dnd/-/react-beautiful-dnd-13.0.0.tgz#e60d3d965312fcf1516894af92dc3e9249587db4" - integrity sha512-by80tJ8aTTDXT256Gl+RfLRtFjYbUWOnZuEigJgNsJrSEGxvFe5eY6k3g4VIvf0M/6+xoLgfYWoWonlOo6Wqdg== - dependencies: - "@types/react" "*" - -"@types/react-dom@^17.0.2": - version "17.0.5" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.5.tgz#df44eed5b8d9e0b13bb0cd38e0ea6572a1231227" - integrity sha512-ikqukEhH4H9gr4iJCmQVNzTB307kROe3XFfHAOTxOXPOw7lAoEXnM5KWTkzeANGL5Ce6ABfiMl/zJBYNi7ObmQ== - dependencies: - "@types/react" "*" - -"@types/react-lazyload@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@types/react-lazyload/-/react-lazyload-3.1.0.tgz#97b167266afbc75f432eca01c50555adae21c5a4" - integrity sha512-JnVJb+6cUrIk4Fo/zc/4NuFtm0h3XeNlN4Gt++WEHGeUDtlhnF1lXRz0WoqNmh5gH3oyeYOJXIZ8MoPL9ehp0g== - dependencies: - "@types/react" "*" - -"@types/react-redux@^7.1.16": - version "7.1.16" - resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.16.tgz#0fbd04c2500c12105494c83d4a3e45c084e3cb21" - integrity sha512-f/FKzIrZwZk7YEO9E1yoxIuDNRiDducxkFlkw/GNMGEnK9n4K8wJzlJBghpSuOVDgEUHoDkDF7Gi9lHNQR4siw== - dependencies: - "@types/hoist-non-react-statics" "^3.3.0" - "@types/react" "*" - hoist-non-react-statics "^3.3.0" - redux "^4.0.0" - -"@types/react-router-dom@^5.1.7": - version "5.1.7" - resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.1.7.tgz#a126d9ea76079ffbbdb0d9225073eb5797ab7271" - integrity sha512-D5mHD6TbdV/DNHYsnwBTv+y73ei+mMjrkGrla86HthE4/PVvL1J94Bu3qABU+COXzpL23T1EZapVVpwHuBXiUg== - dependencies: - "@types/history" "*" - "@types/react" "*" - "@types/react-router" "*" - -"@types/react-router@*": - version "5.1.14" - resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.14.tgz#e0442f4eb4c446541ad7435d44a97f8fe6df40da" - integrity sha512-LAJpqYUaCTMT2anZheoidiIymt8MuX286zoVFPM3DVb23aQBH0mAkFvzpd4LKqiolV8bBtZWT5Qp7hClCNDENw== - dependencies: - "@types/history" "*" - "@types/react" "*" - -"@types/react-transition-group@^4.2.0": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.1.tgz#e1a3cb278df7f47f17b5082b1b3da17170bd44b1" - integrity sha512-vIo69qKKcYoJ8wKCJjwSgCTM+z3chw3g18dkrDfVX665tMH7tmbDxEAnPdey4gTlwZz5QuHGzd+hul0OVZDqqQ== - dependencies: - "@types/react" "*" - -"@types/react@*", "@types/react@^17.0.2": - version "17.0.5" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.5.tgz#3d887570c4489011f75a3fc8f965bf87d09a1bea" - integrity sha512-bj4biDB9ZJmGAYTWSKJly6bMr4BLUiBrx9ujiJEoP9XIDY9CTaPGxE5QWN/1WjpPLzYF7/jRNnV2nNxNe970sw== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/resolve@0.0.8": - version "0.0.8" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" - integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== - dependencies: - "@types/node" "*" - -"@types/scheduler@*": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275" - integrity sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA== - -"@types/source-list-map@*": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" - integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== - -"@types/stack-utils@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" - integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== - -"@types/tapable@^1", "@types/tapable@^1.0.5": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.7.tgz#545158342f949e8fd3bfd813224971ecddc3fac4" - integrity sha512-0VBprVqfgFD7Ehb2vd8Lh9TG3jP98gvr8rgehQqzztZNI7o8zS8Ad4jyZneKELphpuE212D8J70LnSNQSyO6bQ== - -"@types/uglify-js@*": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.0.tgz#1cad8df1fb0b143c5aba08de5712ea9d1ff71124" - integrity sha512-EGkrJD5Uy+Pg0NUR8uA4bJ5WMfljyad0G+784vLCNUkD+QwOJXUbBYExXfVGf7YtyzdQp3L/XMYcliB987kL5Q== - dependencies: - source-map "^0.6.1" - -"@types/webpack-sources@*": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.1.0.tgz#8882b0bd62d1e0ce62f183d0d01b72e6e82e8c10" - integrity sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg== - dependencies: - "@types/node" "*" - "@types/source-list-map" "*" - source-map "^0.7.3" - -"@types/webpack@^4.41.8": - version "4.41.28" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.28.tgz#0069a2159b7ad4d83d0b5801942c17d54133897b" - integrity sha512-Nn84RAiJjKRfPFFCVR8LC4ueTtTdfWAMZ03THIzZWRJB+rX24BD3LqPSFnbMscWauEsT4segAsylPDIaZyZyLQ== - dependencies: - "@types/anymatch" "*" - "@types/node" "*" - "@types/tapable" "^1" - "@types/uglify-js" "*" - "@types/webpack-sources" "*" - source-map "^0.6.0" - -"@types/yargs-parser@*": - version "20.2.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9" - integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA== - -"@types/yargs@^15.0.0": - version "15.0.13" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.13.tgz#34f7fec8b389d7f3c1fd08026a5763e072d3c6dc" - integrity sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ== - dependencies: - "@types/yargs-parser" "*" - -"@typescript-eslint/eslint-plugin@4.23.0", "@typescript-eslint/eslint-plugin@^4.5.0": - version "4.23.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.23.0.tgz#29d3c9c81f6200b1fd6d8454cfb007ba176cde80" - integrity sha512-tGK1y3KIvdsQEEgq6xNn1DjiFJtl+wn8JJQiETtCbdQxw1vzjXyAaIkEmO2l6Nq24iy3uZBMFQjZ6ECf1QdgGw== - dependencies: - "@typescript-eslint/experimental-utils" "4.23.0" - "@typescript-eslint/scope-manager" "4.23.0" - debug "^4.1.1" - functional-red-black-tree "^1.0.1" - lodash "^4.17.15" - regexpp "^3.0.0" - semver "^7.3.2" - tsutils "^3.17.1" - -"@typescript-eslint/experimental-utils@4.23.0", "@typescript-eslint/experimental-utils@^4.0.1": - version "4.23.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.23.0.tgz#f2059434cd6e5672bfeab2fb03b7c0a20622266f" - integrity sha512-WAFNiTDnQfrF3Z2fQ05nmCgPsO5o790vOhmWKXbbYQTO9erE1/YsFot5/LnOUizLzU2eeuz6+U/81KV5/hFTGA== - dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/scope-manager" "4.23.0" - "@typescript-eslint/types" "4.23.0" - "@typescript-eslint/typescript-estree" "4.23.0" - eslint-scope "^5.0.0" - eslint-utils "^2.0.0" - -"@typescript-eslint/experimental-utils@^3.10.1": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz#e179ffc81a80ebcae2ea04e0332f8b251345a686" - integrity sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw== - dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/types" "3.10.1" - "@typescript-eslint/typescript-estree" "3.10.1" - eslint-scope "^5.0.0" - eslint-utils "^2.0.0" - -"@typescript-eslint/parser@4.23.0", "@typescript-eslint/parser@^4.4.1", "@typescript-eslint/parser@^4.5.0": - version "4.23.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.23.0.tgz#239315d38e42e852bef43a4b0b01bef78f78911c" - integrity sha512-wsvjksHBMOqySy/Pi2Q6UuIuHYbgAMwLczRl4YanEPKW5KVxI9ZzDYh3B5DtcZPQTGRWFJrfcbJ6L01Leybwug== - dependencies: - "@typescript-eslint/scope-manager" "4.23.0" - "@typescript-eslint/types" "4.23.0" - "@typescript-eslint/typescript-estree" "4.23.0" - debug "^4.1.1" - -"@typescript-eslint/scope-manager@4.23.0": - version "4.23.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.23.0.tgz#8792ef7eacac122e2ec8fa2d30a59b8d9a1f1ce4" - integrity sha512-ZZ21PCFxPhI3n0wuqEJK9omkw51wi2bmeKJvlRZPH5YFkcawKOuRMQMnI8mH6Vo0/DoHSeZJnHiIx84LmVQY+w== - dependencies: - "@typescript-eslint/types" "4.23.0" - "@typescript-eslint/visitor-keys" "4.23.0" - -"@typescript-eslint/types@3.10.1": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727" - integrity sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ== - -"@typescript-eslint/types@4.23.0": - version "4.23.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.23.0.tgz#da1654c8a5332f4d1645b2d9a1c64193cae3aa3b" - integrity sha512-oqkNWyG2SLS7uTWLZf6Sr7Dm02gA5yxiz1RP87tvsmDsguVATdpVguHr4HoGOcFOpCvx9vtCSCyQUGfzq28YCw== - -"@typescript-eslint/typescript-estree@3.10.1": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz#fd0061cc38add4fad45136d654408569f365b853" - integrity sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w== - dependencies: - "@typescript-eslint/types" "3.10.1" - "@typescript-eslint/visitor-keys" "3.10.1" - debug "^4.1.1" - glob "^7.1.6" - is-glob "^4.0.1" - lodash "^4.17.15" - semver "^7.3.2" - tsutils "^3.17.1" - -"@typescript-eslint/typescript-estree@4.23.0": - version "4.23.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.23.0.tgz#0753b292097523852428a6f5a1aa8ccc1aae6cd9" - integrity sha512-5Sty6zPEVZF5fbvrZczfmLCOcby3sfrSPu30qKoY1U3mca5/jvU5cwsPb/CO6Q3ByRjixTMIVsDkqwIxCf/dMw== - dependencies: - "@typescript-eslint/types" "4.23.0" - "@typescript-eslint/visitor-keys" "4.23.0" - debug "^4.1.1" - globby "^11.0.1" - is-glob "^4.0.1" - semver "^7.3.2" - tsutils "^3.17.1" - -"@typescript-eslint/visitor-keys@3.10.1": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz#cd4274773e3eb63b2e870ac602274487ecd1e931" - integrity sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ== - dependencies: - eslint-visitor-keys "^1.1.0" - -"@typescript-eslint/visitor-keys@4.23.0": - version "4.23.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.23.0.tgz#7215cc977bd3b4ef22467b9023594e32f9e4e455" - integrity sha512-5PNe5cmX9pSifit0H+nPoQBXdbNzi5tOEec+3riK+ku4e3er37pKxMKDH5Ct5Y4fhWxcD4spnlYjxi9vXbSpwg== - dependencies: - "@typescript-eslint/types" "4.23.0" - eslint-visitor-keys "^2.0.0" - -"@virtuoso.dev/react-urx@^0.2.5": - version "0.2.6" - resolved "https://registry.yarnpkg.com/@virtuoso.dev/react-urx/-/react-urx-0.2.6.tgz#e1d8bc717723b2fc23d80ea4e07703dbc276448b" - integrity sha512-+PLQ2iWmSH/rW7WGPEf+Kkql+xygHFL43Jij5aREde/O9mE0OFFGqeetA2a6lry3LDVWzupPntvvWhdaYw0TyA== - dependencies: - "@virtuoso.dev/urx" "^0.2.6" - -"@virtuoso.dev/urx@^0.2.5", "@virtuoso.dev/urx@^0.2.6": - version "0.2.6" - resolved "https://registry.yarnpkg.com/@virtuoso.dev/urx/-/urx-0.2.6.tgz#0028c49e52037e673993900d32abea83262fbd53" - integrity sha512-EKJ0WvJgWaXIz6zKbh9Q63Bcq//p8OHXHbdz4Fy+ruhjJCyI8ADE8E5gwSqBoUchaiYlgwKrT+sX4L2h/H+hMg== - -"@webassemblyjs/ast@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" - integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== - dependencies: - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - -"@webassemblyjs/floating-point-hex-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" - integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== - -"@webassemblyjs/helper-api-error@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" - integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== - -"@webassemblyjs/helper-buffer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" - integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== - -"@webassemblyjs/helper-code-frame@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" - integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== - dependencies: - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/helper-fsm@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" - integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== - -"@webassemblyjs/helper-module-context@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" - integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== - dependencies: - "@webassemblyjs/ast" "1.9.0" - -"@webassemblyjs/helper-wasm-bytecode@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" - integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== - -"@webassemblyjs/helper-wasm-section@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" - integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - -"@webassemblyjs/ieee754@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" - integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" - integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" - integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== - -"@webassemblyjs/wasm-edit@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" - integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/helper-wasm-section" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-opt" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/wasm-gen@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" - integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wasm-opt@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" - integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - -"@webassemblyjs/wasm-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" - integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wast-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" - integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/floating-point-hex-parser" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-code-frame" "1.9.0" - "@webassemblyjs/helper-fsm" "1.9.0" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/wast-printer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" - integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - "@xtuc/long" "4.2.2" - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -abab@^2.0.3, abab@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" - integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== - -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== - dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" - -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - -acorn-jsx@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" - integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== - -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn@^6.4.1: - version "6.4.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" - integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== - -acorn@^7.1.0, acorn@^7.1.1, acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.1.0: - version "8.2.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.2.4.tgz#caba24b08185c3b56e3168e97d15ed17f4d31fd0" - integrity sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg== - -address@1.1.2, address@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" - integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== - -adjust-sourcemap-loader@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz#5ae12fb5b7b1c585e80bbb5a63ec163a1a45e61e" - integrity sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw== - dependencies: - loader-utils "^2.0.0" - regex-parser "^2.2.11" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv-errors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" - integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== - -ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - 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" - -ajv@^8.0.1: - version "8.3.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.3.0.tgz#25ee7348e32cdc4a1dbb38256bf6bdc451dd577c" - integrity sha512-RYE7B5An83d7eWnDR8kbdaIFqmKCNsP16ay1hDbJEU+sa0e3H9SebskCt0Uufem6cfAVu7Col6ubcn/W+Sm8/Q== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -alphanum-sort@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= - -ansi-colors@^3.0.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" - integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== - -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-html@0.0.7, ansi-html@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" - integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -anymatch@^3.0.3, anymatch@~3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -aria-query@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" - integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== - dependencies: - "@babel/runtime" "^7.10.2" - "@babel/runtime-corejs3" "^7.10.2" - -arity-n@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/arity-n/-/arity-n-1.0.4.tgz#d9e76b11733e08569c0847ae7b39b2860b30b745" - integrity sha1-2edrEXM+CFacCEeuezmyhgswt0U= - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= - -array-flatten@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - -array-includes@^3.1.1, array-includes@^3.1.2, array-includes@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" - integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - get-intrinsic "^1.1.1" - is-string "^1.0.5" - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -array.prototype.flat@^1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" - integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - -array.prototype.flatmap@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" - integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - function-bind "^1.1.1" - -arrify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" - integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== - -asap@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= - -asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -assert@^1.1.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" - integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== - dependencies: - object-assign "^4.1.1" - util "0.10.3" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -ast-types-flow@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" - integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -async@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== - dependencies: - lodash "^4.17.14" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -autoprefixer@^9.6.1: - version "9.8.6" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" - integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== - dependencies: - browserslist "^4.12.0" - caniuse-lite "^1.0.30001109" - colorette "^1.2.1" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^7.0.32" - postcss-value-parser "^4.1.0" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== - -axe-core@^4.0.2: - version "4.2.0" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.2.0.tgz#6594db4ee62f78be79e32a7295d21b099b60668d" - integrity sha512-1uIESzroqpaTzt9uX48HO+6gfnKu3RwvWdCcWSrX4csMInJfCo1yvKPNXCwXFRpJqRW25tiASb6No0YH57PXqg== - -axios@^0.21.1: - version "0.21.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" - integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== - dependencies: - follow-redirects "^1.10.0" - -axobject-query@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" - integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== - -babel-eslint@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" - integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - eslint-visitor-keys "^1.0.0" - resolve "^1.12.0" - -babel-extract-comments@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz#0a2aedf81417ed391b85e18b4614e693a0351a21" - integrity sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ== - dependencies: - babylon "^6.18.0" - -babel-jest@^26.6.0, babel-jest@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" - integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== - dependencies: - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^26.6.2" - chalk "^4.0.0" - graceful-fs "^4.2.4" - slash "^3.0.0" - -babel-loader@8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" - integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== - dependencies: - find-cache-dir "^2.1.0" - loader-utils "^1.4.0" - mkdirp "^0.5.3" - pify "^4.0.1" - schema-utils "^2.6.5" - -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - -babel-plugin-istanbul@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" - integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^4.0.0" - test-exclude "^6.0.0" - -babel-plugin-jest-hoist@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" - integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" - "@types/babel__traverse" "^7.0.6" - -babel-plugin-macros@2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" - integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== - dependencies: - "@babel/runtime" "^7.7.2" - cosmiconfig "^6.0.0" - resolve "^1.12.0" - -babel-plugin-named-asset-import@^0.3.7: - version "0.3.7" - resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.7.tgz#156cd55d3f1228a5765774340937afc8398067dd" - integrity sha512-squySRkf+6JGnvjoUtDEjSREJEBirnXi9NqP6rjSYsylxQxqBTz+pkmf395i9E2zsvmYUaI40BHo6SqZUdydlw== - -babel-plugin-polyfill-corejs2@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz#686775bf9a5aa757e10520903675e3889caeedc4" - integrity sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg== - dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.2.0" - semver "^6.1.1" - -babel-plugin-polyfill-corejs3@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz#f4b4bb7b19329827df36ff56f6e6d367026cb7a2" - integrity sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.0" - core-js-compat "^3.9.1" - -babel-plugin-polyfill-regenerator@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz#853f5f5716f4691d98c84f8069c7636ea8da7ab8" - integrity sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.0" - -babel-plugin-syntax-object-rest-spread@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" - integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= - -babel-plugin-transform-object-rest-spread@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" - integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY= - dependencies: - babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-runtime "^6.26.0" - -babel-plugin-transform-react-remove-prop-types@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" - integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== - -babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - -babel-preset-jest@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" - integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== - dependencies: - babel-plugin-jest-hoist "^26.6.2" - babel-preset-current-node-syntax "^1.0.0" - -babel-preset-react-app@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-10.0.0.tgz#689b60edc705f8a70ce87f47ab0e560a317d7045" - integrity sha512-itL2z8v16khpuKutx5IH8UdCdSTuzrOhRFTEdIhveZ2i1iBKDrVE0ATa4sFVy+02GLucZNVBWtoarXBy0Msdpg== - dependencies: - "@babel/core" "7.12.3" - "@babel/plugin-proposal-class-properties" "7.12.1" - "@babel/plugin-proposal-decorators" "7.12.1" - "@babel/plugin-proposal-nullish-coalescing-operator" "7.12.1" - "@babel/plugin-proposal-numeric-separator" "7.12.1" - "@babel/plugin-proposal-optional-chaining" "7.12.1" - "@babel/plugin-transform-flow-strip-types" "7.12.1" - "@babel/plugin-transform-react-display-name" "7.12.1" - "@babel/plugin-transform-runtime" "7.12.1" - "@babel/preset-env" "7.12.1" - "@babel/preset-react" "7.12.1" - "@babel/preset-typescript" "7.12.1" - "@babel/runtime" "7.12.1" - babel-plugin-macros "2.8.0" - babel-plugin-transform-react-remove-prop-types "0.4.24" - -babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.0.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -batch@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - -bfj@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/bfj/-/bfj-7.0.2.tgz#1988ce76f3add9ac2913fd8ba47aad9e651bfbb2" - integrity sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw== - dependencies: - bluebird "^3.5.5" - check-types "^11.1.1" - hoopy "^0.1.4" - tryer "^1.0.1" - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bluebird@^3.5.5: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.0.0, bn.js@^5.1.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" - integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== - -body-parser@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== - dependencies: - bytes "3.1.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "1.7.2" - iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" - -bonjour@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" - integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= - dependencies: - array-flatten "^2.1.0" - deep-equal "^1.0.1" - dns-equal "^1.0.0" - dns-txt "^2.0.2" - multicast-dns "^6.0.1" - multicast-dns-service-types "^1.1.0" - -boolbase@^1.0.0, boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@^3.0.1, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -brorand@^1.0.1, brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" - integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== - dependencies: - bn.js "^5.0.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" - integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== - dependencies: - bn.js "^5.1.1" - browserify-rsa "^4.0.1" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.3" - inherits "^2.0.4" - parse-asn1 "^5.1.5" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== - dependencies: - pako "~1.0.5" - -browserslist@4.14.2: - version "4.14.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.2.tgz#1b3cec458a1ba87588cc5e9be62f19b6d48813ce" - integrity sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw== - dependencies: - caniuse-lite "^1.0.30001125" - electron-to-chromium "^1.3.564" - escalade "^3.0.2" - node-releases "^1.1.61" - -browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.6.2, browserslist@^4.6.4: - version "4.16.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" - integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== - dependencies: - caniuse-lite "^1.0.30001219" - colorette "^1.2.2" - electron-to-chromium "^1.3.723" - escalade "^3.1.1" - node-releases "^1.1.71" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -buffer-indexof@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" - integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= - -buffer@^4.3.0: - version "4.9.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -builtin-modules@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" - integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= - -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - -cacache@^12.0.2: - version "12.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" - integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - -cacache@^15.0.5: - version "15.0.6" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.6.tgz#65a8c580fda15b59150fb76bf3f3a8e45d583099" - integrity sha512-g1WYDMct/jzW+JdWEyjaX2zoBkZ6ZT9VpOyp2I/VMtDsNLffNat3kqPFfi1eDRSK9/SuKGyORDHcQMcPF8sQ/w== - dependencies: - "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.0.2" - unique-filename "^1.1.1" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= - dependencies: - caller-callsite "^2.0.0" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camel-case@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" - integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== - dependencies: - pascal-case "^3.1.2" - tslib "^2.0.3" - -camelcase@5.3.1, camelcase@^5.0.0, camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.0.0, camelcase@^6.1.0, camelcase@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" - integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== - -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001219: - version "1.0.30001228" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz#bfdc5942cd3326fa51ee0b42fbef4da9d492a7fa" - integrity sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A== - -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" - -case-sensitive-paths-webpack-plugin@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz#23ac613cc9a856e4f88ff8bb73bbb5e989825cf7" - integrity sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ== - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -chalk@2.4.2, chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - 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" - -chalk@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" - integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -check-types@^11.1.1: - version "11.1.2" - resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.1.2.tgz#86a7c12bf5539f6324eb0e70ca8896c0e38f3e2f" - integrity sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ== - -chokidar@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -chokidar@^3.4.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" - integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.5.0" - optionalDependencies: - fsevents "~2.3.1" - -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -cjs-module-lexer@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" - integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -clean-css@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" - integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== - dependencies: - source-map "~0.6.0" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - -clsx@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" - integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= - -coa@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" - integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== - dependencies: - "@types/q" "^1.5.1" - chalk "^2.4.1" - q "^1.1.2" - -collect-v8-coverage@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" - integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0, color-convert@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.5.4: - version "1.5.5" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.5.tgz#65474a8f0e7439625f3d27a6a19d89fc45223014" - integrity sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" - integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== - dependencies: - color-convert "^1.9.1" - color-string "^1.5.4" - -colorette@^1.2.1, colorette@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" - integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - -common-tags@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" - integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -compose-function@3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/compose-function/-/compose-function-3.0.3.tgz#9ed675f13cc54501d30950a486ff6a7ba3ab185f" - integrity sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8= - dependencies: - arity-n "^1.0.4" - -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -concat-stream@^1.5.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -confusing-browser-globals@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz#30d1e7f3d1b882b25ec4933d1d1adac353d20a59" - integrity sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA== - -connect-history-api-fallback@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" - integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== - -console-browserify@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" - integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== - -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= - -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= - -content-disposition@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== - dependencies: - safe-buffer "5.1.2" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -convert-source-map@1.7.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== - dependencies: - safe-buffer "~5.1.1" - -convert-source-map@^0.3.3: - version "0.3.5" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190" - integrity sha1-8dgClQr33SYxof6+BZZVDIarMZA= - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= - -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" - integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== - -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -core-js-compat@^3.6.2, core-js-compat@^3.9.0, core-js-compat@^3.9.1: - version "3.12.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.12.1.tgz#2c302c4708505fa7072b0adb5156d26f7801a18b" - integrity sha512-i6h5qODpw6EsHAoIdQhKoZdWn+dGBF3dSS8m5tif36RlWvW3A6+yu2S16QHUo3CrkzrnEskMAt9f8FxmY9fhWQ== - dependencies: - browserslist "^4.16.6" - semver "7.0.0" - -core-js-pure@^3.0.0: - version "3.12.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.12.1.tgz#934da8b9b7221e2a2443dc71dfa5bd77a7ea00b8" - integrity sha512-1cch+qads4JnDSWsvc7d6nzlKAippwjUlf6vykkTLW53VSV+NkE6muGBToAjEA8pG90cSfcud3JgVmW2ds5TaQ== - -core-js@^2.4.0: - version "2.6.12" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" - integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== - -core-js@^3.5.0, core-js@^3.6.5: - version "3.12.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.12.1.tgz#6b5af4ff55616c08a44d386f1f510917ff204112" - integrity sha512-Ne9DKPHTObRuB09Dru5AjwKjY4cJHVGu+y5f7coGn1E9Grkc3p2iBwE9AI/nJzsE29mQF7oq+mhYYRqOMFN1Bw== - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cosmiconfig@^5.0.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" - -cosmiconfig@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" - integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.1.0" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.7.2" - -cosmiconfig@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" - integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -create-ecdh@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== - dependencies: - bn.js "^4.1.0" - elliptic "^6.5.3" - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -crypto-random-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= - -css-blank-pseudo@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz#dfdefd3254bf8a82027993674ccf35483bfcb3c5" - integrity sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w== - dependencies: - postcss "^7.0.5" - -css-box-model@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/css-box-model/-/css-box-model-1.2.1.tgz#59951d3b81fd6b2074a62d49444415b0d2b4d7c1" - integrity sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw== - dependencies: - tiny-invariant "^1.0.6" - -css-color-names@0.0.4, css-color-names@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= - -css-declaration-sorter@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" - integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== - dependencies: - postcss "^7.0.1" - timsort "^0.3.0" - -css-has-pseudo@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz#3c642ab34ca242c59c41a125df9105841f6966ee" - integrity sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ== - dependencies: - postcss "^7.0.6" - postcss-selector-parser "^5.0.0-rc.4" - -css-loader@4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-4.3.0.tgz#c888af64b2a5b2e85462c72c0f4a85c7e2e0821e" - integrity sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg== - dependencies: - camelcase "^6.0.0" - cssesc "^3.0.0" - icss-utils "^4.1.1" - loader-utils "^2.0.0" - postcss "^7.0.32" - postcss-modules-extract-imports "^2.0.0" - postcss-modules-local-by-default "^3.0.3" - postcss-modules-scope "^2.2.0" - postcss-modules-values "^3.0.0" - postcss-value-parser "^4.1.0" - schema-utils "^2.7.1" - semver "^7.3.2" - -css-prefers-color-scheme@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz#6f830a2714199d4f0d0d0bb8a27916ed65cff1f4" - integrity sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg== - dependencies: - postcss "^7.0.5" - -css-select-base-adapter@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" - integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== - -css-select@^2.0.0, css-select@^2.0.2: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" - integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== - dependencies: - boolbase "^1.0.0" - css-what "^3.2.1" - domutils "^1.7.0" - nth-check "^1.0.2" - -css-tree@1.0.0-alpha.37: - version "1.0.0-alpha.37" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" - integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== - dependencies: - mdn-data "2.0.4" - source-map "^0.6.1" - -css-tree@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== - dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" - -css-vendor@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-2.0.8.tgz#e47f91d3bd3117d49180a3c935e62e3d9f7f449d" - integrity sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ== - dependencies: - "@babel/runtime" "^7.8.3" - is-in-browser "^1.0.2" - -css-what@^3.2.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" - integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== - -css@^2.0.0: - version "2.2.4" - resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" - integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== - dependencies: - inherits "^2.0.3" - source-map "^0.6.1" - source-map-resolve "^0.5.2" - urix "^0.1.0" - -cssdb@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz#3bf2f2a68c10f5c6a08abd92378331ee803cddb0" - integrity sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ== - -cssesc@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" - integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -cssnano-preset-default@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz#920622b1fc1e95a34e8838203f1397a504f2d3ff" - integrity sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ== - dependencies: - css-declaration-sorter "^4.0.1" - cssnano-util-raw-cache "^4.0.1" - postcss "^7.0.0" - postcss-calc "^7.0.1" - postcss-colormin "^4.0.3" - postcss-convert-values "^4.0.1" - postcss-discard-comments "^4.0.2" - postcss-discard-duplicates "^4.0.2" - postcss-discard-empty "^4.0.1" - postcss-discard-overridden "^4.0.1" - postcss-merge-longhand "^4.0.11" - postcss-merge-rules "^4.0.3" - postcss-minify-font-values "^4.0.2" - postcss-minify-gradients "^4.0.2" - postcss-minify-params "^4.0.2" - postcss-minify-selectors "^4.0.2" - postcss-normalize-charset "^4.0.1" - postcss-normalize-display-values "^4.0.2" - postcss-normalize-positions "^4.0.2" - postcss-normalize-repeat-style "^4.0.2" - postcss-normalize-string "^4.0.2" - postcss-normalize-timing-functions "^4.0.2" - postcss-normalize-unicode "^4.0.1" - postcss-normalize-url "^4.0.1" - postcss-normalize-whitespace "^4.0.2" - postcss-ordered-values "^4.1.2" - postcss-reduce-initial "^4.0.3" - postcss-reduce-transforms "^4.0.2" - postcss-svgo "^4.0.3" - postcss-unique-selectors "^4.0.1" - -cssnano-util-get-arguments@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" - integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= - -cssnano-util-get-match@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" - integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= - -cssnano-util-raw-cache@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" - integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== - dependencies: - postcss "^7.0.0" - -cssnano-util-same-parent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" - integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== - -cssnano@^4.1.10: - version "4.1.11" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.11.tgz#c7b5f5b81da269cb1fd982cb960c1200910c9a99" - integrity sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g== - dependencies: - cosmiconfig "^5.0.0" - cssnano-preset-default "^4.0.8" - is-resolvable "^1.0.0" - postcss "^7.0.0" - -csso@^4.0.2: - version "4.2.0" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" - integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== - dependencies: - css-tree "^1.1.2" - -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - -csstype@^2.5.2: - version "2.6.17" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.17.tgz#4cf30eb87e1d1a005d8b6510f95292413f6a1c0e" - integrity sha512-u1wmTI1jJGzCJzWndZo8mk4wnPTZd1eOIYTYvuEyOQGfmDl3TrabCCfKnOC86FZwW/9djqTl933UF/cS425i9A== - -csstype@^3.0.2: - version "3.0.8" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.8.tgz#d2266a792729fb227cd216fb572f43728e1ad340" - integrity sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw== - -cyclist@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= - -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.0.1" - -damerau-levenshtein@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz#64368003512a1a6992593741a09a9d31a836f55d" - integrity sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw== - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.1.1, debug@^3.2.6: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - dependencies: - ms "2.1.2" - -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decimal.js@^10.2.1: - version "10.2.1" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" - integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= - -deep-equal@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" - integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== - dependencies: - is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" - object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" - -deep-is@^0.1.3, deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - -default-gateway@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" - integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== - dependencies: - execa "^1.0.0" - ip-regex "^2.1.0" - -define-properties@^1.1.2, define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -del@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" - integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== - dependencies: - "@types/glob" "^7.1.1" - globby "^6.1.0" - is-path-cwd "^2.0.0" - is-path-in-cwd "^2.0.0" - p-map "^2.0.0" - pify "^4.0.1" - rimraf "^2.6.3" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= - -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - -detect-node@^2.0.4: - version "2.0.5" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.5.tgz#9d270aa7eaa5af0b72c4c9d9b814e7f4ce738b79" - integrity sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw== - -detect-port-alt@1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" - integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== - dependencies: - address "^1.0.1" - debug "^2.6.0" - -diff-sequences@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" - integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= - -dns-packet@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" - integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== - dependencies: - ip "^1.1.0" - safe-buffer "^5.0.1" - -dns-txt@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" - integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= - dependencies: - buffer-indexof "^1.0.0" - -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-converter@^0.2: - version "0.2.0" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" - integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== - dependencies: - utila "~0.4" - -dom-helpers@^5.0.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" - integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== - dependencies: - "@babel/runtime" "^7.8.7" - csstype "^3.0.2" - -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== - -domelementtype@1, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domelementtype@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" - integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== - -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" - -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" - -domutils@^1.5.1, domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -dot-prop@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -dotenv-expand@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" - integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== - -dotenv@8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" - integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== - -duplexer@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -ejs@^2.6.1: - version "2.7.4" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" - integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== - -electron-to-chromium@^1.3.564, electron-to-chromium@^1.3.723: - version "1.3.727" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.727.tgz#857e310ca00f0b75da4e1db6ff0e073cc4a91ddf" - integrity sha512-Mfz4FIB4FSvEwBpDfdipRIrwd6uo8gUDoRDF4QEYb4h4tSuI3ov594OrjU6on042UlFHouIJpClDODGkPcBSbg== - -elliptic@^6.5.3: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -emittery@^0.7.1: - version "0.7.2" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" - integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.0.0: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= - -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enhanced-resolve@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" - integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" - -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -entities@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -errno@^0.1.3, errno@~0.1.7: - version "0.1.8" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== - dependencies: - prr "~1.0.1" - -error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -error-stack-parser@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8" - integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ== - dependencies: - stackframe "^1.1.1" - -es-abstract@^1.17.2, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: - version "1.18.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4" - integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - get-intrinsic "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.2" - is-callable "^1.2.3" - is-negative-zero "^2.0.1" - is-regex "^1.1.2" - is-string "^1.0.5" - object-inspect "^1.9.0" - object-keys "^1.1.1" - object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.0" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es5-ext@^0.10.35, es5-ext@^0.10.50: - version "0.10.53" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" - integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== - dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.3" - next-tick "~1.0.0" - -es6-iterator@2.0.3, es6-iterator@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-symbol@^3.1.1, es6-symbol@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== - dependencies: - d "^1.0.1" - ext "^1.1.2" - -escalade@^3.0.2, escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -escape-string-regexp@2.0.0, escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escodegen@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" - integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -eslint-config-airbnb-base@^14.2.0, eslint-config-airbnb-base@^14.2.1: - version "14.2.1" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz#8a2eb38455dc5a312550193b319cdaeef042cd1e" - integrity sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA== - dependencies: - confusing-browser-globals "^1.0.10" - object.assign "^4.1.2" - object.entries "^1.1.2" - -eslint-config-airbnb-typescript@^12.3.1: - version "12.3.1" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-12.3.1.tgz#83ab40d76402c208eb08516260d1d6fac8f8acbc" - integrity sha512-ql/Pe6/hppYuRp4m3iPaHJqkBB7dgeEmGPQ6X0UNmrQOfTF+dXw29/ZjU2kQ6RDoLxaxOA+Xqv07Vbef6oVTWw== - dependencies: - "@typescript-eslint/parser" "^4.4.1" - eslint-config-airbnb "^18.2.0" - eslint-config-airbnb-base "^14.2.0" - -eslint-config-airbnb@^18.2.0: - version "18.2.1" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-18.2.1.tgz#b7fe2b42f9f8173e825b73c8014b592e449c98d9" - integrity sha512-glZNDEZ36VdlZWoxn/bUR1r/sdFKPd1mHPbqUtkctgNG4yT2DLLtJ3D+yCV+jzZCc2V1nBVkmdknOJBZ5Hc0fg== - dependencies: - eslint-config-airbnb-base "^14.2.1" - object.assign "^4.1.2" - object.entries "^1.1.2" - -eslint-config-react-app@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-6.0.0.tgz#ccff9fc8e36b322902844cbd79197982be355a0e" - integrity sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A== - dependencies: - confusing-browser-globals "^1.0.10" - -eslint-import-resolver-node@^0.3.4: - version "0.3.4" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" - integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== - dependencies: - debug "^2.6.9" - resolve "^1.13.1" - -eslint-module-utils@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" - integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== - dependencies: - debug "^2.6.9" - pkg-dir "^2.0.0" - -eslint-plugin-flowtype@^5.2.0: - version "5.7.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.7.2.tgz#482a42fe5d15ee614652ed256d37543d584d7bc0" - integrity sha512-7Oq/N0+3nijBnYWQYzz/Mp/7ZCpwxYvClRyW/PLAmimY9uLCBvoXsNsERcJdkKceyOjgRbFhhxs058KTrne9Mg== - dependencies: - lodash "^4.17.15" - string-natural-compare "^3.0.1" - -eslint-plugin-import@^2.22.1: - version "2.22.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702" - integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw== - dependencies: - array-includes "^3.1.1" - array.prototype.flat "^1.2.3" - contains-path "^0.1.0" - debug "^2.6.9" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.4" - eslint-module-utils "^2.6.0" - has "^1.0.3" - minimatch "^3.0.4" - object.values "^1.1.1" - read-pkg-up "^2.0.0" - resolve "^1.17.0" - tsconfig-paths "^3.9.0" - -eslint-plugin-jest@^24.1.0: - version "24.3.6" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-24.3.6.tgz#5f0ca019183c3188c5ad3af8e80b41de6c8e9173" - integrity sha512-WOVH4TIaBLIeCX576rLcOgjNXqP+jNlCiEmRgFTfQtJ52DpwnIQKAVGlGPAN7CZ33bW6eNfHD6s8ZbEUTQubJg== - dependencies: - "@typescript-eslint/experimental-utils" "^4.0.1" - -eslint-plugin-jsx-a11y@^6.3.1, eslint-plugin-jsx-a11y@^6.4.1: - version "6.4.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz#a2d84caa49756942f42f1ffab9002436391718fd" - integrity sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg== - dependencies: - "@babel/runtime" "^7.11.2" - aria-query "^4.2.2" - array-includes "^3.1.1" - ast-types-flow "^0.0.7" - axe-core "^4.0.2" - axobject-query "^2.2.0" - damerau-levenshtein "^1.0.6" - emoji-regex "^9.0.0" - has "^1.0.3" - jsx-ast-utils "^3.1.0" - language-tags "^1.0.5" - -eslint-plugin-react-hooks@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz#8c229c268d468956334c943bb45fc860280f5556" - integrity sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ== - -eslint-plugin-react@^7.21.5, eslint-plugin-react@^7.23.2: - version "7.23.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.23.2.tgz#2d2291b0f95c03728b55869f01102290e792d494" - integrity sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw== - dependencies: - array-includes "^3.1.3" - array.prototype.flatmap "^1.2.4" - doctrine "^2.1.0" - has "^1.0.3" - jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.0.4" - object.entries "^1.1.3" - object.fromentries "^2.0.4" - object.values "^1.1.3" - prop-types "^15.7.2" - resolve "^2.0.0-next.3" - string.prototype.matchall "^4.0.4" - -eslint-plugin-testing-library@^3.9.2: - version "3.10.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-3.10.2.tgz#609ec2b0369da7cf2e6d9edff5da153cc31d87bd" - integrity sha512-WAmOCt7EbF1XM8XfbCKAEzAPnShkNSwcIsAD2jHdsMUT9mZJPjLCG7pMzbcC8kK366NOuGip8HKLDC+Xk4yIdA== - dependencies: - "@typescript-eslint/experimental-utils" "^3.10.1" - -eslint-scope@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-scope@^5.0.0, eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-utils@^2.0.0, eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint-webpack-plugin@^2.5.2: - version "2.5.4" - resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-2.5.4.tgz#473b84932f1a8e2c2b8e66a402d0497bf440b986" - integrity sha512-7rYh0m76KyKSDE+B+2PUQrlNS4HJ51t3WKpkJg6vo2jFMbEPTG99cBV0Dm7LXSHucN4WGCG65wQcRiTFrj7iWw== - dependencies: - "@types/eslint" "^7.2.6" - arrify "^2.0.1" - jest-worker "^26.6.2" - micromatch "^4.0.2" - normalize-path "^3.0.0" - schema-utils "^3.0.0" - -eslint@^7.11.0, eslint@^7.26.0: - version "7.26.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.26.0.tgz#d416fdcdcb3236cd8f282065312813f8c13982f6" - integrity sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg== - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.1" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.4.0" - esutils "^2.0.2" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash "^4.17.21" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^6.0.4" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== - dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" - -esprima@^4.0.0, esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.1.0, esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== - -estree-walker@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" - integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== - -estree-walker@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -events@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -eventsource@^1.0.7: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf" - integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg== - dependencies: - original "^1.0.0" - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -exec-sh@^0.3.2: - version "0.3.6" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" - integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" - 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" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expect@^26.6.0, expect@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" - integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== - dependencies: - "@jest/types" "^26.6.2" - ansi-styles "^4.0.0" - jest-get-type "^26.3.0" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" - -express@^4.17.1: - version "4.17.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" - integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== - dependencies: - accepts "~1.3.7" - array-flatten "1.1.1" - body-parser "1.19.0" - content-disposition "0.5.3" - content-type "~1.0.4" - cookie "0.4.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "~1.1.2" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.5" - qs "6.7.0" - range-parser "~1.2.1" - safe-buffer "5.1.2" - send "0.17.1" - serve-static "1.14.1" - setprototypeof "1.1.1" - statuses "~1.5.0" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -ext@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" - integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== - dependencies: - type "^2.0.0" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -fast-deep-equal@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.1.1: - version "3.2.5" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" - integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.0" - merge2 "^1.3.0" - micromatch "^4.0.2" - picomatch "^2.2.1" - -fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fastq@^1.6.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" - integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== - dependencies: - reusify "^1.0.4" - -faye-websocket@^0.11.3: - version "0.11.3" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" - integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== - dependencies: - websocket-driver ">=0.5.1" - -fb-watchman@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== - dependencies: - bser "2.1.1" - -figgy-pudding@^3.5.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" - integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -file-loader@6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.1.1.tgz#a6f29dfb3f5933a1c350b2dbaa20ac5be0539baa" - integrity sha512-Klt8C4BjWSXYQAfhpYYkG4qHNTna4toMHEbWrI5IuVoxbU6uiDKeKAP99R8mmbJi3lvewn/jQBOgU4+NS3tDQw== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -file-selector@^0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/file-selector/-/file-selector-0.2.4.tgz#7b98286f9dbb9925f420130ea5ed0a69238d4d80" - integrity sha512-ZDsQNbrv6qRi1YTDOEWzf5J2KjZ9KMI1Q2SGeTkCJmNNW25Jg4TW4UMcmoqcg4WrAyKRcpBXdbWRxkfrOzVRbA== - dependencies: - tslib "^2.0.3" - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -filesize@6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.1.0.tgz#e81bdaa780e2451d714d71c0d7a4f3238d37ad00" - integrity sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg== - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - -find-cache-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - -find-cache-dir@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" - integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-up@4.1.0, find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flatted@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" - integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== - -flatten@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b" - integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== - -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - -follow-redirects@^1.0.0, follow-redirects@^1.10.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" - integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -fork-ts-checker-webpack-plugin@4.1.6: - version "4.1.6" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz#5055c703febcf37fa06405d400c122b905167fc5" - integrity sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw== - dependencies: - "@babel/code-frame" "^7.5.5" - chalk "^2.4.1" - micromatch "^3.1.10" - minimatch "^3.0.4" - semver "^5.6.0" - tapable "^1.0.0" - worker-rpc "^0.1.0" - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= - -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fs-extra@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^9.0.1: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - -fsevents@^2.1.2, fsevents@^2.1.3, fsevents@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" - integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== - -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-modules@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" - integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== - dependencies: - type-fest "^0.8.1" - -globals@^13.6.0: - version "13.8.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.8.0.tgz#3e20f504810ce87a8d72e55aecf8435b50f4c1b3" - integrity sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q== - dependencies: - type-fest "^0.20.2" - -globby@11.0.1: - version "11.0.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" - integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" - slash "^3.0.0" - -globby@^11.0.1: - version "11.0.3" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb" - integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" - slash "^3.0.0" - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= - -gzip-size@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" - integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== - dependencies: - duplexer "^0.1.1" - pify "^4.0.1" - -handle-thing@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" - integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - -harmony-reflect@^1.4.6: - version "1.6.2" - resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710" - integrity sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g== - -has-bigints@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" - integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-symbols@^1.0.1, has-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.0, has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -he@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -hex-color-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" - integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== - -history@^4.9.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" - integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== - dependencies: - "@babel/runtime" "^7.1.2" - loose-envify "^1.2.0" - resolve-pathname "^3.0.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - value-equal "^1.0.1" - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" - integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== - dependencies: - react-is "^16.7.0" - -hoopy@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" - integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - -hsl-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" - integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= - -hsla-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" - integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= - -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== - dependencies: - whatwg-encoding "^1.0.5" - -html-entities@^1.2.1, html-entities@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" - integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -html-minifier-terser@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" - integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== - dependencies: - camel-case "^4.1.1" - clean-css "^4.2.3" - commander "^4.1.1" - he "^1.2.0" - param-case "^3.0.3" - relateurl "^0.2.7" - terser "^4.6.3" - -html-webpack-plugin@4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz#625097650886b97ea5dae331c320e3238f6c121c" - integrity sha512-MouoXEYSjTzCrjIxWwg8gxL5fE2X2WZJLmBYXlaJhQUH5K/b5OrqmV7T4dB7iu0xkmJ6JlUuV6fFVtnqbPopZw== - dependencies: - "@types/html-minifier-terser" "^5.0.0" - "@types/tapable" "^1.0.5" - "@types/webpack" "^4.41.8" - html-minifier-terser "^5.0.1" - loader-utils "^1.2.3" - lodash "^4.17.15" - pretty-error "^2.1.1" - tapable "^1.1.3" - util.promisify "1.0.0" - -htmlparser2@^3.10.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" - integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== - dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.1" - -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= - -http-errors@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-parser-js@>=0.5.1: - version "0.5.3" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" - integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== - -http-proxy-middleware@0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" - integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== - dependencies: - http-proxy "^1.17.0" - is-glob "^4.0.0" - lodash "^4.17.11" - micromatch "^3.1.10" - -http-proxy@^1.17.0: - version "1.18.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= - -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== - -hyphenate-style-name@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" - integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -icss-utils@^4.0.0, icss-utils@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" - integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== - dependencies: - postcss "^7.0.14" - -identity-obj-proxy@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" - integrity sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ= - dependencies: - harmony-reflect "^1.4.6" - -ieee754@^1.1.4: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.4: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - -immer@8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/immer/-/immer-8.0.1.tgz#9c73db683e2b3975c424fb0572af5889877ae656" - integrity sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA== - -import-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" - integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= - dependencies: - import-from "^2.1.0" - -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - -import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-from@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" - integrity sha1-M1238qev/VOqpHHUuAId7ja387E= - dependencies: - resolve-from "^3.0.0" - -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== - dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" - -import-local@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" - integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indefinite-observable@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/indefinite-observable/-/indefinite-observable-2.0.1.tgz#574af29bfbc17eb5947793797bddc94c9d859400" - integrity sha512-G8vgmork+6H9S8lUAg1gtXEj2JxIQTo0g2PbFiYOdjkziSI0F7UYBiVwhZRuixhBCNGczAls34+5HJPyZysvxQ== - dependencies: - symbol-observable "1.2.0" - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= - -infer-owner@^1.0.3, infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -ini@^1.3.5: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -internal-ip@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" - integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== - dependencies: - default-gateway "^4.2.0" - ipaddr.js "^1.9.0" - -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" - -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= - -ip@^1.1.0, ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= - -ipaddr.js@1.9.1, ipaddr.js@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= - -is-absolute-url@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" - integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-arguments@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" - integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== - dependencies: - call-bind "^1.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-bigint@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" - integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8" - integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng== - dependencies: - call-bind "^1.0.2" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-callable@^1.1.4, is-callable@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" - integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-color-stop@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" - integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= - dependencies: - css-color-names "^0.0.4" - hex-color-regex "^1.1.0" - hsl-regex "^1.0.0" - hsla-regex "^1.0.0" - rgb-regex "^1.0.1" - rgba-regex "^1.0.0" - -is-core-module@^2.0.0, is-core-module@^2.2.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" - integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== - dependencies: - has "^1.0.3" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.4.tgz#550cfcc03afada05eea3dd30981c7b09551f73e5" - integrity sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A== - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= - -is-docker@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-in-browser@^1.0.2, is-in-browser@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" - integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU= - -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= - -is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== - -is-number-object@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" - integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-cwd@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-in-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" - integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== - dependencies: - is-path-inside "^2.1.0" - -is-path-inside@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" - integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== - dependencies: - path-is-inside "^1.0.2" - -is-plain-obj@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-potential-custom-element-name@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - -is-regex@^1.0.4, is-regex@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" - integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== - dependencies: - call-bind "^1.0.2" - has-symbols "^1.0.2" - -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= - -is-resolvable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== - -is-root@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" - integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== - -is-string@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" - integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typedarray@^1.0.0, is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= - -is-wsl@^2.1.1, is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -istanbul-lib-coverage@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" - integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== - -istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== - dependencies: - "@babel/core" "^7.7.5" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" - -istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" - integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" - integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jest-changed-files@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" - integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== - dependencies: - "@jest/types" "^26.6.2" - execa "^4.0.0" - throat "^5.0.0" - -jest-circus@26.6.0: - version "26.6.0" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-26.6.0.tgz#7d9647b2e7f921181869faae1f90a2629fd70705" - integrity sha512-L2/Y9szN6FJPWFK8kzWXwfp+FOR7xq0cUL4lIsdbIdwz3Vh6P1nrpcqOleSzr28zOtSHQNV9Z7Tl+KkuK7t5Ng== - dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^26.6.0" - "@jest/test-result" "^26.6.0" - "@jest/types" "^26.6.0" - "@types/babel__traverse" "^7.0.4" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - dedent "^0.7.0" - expect "^26.6.0" - is-generator-fn "^2.0.0" - jest-each "^26.6.0" - jest-matcher-utils "^26.6.0" - jest-message-util "^26.6.0" - jest-runner "^26.6.0" - jest-runtime "^26.6.0" - jest-snapshot "^26.6.0" - jest-util "^26.6.0" - pretty-format "^26.6.0" - stack-utils "^2.0.2" - throat "^5.0.0" - -jest-cli@^26.6.0: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" - integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== - dependencies: - "@jest/core" "^26.6.3" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - import-local "^3.0.2" - is-ci "^2.0.0" - jest-config "^26.6.3" - jest-util "^26.6.2" - jest-validate "^26.6.2" - prompts "^2.0.1" - yargs "^15.4.1" - -jest-config@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" - integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== - dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^26.6.3" - "@jest/types" "^26.6.2" - babel-jest "^26.6.3" - chalk "^4.0.0" - deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.4" - jest-environment-jsdom "^26.6.2" - jest-environment-node "^26.6.2" - jest-get-type "^26.3.0" - jest-jasmine2 "^26.6.3" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - micromatch "^4.0.2" - pretty-format "^26.6.2" - -jest-diff@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" - integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== - dependencies: - chalk "^4.0.0" - diff-sequences "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - -jest-docblock@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" - integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== - dependencies: - detect-newline "^3.0.0" - -jest-each@^26.6.0, jest-each@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" - integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== - dependencies: - "@jest/types" "^26.6.2" - chalk "^4.0.0" - jest-get-type "^26.3.0" - jest-util "^26.6.2" - pretty-format "^26.6.2" - -jest-environment-jsdom@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" - integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" - jsdom "^16.4.0" - -jest-environment-node@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" - integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" - -jest-get-type@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" - integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== - -jest-haste-map@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" - integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== - dependencies: - "@jest/types" "^26.6.2" - "@types/graceful-fs" "^4.1.2" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-regex-util "^26.0.0" - jest-serializer "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.1.2" - -jest-jasmine2@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" - integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== - dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^26.6.2" - is-generator-fn "^2.0.0" - jest-each "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - pretty-format "^26.6.2" - throat "^5.0.0" - -jest-leak-detector@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" - integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== - dependencies: - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - -jest-matcher-utils@^26.6.0, jest-matcher-utils@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" - integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== - dependencies: - chalk "^4.0.0" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - -jest-message-util@^26.6.0, jest-message-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" - integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== - dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/types" "^26.6.2" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.4" - micromatch "^4.0.2" - pretty-format "^26.6.2" - slash "^3.0.0" - stack-utils "^2.0.2" - -jest-mock@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" - integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== - dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - -jest-pnp-resolver@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" - integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== - -jest-regex-util@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" - integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== - -jest-resolve-dependencies@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" - integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== - dependencies: - "@jest/types" "^26.6.2" - jest-regex-util "^26.0.0" - jest-snapshot "^26.6.2" - -jest-resolve@26.6.0: - version "26.6.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.0.tgz#070fe7159af87b03e50f52ea5e17ee95bbee40e1" - integrity sha512-tRAz2bwraHufNp+CCmAD8ciyCpXCs1NQxB5EJAmtCFy6BN81loFEGWKzYu26Y62lAJJe4X4jg36Kf+NsQyiStQ== - dependencies: - "@jest/types" "^26.6.0" - chalk "^4.0.0" - graceful-fs "^4.2.4" - jest-pnp-resolver "^1.2.2" - jest-util "^26.6.0" - read-pkg-up "^7.0.1" - resolve "^1.17.0" - slash "^3.0.0" - -jest-resolve@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" - integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== - dependencies: - "@jest/types" "^26.6.2" - chalk "^4.0.0" - graceful-fs "^4.2.4" - jest-pnp-resolver "^1.2.2" - jest-util "^26.6.2" - read-pkg-up "^7.0.1" - resolve "^1.18.1" - slash "^3.0.0" - -jest-runner@^26.6.0, jest-runner@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" - integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== - dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.7.1" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-docblock "^26.0.0" - jest-haste-map "^26.6.2" - jest-leak-detector "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" - jest-runtime "^26.6.3" - jest-util "^26.6.2" - jest-worker "^26.6.2" - source-map-support "^0.5.6" - throat "^5.0.0" - -jest-runtime@^26.6.0, jest-runtime@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" - integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== - dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/globals" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - cjs-module-lexer "^0.6.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - slash "^3.0.0" - strip-bom "^4.0.0" - yargs "^15.4.1" - -jest-serializer@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" - integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.4" - -jest-snapshot@^26.6.0, jest-snapshot@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" - integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== - dependencies: - "@babel/types" "^7.0.0" - "@jest/types" "^26.6.2" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.0.0" - chalk "^4.0.0" - expect "^26.6.2" - graceful-fs "^4.2.4" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - jest-haste-map "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" - natural-compare "^1.4.0" - pretty-format "^26.6.2" - semver "^7.3.2" - -jest-util@^26.6.0, jest-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" - integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== - dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - micromatch "^4.0.2" - -jest-validate@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" - integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== - dependencies: - "@jest/types" "^26.6.2" - camelcase "^6.0.0" - chalk "^4.0.0" - jest-get-type "^26.3.0" - leven "^3.1.0" - pretty-format "^26.6.2" - -jest-watch-typeahead@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-0.6.1.tgz#45221b86bb6710b7e97baaa1640ae24a07785e63" - integrity sha512-ITVnHhj3Jd/QkqQcTqZfRgjfyRhDFM/auzgVo2RKvSwi18YMvh0WvXDJFoFED6c7jd/5jxtu4kSOb9PTu2cPVg== - dependencies: - ansi-escapes "^4.3.1" - chalk "^4.0.0" - jest-regex-util "^26.0.0" - jest-watcher "^26.3.0" - slash "^3.0.0" - string-length "^4.0.1" - strip-ansi "^6.0.0" - -jest-watcher@^26.3.0, jest-watcher@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" - integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== - dependencies: - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - jest-util "^26.6.2" - string-length "^4.0.1" - -jest-worker@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" - integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== - dependencies: - merge-stream "^2.0.0" - supports-color "^6.1.0" - -jest-worker@^26.5.0, jest-worker@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - -jest@26.6.0: - version "26.6.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.0.tgz#546b25a1d8c888569dbbe93cae131748086a4a25" - integrity sha512-jxTmrvuecVISvKFFhOkjsWRZV7sFqdSUAd1ajOKY+/QE/aLBVstsJ/dX8GczLzwiT6ZEwwmZqtCUHLHHQVzcfA== - dependencies: - "@jest/core" "^26.6.0" - import-local "^3.0.2" - jest-cli "^26.6.0" - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jsdom@^16.4.0: - version "16.5.3" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.5.3.tgz#13a755b3950eb938b4482c407238ddf16f0d2136" - integrity sha512-Qj1H+PEvUsOtdPJ056ewXM4UJPCi4hhLA8wpiz9F2YvsRBhuFsXxtrIFAgGBDynQA9isAMGE91PfUYbdMPXuTA== - dependencies: - abab "^2.0.5" - acorn "^8.1.0" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.3.0" - data-urls "^2.0.0" - decimal.js "^10.2.1" - domexception "^2.0.1" - escodegen "^2.0.0" - html-encoding-sniffer "^2.0.1" - is-potential-custom-element-name "^1.0.0" - nwsapi "^2.2.0" - parse5 "6.0.1" - request "^2.88.2" - request-promise-native "^1.0.9" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.5.0" - ws "^7.4.4" - xml-name-validator "^3.0.0" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -json3@^3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" - integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== - -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== - dependencies: - minimist "^1.2.0" - -json5@^2.1.2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -jss-plugin-camel-case@^10.5.1: - version "10.6.0" - resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.6.0.tgz#93d2cd704bf0c4af70cc40fb52d74b8a2554b170" - integrity sha512-JdLpA3aI/npwj3nDMKk308pvnhoSzkW3PXlbgHAzfx0yHWnPPVUjPhXFtLJzgKZge8lsfkUxvYSQ3X2OYIFU6A== - dependencies: - "@babel/runtime" "^7.3.1" - hyphenate-style-name "^1.0.3" - jss "10.6.0" - -jss-plugin-default-unit@^10.5.1: - version "10.6.0" - resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.6.0.tgz#af47972486819b375f0f3a9e0213403a84b5ef3b" - integrity sha512-7y4cAScMHAxvslBK2JRK37ES9UT0YfTIXWgzUWD5euvR+JR3q+o8sQKzBw7GmkQRfZijrRJKNTiSt1PBsLI9/w== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.6.0" - -jss-plugin-global@^10.5.1: - version "10.6.0" - resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.6.0.tgz#3e8011f760f399cbadcca7f10a485b729c50e3ed" - integrity sha512-I3w7ji/UXPi3VuWrTCbHG9rVCgB4yoBQLehGDTmsnDfXQb3r1l3WIdcO8JFp9m0YMmyy2CU7UOV6oPI7/Tmu+w== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.6.0" - -jss-plugin-nested@^10.5.1: - version "10.6.0" - resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.6.0.tgz#5f83c5c337d3b38004834e8426957715a0251641" - integrity sha512-fOFQWgd98H89E6aJSNkEh2fAXquC9aZcAVjSw4q4RoQ9gU++emg18encR4AT4OOIFl4lQwt5nEyBBRn9V1Rk8g== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.6.0" - tiny-warning "^1.0.2" - -jss-plugin-props-sort@^10.5.1: - version "10.6.0" - resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.6.0.tgz#297879f35f9fe21196448579fee37bcde28ce6bc" - integrity sha512-oMCe7hgho2FllNc60d9VAfdtMrZPo9n1Iu6RNa+3p9n0Bkvnv/XX5San8fTPujrTBScPqv9mOE0nWVvIaohNuw== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.6.0" - -jss-plugin-rule-value-function@^10.5.1: - version "10.6.0" - resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.6.0.tgz#3c1a557236a139d0151e70a82c810ccce1c1c5ea" - integrity sha512-TKFqhRTDHN1QrPTMYRlIQUOC2FFQb271+AbnetURKlGvRl/eWLswcgHQajwuxI464uZk91sPiTtdGi7r7XaWfA== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.6.0" - tiny-warning "^1.0.2" - -jss-plugin-vendor-prefixer@^10.5.1: - version "10.6.0" - resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.6.0.tgz#e1fcd499352846890c38085b11dbd7aa1c4f2c78" - integrity sha512-doJ7MouBXT1lypLLctCwb4nJ6lDYqrTfVS3LtXgox42Xz0gXusXIIDboeh6UwnSmox90QpVnub7au8ybrb0krQ== - dependencies: - "@babel/runtime" "^7.3.1" - css-vendor "^2.0.8" - jss "10.6.0" - -jss@10.6.0, jss@^10.5.1: - version "10.6.0" - resolved "https://registry.yarnpkg.com/jss/-/jss-10.6.0.tgz#d92ff9d0f214f65ca1718591b68e107be4774149" - integrity sha512-n7SHdCozmxnzYGXBHe0NsO0eUf9TvsHVq2MXvi4JmTn3x5raynodDVE/9VQmBdWFyyj9HpHZ2B4xNZ7MMy7lkw== - dependencies: - "@babel/runtime" "^7.3.1" - csstype "^3.0.2" - indefinite-observable "^2.0.1" - is-in-browser "^1.1.3" - tiny-warning "^1.0.2" - -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz#41108d2cec408c3453c1bbe8a4aae9e1e2bd8f82" - integrity sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q== - dependencies: - array-includes "^3.1.2" - object.assign "^4.1.2" - -killable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" - integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -klona@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" - integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== - -language-subtag-registry@~0.3.2: - version "0.3.21" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a" - integrity sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg== - -language-tags@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" - integrity sha1-0yHbxNowuovzAk4ED6XBRmH5GTo= - dependencies: - language-subtag-registry "~0.3.2" - -last-call-webpack-plugin@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555" - integrity sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w== - dependencies: - lodash "^4.17.5" - webpack-sources "^1.1.0" - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= - -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - -loader-runner@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" - integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== - -loader-utils@1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" - integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== - dependencies: - big.js "^5.2.2" - emojis-list "^2.0.0" - json5 "^1.0.1" - -loader-utils@2.0.0, loader-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" - integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - -loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" - integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^1.0.1" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - -lodash.template@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" - integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.templatesettings "^4.0.0" - -lodash.templatesettings@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" - integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== - dependencies: - lodash._reinterpolate "^3.0.0" - -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= - -"lodash@>=3.5 <5", lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.5, lodash@^4.7.0: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -loglevel@^1.6.8: - version "1.7.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" - integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== - -loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -magic-string@^0.25.0, magic-string@^0.25.7: - version "0.25.7" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" - integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== - dependencies: - sourcemap-codec "^1.4.4" - -make-dir@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-dir@^3.0.0, make-dir@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= - dependencies: - tmpl "1.0.x" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -mdn-data@2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" - integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== - -mdn-data@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" - integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - -memoize-one@^5.1.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" - integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== - -memory-fs@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -memory-fs@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" - integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= - -microevent.ts@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" - integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== - -micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -micromatch@^4.0.2: - version "4.0.4" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== - dependencies: - braces "^3.0.1" - picomatch "^2.2.3" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@1.47.0, "mime-db@>= 1.43.0 < 2": - version "1.47.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" - integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== - -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.30" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" - integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== - dependencies: - mime-db "1.47.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mime@^2.4.4: - version "2.5.2" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" - integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mini-create-react-context@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz#072171561bfdc922da08a60c2197a497cc2d1d5e" - integrity sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ== - dependencies: - "@babel/runtime" "^7.12.1" - tiny-warning "^1.0.3" - -mini-css-extract-plugin@0.11.3: - version "0.11.3" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.11.3.tgz#15b0910a7f32e62ffde4a7430cfefbd700724ea6" - integrity sha512-n9BA8LonkOkW1/zn+IbLPQmovsL0wMb9yx75fMJQZf2X1Zoec9yTZtyMePcyu19wPkmFbzZZA6fLTotpFhQsOA== - dependencies: - loader-utils "^1.1.0" - normalize-url "1.9.1" - schema-utils "^1.0.0" - webpack-sources "^1.1.0" - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= - -minimatch@3.0.4, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.2: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0, minipass@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" - integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== - dependencies: - yallist "^4.0.0" - -minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multicast-dns-service-types@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" - integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= - -multicast-dns@^6.0.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" - integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== - dependencies: - dns-packet "^1.3.1" - thunky "^1.0.2" - -nan@^2.12.1: - version "2.14.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" - integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== - -nanoid@^3.1.23: - version "3.1.23" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" - integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -native-url@^0.2.6: - version "0.2.6" - resolved "https://registry.yarnpkg.com/native-url/-/native-url-0.2.6.tgz#ca1258f5ace169c716ff44eccbddb674e10399ae" - integrity sha512-k4bDC87WtgrdD362gZz6zoiXQrl40kYlBmpfmSjwRO1VU0V5ccwJTlxuE72F6m3V0vc1xOf6n3UCP9QyerRqmA== - dependencies: - querystring "^0.2.0" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== - -neo-async@^2.5.0, neo-async@^2.6.1, neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -next-tick@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" - integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - -node-forge@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" - integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= - -node-libs-browser@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" - integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^3.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.1" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.11.0" - vm-browserify "^1.0.1" - -node-modules-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" - integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= - -node-notifier@^8.0.0: - version "8.0.2" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" - integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== - dependencies: - growly "^1.3.0" - is-wsl "^2.2.0" - semver "^7.3.2" - shellwords "^0.1.1" - uuid "^8.3.0" - which "^2.0.2" - -node-releases@^1.1.61, node-releases@^1.1.71: - version "1.1.71" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" - integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== - -normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= - -normalize-url@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" - integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= - dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" - -normalize-url@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" - integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -npm-run-path@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -nth-check@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= - -nwsapi@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" - integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-inspect@^1.9.0: - version "1.10.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369" - integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw== - -object-is@^1.0.1: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -object-keys@^1.0.12, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.0, object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -object.entries@^1.1.0, object.entries@^1.1.2, object.entries@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.3.tgz#c601c7f168b62374541a07ddbd3e2d5e4f7711a6" - integrity sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - has "^1.0.3" - -object.fromentries@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8" - integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - has "^1.0.3" - -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" - integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -object.values@^1.1.0, object.values@^1.1.1, object.values@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.3.tgz#eaa8b1e17589f02f698db093f7c62ee1699742ee" - integrity sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - has "^1.0.3" - -obuf@^1.0.0, obuf@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -open@^7.0.2: - version "7.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" - integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== - dependencies: - is-docker "^2.0.0" - is-wsl "^2.1.1" - -opn@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" - integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== - dependencies: - is-wsl "^1.1.0" - -optimize-css-assets-webpack-plugin@5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.4.tgz#85883c6528aaa02e30bbad9908c92926bb52dc90" - integrity sha512-wqd6FdI2a5/FdoiCNNkEvLeA//lHHfG24Ln2Xm2qqdIk4aOlsR18jwpyOihqQ8849W3qu2DX8fOYxpvTMj+93A== - dependencies: - cssnano "^4.1.10" - last-call-webpack-plugin "^3.0.0" - -optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - -original@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" - integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== - dependencies: - url-parse "^1.4.3" - -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= - -p-each-series@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" - integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-map@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-retry@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" - integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== - dependencies: - retry "^0.12.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -pako@~1.0.5: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - -parallel-transform@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" - integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== - dependencies: - cyclist "^1.0.1" - inherits "^2.0.3" - readable-stream "^2.1.5" - -param-case@^3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" - integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-asn1@^5.0.0, parse-asn1@^5.1.5: - version "5.1.6" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== - dependencies: - asn1.js "^5.2.0" - browserify-aes "^1.0.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - dependencies: - error-ex "^1.2.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - -parseurl@~1.3.2, parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascal-case@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" - integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" - integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= - -path-to-regexp@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" - integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== - dependencies: - isarray "0.0.1" - -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= - dependencies: - pify "^2.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pbkdf2@^3.0.3: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d" - integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg== - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -pirates@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" - integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== - dependencies: - node-modules-regexp "^1.0.0" - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - dependencies: - find-up "^2.1.0" - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - -pkg-dir@^4.1.0, pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -pkg-up@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" - integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== - dependencies: - find-up "^3.0.0" - -pnp-webpack-plugin@1.6.4: - version "1.6.4" - resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149" - integrity sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg== - dependencies: - ts-pnp "^1.1.6" - -popper.js@1.16.1-lts: - version "1.16.1-lts" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1-lts.tgz#cf6847b807da3799d80ee3d6d2f90df8a3f50b05" - integrity sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA== - -portfinder@^1.0.26: - version "1.0.28" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" - integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== - dependencies: - async "^2.6.2" - debug "^3.1.1" - mkdirp "^0.5.5" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -postcss-attribute-case-insensitive@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz#d93e46b504589e94ac7277b0463226c68041a880" - integrity sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA== - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^6.0.2" - -postcss-browser-comments@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-browser-comments/-/postcss-browser-comments-3.0.0.tgz#1248d2d935fb72053c8e1f61a84a57292d9f65e9" - integrity sha512-qfVjLfq7HFd2e0HW4s1dvU8X080OZdG46fFbIBFjW7US7YPDcWfRvdElvwMJr2LI6hMmD+7LnH2HcmXTs+uOig== - dependencies: - postcss "^7" - -postcss-calc@^7.0.1: - version "7.0.5" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" - integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg== - dependencies: - postcss "^7.0.27" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.0.2" - -postcss-color-functional-notation@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz#5efd37a88fbabeb00a2966d1e53d98ced93f74e0" - integrity sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g== - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-color-gray@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz#532a31eb909f8da898ceffe296fdc1f864be8547" - integrity sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw== - dependencies: - "@csstools/convert-colors" "^1.4.0" - postcss "^7.0.5" - postcss-values-parser "^2.0.0" - -postcss-color-hex-alpha@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz#a8d9ca4c39d497c9661e374b9c51899ef0f87388" - integrity sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw== - dependencies: - postcss "^7.0.14" - postcss-values-parser "^2.0.1" - -postcss-color-mod-function@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz#816ba145ac11cc3cb6baa905a75a49f903e4d31d" - integrity sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ== - dependencies: - "@csstools/convert-colors" "^1.4.0" - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-color-rebeccapurple@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz#c7a89be872bb74e45b1e3022bfe5748823e6de77" - integrity sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g== - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-colormin@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" - integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== - dependencies: - browserslist "^4.0.0" - color "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-convert-values@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" - integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-custom-media@^7.0.8: - version "7.0.8" - resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz#fffd13ffeffad73621be5f387076a28b00294e0c" - integrity sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg== - dependencies: - postcss "^7.0.14" - -postcss-custom-properties@^8.0.11: - version "8.0.11" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz#2d61772d6e92f22f5e0d52602df8fae46fa30d97" - integrity sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA== - dependencies: - postcss "^7.0.17" - postcss-values-parser "^2.0.1" - -postcss-custom-selectors@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz#64858c6eb2ecff2fb41d0b28c9dd7b3db4de7fba" - integrity sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w== - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0-rc.3" - -postcss-dir-pseudo-class@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz#6e3a4177d0edb3abcc85fdb6fbb1c26dabaeaba2" - integrity sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw== - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0-rc.3" - -postcss-discard-comments@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" - integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== - dependencies: - postcss "^7.0.0" - -postcss-discard-duplicates@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" - integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== - dependencies: - postcss "^7.0.0" - -postcss-discard-empty@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" - integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== - dependencies: - postcss "^7.0.0" - -postcss-discard-overridden@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" - integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== - dependencies: - postcss "^7.0.0" - -postcss-double-position-gradients@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz#fc927d52fddc896cb3a2812ebc5df147e110522e" - integrity sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA== - dependencies: - postcss "^7.0.5" - postcss-values-parser "^2.0.0" - -postcss-env-function@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-2.0.2.tgz#0f3e3d3c57f094a92c2baf4b6241f0b0da5365d7" - integrity sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw== - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-flexbugs-fixes@4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz#9218a65249f30897deab1033aced8578562a6690" - integrity sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ== - dependencies: - postcss "^7.0.26" - -postcss-focus-visible@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz#477d107113ade6024b14128317ade2bd1e17046e" - integrity sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g== - dependencies: - postcss "^7.0.2" - -postcss-focus-within@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz#763b8788596cee9b874c999201cdde80659ef680" - integrity sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w== - dependencies: - postcss "^7.0.2" - -postcss-font-variant@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz#42d4c0ab30894f60f98b17561eb5c0321f502641" - integrity sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA== - dependencies: - postcss "^7.0.2" - -postcss-gap-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz#431c192ab3ed96a3c3d09f2ff615960f902c1715" - integrity sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg== - dependencies: - postcss "^7.0.2" - -postcss-image-set-function@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz#28920a2f29945bed4c3198d7df6496d410d3f288" - integrity sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw== - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-initial@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-3.0.4.tgz#9d32069a10531fe2ecafa0b6ac750ee0bc7efc53" - integrity sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg== - dependencies: - postcss "^7.0.2" - -postcss-lab-function@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz#bb51a6856cd12289ab4ae20db1e3821ef13d7d2e" - integrity sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg== - dependencies: - "@csstools/convert-colors" "^1.4.0" - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-load-config@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" - integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== - dependencies: - cosmiconfig "^5.0.0" - import-cwd "^2.0.0" - -postcss-loader@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" - integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== - dependencies: - loader-utils "^1.1.0" - postcss "^7.0.0" - postcss-load-config "^2.0.0" - schema-utils "^1.0.0" - -postcss-logical@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-3.0.0.tgz#2495d0f8b82e9f262725f75f9401b34e7b45d5b5" - integrity sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA== - dependencies: - postcss "^7.0.2" - -postcss-media-minmax@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz#b75bb6cbc217c8ac49433e12f22048814a4f5ed5" - integrity sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw== - dependencies: - postcss "^7.0.2" - -postcss-merge-longhand@^4.0.11: - version "4.0.11" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" - integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== - dependencies: - css-color-names "0.0.4" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - stylehacks "^4.0.0" - -postcss-merge-rules@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" - integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - cssnano-util-same-parent "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - vendors "^1.0.0" - -postcss-minify-font-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" - integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-minify-gradients@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" - integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== - dependencies: - cssnano-util-get-arguments "^4.0.0" - is-color-stop "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-minify-params@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" - integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== - dependencies: - alphanum-sort "^1.0.0" - browserslist "^4.0.0" - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - uniqs "^2.0.0" - -postcss-minify-selectors@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" - integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== - dependencies: - alphanum-sort "^1.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - -postcss-modules-extract-imports@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" - integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== - dependencies: - postcss "^7.0.5" - -postcss-modules-local-by-default@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" - integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== - dependencies: - icss-utils "^4.1.1" - postcss "^7.0.32" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" - -postcss-modules-scope@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" - integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== - dependencies: - postcss "^7.0.6" - postcss-selector-parser "^6.0.0" - -postcss-modules-values@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" - integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== - dependencies: - icss-utils "^4.0.0" - postcss "^7.0.6" - -postcss-nesting@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.1.tgz#b50ad7b7f0173e5b5e3880c3501344703e04c052" - integrity sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg== - dependencies: - postcss "^7.0.2" - -postcss-normalize-charset@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" - integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== - dependencies: - postcss "^7.0.0" - -postcss-normalize-display-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" - integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-positions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" - integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== - dependencies: - cssnano-util-get-arguments "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-repeat-style@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" - integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== - dependencies: - cssnano-util-get-arguments "^4.0.0" - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-string@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" - integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== - dependencies: - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-timing-functions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" - integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-unicode@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" - integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-url@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" - integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^3.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-whitespace@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" - integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize@8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize/-/postcss-normalize-8.0.1.tgz#90e80a7763d7fdf2da6f2f0f82be832ce4f66776" - integrity sha512-rt9JMS/m9FHIRroDDBGSMsyW1c0fkvOJPy62ggxSHUldJO7B195TqFMqIf+lY5ezpDcYOV4j86aUp3/XbxzCCQ== - dependencies: - "@csstools/normalize.css" "^10.1.0" - browserslist "^4.6.2" - postcss "^7.0.17" - postcss-browser-comments "^3.0.0" - sanitize.css "^10.0.0" - -postcss-ordered-values@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" - integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== - dependencies: - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-overflow-shorthand@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz#31ecf350e9c6f6ddc250a78f0c3e111f32dd4c30" - integrity sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g== - dependencies: - postcss "^7.0.2" - -postcss-page-break@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-2.0.0.tgz#add52d0e0a528cabe6afee8b46e2abb277df46bf" - integrity sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ== - dependencies: - postcss "^7.0.2" - -postcss-place@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-4.0.1.tgz#e9f39d33d2dc584e46ee1db45adb77ca9d1dcc62" - integrity sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg== - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-preset-env@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz#c34ddacf8f902383b35ad1e030f178f4cdf118a5" - integrity sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg== - dependencies: - autoprefixer "^9.6.1" - browserslist "^4.6.4" - caniuse-lite "^1.0.30000981" - css-blank-pseudo "^0.1.4" - css-has-pseudo "^0.10.0" - css-prefers-color-scheme "^3.1.1" - cssdb "^4.4.0" - postcss "^7.0.17" - postcss-attribute-case-insensitive "^4.0.1" - postcss-color-functional-notation "^2.0.1" - postcss-color-gray "^5.0.0" - postcss-color-hex-alpha "^5.0.3" - postcss-color-mod-function "^3.0.3" - postcss-color-rebeccapurple "^4.0.1" - postcss-custom-media "^7.0.8" - postcss-custom-properties "^8.0.11" - postcss-custom-selectors "^5.1.2" - postcss-dir-pseudo-class "^5.0.0" - postcss-double-position-gradients "^1.0.0" - postcss-env-function "^2.0.2" - postcss-focus-visible "^4.0.0" - postcss-focus-within "^3.0.0" - postcss-font-variant "^4.0.0" - postcss-gap-properties "^2.0.0" - postcss-image-set-function "^3.0.1" - postcss-initial "^3.0.0" - postcss-lab-function "^2.0.1" - postcss-logical "^3.0.0" - postcss-media-minmax "^4.0.0" - postcss-nesting "^7.0.0" - postcss-overflow-shorthand "^2.0.0" - postcss-page-break "^2.0.0" - postcss-place "^4.0.1" - postcss-pseudo-class-any-link "^6.0.0" - postcss-replace-overflow-wrap "^3.0.0" - postcss-selector-matches "^4.0.0" - postcss-selector-not "^4.0.0" - -postcss-pseudo-class-any-link@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz#2ed3eed393b3702879dec4a87032b210daeb04d1" - integrity sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew== - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0-rc.3" - -postcss-reduce-initial@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" - integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - -postcss-reduce-transforms@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" - integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== - dependencies: - cssnano-util-get-match "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-replace-overflow-wrap@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz#61b360ffdaedca84c7c918d2b0f0d0ea559ab01c" - integrity sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw== - dependencies: - postcss "^7.0.2" - -postcss-safe-parser@5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-5.0.2.tgz#459dd27df6bc2ba64608824ba39e45dacf5e852d" - integrity sha512-jDUfCPJbKOABhwpUKcqCVbbXiloe/QXMcbJ6Iipf3sDIihEzTqRCeMBfRaOHxhBuTYqtASrI1KJWxzztZU4qUQ== - dependencies: - postcss "^8.1.0" - -postcss-selector-matches@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz#71c8248f917ba2cc93037c9637ee09c64436fcff" - integrity sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww== - dependencies: - balanced-match "^1.0.0" - postcss "^7.0.2" - -postcss-selector-not@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz#263016eef1cf219e0ade9a913780fc1f48204cbf" - integrity sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ== - dependencies: - balanced-match "^1.0.0" - postcss "^7.0.2" - -postcss-selector-parser@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" - integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== - dependencies: - dot-prop "^5.2.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" - integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== - dependencies: - cssesc "^2.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: - version "6.0.6" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea" - integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-svgo@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz#343a2cdbac9505d416243d496f724f38894c941e" - integrity sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - svgo "^1.0.0" - -postcss-unique-selectors@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" - integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== - dependencies: - alphanum-sort "^1.0.0" - postcss "^7.0.0" - uniqs "^2.0.0" - -postcss-value-parser@^3.0.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" - integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== - -postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" - integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== - -postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz#da8b472d901da1e205b47bdc98637b9e9e550e5f" - integrity sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg== - dependencies: - flatten "^1.0.2" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss@7.0.21: - version "7.0.21" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.21.tgz#06bb07824c19c2021c5d056d5b10c35b989f7e17" - integrity sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ== - dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" - -postcss@^7, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: - version "7.0.35" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" - integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== - dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" - -postcss@^8.1.0: - version "8.2.15" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.15.tgz#9e66ccf07292817d226fc315cbbf9bc148fbca65" - integrity sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q== - dependencies: - colorette "^1.2.2" - nanoid "^3.1.23" - source-map "^0.6.1" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -prepend-http@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= - -pretty-bytes@^5.3.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" - integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== - -pretty-error@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" - integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== - dependencies: - lodash "^4.17.20" - renderkid "^2.0.4" - -pretty-format@^26.6.0, pretty-format@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" - integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== - dependencies: - "@jest/types" "^26.6.2" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^17.0.1" - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= - -promise@^8.0.3, promise@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e" - integrity sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q== - dependencies: - asap "~2.0.6" - -prompts@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" - integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -prompts@^2.0.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.1.tgz#befd3b1195ba052f9fd2fde8a486c4e82ee77f61" - integrity sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -prop-types@^15.6.2, prop-types@^15.7.2: - version "15.7.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" - integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.8.1" - -proxy-addr@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" - integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== - dependencies: - forwarded "~0.1.2" - ipaddr.js "1.9.1" - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= - -psl@^1.1.28, psl@^1.1.33: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= - -punycode@^1.2.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= - -qs@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== - -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - -query-string@^4.1.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= - dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - -querystring-es3@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= - -querystring@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd" - integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg== - -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -raf-schd@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/raf-schd/-/raf-schd-4.0.3.tgz#5d6c34ef46f8b2a0e880a8fcdb743efc5bfdbc1a" - integrity sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ== - -raf@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" - integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== - dependencies: - performance-now "^2.1.0" - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== - dependencies: - bytes "3.1.0" - http-errors "1.7.2" - iconv-lite "0.4.24" - unpipe "1.0.0" - -react-app-polyfill@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/react-app-polyfill/-/react-app-polyfill-1.0.6.tgz#890f8d7f2842ce6073f030b117de9130a5f385f0" - integrity sha512-OfBnObtnGgLGfweORmdZbyEz+3dgVePQBb3zipiaDsMHV1NpWm0rDFYIVXFV/AK+x4VIIfWHhrdMIeoTLyRr2g== - dependencies: - core-js "^3.5.0" - object-assign "^4.1.1" - promise "^8.0.3" - raf "^3.4.1" - regenerator-runtime "^0.13.3" - whatwg-fetch "^3.0.0" - -react-app-polyfill@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/react-app-polyfill/-/react-app-polyfill-2.0.0.tgz#a0bea50f078b8a082970a9d853dc34b6dcc6a3cf" - integrity sha512-0sF4ny9v/B7s6aoehwze9vJNWcmCemAUYBVasscVr92+UYiEqDXOxfKjXN685mDaMRNF3WdhHQs76oTODMocFA== - dependencies: - core-js "^3.6.5" - object-assign "^4.1.1" - promise "^8.1.0" - raf "^3.4.1" - regenerator-runtime "^0.13.7" - whatwg-fetch "^3.4.1" - -react-beautiful-dnd@^13.0.0: - version "13.1.0" - resolved "https://registry.yarnpkg.com/react-beautiful-dnd/-/react-beautiful-dnd-13.1.0.tgz#ec97c81093593526454b0de69852ae433783844d" - integrity sha512-aGvblPZTJowOWUNiwd6tNfEpgkX5OxmpqxHKNW/4VmvZTNTbeiq7bA3bn5T+QSF2uibXB0D1DmJsb1aC/+3cUA== - dependencies: - "@babel/runtime" "^7.9.2" - css-box-model "^1.2.0" - memoize-one "^5.1.1" - raf-schd "^4.0.2" - react-redux "^7.2.0" - redux "^4.0.4" - use-memo-one "^1.1.1" - -react-dev-utils@^11.0.3: - version "11.0.4" - resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-11.0.4.tgz#a7ccb60257a1ca2e0efe7a83e38e6700d17aa37a" - integrity sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A== - dependencies: - "@babel/code-frame" "7.10.4" - address "1.1.2" - browserslist "4.14.2" - chalk "2.4.2" - cross-spawn "7.0.3" - detect-port-alt "1.1.6" - escape-string-regexp "2.0.0" - filesize "6.1.0" - find-up "4.1.0" - fork-ts-checker-webpack-plugin "4.1.6" - global-modules "2.0.0" - globby "11.0.1" - gzip-size "5.1.1" - immer "8.0.1" - is-root "2.1.0" - loader-utils "2.0.0" - open "^7.0.2" - pkg-up "3.1.0" - prompts "2.4.0" - react-error-overlay "^6.0.9" - recursive-readdir "2.2.2" - shell-quote "1.7.2" - strip-ansi "6.0.0" - text-table "0.2.0" - -react-dom@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" - integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" - -react-error-overlay@^6.0.9: - version "6.0.9" - resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" - integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== - -react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -"react-is@^16.8.0 || ^17.0.0", react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== - -react-lazyload@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/react-lazyload/-/react-lazyload-3.2.0.tgz#497bd06a6dbd7015e3376e1137a67dc47d2dd021" - integrity sha512-zJlrG8QyVZz4+xkYZH5v1w3YaP5wEFaYSUWC4CT9UXfK75IfRAIEdnyIUF+dXr3kX2MOtL1lUaZmaQZqrETwgw== - -react-redux@^7.2.0: - version "7.2.4" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.4.tgz#1ebb474032b72d806de2e0519cd07761e222e225" - integrity sha512-hOQ5eOSkEJEXdpIKbnRyl04LhaWabkDPV+Ix97wqQX3T3d2NQ8DUblNXXtNMavc7DpswyQM6xfaN4HQDKNY2JA== - dependencies: - "@babel/runtime" "^7.12.1" - "@types/react-redux" "^7.1.16" - hoist-non-react-statics "^3.3.2" - loose-envify "^1.4.0" - prop-types "^15.7.2" - react-is "^16.13.1" - -react-refresh@^0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f" - integrity sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg== - -react-router-dom@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.2.0.tgz#9e65a4d0c45e13289e66c7b17c7e175d0ea15662" - integrity sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA== - dependencies: - "@babel/runtime" "^7.1.2" - history "^4.9.0" - loose-envify "^1.3.1" - prop-types "^15.6.2" - react-router "5.2.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - -react-router@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.2.0.tgz#424e75641ca8747fbf76e5ecca69781aa37ea293" - integrity sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw== - dependencies: - "@babel/runtime" "^7.1.2" - history "^4.9.0" - hoist-non-react-statics "^3.1.0" - loose-envify "^1.3.1" - mini-create-react-context "^0.4.0" - path-to-regexp "^1.7.0" - prop-types "^15.6.2" - react-is "^16.6.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - -react-scripts@4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-4.0.3.tgz#b1cafed7c3fa603e7628ba0f187787964cb5d345" - integrity sha512-S5eO4vjUzUisvkIPB7jVsKtuH2HhWcASREYWHAQ1FP5HyCv3xgn+wpILAEWkmy+A+tTNbSZClhxjT3qz6g4L1A== - dependencies: - "@babel/core" "7.12.3" - "@pmmmwh/react-refresh-webpack-plugin" "0.4.3" - "@svgr/webpack" "5.5.0" - "@typescript-eslint/eslint-plugin" "^4.5.0" - "@typescript-eslint/parser" "^4.5.0" - babel-eslint "^10.1.0" - babel-jest "^26.6.0" - babel-loader "8.1.0" - babel-plugin-named-asset-import "^0.3.7" - babel-preset-react-app "^10.0.0" - bfj "^7.0.2" - camelcase "^6.1.0" - case-sensitive-paths-webpack-plugin "2.3.0" - css-loader "4.3.0" - dotenv "8.2.0" - dotenv-expand "5.1.0" - eslint "^7.11.0" - eslint-config-react-app "^6.0.0" - eslint-plugin-flowtype "^5.2.0" - eslint-plugin-import "^2.22.1" - eslint-plugin-jest "^24.1.0" - eslint-plugin-jsx-a11y "^6.3.1" - eslint-plugin-react "^7.21.5" - eslint-plugin-react-hooks "^4.2.0" - eslint-plugin-testing-library "^3.9.2" - eslint-webpack-plugin "^2.5.2" - file-loader "6.1.1" - fs-extra "^9.0.1" - html-webpack-plugin "4.5.0" - identity-obj-proxy "3.0.0" - jest "26.6.0" - jest-circus "26.6.0" - jest-resolve "26.6.0" - jest-watch-typeahead "0.6.1" - mini-css-extract-plugin "0.11.3" - optimize-css-assets-webpack-plugin "5.0.4" - pnp-webpack-plugin "1.6.4" - postcss-flexbugs-fixes "4.2.1" - postcss-loader "3.0.0" - postcss-normalize "8.0.1" - postcss-preset-env "6.7.0" - postcss-safe-parser "5.0.2" - prompts "2.4.0" - react-app-polyfill "^2.0.0" - react-dev-utils "^11.0.3" - react-refresh "^0.8.3" - resolve "1.18.1" - resolve-url-loader "^3.1.2" - sass-loader "^10.0.5" - semver "7.3.2" - style-loader "1.3.0" - terser-webpack-plugin "4.2.3" - ts-pnp "1.2.0" - url-loader "4.1.1" - webpack "4.44.2" - webpack-dev-server "3.11.1" - webpack-manifest-plugin "2.2.0" - workbox-webpack-plugin "5.1.4" - optionalDependencies: - fsevents "^2.1.3" - -react-transition-group@^4.4.0: - version "4.4.1" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.1.tgz#63868f9325a38ea5ee9535d828327f85773345c9" - integrity sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw== - dependencies: - "@babel/runtime" "^7.5.5" - dom-helpers "^5.0.1" - loose-envify "^1.4.0" - prop-types "^15.6.2" - -react-virtuoso@^1.8.6: - version "1.8.6" - resolved "https://registry.yarnpkg.com/react-virtuoso/-/react-virtuoso-1.8.6.tgz#dc7d79ee9e309c13700296ff65b04f6ebecdcbaa" - integrity sha512-WFSI4YzdyAFrr3CuZnQ8cmubGMJjgmgyuhx/OpWLls1uK9O43s+6DMr9oBXHAgvCDjS3Nd3vkIJAhsJBJzS1nQ== - dependencies: - "@virtuoso.dev/react-urx" "^0.2.5" - "@virtuoso.dev/urx" "^0.2.5" - react-app-polyfill "^1.0.6" - resize-observer-polyfill "^1.5.1" - -react@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - 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" - -readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -readdirp@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" - integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== - dependencies: - picomatch "^2.2.1" - -recursive-readdir@2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" - integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== - dependencies: - minimatch "3.0.4" - -redux@^4.0.0, redux@^4.0.4: - version "4.1.0" - resolved "https://registry.yarnpkg.com/redux/-/redux-4.1.0.tgz#eb049679f2f523c379f1aff345c8612f294c88d4" - integrity sha512-uI2dQN43zqLWCt6B/BMGRMY6db7TTY4qeHHfGeKb3EOhmOKjU3KdWvNLJyqaHRksv/ErdNH7cFZWg9jXtewy4g== - dependencies: - "@babel/runtime" "^7.9.2" - -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" - integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== - dependencies: - regenerate "^1.4.0" - -regenerate@^1.4.0: - version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== - -regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7: - version "0.13.7" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" - integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== - -regenerator-transform@^0.14.2: - version "0.14.5" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" - integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== - dependencies: - "@babel/runtime" "^7.8.4" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regex-parser@^2.2.11: - version "2.2.11" - resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" - integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== - -regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" - integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -regexpp@^3.0.0, regexpp@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" - integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== - -regexpu-core@^4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" - integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.2.0" - regjsgen "^0.5.1" - regjsparser "^0.6.4" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.2.0" - -regjsgen@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== - -regjsparser@^0.6.4: - version "0.6.9" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" - integrity sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ== - dependencies: - jsesc "~0.5.0" - -relateurl@^0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -renderkid@^2.0.4: - version "2.0.5" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.5.tgz#483b1ac59c6601ab30a7a596a5965cabccfdd0a5" - integrity sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ== - dependencies: - css-select "^2.0.2" - dom-converter "^0.2" - htmlparser2 "^3.10.1" - lodash "^4.17.20" - strip-ansi "^3.0.0" - -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -request-promise-core@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" - integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== - dependencies: - lodash "^4.17.19" - -request-promise-native@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" - integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== - dependencies: - request-promise-core "1.1.4" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@^2.88.2: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - 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" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - -resize-observer-polyfill@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" - integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= - dependencies: - resolve-from "^3.0.0" - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve-pathname@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" - integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== - -resolve-url-loader@^3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-3.1.3.tgz#49ec68340f67d8d2ab6b401948d5def3ab2d0367" - integrity sha512-WbDSNFiKPPLem1ln+EVTE+bFUBdTTytfQZWbmghroaFNFaAVmGq0Saqw6F/306CwgPXsGwXVxbODE+3xAo/YbA== - dependencies: - adjust-sourcemap-loader "3.0.0" - camelcase "5.3.1" - compose-function "3.0.3" - convert-source-map "1.7.0" - es6-iterator "2.0.3" - loader-utils "1.2.3" - postcss "7.0.21" - rework "1.0.1" - rework-visit "1.0.0" - source-map "0.6.1" - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@1.18.1: - version "1.18.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.18.1.tgz#018fcb2c5b207d2a6424aee361c5a266da8f4130" - integrity sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA== - dependencies: - is-core-module "^2.0.0" - path-parse "^1.0.6" - -resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.3.2, resolve@^1.8.1: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -resolve@^2.0.0-next.3: - version "2.0.0-next.3" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" - integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rework-visit@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rework-visit/-/rework-visit-1.0.0.tgz#9945b2803f219e2f7aca00adb8bc9f640f842c9a" - integrity sha1-mUWygD8hni96ygCtuLyfZA+ELJo= - -rework@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rework/-/rework-1.0.1.tgz#30806a841342b54510aa4110850cd48534144aa7" - integrity sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc= - dependencies: - convert-source-map "^0.3.3" - css "^2.0.0" - -rgb-regex@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" - integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= - -rgba-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" - integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= - -rimraf@^2.5.4, rimraf@^2.6.3: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -rollup-plugin-babel@^4.3.3: - version "4.4.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz#d15bd259466a9d1accbdb2fe2fff17c52d030acb" - integrity sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - rollup-pluginutils "^2.8.1" - -rollup-plugin-terser@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz#8c650062c22a8426c64268548957463bf981b413" - integrity sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w== - dependencies: - "@babel/code-frame" "^7.5.5" - jest-worker "^24.9.0" - rollup-pluginutils "^2.8.2" - serialize-javascript "^4.0.0" - terser "^4.6.2" - -rollup-pluginutils@^2.8.1, rollup-pluginutils@^2.8.2: - version "2.8.2" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" - integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== - dependencies: - estree-walker "^0.6.1" - -rollup@^1.31.1: - version "1.32.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.32.1.tgz#4480e52d9d9e2ae4b46ba0d9ddeaf3163940f9c4" - integrity sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A== - dependencies: - "@types/estree" "*" - "@types/node" "*" - acorn "^7.1.0" - -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= - dependencies: - aproba "^1.1.1" - -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - -sanitize.css@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/sanitize.css/-/sanitize.css-10.0.0.tgz#b5cb2547e96d8629a60947544665243b1dc3657a" - integrity sha512-vTxrZz4dX5W86M6oVWVdOVe72ZiPs41Oi7Z6Km4W5Turyz28mrXSJhhEBZoRtzJWIv3833WKVwLSDWWkEfupMg== - -sass-loader@^10.0.5: - version "10.2.0" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.2.0.tgz#3d64c1590f911013b3fa48a0b22a83d5e1494716" - integrity sha512-kUceLzC1gIHz0zNJPpqRsJyisWatGYNFRmv2CKZK2/ngMJgLqxTbXwe/hJ85luyvZkgqU3VlJ33UVF2T/0g6mw== - dependencies: - klona "^2.0.4" - loader-utils "^2.0.0" - neo-async "^2.6.2" - schema-utils "^3.0.0" - semver "^7.3.2" - -sax@~1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - -scheduler@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -schema-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" - integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== - dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" - -schema-utils@^2.6.5, schema-utils@^2.7.0, schema-utils@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== - dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" - -schema-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" - integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== - dependencies: - "@types/json-schema" "^7.0.6" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= - -selfsigned@^1.10.8: - version "1.10.11" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.11.tgz#24929cd906fe0f44b6d01fb23999a739537acbe9" - integrity sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA== - dependencies: - node-forge "^0.10.0" - -"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - -semver@7.3.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== - -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.2.1, semver@^7.3.2: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.7.2" - mime "1.6.0" - ms "2.1.1" - on-finished "~2.3.0" - range-parser "~1.2.1" - statuses "~1.5.0" - -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== - dependencies: - randombytes "^2.1.0" - -serialize-javascript@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" - integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== - dependencies: - randombytes "^2.1.0" - -serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - -serve-static@1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.17.1" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" - integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== - -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= - dependencies: - is-arrayish "^0.3.1" - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -sockjs-client@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.5.1.tgz#256908f6d5adfb94dabbdbd02c66362cca0f9ea6" - integrity sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ== - dependencies: - debug "^3.2.6" - eventsource "^1.0.7" - faye-websocket "^0.11.3" - inherits "^2.0.4" - json3 "^3.3.3" - url-parse "^1.5.1" - -sockjs@^0.3.21: - version "0.3.21" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.21.tgz#b34ffb98e796930b60a0cfa11904d6a339a7d417" - integrity sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw== - dependencies: - faye-websocket "^0.11.3" - uuid "^3.4.0" - websocket-driver "^0.7.4" - -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= - dependencies: - is-plain-obj "^1.0.0" - -source-list-map@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - -source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.19: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - -source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.5.0, source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.7.3, source-map@~0.7.2: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - -sourcemap-codec@^1.4.4: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.7" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" - integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== - -spdy-transport@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" - integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== - dependencies: - debug "^4.1.0" - detect-node "^2.0.4" - hpack.js "^2.1.6" - obuf "^1.1.2" - readable-stream "^3.0.6" - wbuf "^1.7.3" - -spdy@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" - integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== - dependencies: - debug "^4.1.0" - handle-thing "^2.0.0" - http-deceiver "^1.2.7" - select-hose "^2.0.0" - spdy-transport "^3.0.0" - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - 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" - -ssri@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" - integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== - dependencies: - figgy-pudding "^3.5.1" - -ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== - -stack-utils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277" - integrity sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw== - dependencies: - escape-string-regexp "^2.0.0" - -stackframe@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" - integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA== - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= - -stream-browserify@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" - integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-http@^2.7.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= - -string-length@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== - dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" - -string-natural-compare@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" - integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== - -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -string.prototype.matchall@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz#608f255e93e072107f5de066f81a2dfb78cf6b29" - integrity sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - has-symbols "^1.0.1" - internal-slot "^1.0.3" - regexp.prototype.flags "^1.3.1" - side-channel "^1.0.4" - -string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string.prototype.trimstart@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string_decoder@^1.0.0, string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -stringify-object@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== - dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" - -strip-ansi@6.0.0, strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-comments@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-1.0.2.tgz#82b9c45e7f05873bee53f37168af930aa368679d" - integrity sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw== - dependencies: - babel-extract-comments "^1.0.0" - babel-plugin-transform-object-rest-spread "^6.26.0" - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -style-loader@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.3.0.tgz#828b4a3b3b7e7aa5847ce7bae9e874512114249e" - integrity sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q== - dependencies: - loader-utils "^2.0.0" - schema-utils "^2.7.0" - -stylehacks@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" - integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.0.0, supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-hyperlinks@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" - integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - -svg-parser@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" - integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== - -svgo@^1.0.0, svgo@^1.2.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" - integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== - dependencies: - chalk "^2.4.1" - coa "^2.0.2" - css-select "^2.0.0" - css-select-base-adapter "^0.1.1" - css-tree "1.0.0-alpha.37" - csso "^4.0.2" - js-yaml "^3.13.1" - mkdirp "~0.5.1" - object.values "^1.1.0" - sax "~1.2.4" - stable "^0.1.8" - unquote "~1.1.1" - util.promisify "~1.0.0" - -symbol-observable@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== - -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - -table@^6.0.4: - version "6.7.0" - resolved "https://registry.yarnpkg.com/table/-/table-6.7.0.tgz#26274751f0ee099c547f6cb91d3eff0d61d155b2" - integrity sha512-SAM+5p6V99gYiiy2gT5ArdzgM1dLDed0nkrWmG6Fry/bUS/m9x83BwpJUOf1Qj/x2qJd+thL6IkIx7qPGRxqBw== - dependencies: - ajv "^8.0.1" - lodash.clonedeep "^4.5.0" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.0" - strip-ansi "^6.0.0" - -tapable@^1.0.0, tapable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - -tar@^6.0.2: - version "6.1.0" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83" - integrity sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^3.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -temp-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" - integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= - -tempy@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.3.0.tgz#6f6c5b295695a16130996ad5ab01a8bd726e8bf8" - integrity sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ== - dependencies: - temp-dir "^1.0.0" - type-fest "^0.3.1" - unique-string "^1.0.0" - -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - -terser-webpack-plugin@4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz#28daef4a83bd17c1db0297070adc07fc8cfc6a9a" - integrity sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ== - dependencies: - cacache "^15.0.5" - find-cache-dir "^3.3.1" - jest-worker "^26.5.0" - p-limit "^3.0.2" - schema-utils "^3.0.0" - serialize-javascript "^5.0.1" - source-map "^0.6.1" - terser "^5.3.4" - webpack-sources "^1.4.3" - -terser-webpack-plugin@^1.4.3: - version "1.4.5" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" - integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== - dependencies: - cacache "^12.0.2" - find-cache-dir "^2.1.0" - is-wsl "^1.1.0" - schema-utils "^1.0.0" - serialize-javascript "^4.0.0" - source-map "^0.6.1" - terser "^4.1.2" - webpack-sources "^1.4.0" - worker-farm "^1.7.0" - -terser@^4.1.2, terser@^4.6.2, terser@^4.6.3: - version "4.8.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" - integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== - dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" - -terser@^5.3.4: - version "5.7.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.0.tgz#a761eeec206bc87b605ab13029876ead938ae693" - integrity sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g== - dependencies: - commander "^2.20.0" - source-map "~0.7.2" - source-map-support "~0.5.19" - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - -text-table@0.2.0, text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -throat@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" - integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== - -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -thunky@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" - integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== - -timers-browserify@^2.0.4: - version "2.0.12" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" - integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== - dependencies: - setimmediate "^1.0.4" - -timsort@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" - integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= - -tiny-invariant@^1.0.2, tiny-invariant@^1.0.6: - version "1.1.0" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" - integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw== - -tiny-warning@^1.0.0, tiny-warning@^1.0.2, tiny-warning@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" - integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== - -tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= - -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== - -tough-cookie@^2.3.3, tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tough-cookie@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" - integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.1.2" - -tr46@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" - integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg== - dependencies: - punycode "^2.1.1" - -tryer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" - integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== - -ts-pnp@1.2.0, ts-pnp@^1.1.6: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" - integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== - -tsconfig-paths@^3.9.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" - integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.1" - minimist "^1.2.0" - strip-bom "^3.0.0" - -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.0.3: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c" - integrity sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w== - -tsutils@^3.17.1: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -type-detect@4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" - integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -type-is@~1.6.17, type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -type@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - -type@^2.0.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/type/-/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" - integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -typescript@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.4.tgz#8610b59747de028fda898a8aef0e103f156d0961" - integrity sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg== - -unbox-primitive@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" - integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== - dependencies: - function-bind "^1.1.1" - has-bigints "^1.0.1" - has-symbols "^1.0.2" - which-boxed-primitive "^1.0.2" - -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" - integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" - integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= - -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -unique-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= - dependencies: - crypto-random-string "^1.0.0" - -universalify@^0.1.0, universalify@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -unquote@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upath@^1.1.1, upath@^1.1.2, upath@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -url-loader@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" - integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== - dependencies: - loader-utils "^2.0.0" - mime-types "^2.1.27" - schema-utils "^3.0.0" - -url-parse@^1.4.3, url-parse@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b" - integrity sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use-memo-one@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/use-memo-one/-/use-memo-one-1.1.2.tgz#0c8203a329f76e040047a35a1197defe342fab20" - integrity sha512-u2qFKtxLsia/r8qG0ZKkbytbztzRb317XCkT7yP8wxL0tZ/CzK2G+WWie5vWvpyeP7+YoPIwbJoIHJ4Ba4k0oQ== - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -util.promisify@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== - dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" - -util.promisify@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" - integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.2" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.0" - -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= - dependencies: - inherits "2.0.1" - -util@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" - integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== - dependencies: - inherits "2.0.3" - -utila@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - -uuid@^3.3.2, uuid@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -uuid@^8.3.0: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -v8-to-istanbul@^7.0.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz#30898d1a7fa0c84d225a2c1434fb958f290883c1" - integrity sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -value-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" - integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= - -vendors@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" - integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vm-browserify@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" - integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== - -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - -walker@^1.0.7, walker@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= - dependencies: - makeerror "1.0.x" - -watchpack-chokidar2@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" - integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== - dependencies: - chokidar "^2.1.8" - -watchpack@^1.7.4: - version "1.7.5" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" - integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== - dependencies: - graceful-fs "^4.1.2" - neo-async "^2.5.0" - optionalDependencies: - chokidar "^3.4.1" - watchpack-chokidar2 "^2.0.1" - -wbuf@^1.1.0, wbuf@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" - integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== - dependencies: - minimalistic-assert "^1.0.0" - -web-vitals@^0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-0.2.4.tgz#ec3df43c834a207fd7cdefd732b2987896e08511" - integrity sha512-6BjspCO9VriYy12z356nL6JBS0GYeEcA457YyRzD+dD6XYCQ75NKhcOHUMHentOE7OcVCIXXDvOm0jKFfQG2Gg== - -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -webpack-dev-middleware@^3.7.2: - version "3.7.3" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" - integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== - dependencies: - memory-fs "^0.4.1" - mime "^2.4.4" - mkdirp "^0.5.1" - range-parser "^1.2.1" - webpack-log "^2.0.0" - -webpack-dev-server@3.11.1: - version "3.11.1" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.1.tgz#c74028bf5ba8885aaf230e48a20e8936ab8511f0" - integrity sha512-u4R3mRzZkbxQVa+MBWi2uVpB5W59H3ekZAJsQlKUTdl7Elcah2EhygTPLmeFXybQkf9i2+L0kn7ik9SnXa6ihQ== - dependencies: - ansi-html "0.0.7" - bonjour "^3.5.0" - chokidar "^2.1.8" - compression "^1.7.4" - connect-history-api-fallback "^1.6.0" - debug "^4.1.1" - del "^4.1.1" - express "^4.17.1" - html-entities "^1.3.1" - http-proxy-middleware "0.19.1" - import-local "^2.0.0" - internal-ip "^4.3.0" - ip "^1.1.5" - is-absolute-url "^3.0.3" - killable "^1.0.1" - loglevel "^1.6.8" - opn "^5.5.0" - p-retry "^3.0.1" - portfinder "^1.0.26" - schema-utils "^1.0.0" - selfsigned "^1.10.8" - semver "^6.3.0" - serve-index "^1.9.1" - sockjs "^0.3.21" - sockjs-client "^1.5.0" - spdy "^4.0.2" - strip-ansi "^3.0.1" - supports-color "^6.1.0" - url "^0.11.0" - webpack-dev-middleware "^3.7.2" - webpack-log "^2.0.0" - ws "^6.2.1" - yargs "^13.3.2" - -webpack-log@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" - integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== - dependencies: - ansi-colors "^3.0.0" - uuid "^3.3.2" - -webpack-manifest-plugin@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-2.2.0.tgz#19ca69b435b0baec7e29fbe90fb4015de2de4f16" - integrity sha512-9S6YyKKKh/Oz/eryM1RyLVDVmy3NSPV0JXMRhZ18fJsq+AwGxUY34X54VNwkzYcEmEkDwNxuEOboCZEebJXBAQ== - dependencies: - fs-extra "^7.0.0" - lodash ">=3.5 <5" - object.entries "^1.1.0" - tapable "^1.0.0" - -webpack-sources@^1.1.0, webpack-sources@^1.3.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack@4.44.2: - version "4.44.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.2.tgz#6bfe2b0af055c8b2d1e90ed2cd9363f841266b72" - integrity sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/wasm-edit" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - acorn "^6.4.1" - ajv "^6.10.2" - ajv-keywords "^3.4.1" - chrome-trace-event "^1.0.2" - enhanced-resolve "^4.3.0" - eslint-scope "^4.0.3" - json-parse-better-errors "^1.0.2" - loader-runner "^2.4.0" - loader-utils "^1.2.3" - memory-fs "^0.4.1" - micromatch "^3.1.10" - mkdirp "^0.5.3" - neo-async "^2.6.1" - node-libs-browser "^2.2.1" - schema-utils "^1.0.0" - tapable "^1.1.3" - terser-webpack-plugin "^1.4.3" - watchpack "^1.7.4" - webpack-sources "^1.4.1" - -websocket-driver@>=0.5.1, websocket-driver@^0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== - -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-fetch@^3.0.0, whatwg-fetch@^3.4.1: - version "3.6.2" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" - integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - -whatwg-url@^8.0.0, whatwg-url@^8.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.5.0.tgz#7752b8464fc0903fec89aa9846fc9efe07351fd3" - integrity sha512-fy+R77xWv0AiqfLl4nuGUlQ3/6b5uNfQ4WAbGQVMYshCTCCPK9psC1nWh3XHuxGVCtlcDDQPQW1csmmIQo+fwg== - dependencies: - lodash "^4.7.0" - tr46 "^2.0.2" - webidl-conversions "^6.1.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which@^1.2.9, which@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -word-wrap@^1.2.3, word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -workbox-background-sync@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-5.1.4.tgz#5ae0bbd455f4e9c319e8d827c055bb86c894fd12" - integrity sha512-AH6x5pYq4vwQvfRDWH+vfOePfPIYQ00nCEB7dJRU1e0n9+9HMRyvI63FlDvtFT2AvXVRsXvUt7DNMEToyJLpSA== - dependencies: - workbox-core "^5.1.4" - -workbox-broadcast-update@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-5.1.4.tgz#0eeb89170ddca7f6914fa3523fb14462891f2cfc" - integrity sha512-HTyTWkqXvHRuqY73XrwvXPud/FN6x3ROzkfFPsRjtw/kGZuZkPzfeH531qdUGfhtwjmtO/ZzXcWErqVzJNdXaA== - dependencies: - workbox-core "^5.1.4" - -workbox-build@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-5.1.4.tgz#23d17ed5c32060c363030c8823b39d0eabf4c8c7" - integrity sha512-xUcZn6SYU8usjOlfLb9Y2/f86Gdo+fy1fXgH8tJHjxgpo53VVsqRX0lUDw8/JuyzNmXuo8vXX14pXX2oIm9Bow== - dependencies: - "@babel/core" "^7.8.4" - "@babel/preset-env" "^7.8.4" - "@babel/runtime" "^7.8.4" - "@hapi/joi" "^15.1.0" - "@rollup/plugin-node-resolve" "^7.1.1" - "@rollup/plugin-replace" "^2.3.1" - "@surma/rollup-plugin-off-main-thread" "^1.1.1" - common-tags "^1.8.0" - fast-json-stable-stringify "^2.1.0" - fs-extra "^8.1.0" - glob "^7.1.6" - lodash.template "^4.5.0" - pretty-bytes "^5.3.0" - rollup "^1.31.1" - rollup-plugin-babel "^4.3.3" - rollup-plugin-terser "^5.3.1" - source-map "^0.7.3" - source-map-url "^0.4.0" - stringify-object "^3.3.0" - strip-comments "^1.0.2" - tempy "^0.3.0" - upath "^1.2.0" - workbox-background-sync "^5.1.4" - workbox-broadcast-update "^5.1.4" - workbox-cacheable-response "^5.1.4" - workbox-core "^5.1.4" - workbox-expiration "^5.1.4" - workbox-google-analytics "^5.1.4" - workbox-navigation-preload "^5.1.4" - workbox-precaching "^5.1.4" - workbox-range-requests "^5.1.4" - workbox-routing "^5.1.4" - workbox-strategies "^5.1.4" - workbox-streams "^5.1.4" - workbox-sw "^5.1.4" - workbox-window "^5.1.4" - -workbox-cacheable-response@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-5.1.4.tgz#9ff26e1366214bdd05cf5a43da9305b274078a54" - integrity sha512-0bfvMZs0Of1S5cdswfQK0BXt6ulU5kVD4lwer2CeI+03czHprXR3V4Y8lPTooamn7eHP8Iywi5QjyAMjw0qauA== - dependencies: - workbox-core "^5.1.4" - -workbox-core@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-5.1.4.tgz#8bbfb2362ecdff30e25d123c82c79ac65d9264f4" - integrity sha512-+4iRQan/1D8I81nR2L5vcbaaFskZC2CL17TLbvWVzQ4qiF/ytOGF6XeV54pVxAvKUtkLANhk8TyIUMtiMw2oDg== - -workbox-expiration@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-5.1.4.tgz#92b5df461e8126114943a3b15c55e4ecb920b163" - integrity sha512-oDO/5iC65h2Eq7jctAv858W2+CeRW5e0jZBMNRXpzp0ZPvuT6GblUiHnAsC5W5lANs1QS9atVOm4ifrBiYY7AQ== - dependencies: - workbox-core "^5.1.4" - -workbox-google-analytics@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-5.1.4.tgz#b3376806b1ac7d7df8418304d379707195fa8517" - integrity sha512-0IFhKoEVrreHpKgcOoddV+oIaVXBFKXUzJVBI+nb0bxmcwYuZMdteBTp8AEDJacENtc9xbR0wa9RDCnYsCDLjA== - dependencies: - workbox-background-sync "^5.1.4" - workbox-core "^5.1.4" - workbox-routing "^5.1.4" - workbox-strategies "^5.1.4" - -workbox-navigation-preload@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-5.1.4.tgz#30d1b720d26a05efc5fa11503e5cc1ed5a78902a" - integrity sha512-Wf03osvK0wTflAfKXba//QmWC5BIaIZARU03JIhAEO2wSB2BDROWI8Q/zmianf54kdV7e1eLaIEZhth4K4MyfQ== - dependencies: - workbox-core "^5.1.4" - -workbox-precaching@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-5.1.4.tgz#874f7ebdd750dd3e04249efae9a1b3f48285fe6b" - integrity sha512-gCIFrBXmVQLFwvAzuGLCmkUYGVhBb7D1k/IL7pUJUO5xacjLcFUaLnnsoVepBGAiKw34HU1y/YuqvTKim9qAZA== - dependencies: - workbox-core "^5.1.4" - -workbox-range-requests@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-5.1.4.tgz#7066a12c121df65bf76fdf2b0868016aa2bab859" - integrity sha512-1HSujLjgTeoxHrMR2muDW2dKdxqCGMc1KbeyGcmjZZAizJTFwu7CWLDmLv6O1ceWYrhfuLFJO+umYMddk2XMhw== - dependencies: - workbox-core "^5.1.4" - -workbox-routing@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-5.1.4.tgz#3e8cd86bd3b6573488d1a2ce7385e547b547e970" - integrity sha512-8ljknRfqE1vEQtnMtzfksL+UXO822jJlHTIR7+BtJuxQ17+WPZfsHqvk1ynR/v0EHik4x2+826Hkwpgh4GKDCw== - dependencies: - workbox-core "^5.1.4" - -workbox-strategies@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-5.1.4.tgz#96b1418ccdfde5354612914964074d466c52d08c" - integrity sha512-VVS57LpaJTdjW3RgZvPwX0NlhNmscR7OQ9bP+N/34cYMDzXLyA6kqWffP6QKXSkca1OFo/v6v7hW7zrrguo6EA== - dependencies: - workbox-core "^5.1.4" - workbox-routing "^5.1.4" - -workbox-streams@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-5.1.4.tgz#05754e5e3667bdc078df2c9315b3f41210d8cac0" - integrity sha512-xU8yuF1hI/XcVhJUAfbQLa1guQUhdLMPQJkdT0kn6HP5CwiPOGiXnSFq80rAG4b1kJUChQQIGPrq439FQUNVrw== - dependencies: - workbox-core "^5.1.4" - workbox-routing "^5.1.4" - -workbox-sw@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-5.1.4.tgz#2bb34c9f7381f90d84cef644816d45150011d3db" - integrity sha512-9xKnKw95aXwSNc8kk8gki4HU0g0W6KXu+xks7wFuC7h0sembFnTrKtckqZxbSod41TDaGh+gWUA5IRXrL0ECRA== - -workbox-webpack-plugin@5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-5.1.4.tgz#7bfe8c16e40fe9ed8937080ac7ae9c8bde01e79c" - integrity sha512-PZafF4HpugZndqISi3rZ4ZK4A4DxO8rAqt2FwRptgsDx7NF8TVKP86/huHquUsRjMGQllsNdn4FNl8CD/UvKmQ== - dependencies: - "@babel/runtime" "^7.5.5" - fast-json-stable-stringify "^2.0.0" - source-map-url "^0.4.0" - upath "^1.1.2" - webpack-sources "^1.3.0" - workbox-build "^5.1.4" - -workbox-window@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-5.1.4.tgz#2740f7dea7f93b99326179a62f1cc0ca2c93c863" - integrity sha512-vXQtgTeMCUq/4pBWMfQX8Ee7N2wVC4Q7XYFqLnfbXJ2hqew/cU1uMTD2KqGEgEpE4/30luxIxgE+LkIa8glBYw== - dependencies: - workbox-core "^5.1.4" - -worker-farm@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" - integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== - dependencies: - errno "~0.1.7" - -worker-rpc@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/worker-rpc/-/worker-rpc-0.1.1.tgz#cb565bd6d7071a8f16660686051e969ad32f54d5" - integrity sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg== - dependencies: - microevent.ts "~0.1.1" - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - 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" - -ws@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" - integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== - dependencies: - async-limiter "~1.0.0" - -ws@^7.4.4: - version "7.4.5" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1" - integrity sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g== - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - -xtend@^4.0.0, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.10.0, yaml@^1.7.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs@^13.3.2: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" - -yargs@^15.4.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==