diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..e702b3a7 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,3 @@ +# Windows files +[*.bat] +end_of_line = crlf diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000..ed658eb7 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + root: true, + extends: '@react-native-community', + rules: { + 'react-native/no-inline-styles': 'off', + }, +}; diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..07691950 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +# Windows files should use crlf line endings +# https://help.github.com/articles/dealing-with-line-endings/ +*.bat text eol=crlf diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5fbfff48..1e178eab 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,45 +1,45 @@ -name: CI -on: - push: - branches: - - main -jobs: - install-and-test: - name: Install dependencies - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Install npm dependencies - run: | - npm install - - build-android: - name: Build app - needs: install-and-test - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Install Dependencies - run: | - npm install - - - name: Cache Gradle Wrapper - uses: actions/cache@v2 - with: - path: ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }} - - - name: Cache Gradle Dependencies - uses: actions/cache@v2 - with: - path: ~/.gradle/caches - key: ${{ runner.os }}-gradle-caches-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle-caches- - - - name: Make Gradlew Executable - run: cd android && chmod +x ./gradlew - - - name: Build Android Release - run: | - cd android && ./gradlew assembleRelease --no-daemon +name: CI +on: + push: + branches: + - main +jobs: + install-and-test: + name: Install dependencies + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Install npm dependencies + run: | + npm install + + build-android: + name: Build app + needs: install-and-test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Install Dependencies + run: | + npm install + + - name: Cache Gradle Wrapper + uses: actions/cache@v2 + with: + path: ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }} + + - name: Cache Gradle Dependencies + uses: actions/cache@v2 + with: + path: ~/.gradle/caches + key: ${{ runner.os }}-gradle-caches-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle-caches- + + - name: Make Gradlew Executable + run: cd android && chmod +x ./gradlew + + - name: Build Android Release + run: | + cd android && ./gradlew assembleRelease --no-daemon diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..600e365e --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +**/node_modules \ No newline at end of file diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 00000000..c26961c9 --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,6 @@ +module.exports = { + bracketSpacing: false, + singleQuote: true, + trailingComma: 'all', + arrowParens: 'avoid', +}; diff --git a/App.js b/App.js index 2f69bb99..5957b8f1 100644 --- a/App.js +++ b/App.js @@ -1,43 +1,40 @@ -import React, { useEffect } from "react"; -import { StatusBar } from "react-native"; +import React, {useEffect} from 'react'; +import {StatusBar} from 'react-native'; -import { useFonts } from "expo-font"; -import { Provider as PaperProvider } from "react-native-paper"; -import { Provider } from "react-redux"; -import { persistor, store } from "./src/redux/store"; -import { PersistGate } from "redux-persist/lib/integration/react"; -import * as SplashScreen from "expo-splash-screen"; +import {useFonts} from 'expo-font'; +import {Provider as PaperProvider} from 'react-native-paper'; +import {Provider} from 'react-redux'; +import {persistor, store} from './src/redux/store'; +import {PersistGate} from 'redux-persist/lib/integration/react'; +import * as SplashScreen from 'expo-splash-screen'; -import Main from "./src/navigators/Main"; +import Main from './src/navigators/Main'; -import { createDB } from "./src/database/DBHelper"; -import { fonts } from "./src/theme/fonts"; +import {createDB} from './src/database/DBHelper'; +import {fonts} from './src/theme/fonts'; const App = () => { - const [loaded] = useFonts(fonts); + const [loaded] = useFonts(fonts); - useEffect(() => { - SplashScreen.preventAutoHideAsync(); - createDB(); - }, []); + useEffect(() => { + SplashScreen.preventAutoHideAsync(); + createDB(); + }, []); - if (!loaded) { - return null; - } + if (!loaded) { + return null; + } - return ( - - - - -
- - - - ); + return ( + + + + +
+ + + + ); }; export default App; diff --git a/README.md b/README.md index ab1db9db..50e92455 100644 --- a/README.md +++ b/README.md @@ -1,41 +1,41 @@ -

- -

-

- LNReader -

-

- LNReader is a Tachiyomi-like, free and open source light novel reader for Android. -

- - -
-
- -

- -

- -## Download -Get the app from our [releases page](https://github.com/rajarsheechatterjee/LNReader/releases). - -## Sources -LNReader does not have any affiliation with the content providers available. - -Source requests should be created at [LNReader/lnreader-sources](https://github.com/LNReader/lnreader-sources). - -## License -[MIT ](https://github.com/rajarsheechatterjee/lnreader/blob/main/LICENSE) +

+ +

+

+ LNReader +

+

+ LNReader is a Tachiyomi-like, free and open source light novel reader for Android. +

+ + +
+
+ +

+ +

+ +## Download +Get the app from our [releases page](https://github.com/rajarsheechatterjee/LNReader/releases). + +## Sources +LNReader does not have any affiliation with the content providers available. + +Source requests should be created at [LNReader/lnreader-sources](https://github.com/LNReader/lnreader-sources). + +## License +[MIT ](https://github.com/rajarsheechatterjee/lnreader/blob/main/LICENSE) diff --git a/android/app/build.gradle b/android/app/build.gradle index 0dc54e2d..1a7e2088 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,219 +1,219 @@ -apply plugin: "com.android.application" - -import com.android.build.OutputFile - -/** - * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets - * and bundleReleaseJsAndAssets). - * These basically call `react-native bundle` with the correct arguments during the Android build - * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the - * bundle directly from the development server. Below you can see all the possible configurations - * and their defaults. If you decide to add a configuration block, make sure to add it before the - * `apply from: "../../node_modules/react-native/react.gradle"` line. - * - * project.ext.react = [ - * // the name of the generated asset file containing your JS bundle - * bundleAssetName: "index.android.bundle", - * - * // the entry file for bundle generation. If none specified and - * // "index.android.js" exists, it will be used. Otherwise "index.js" is - * // default. Can be overridden with ENTRY_FILE environment variable. - * entryFile: "index.android.js", - * - * // https://reactnative.dev/docs/performance#enable-the-ram-format - * bundleCommand: "ram-bundle", - * - * // whether to bundle JS and assets in debug mode - * bundleInDebug: false, - * - * // whether to bundle JS and assets in release mode - * bundleInRelease: true, - * - * // whether to bundle JS and assets in another build variant (if configured). - * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants - * // The configuration property can be in the following formats - * // 'bundleIn${productFlavor}${buildType}' - * // 'bundleIn${buildType}' - * // bundleInFreeDebug: true, - * // bundleInPaidRelease: true, - * // bundleInBeta: true, - * - * // whether to disable dev mode in custom build variants (by default only disabled in release) - * // for example: to disable dev mode in the staging build type (if configured) - * devDisabledInStaging: true, - * // The configuration property can be in the following formats - * // 'devDisabledIn${productFlavor}${buildType}' - * // 'devDisabledIn${buildType}' - * - * // the root of your project, i.e. where "package.json" lives - * root: "../../", - * - * // where to put the JS bundle asset in debug mode - * jsBundleDirDebug: "$buildDir/intermediates/assets/debug", - * - * // where to put the JS bundle asset in release mode - * jsBundleDirRelease: "$buildDir/intermediates/assets/release", - * - * // where to put drawable resources / React Native assets, e.g. the ones you use via - * // require('./image.png')), in debug mode - * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug", - * - * // where to put drawable resources / React Native assets, e.g. the ones you use via - * // require('./image.png')), in release mode - * resourcesDirRelease: "$buildDir/intermediates/res/merged/release", - * - * // by default the gradle tasks are skipped if none of the JS files or assets change; this means - * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to - * // date; if you have any other folders that you want to ignore for performance reasons (gradle - * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/ - * // for example, you might want to remove it from here. - * inputExcludes: ["android/**", "ios/**"], - * - * // override which node gets called and with what additional arguments - * nodeExecutableAndArgs: ["node"], - * - * // supply additional arguments to the packager - * extraPackagerArgs: [] - * ] - */ - -project.ext.react = [ - enableHermes: true -] - -apply from: '../../node_modules/react-native-unimodules/gradle.groovy' -apply from: "../../node_modules/react-native/react.gradle" -apply from: "../../node_modules/expo-constants/scripts/get-app-config-android.gradle" -apply from: "../../node_modules/expo-updates/scripts/create-manifest-android.gradle" - -/** - * Set this to true to create two separate APKs instead of one: - * - An APK that only works on ARM devices - * - An APK that only works on x86 devices - * The advantage is the size of the APK is reduced by about 4MB. - * Upload all the APKs to the Play Store and people will download - * the correct one based on the CPU architecture of their device. - */ -def enableSeparateBuildPerCPUArchitecture = false - -/** - * Run Proguard to shrink the Java bytecode in release builds. - */ -def enableProguardInReleaseBuilds = false - -/** - * The preferred build flavor of JavaScriptCore. - * - * For example, to use the international variant, you can use: - * `def jscFlavor = 'org.webkit:android-jsc-intl:+'` - * - * The international variant includes ICU i18n library and necessary data - * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that - * give correct results when using with locales other than en-US. Note that - * this variant is about 6MiB larger per architecture than default. - */ -def jscFlavor = 'org.webkit:android-jsc:+' - -/** - * Whether to enable the Hermes VM. - * - * This should be set on project.ext.react and mirrored here. If it is not set - * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode - * and the benefits of using Hermes will therefore be sharply reduced. - */ -def enableHermes = project.ext.react.get("enableHermes", false); - -android { - compileSdkVersion rootProject.ext.compileSdkVersion - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - defaultConfig { - applicationId 'com.rajarsheechatterjee.LNReader' - minSdkVersion rootProject.ext.minSdkVersion - targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 1 - versionName "1.1.5" - } - splits { - abi { - reset() - enable enableSeparateBuildPerCPUArchitecture - universalApk false // If true, also generate a universal APK - include "armeabi-v7a", "x86", "arm64-v8a", "x86_64" - } - } - signingConfigs { - debug { - storeFile file('debug.keystore') - storePassword 'android' - keyAlias 'androiddebugkey' - keyPassword 'android' - } - } - buildTypes { - debug { - signingConfig signingConfigs.debug - } - release { - // Caution! In production, you need to generate your own keystore file. - // see https://reactnative.dev/docs/signed-apk-android. - signingConfig signingConfigs.debug - minifyEnabled enableProguardInReleaseBuilds - proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" - } - } - - // applicationVariants are e.g. debug, release - applicationVariants.all { variant -> - variant.outputs.each { output -> - // For each separate APK per architecture, set a unique version code as described here: - // https://developer.android.com/studio/build/configure-apk-splits.html - def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4] - def abi = output.getFilter(OutputFile.ABI) - if (abi != null) { // null for the universal-debug, universal-release variants - output.versionCodeOverride = - versionCodes.get(abi) * 1048576 + defaultConfig.versionCode - } - - } - } -} - -dependencies { - implementation fileTree(dir: "libs", include: ["*.jar"]) - //noinspection GradleDynamicVersion - implementation "com.facebook.react:react-native:+" // From node_modules - implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0" - debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") { - exclude group:'com.facebook.fbjni' - } - debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") { - exclude group:'com.facebook.flipper' - exclude group:'com.squareup.okhttp3', module:'okhttp' - } - debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") { - exclude group:'com.facebook.flipper' - } - addUnimodulesDependencies() - - if (enableHermes) { - def hermesPath = "../../node_modules/hermes-engine/android/"; - debugImplementation files(hermesPath + "hermes-debug.aar") - releaseImplementation files(hermesPath + "hermes-release.aar") - } else { - implementation jscFlavor - } -} - -// Run this once to be able to run the application with BUCK -// puts all compile dependencies into folder libs for BUCK to use -task copyDownloadableDepsToLibs(type: Copy) { - from configurations.compile - into 'libs' -} - -apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) +apply plugin: "com.android.application" + +import com.android.build.OutputFile + +/** + * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets + * and bundleReleaseJsAndAssets). + * These basically call `react-native bundle` with the correct arguments during the Android build + * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the + * bundle directly from the development server. Below you can see all the possible configurations + * and their defaults. If you decide to add a configuration block, make sure to add it before the + * `apply from: "../../node_modules/react-native/react.gradle"` line. + * + * project.ext.react = [ + * // the name of the generated asset file containing your JS bundle + * bundleAssetName: "index.android.bundle", + * + * // the entry file for bundle generation. If none specified and + * // "index.android.js" exists, it will be used. Otherwise "index.js" is + * // default. Can be overridden with ENTRY_FILE environment variable. + * entryFile: "index.android.js", + * + * // https://reactnative.dev/docs/performance#enable-the-ram-format + * bundleCommand: "ram-bundle", + * + * // whether to bundle JS and assets in debug mode + * bundleInDebug: false, + * + * // whether to bundle JS and assets in release mode + * bundleInRelease: true, + * + * // whether to bundle JS and assets in another build variant (if configured). + * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants + * // The configuration property can be in the following formats + * // 'bundleIn${productFlavor}${buildType}' + * // 'bundleIn${buildType}' + * // bundleInFreeDebug: true, + * // bundleInPaidRelease: true, + * // bundleInBeta: true, + * + * // whether to disable dev mode in custom build variants (by default only disabled in release) + * // for example: to disable dev mode in the staging build type (if configured) + * devDisabledInStaging: true, + * // The configuration property can be in the following formats + * // 'devDisabledIn${productFlavor}${buildType}' + * // 'devDisabledIn${buildType}' + * + * // the root of your project, i.e. where "package.json" lives + * root: "../../", + * + * // where to put the JS bundle asset in debug mode + * jsBundleDirDebug: "$buildDir/intermediates/assets/debug", + * + * // where to put the JS bundle asset in release mode + * jsBundleDirRelease: "$buildDir/intermediates/assets/release", + * + * // where to put drawable resources / React Native assets, e.g. the ones you use via + * // require('./image.png')), in debug mode + * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug", + * + * // where to put drawable resources / React Native assets, e.g. the ones you use via + * // require('./image.png')), in release mode + * resourcesDirRelease: "$buildDir/intermediates/res/merged/release", + * + * // by default the gradle tasks are skipped if none of the JS files or assets change; this means + * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to + * // date; if you have any other folders that you want to ignore for performance reasons (gradle + * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/ + * // for example, you might want to remove it from here. + * inputExcludes: ["android/**", "ios/**"], + * + * // override which node gets called and with what additional arguments + * nodeExecutableAndArgs: ["node"], + * + * // supply additional arguments to the packager + * extraPackagerArgs: [] + * ] + */ + +project.ext.react = [ + enableHermes: true +] + +apply from: '../../node_modules/react-native-unimodules/gradle.groovy' +apply from: "../../node_modules/react-native/react.gradle" +apply from: "../../node_modules/expo-constants/scripts/get-app-config-android.gradle" +apply from: "../../node_modules/expo-updates/scripts/create-manifest-android.gradle" + +/** + * Set this to true to create two separate APKs instead of one: + * - An APK that only works on ARM devices + * - An APK that only works on x86 devices + * The advantage is the size of the APK is reduced by about 4MB. + * Upload all the APKs to the Play Store and people will download + * the correct one based on the CPU architecture of their device. + */ +def enableSeparateBuildPerCPUArchitecture = false + +/** + * Run Proguard to shrink the Java bytecode in release builds. + */ +def enableProguardInReleaseBuilds = false + +/** + * The preferred build flavor of JavaScriptCore. + * + * For example, to use the international variant, you can use: + * `def jscFlavor = 'org.webkit:android-jsc-intl:+'` + * + * The international variant includes ICU i18n library and necessary data + * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that + * give correct results when using with locales other than en-US. Note that + * this variant is about 6MiB larger per architecture than default. + */ +def jscFlavor = 'org.webkit:android-jsc:+' + +/** + * Whether to enable the Hermes VM. + * + * This should be set on project.ext.react and mirrored here. If it is not set + * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode + * and the benefits of using Hermes will therefore be sharply reduced. + */ +def enableHermes = project.ext.react.get("enableHermes", false); + +android { + compileSdkVersion rootProject.ext.compileSdkVersion + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + defaultConfig { + applicationId 'com.rajarsheechatterjee.LNReader' + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + versionCode 1 + versionName "1.1.5" + } + splits { + abi { + reset() + enable enableSeparateBuildPerCPUArchitecture + universalApk false // If true, also generate a universal APK + include "armeabi-v7a", "x86", "arm64-v8a", "x86_64" + } + } + signingConfigs { + debug { + storeFile file('debug.keystore') + storePassword 'android' + keyAlias 'androiddebugkey' + keyPassword 'android' + } + } + buildTypes { + debug { + signingConfig signingConfigs.debug + } + release { + // Caution! In production, you need to generate your own keystore file. + // see https://reactnative.dev/docs/signed-apk-android. + signingConfig signingConfigs.debug + minifyEnabled enableProguardInReleaseBuilds + proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" + } + } + + // applicationVariants are e.g. debug, release + applicationVariants.all { variant -> + variant.outputs.each { output -> + // For each separate APK per architecture, set a unique version code as described here: + // https://developer.android.com/studio/build/configure-apk-splits.html + def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4] + def abi = output.getFilter(OutputFile.ABI) + if (abi != null) { // null for the universal-debug, universal-release variants + output.versionCodeOverride = + versionCodes.get(abi) * 1048576 + defaultConfig.versionCode + } + + } + } +} + +dependencies { + implementation fileTree(dir: "libs", include: ["*.jar"]) + //noinspection GradleDynamicVersion + implementation "com.facebook.react:react-native:+" // From node_modules + implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0" + debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") { + exclude group:'com.facebook.fbjni' + } + debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") { + exclude group:'com.facebook.flipper' + exclude group:'com.squareup.okhttp3', module:'okhttp' + } + debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") { + exclude group:'com.facebook.flipper' + } + addUnimodulesDependencies() + + if (enableHermes) { + def hermesPath = "../../node_modules/hermes-engine/android/"; + debugImplementation files(hermesPath + "hermes-debug.aar") + releaseImplementation files(hermesPath + "hermes-release.aar") + } else { + implementation jscFlavor + } +} + +// Run this once to be able to run the application with BUCK +// puts all compile dependencies into folder libs for BUCK to use +task copyDownloadableDepsToLibs(type: Copy) { + from configurations.compile + into 'libs' +} + +apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 89ec0b6a..307351b9 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,89 +1,89 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/app/src/main/java/com/rajarsheechatterjee/LNReader/MainActivity.java b/android/app/src/main/java/com/rajarsheechatterjee/LNReader/MainActivity.java index bb5b2534..a2166626 100644 --- a/android/app/src/main/java/com/rajarsheechatterjee/LNReader/MainActivity.java +++ b/android/app/src/main/java/com/rajarsheechatterjee/LNReader/MainActivity.java @@ -1,71 +1,71 @@ -package com.rajarsheechatterjee.LNReader; -import android.content.res.Configuration; -import android.content.Intent; - -import android.os.Bundle; -import android.graphics.Color; -import android.view.WindowManager; -import android.os.Build; -import android.view.View; -import android.view.Window; - -import com.facebook.react.ReactActivity; -import com.facebook.react.ReactActivityDelegate; -import com.facebook.react.ReactRootView; -import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView; - -import expo.modules.splashscreen.singletons.SplashScreen; -import expo.modules.splashscreen.SplashScreenImageResizeMode; - - -public class MainActivity extends ReactActivity { - - // Added automatically by Expo Config - @Override - public void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - Intent intent = new Intent("onConfigurationChanged"); - intent.putExtra("newConfig", newConfig); - sendBroadcast(intent); - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - // SplashScreen.show(...) has to be called after super.onCreate(...) - // Below line is handled by '@expo/configure-splash-screen' command and it's discouraged to modify it manually - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { - WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(); - layoutParams.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; - getWindow().setAttributes(layoutParams); - } - - Window w = getWindow(); - w.setStatusBarColor(Color.TRANSPARENT); - w.setNavigationBarColor(Color.TRANSPARENT); - w.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); - - super.onCreate(savedInstanceState); - SplashScreen.show(this, SplashScreenImageResizeMode.COVER, ReactRootView.class, false); - - } - - - /** - * Returns the name of the main component registered from JavaScript. - * This is used to schedule rendering of the component. - */ - @Override - protected String getMainComponentName() { - return "main"; - } - - @Override - protected ReactActivityDelegate createReactActivityDelegate() { - return new ReactActivityDelegate(this, getMainComponentName()) { - @Override - protected ReactRootView createRootView() { - return new RNGestureHandlerEnabledRootView(MainActivity.this); - } - }; - } -} +package com.rajarsheechatterjee.LNReader; +import android.content.res.Configuration; +import android.content.Intent; + +import android.os.Bundle; +import android.graphics.Color; +import android.view.WindowManager; +import android.os.Build; +import android.view.View; +import android.view.Window; + +import com.facebook.react.ReactActivity; +import com.facebook.react.ReactActivityDelegate; +import com.facebook.react.ReactRootView; +import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView; + +import expo.modules.splashscreen.singletons.SplashScreen; +import expo.modules.splashscreen.SplashScreenImageResizeMode; + + +public class MainActivity extends ReactActivity { + + // Added automatically by Expo Config + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + Intent intent = new Intent("onConfigurationChanged"); + intent.putExtra("newConfig", newConfig); + sendBroadcast(intent); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + // SplashScreen.show(...) has to be called after super.onCreate(...) + // Below line is handled by '@expo/configure-splash-screen' command and it's discouraged to modify it manually + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(); + layoutParams.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; + getWindow().setAttributes(layoutParams); + } + + Window w = getWindow(); + w.setStatusBarColor(Color.TRANSPARENT); + w.setNavigationBarColor(Color.TRANSPARENT); + w.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); + + super.onCreate(savedInstanceState); + SplashScreen.show(this, SplashScreenImageResizeMode.COVER, ReactRootView.class, false); + + } + + + /** + * Returns the name of the main component registered from JavaScript. + * This is used to schedule rendering of the component. + */ + @Override + protected String getMainComponentName() { + return "main"; + } + + @Override + protected ReactActivityDelegate createReactActivityDelegate() { + return new ReactActivityDelegate(this, getMainComponentName()) { + @Override + protected ReactRootView createRootView() { + return new RNGestureHandlerEnabledRootView(MainActivity.this); + } + }; + } +} diff --git a/android/gradlew b/android/gradlew old mode 100755 new mode 100644 index 2fe81a7d..accc54f8 --- a/android/gradlew +++ b/android/gradlew @@ -1,183 +1,183 @@ -#!/usr/bin/env sh - -# -# Copyright 2015 the original author or authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn () { - echo "$*" -} - -die () { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=`expr $i + 1` - done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -exec "$JAVACMD" "$@" +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/app.json b/app.json index 76517ca1..2f08af24 100644 --- a/app.json +++ b/app.json @@ -1,11 +1,11 @@ -{ - "expo": { - "name": "LNReader", - "slug": "LNReader", - "scheme": "lnreader", - "notification": { - "icon": "./assets/notification.png", - "color": "#00adb5" - } - } -} +{ + "expo": { + "name": "LNReader", + "slug": "LNReader", + "scheme": "lnreader", + "notification": { + "icon": "./assets/notification.png", + "color": "#00adb5" + } + } +} diff --git a/babel.config.js b/babel.config.js index 2900afe9..9d89e131 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,4 +1,4 @@ -module.exports = function(api) { +module.exports = function (api) { api.cache(true); return { presets: ['babel-preset-expo'], diff --git a/index.js b/index.js index d689463b..a7d7c50e 100644 --- a/index.js +++ b/index.js @@ -1,5 +1,5 @@ import 'react-native-gesture-handler'; -import { registerRootComponent } from 'expo'; +import {registerRootComponent} from 'expo'; import App from './App'; diff --git a/metro.config.js b/metro.config.js index 9430b0f9..f6341cba 100644 --- a/metro.config.js +++ b/metro.config.js @@ -1,4 +1,4 @@ // Learn more https://docs.expo.io/guides/customizing-metro -const { getDefaultConfig } = require('expo/metro-config'); +const {getDefaultConfig} = require('expo/metro-config'); module.exports = getDefaultConfig(__dirname); diff --git a/package-lock.json b/package-lock.json index 1281148a..02adbf18 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,19810 +1,22879 @@ -{ - "name": "lnreader", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "lnreader", - "version": "1.0.0", - "dependencies": { - "@react-native-async-storage/async-storage": "^1.13.0", - "@react-native-community/masked-view": "0.1.10", - "@react-native-community/netinfo": "6.0.0", - "@react-native-community/slider": "3.0.3", - "@react-navigation/material-bottom-tabs": "^5.3.10", - "@react-navigation/native": "^5.8.10", - "@react-navigation/stack": "^5.12.8", - "expo": "^41.0.1", - "expo-document-picker": "^9.1.2", - "expo-file-system": "~11.0.2", - "expo-font": "~9.1.0", - "expo-haptics": "~10.0.0", - "expo-linear-gradient": "~9.1.0", - "expo-linking": "~2.2.3", - "expo-notifications": "~0.11.6", - "expo-splash-screen": "^0.11.2", - "expo-sqlite": "~9.1.0", - "expo-updates": "~0.5.4", - "expo-web-browser": "~9.1.0", - "moment": "^2.29.1", - "qs": "^6.10.1", - "react": "16.13.1", - "react-dom": "16.13.1", - "react-native": "^0.64.2", - "react-native-background-actions": "^2.6.1", - "react-native-cheerio": "^1.0.0-rc.4", - "react-native-device-info": "^8.1.3", - "react-native-easing-gradient": "^0.1.2", - "react-native-fast-image": "^8.3.4", - "react-native-gesture-handler": "~1.10.2", - "react-native-navigation-bar-color": "^2.0.1", - "react-native-pager-view": "^5.1.10", - "react-native-paper": "^4.5.0", - "react-native-reanimated": "^2.1.0", - "react-native-safe-area-context": "3.2.0", - "react-native-screens": "~3.0.0", - "react-native-swipe-gestures": "^1.0.5", - "react-native-tab-view": "^3.0.1", - "react-native-tts": "^4.1.0", - "react-native-unimodules": "~0.13.3", - "react-native-vector-icons": "^7.1.0", - "react-native-web": "^0.16.5", - "react-native-webview": "^11.6.2", - "react-redux": "^7.2.2", - "redux": "^4.0.5", - "redux-persist": "^6.0.0", - "redux-thunk": "^2.3.0", - "rn-sliding-up-panel": "^2.4.4" - }, - "devDependencies": { - "@babel/core": "~7.9.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dependencies": { - "@babel/highlight": "^7.12.13" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", - "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==" - }, - "node_modules/@babel/core": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", - "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", - "dependencies": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.0", - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helpers": "^7.9.0", - "@babel/parser": "^7.9.0", - "@babel/template": "^7.8.6", - "@babel/traverse": "^7.9.0", - "@babel/types": "^7.9.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@babel/generator": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.0.tgz", - "integrity": "sha512-C6u00HbmsrNPug6A+CiNl8rEys7TsdcXwg12BHi2ca5rUfAs3+UwZsuDQSXnc+wCElCXMB8gMaJ3YXDdh8fAlg==", - "dependencies": { - "@babel/types": "^7.14.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", - "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", - "dependencies": { - "@babel/types": "^7.12.13" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", - "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", - "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" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.0.tgz", - "integrity": "sha512-6pXDPguA5zC40Y8oI5mqr+jEUpjMJonKvknvA+vD8CYDz5uuXEwWBK8sRAsE/t3gfb1k15AQb9RhwpscC4nUJQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.12.13", - "@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" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz", - "integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "regexpu-core": "^4.7.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz", - "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" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", - "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", - "dependencies": { - "@babel/types": "^7.13.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "dependencies": { - "@babel/types": "^7.12.13" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", - "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", - "dependencies": { - "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.16" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", - "dependencies": { - "@babel/types": "^7.13.12" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", - "dependencies": { - "@babel/types": "^7.13.12" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", - "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", - "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.0", - "@babel/types": "^7.14.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", - "dependencies": { - "@babel/types": "^7.12.13" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", - "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-wrap-function": "^7.13.0", - "@babel/types": "^7.13.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", - "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" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", - "dependencies": { - "@babel/types": "^7.13.12" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", - "dependencies": { - "@babel/types": "^7.12.1" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "dependencies": { - "@babel/types": "^7.12.13" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==" - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", - "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" - } - }, - "node_modules/@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", - "dependencies": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.0.tgz", - "integrity": "sha512-AHbfoxesfBALg33idaTBVUkLnfXtsgvJREf93p4p0Lwsz4ppfE7g1tpEXVm4vrxUcH4DVhAa9Z1m1zqf9WUC7Q==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.15.tgz", - "integrity": "sha512-VapibkWzFeoa6ubXy/NgV5U2U4MVnUlvnx6wo1XhlsaTrLYWE0UFpDQsVrmn22q5CzeloqJ8gEMHSKxuee6ZdA==", - "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" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.13.tgz", - "integrity": "sha512-8SCJ0Ddrpwv4T7Gwb33EmW1V9PY5lggTO+A8WjyIwxrSHDUyBw4MtF96ifn1n8H806YlxbVCoKXbbmzD6RD+cA==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.13.15.tgz", - "integrity": "sha512-ibAMAqUm97yzi+LPgdr5Nqb9CMkeieGHvwPg1ywSGjZrZHQEGqE01HmOio8kxRpA/+VtOHouIVy2FMpBbtltjA==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.13.11", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-decorators": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz", - "integrity": "sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-default-from": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.12.13.tgz", - "integrity": "sha512-idIsBT+DGXdOHL82U+8bwX4goHm/z10g8sGGrQroh+HCRcm7mDv/luaGdWJQMTuCX2FsdXS7X0Nyyzp4znAPJA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-syntax-export-default-from": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz", - "integrity": "sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz", - "integrity": "sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz", - "integrity": "sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz", - "integrity": "sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz", - "integrity": "sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz", - "integrity": "sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==", - "dependencies": { - "@babel/compat-data": "^7.13.8", - "@babel/helper-compilation-targets": "^7.13.8", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz", - "integrity": "sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz", - "integrity": "sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ==", - "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" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", - "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", - "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.13.tgz", - "integrity": "sha512-Rw6aIXGuqDLr6/LoBBYE57nKOzQpz/aDkKlMqEwH+Vp0MXbG6H/TfRjaY343LKxzAKAMXIHsQ8JzaZKuDZ9MwA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-default-from": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.12.13.tgz", - "integrity": "sha512-gVry0zqoums0hA+EniCYK3gABhjYSLX1dVuwYpPw9DrLNA4/GovXySHVg4FGRsZht09ON/5C2NVx3keq+qqVGQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.13.tgz", - "integrity": "sha512-J/RYxnlSLXZLVR7wTRsozxKT8qbsx1mNKJzXEEjQ0Kjx1ZACcyHgbanNWNCFtc36IzuWhYWPpvJFFoexoOWFmA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz", - "integrity": "sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", - "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz", - "integrity": "sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", - "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", - "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" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", - "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.13.16.tgz", - "integrity": "sha512-ad3PHUxGnfWF4Efd3qFuznEtZKoBp0spS+DgqzVzRPV7urEBvPLue3y2j80w4Jf2YLzZHj8TOv/Lmvdmh3b2xg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz", - "integrity": "sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-replace-supers": "^7.13.0", - "@babel/helper-split-export-declaration": "^7.12.13", - "globals": "^11.1.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", - "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz", - "integrity": "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", - "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", - "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", - "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.13.0.tgz", - "integrity": "sha512-EXAGFMJgSX8gxWD7PZtW/P6M+z74jpx3wm/+9pn+c2dOawPpBkUX7BrfyPvo6ZpXbgRIEuwgwDb/MGlKvu2pOg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-flow": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", - "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", - "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", - "dependencies": { - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", - "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", - "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.0.tgz", - "integrity": "sha512-CF4c5LX4LQ03LebQxJ5JZes2OYjzBuk1TdiF7cG7d5dK4lAdw9NZmaxq5K/mouUdNeqwz3TNjnW6v01UqUNgpQ==", - "dependencies": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", - "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" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", - "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" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", - "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", - "dependencies": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", - "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", - "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-assign": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.12.13.tgz", - "integrity": "sha512-4QxDMc0lAOkIBSfCrnSGbAJ+4epDBF2XXwcLXuBcG1xl9u7LrktNVD4+LwhL47XuKVPQ7R25e/WdcV+h97HyZA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", - "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/helper-replace-supers": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz", - "integrity": "sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", - "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.13.tgz", - "integrity": "sha512-MprESJzI9O5VnJZrL7gg1MpdqmiFcUv41Jc7SahxYsNP2kDkFqClxxTZq+1Qv4AFCamm+GXMRDQINNn+qrxmiA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz", - "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" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.13.tgz", - "integrity": "sha512-FXYw98TTJ125GVCCkFLZXlZ1qGcsYqNQhVBQcZjyrwf8FEUtVfKIoidnO8S0q+KBQpDYNTmiGo1gn67Vti04lQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.13.tgz", - "integrity": "sha512-O5JJi6fyfih0WfDgIJXksSPhGP/G0fQpfxYy87sDc+1sFmsCS6wr3aAn+whbzkhbjtq4VMqLRaSzR6IsshIC0Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", - "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", - "dependencies": { - "regenerator-transform": "^0.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", - "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.15.tgz", - "integrity": "sha512-d+ezl76gx6Jal08XngJUkXM4lFXK/5Ikl9Mh4HKDxSfGJXmZ9xG64XT2oivBzfxb/eQ62VfvoMkaCZUKJMVrBA==", - "dependencies": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-polyfill-corejs2": "^0.2.0", - "babel-plugin-polyfill-corejs3": "^0.2.0", - "babel-plugin-polyfill-regenerator": "^0.2.0", - "semver": "^6.3.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", - "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", - "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", - "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", - "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", - "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.13.0.tgz", - "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" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", - "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", - "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.17.tgz", - "integrity": "sha512-9PMijx8zFbCwTHrd2P4PJR5nWGH3zWebx2OcpTjqQrHhCiL2ssSR2Sc9ko2BsI2VmVBfoaQmPrlMTCui4LmXQg==", - "dependencies": { - "@babel/compat-data": "^7.12.13", - "@babel/helper-compilation-targets": "^7.12.17", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-proposal-async-generator-functions": "^7.12.13", - "@babel/plugin-proposal-class-properties": "^7.12.13", - "@babel/plugin-proposal-dynamic-import": "^7.12.17", - "@babel/plugin-proposal-export-namespace-from": "^7.12.13", - "@babel/plugin-proposal-json-strings": "^7.12.13", - "@babel/plugin-proposal-logical-assignment-operators": "^7.12.13", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.13", - "@babel/plugin-proposal-numeric-separator": "^7.12.13", - "@babel/plugin-proposal-object-rest-spread": "^7.12.13", - "@babel/plugin-proposal-optional-catch-binding": "^7.12.13", - "@babel/plugin-proposal-optional-chaining": "^7.12.17", - "@babel/plugin-proposal-private-methods": "^7.12.13", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@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.13", - "@babel/plugin-transform-arrow-functions": "^7.12.13", - "@babel/plugin-transform-async-to-generator": "^7.12.13", - "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.12.13", - "@babel/plugin-transform-classes": "^7.12.13", - "@babel/plugin-transform-computed-properties": "^7.12.13", - "@babel/plugin-transform-destructuring": "^7.12.13", - "@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.12.13", - "@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.12.13", - "@babel/plugin-transform-modules-commonjs": "^7.12.13", - "@babel/plugin-transform-modules-systemjs": "^7.12.13", - "@babel/plugin-transform-modules-umd": "^7.12.13", - "@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.12.13", - "@babel/plugin-transform-property-literals": "^7.12.13", - "@babel/plugin-transform-regenerator": "^7.12.13", - "@babel/plugin-transform-reserved-words": "^7.12.13", - "@babel/plugin-transform-shorthand-properties": "^7.12.13", - "@babel/plugin-transform-spread": "^7.12.13", - "@babel/plugin-transform-sticky-regex": "^7.12.13", - "@babel/plugin-transform-template-literals": "^7.12.13", - "@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.3", - "@babel/types": "^7.12.17", - "core-js-compat": "^3.8.0", - "semver": "^5.5.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@babel/preset-flow": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.13.13.tgz", - "integrity": "sha512-MDtwtamMifqq3R2mC7l3A3uFalUb3NH5TIBQWjN/epEPlZktcLq4se3J+ivckKrLMGsR7H9LW8+pYuIUN9tsKg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-transform-flow-strip-types": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "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" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.12.17.tgz", - "integrity": "sha512-T513uT4VSThRcmWeqcLkITKJ1oGQho9wfWuhQm10paClQkp1qyd0Wf8mvC8Se7UYssMyRSj4tZYpVTkCmAK/mA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-transform-typescript": "^7.12.17" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/register": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.13.16.tgz", - "integrity": "sha512-dh2t11ysujTwByQjXNgJ48QZ2zcXKQVdV8s0TbeMI0flmtGWCdTwK9tJiACHXPLmncm5+ktNn/diojA45JE4jg==", - "dependencies": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.0", - "source-map-support": "^0.5.16" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", - "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - } - }, - "node_modules/@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "node_modules/@babel/traverse": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", - "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.0", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.0", - "@babel/types": "^7.14.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "node_modules/@babel/types": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.0.tgz", - "integrity": "sha512-O2LVLdcnWplaGxiPBz12d0HcdN8QdxdsWYhz5LSeuukV/5mn2xUUc3gBeU4QBYPJ18g/UToe8F532XJ608prmg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - }, - "node_modules/@callstack/react-theme-provider": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@callstack/react-theme-provider/-/react-theme-provider-3.0.5.tgz", - "integrity": "sha512-Iec+ybWN0FvNj87sD3oWo/49edGUP0UOSdMnzCJEFJIDYr992ECIuOV89burAAh2/ibPCxgLiK6dmgv2mO/8Tg==", - "dependencies": { - "deepmerge": "^3.2.0", - "hoist-non-react-statics": "^3.3.0" - }, - "peerDependencies": { - "react": "^16.3.0" - } - }, - "node_modules/@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dependencies": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - }, - "bin": { - "watch": "cli.js" - }, - "engines": { - "node": ">=0.1.95" - } - }, - "node_modules/@egjs/hammerjs": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/@egjs/hammerjs/-/hammerjs-2.0.17.tgz", - "integrity": "sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==", - "dependencies": { - "@types/hammerjs": "^2.0.36" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@expo/config": { - "version": "3.3.38", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-3.3.38.tgz", - "integrity": "sha512-0SsvF7yTy+kdJaAc2W75yhwnaXIRasnA1Vygna83tlPhCx6ynIBzTbJAvdkddSk5euUTJpXc5nePaflGvNboXw==", - "dependencies": { - "@babel/core": "7.9.0", - "@babel/plugin-proposal-class-properties": "~7.12.13", - "@babel/preset-env": "~7.12.13", - "@babel/preset-typescript": "~7.12.13", - "@expo/config-plugins": "1.0.28", - "@expo/config-types": "^40.0.0-beta.2", - "@expo/json-file": "8.2.29", - "fs-extra": "9.0.0", - "getenv": "^1.0.0", - "glob": "7.1.6", - "require-from-string": "^2.0.2", - "resolve-from": "^5.0.0", - "semver": "7.3.2", - "slugify": "^1.3.4" - } - }, - "node_modules/@expo/config-plugins": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-1.0.28.tgz", - "integrity": "sha512-i5SpC6U3LjRQlwi1xM4SRj8dR2Qm+0dykPo0GeesByB7IvT36AT1ZjI7VjecuoZ6yKbLpaa5tWvU3JGObxIPSw==", - "dependencies": { - "@expo/config-types": "^40.0.0-beta.2", - "@expo/configure-splash-screen": "0.3.4", - "@expo/image-utils": "0.3.13", - "@expo/json-file": "8.2.29", - "@expo/plist": "0.0.12", - "find-up": "~5.0.0", - "fs-extra": "9.0.0", - "getenv": "^1.0.0", - "glob": "7.1.6", - "resolve-from": "^5.0.0", - "slash": "^3.0.0", - "slugify": "^1.3.4", - "xcode": "^3.0.1", - "xml2js": "^0.4.23" - } - }, - "node_modules/@expo/config-types": { - "version": "40.0.0-beta.2", - "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-40.0.0-beta.2.tgz", - "integrity": "sha512-t9pHCQMXOP4nwd7LGXuHkLlFy0JdfknRSCAeVF4Kw2/y+5OBbR9hW9ZVnetpBf0kORrekgiI7K/qDaa3hh5+Qg==" - }, - "node_modules/@expo/configure-splash-screen": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@expo/configure-splash-screen/-/configure-splash-screen-0.3.4.tgz", - "integrity": "sha512-HsukM03X5/EXSucVsLN/oLqyFq/1jAjpADkgU1HLaezFpkr+TOquI6yDwdDp1450kcm891PE/SYJ+mCdPxzDLw==", - "dependencies": { - "color-string": "^1.5.3", - "commander": "^5.1.0", - "core-js": "^3.6.5", - "deep-equal": "^2.0.3", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "lodash": "^4.17.15", - "pngjs": "^5.0.0", - "xcode": "^3.0.0", - "xml-js": "^1.6.11" - }, - "bin": { - "configure-splash-screen": "build/index-cli.js", - "expo-splash-screen": "build/index-cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/image-utils": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.3.13.tgz", - "integrity": "sha512-BpKoFVJBjG9H5AU040Skrm3R2uDGpWXBU/4TivB5H10cyJphoJKp3GNJVPHYLOVc70OtAxjWDIhLMW6xsWfrgw==", - "dependencies": { - "@expo/spawn-async": "1.5.0", - "chalk": "^4.0.0", - "fs-extra": "9.0.0", - "getenv": "^1.0.0", - "jimp": "0.12.1", - "mime": "^2.4.4", - "node-fetch": "^2.6.0", - "parse-png": "^2.1.0", - "resolve-from": "^5.0.0", - "semver": "7.3.2", - "tempy": "0.3.0" - } - }, - "node_modules/@expo/json-file": { - "version": "8.2.29", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.2.29.tgz", - "integrity": "sha512-9C8XwpJiJN9fyClnnNDSTh034zJU9hon6MCUqbBa4dZYQN7OZ00KFZEpbtjy+FndE7YD+KagDxRD6O1HS5vU0g==", - "dependencies": { - "@babel/code-frame": "~7.10.4", - "fs-extra": "9.0.0", - "json5": "^1.0.1", - "write-file-atomic": "^2.3.0" - } - }, - "node_modules/@expo/json-file/node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/@expo/json-file/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/@expo/metro-config": { - "version": "0.1.64", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.1.64.tgz", - "integrity": "sha512-ooD+XOVGnKPIIZbyfVTvMeQ3p9HpRt4aNCehSM6H1ueQm8+IpVwrhw8sJjL5xr+FVxFqj0+Ga9DI8d0AXS8U4g==", - "dependencies": { - "@expo/config": "3.3.38", - "chalk": "^4.1.0", - "getenv": "^1.0.0", - "metro-react-native-babel-transformer": "^0.59.0" - } - }, - "node_modules/@expo/plist": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.0.12.tgz", - "integrity": "sha512-anGvLk58fxfeHY2PbtH79VxhrLDPGd+173pHYYXNg9HlfbrEVLI2Vo0ZBOrr/cYr7cgU5A/WNcMphRoO/KfYZQ==", - "dependencies": { - "base64-js": "^1.2.3", - "xmlbuilder": "^14.0.0", - "xmldom": "~0.5.0" - } - }, - "node_modules/@expo/plist/node_modules/xmlbuilder": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-14.0.0.tgz", - "integrity": "sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg==", - "engines": { - "node": ">=8.0" - } - }, - "node_modules/@expo/prebuild-config": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-2.0.3.tgz", - "integrity": "sha512-ruZHhdEB0nv7mHwssUFXeYeGQ8Atfeben0CdO461cmjQ/CwxmlusrkFdGfMucj5CocR9WujBr/nIMvfm4FIDIA==", - "dependencies": { - "@expo/config": "5.0.3", - "@expo/config-plugins": "3.0.3", - "@expo/config-types": "^41.0.0", - "@expo/image-utils": "~0.3.14", - "@expo/json-file": "^8.2.30", - "debug": "^4.3.1", - "fs-extra": "^9.0.0", - "resolve-from": "^5.0.0" - } - }, - "node_modules/@expo/prebuild-config/node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/@expo/prebuild-config/node_modules/@expo/config": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-5.0.3.tgz", - "integrity": "sha512-FMv2Jk/v3QZXaNN/mGKqj3wLvsbAa1RjtSTNhJ7QxMiSLl6vlmfMutmKyBiuzk2KDCbELR65JkDf15m4sAZCGg==", - "dependencies": { - "@babel/core": "7.9.0", - "@babel/plugin-proposal-class-properties": "~7.12.13", - "@babel/preset-env": "~7.12.13", - "@babel/preset-typescript": "~7.12.13", - "@expo/config-plugins": "3.0.3", - "@expo/config-types": "^41.0.0", - "@expo/json-file": "8.2.30", - "fs-extra": "9.0.0", - "getenv": "^1.0.0", - "glob": "7.1.6", - "require-from-string": "^2.0.2", - "resolve-from": "^5.0.0", - "semver": "7.3.2", - "slugify": "^1.3.4" - } - }, - "node_modules/@expo/prebuild-config/node_modules/@expo/config-plugins": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-3.0.3.tgz", - "integrity": "sha512-+DWHd/2L3O+njVercxGSzcBUXMm5CSzdvIK+7dU+FRhoiF57y2NzBhfNQcReYx/EY1coBrYOsMtENPhV1tWoWQ==", - "dependencies": { - "@expo/config-types": "^41.0.0", - "@expo/json-file": "8.2.30", - "@expo/plist": "0.0.13", - "debug": "^4.3.1", - "find-up": "~5.0.0", - "fs-extra": "9.0.0", - "getenv": "^1.0.0", - "glob": "7.1.6", - "resolve-from": "^5.0.0", - "slash": "^3.0.0", - "xcode": "^3.0.1", - "xml2js": "^0.4.23" - } - }, - "node_modules/@expo/prebuild-config/node_modules/@expo/config-types": { - "version": "41.0.0", - "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-41.0.0.tgz", - "integrity": "sha512-Ax0pHuY5OQaSrzplOkT9DdpdmNzaVDnq9VySb4Ujq7UJ4U4jriLy8u93W98zunOXpcu0iiKubPsqD6lCiq0pig==" - }, - "node_modules/@expo/prebuild-config/node_modules/@expo/image-utils": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.3.14.tgz", - "integrity": "sha512-n+JkLZ71CWuNKLVVsPTzMGRwmbeKiVQw/2b99Ro7znCKzJy3tyE5T2C6WBvYh/5h/hjg8TqEODjXXWucRIzMXA==", - "dependencies": { - "@expo/spawn-async": "1.5.0", - "chalk": "^4.0.0", - "fs-extra": "9.0.0", - "getenv": "^1.0.0", - "jimp": "0.12.1", - "mime": "^2.4.4", - "node-fetch": "^2.6.0", - "parse-png": "^2.1.0", - "resolve-from": "^5.0.0", - "semver": "7.3.2", - "tempy": "0.3.0" - } - }, - "node_modules/@expo/prebuild-config/node_modules/@expo/json-file": { - "version": "8.2.30", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.2.30.tgz", - "integrity": "sha512-vrgGyPEXBoFI5NY70IegusCSoSVIFV3T3ry4tjJg1MFQKTUlR7E0r+8g8XR6qC705rc2PawaZQjqXMAVtV6s2A==", - "dependencies": { - "@babel/code-frame": "~7.10.4", - "fs-extra": "9.0.0", - "json5": "^1.0.1", - "write-file-atomic": "^2.3.0" - } - }, - "node_modules/@expo/prebuild-config/node_modules/@expo/plist": { - "version": "0.0.13", - "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.0.13.tgz", - "integrity": "sha512-zGPSq9OrCn7lWvwLLHLpHUUq2E40KptUFXn53xyZXPViI0k9lbApcR9KlonQZ95C+ELsf0BQ3gRficwK92Ivcw==", - "dependencies": { - "base64-js": "^1.2.3", - "xmlbuilder": "^14.0.0", - "xmldom": "~0.5.0" - } - }, - "node_modules/@expo/prebuild-config/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/@expo/prebuild-config/node_modules/xmlbuilder": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-14.0.0.tgz", - "integrity": "sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg==", - "engines": { - "node": ">=8.0" - } - }, - "node_modules/@expo/spawn-async": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.5.0.tgz", - "integrity": "sha512-LB7jWkqrHo+5fJHNrLAFdimuSXQ2MQ4lA7SQW5bf/HbsXuV2VrT/jN/M8f/KoWt0uJMGN4k/j7Opx4AvOOxSew==", - "dependencies": { - "cross-spawn": "^6.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@expo/vector-icons": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-12.0.4.tgz", - "integrity": "sha512-/EFbXri7jZmqj1jTY6wpauvMN0DY0Epic003d43yWqrScLlVERaxXrOR07BNuCZvVMHBAzXN4VbOzUUUTq6j8g==", - "dependencies": { - "lodash.frompairs": "^4.0.1", - "lodash.isequal": "^4.5.0", - "lodash.isstring": "^4.0.1", - "lodash.omit": "^4.5.0", - "lodash.pick": "^4.4.0", - "lodash.template": "^4.5.0" - } - }, - "node_modules/@expo/websql": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@expo/websql/-/websql-1.0.1.tgz", - "integrity": "sha1-//DPnBuqH3D54dZYt8OaQg2bEKk=", - "dependencies": { - "argsarray": "^0.0.1", - "immediate": "^3.2.2", - "noop-fn": "^1.0.0", - "pouchdb-collections": "^1.0.1", - "tiny-queue": "^0.2.1" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz", - "integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==" - }, - "node_modules/@hapi/topo": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.0.0.tgz", - "integrity": "sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@ide/backoff": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@ide/backoff/-/backoff-1.0.0.tgz", - "integrity": "sha512-F0YfUDjvT+Mtt/R4xdl2X0EYCHMMiJqNLdxHD++jDT5ydEFIyqbCHh51Qx2E211dgZprPKhV7sHmnXKpLuvc5g==" - }, - "node_modules/@jest/create-cache-key-function": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-26.6.2.tgz", - "integrity": "sha512-LgEuqU1f/7WEIPYqwLPIvvHuc1sB6gMVbT6zWhin3txYUNYK/kGQrC1F2WR4gR34YlI9bBtViTm5z98RqVZAaw==", - "dependencies": { - "@jest/types": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "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" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jimp/bmp": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.12.1.tgz", - "integrity": "sha512-t16IamuBMv4GiGa1VAMzsgrVKVANxXG81wXECzbikOUkUv7pKJ2vHZDgkLBEsZQ9sAvFCneM1+yoSRpuENrfVQ==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1", - "bmp-js": "^0.1.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/core": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.12.1.tgz", - "integrity": "sha512-mWfjExYEjHxBal+1gPesGChOQBSpxO7WUQkrO9KM7orboitOdQ15G5UA75ce7XVZ+5t+FQPOLmVkVZzzTQSEJA==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1", - "any-base": "^1.1.0", - "buffer": "^5.2.0", - "exif-parser": "^0.1.12", - "file-type": "^9.0.0", - "load-bmfont": "^1.3.1", - "mkdirp": "^0.5.1", - "phin": "^2.9.1", - "pixelmatch": "^4.0.2", - "tinycolor2": "^1.4.1" - } - }, - "node_modules/@jimp/custom": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.12.1.tgz", - "integrity": "sha512-bVClp8FEJ/11GFTKeRTrfH7NgUWvVO5/tQzO/68aOwMIhbz9BOYQGh533K9+mSy29VjZJo8jxZ0C9ZwYHuFwfA==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/core": "^0.12.1" - } - }, - "node_modules/@jimp/gif": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.12.1.tgz", - "integrity": "sha512-cGn/AcvMGUGcqR6ByClGSnrja4AYmTwsGVXTQ1+EmfAdTiy6ztGgZCTDpZ/tq4SpdHXwm9wDHez7damKhTrH0g==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1", - "omggif": "^1.0.9" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/jpeg": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.12.1.tgz", - "integrity": "sha512-UoCUHbKLj2CDCETd7LrJnmK/ExDsSfJXmc1pKkfgomvepjXogdl2KTHf141wL6D+9CfSD2VBWQLC5TvjMvcr9A==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1", - "jpeg-js": "^0.4.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-blit": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.12.1.tgz", - "integrity": "sha512-VRBB6bx6EpQuaH0WX8ytlGNqUQcmuxXBbzL3e+cD0W6MluYibzQy089okvXcyUS72Q+qpSMmUDCVr3pDqLAsSA==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-blur": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.12.1.tgz", - "integrity": "sha512-rTFY0yrwVJFNgNsAlYGn2GYCRLVEcPQ6cqAuhNylXuR/7oH3Acul+ZWafeKtvN8D8uMlth/6VP74gruXvwffZw==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-circle": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.12.1.tgz", - "integrity": "sha512-+/OiBDjby7RBbQoDX8ZsqJRr1PaGPdTaaKUVGAsrE7KCNO9ODYNFAizB9lpidXkGgJ4Wx5R4mJy21i22oY/a4Q==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-color": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.12.1.tgz", - "integrity": "sha512-xlnK/msWN4uZ+Bu7+UrCs9oMzTSA9QE0jWFnF3h0aBsD8t1LGxozkckHe8nHtC/y/sxIa8BGKSfkiaW+r6FbnA==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1", - "tinycolor2": "^1.4.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-contain": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.12.1.tgz", - "integrity": "sha512-WZ/D6G0jhnBh2bkBh610PEh/caGhAUIAxYLsQsfSSlOxPsDhbj3S6hMbFKRgnDvf0hsd5zTIA0j1B0UG4kh18A==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-blit": ">=0.3.5", - "@jimp/plugin-resize": ">=0.3.5", - "@jimp/plugin-scale": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-cover": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.12.1.tgz", - "integrity": "sha512-ddWwTQO40GcabJ2UwUYCeuNxnjV4rBTiLprnjGMqAJCzdz3q3Sp20FkRf+H+E22k2v2LHss8dIOFOF4i6ycr9Q==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-crop": ">=0.3.5", - "@jimp/plugin-resize": ">=0.3.5", - "@jimp/plugin-scale": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-crop": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.12.1.tgz", - "integrity": "sha512-CKjVkrNO8FDZKYVpMireQW4SgKBSOdF+Ip/1sWssHHe77+jGEKqOjhYju+VhT3dZJ3+75rJNI9II7Kethp+rTw==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-displace": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.12.1.tgz", - "integrity": "sha512-MQAw2iuf1/bVJ6P95WWTLA+WBjvIZ7TeGBerkvBaTK8oWdj+NSLNRIYOIoyPbZ7DTL8f1SN4Vd6KD6BZaoWrwg==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-dither": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.12.1.tgz", - "integrity": "sha512-mCrBHdx2ViTLJDLcrobqGLlGhZF/Mq41bURWlElQ2ArvrQ3/xR52We9DNDfC08oQ2JVb6q3v1GnCCdn0KNojGQ==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-fisheye": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.12.1.tgz", - "integrity": "sha512-CHvYSXtHNplzkkYzB44tENPDmvfUHiYCnAETTY+Hx58kZ0w8ERZ+OiLhUmiBcvH/QHm/US1iiNjgGUAfeQX6dg==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-flip": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.12.1.tgz", - "integrity": "sha512-xi+Yayrnln8A/C9E3yQBExjxwBSeCkt/ZQg1CxLgszVyX/3Zo8+nkV8MJYpkTpj8LCZGTOKlsE05mxu/a3lbJQ==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-rotate": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-gaussian": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.12.1.tgz", - "integrity": "sha512-7O6eKlhL37hsLfV6WAX1Cvce7vOqSwL1oWbBveC1agutDlrtvcTh1s2mQ4Pde654hCJu55mq1Ur10+ote5j3qw==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-invert": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.12.1.tgz", - "integrity": "sha512-JTAs7A1Erbxwl+7ph7tgcb2PZ4WzB+3nb2WbfiWU8iCrKj17mMDSc5soaCCycn8wfwqvgB1vhRfGpseOLWxsuQ==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-mask": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.12.1.tgz", - "integrity": "sha512-bnDdY0RO/x5Mhqoy+056SN1wEj++sD4muAKqLD2CIT8Zq5M/0TA4hkdf/+lwFy3H2C0YTK39PSE9xyb4jPX3kA==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-normalize": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.12.1.tgz", - "integrity": "sha512-4kSaI4JLM/PNjHwbnAHgyh51V5IlPfPxYvsZyZ1US32pebWtocxSMaSuOaJUg7OGSkwSDBv81UR2h5D+Dz1b5A==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-print": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.12.1.tgz", - "integrity": "sha512-T0lNS3qU9SwCHOEz7AGrdp50+gqiWGZibOL3350/X/dqoFs1EvGDjKVeWncsGCyLlpfd7M/AibHZgu8Fx2bWng==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1", - "load-bmfont": "^1.4.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-blit": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-resize": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.12.1.tgz", - "integrity": "sha512-sbNn4tdBGcgGlPt9XFxCuDl4ZOoxa8/Re8nAikyxYhRss2Dqz91ARbBQxOf1vlUGeicQMsjEuWbPQAogTSJRug==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-rotate": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.12.1.tgz", - "integrity": "sha512-RYkLzwG2ervG6hHy8iepbIVeWdT1kz4Qz044eloqo6c66MK0KAqp228YI8+CAKm0joQnVDC/A0FgRIj/K8uyAw==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-blit": ">=0.3.5", - "@jimp/plugin-crop": ">=0.3.5", - "@jimp/plugin-resize": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-scale": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.12.1.tgz", - "integrity": "sha512-zjNVI1fUj+ywfG78T1ZU33g9a5sk4rhEQkkhtny8koAscnVsDN2YaZEKoFli54kqaWh5kSS5DDL7a/9pEfXnFQ==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-resize": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-shadow": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.12.1.tgz", - "integrity": "sha512-Z82IwvunXWQ2jXegd3W3TYUXpfJcEvNbHodr7Z+oVnwhM1OoQ5QC6RSRQwsj2qXIhbGffQjH8eguHgEgAV+u5w==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-blur": ">=0.3.5", - "@jimp/plugin-resize": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-threshold": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.12.1.tgz", - "integrity": "sha512-PFezt5fSk0q+xKvdpuv0eLggy2I7EgYotrK8TRZOT0jimuYFXPF0Z514c6szumoW5kEsRz04L1HkPT1FqI97Yg==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-color": ">=0.8.0", - "@jimp/plugin-resize": ">=0.8.0" - } - }, - "node_modules/@jimp/plugins": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.12.1.tgz", - "integrity": "sha512-7+Yp29T6BbYo+Oqnc+m7A5AH+O+Oy5xnxvxlfmsp48+SuwEZ4akJp13Gu2PSmRlylENzR7MlWOxzhas5ERNlIg==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/plugin-blit": "^0.12.1", - "@jimp/plugin-blur": "^0.12.1", - "@jimp/plugin-circle": "^0.12.1", - "@jimp/plugin-color": "^0.12.1", - "@jimp/plugin-contain": "^0.12.1", - "@jimp/plugin-cover": "^0.12.1", - "@jimp/plugin-crop": "^0.12.1", - "@jimp/plugin-displace": "^0.12.1", - "@jimp/plugin-dither": "^0.12.1", - "@jimp/plugin-fisheye": "^0.12.1", - "@jimp/plugin-flip": "^0.12.1", - "@jimp/plugin-gaussian": "^0.12.1", - "@jimp/plugin-invert": "^0.12.1", - "@jimp/plugin-mask": "^0.12.1", - "@jimp/plugin-normalize": "^0.12.1", - "@jimp/plugin-print": "^0.12.1", - "@jimp/plugin-resize": "^0.12.1", - "@jimp/plugin-rotate": "^0.12.1", - "@jimp/plugin-scale": "^0.12.1", - "@jimp/plugin-shadow": "^0.12.1", - "@jimp/plugin-threshold": "^0.12.1", - "timm": "^1.6.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/png": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.12.1.tgz", - "integrity": "sha512-tOUSJMJzcMAN82F9/Q20IToquIVWzvOe/7NIpVQJn6m+Lq6TtVmd7d8gdcna9AEFm2FIza5lhq2Kta6Xj0KXhQ==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1", - "pngjs": "^3.3.3" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/png/node_modules/pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/@jimp/tiff": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.12.1.tgz", - "integrity": "sha512-bzWDgv3202TKhaBGzV9OFF0PVQWEb4194h9kv5js348SSnbCusz/tzTE1EwKrnbDZThZPgTB1ryKs7D+Q9Mhmg==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "utif": "^2.0.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/types": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.12.1.tgz", - "integrity": "sha512-hg5OKXpWWeKGuDrfibrjWWhr7hqb7f552wqnPWSLQpVrdWgjH+hpOv6cOzdo9bsU78qGTelZJPxr0ERRoc+MhQ==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/bmp": "^0.12.1", - "@jimp/gif": "^0.12.1", - "@jimp/jpeg": "^0.12.1", - "@jimp/png": "^0.12.1", - "@jimp/tiff": "^0.12.1", - "timm": "^1.6.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/utils": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.12.1.tgz", - "integrity": "sha512-EjPkDQOzV/oZfbolEUgFT6SE++PtCccVBvjuACkttyCfl0P2jnpR49SwstyVLc2u8AwBAZEHHAw9lPYaMjtbXQ==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "regenerator-runtime": "^0.13.3" - } - }, - "node_modules/@react-native-async-storage/async-storage": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.15.4.tgz", - "integrity": "sha512-pC0MS6UBuv/YiVAxtzi7CgUed8oCQNYMtGt0yb/I9fI/BWTiJK5cj4YtW2XtL95K5IuvPX/6uGWaouZ8KqXwdg==", - "dependencies": { - "deep-assign": "^3.0.0" - }, - "peerDependencies": { - "react-native": "^0.60.6 || ^0.61.5 || ^0.62.2 || ^0.63.2 || ^0.64.0 || 1000.0.0" - } - }, - "node_modules/@react-native-community/cli-debugger-ui": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-5.0.1.tgz", - "integrity": "sha512-5gGKaaXYOVE423BUqxIfvfAVSj5Cg1cU/TpGbeg/iqpy2CfqyWqJB3tTuVUbOOiOvR5wbU8tti6pIi1pchJ+oA==", - "dependencies": { - "serve-static": "^1.13.1" - } - }, - "node_modules/@react-native-community/cli-hermes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-5.0.1.tgz", - "integrity": "sha512-nD+ZOFvu5MfjLB18eDJ01MNiFrzj8SDtENjGpf0ZRFndOWASDAmU54/UlU/wj8OzTToK1+S1KY7j2P2M1gleww==", - "dependencies": { - "@react-native-community/cli-platform-android": "^5.0.1", - "@react-native-community/cli-tools": "^5.0.1", - "chalk": "^3.0.0", - "hermes-profile-transformer": "^0.0.6", - "ip": "^1.1.5" - } - }, - "node_modules/@react-native-community/cli-hermes/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-hermes/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-hermes/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@react-native-community/cli-hermes/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@react-native-community/cli-hermes/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-hermes/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-platform-android": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-5.0.1.tgz", - "integrity": "sha512-qv9GJX6BJ+Y4qvV34vgxKwwN1cnveXUdP6y2YmTW7XoAYs5YUzKqHajpY58EyucAL2y++6+573t5y4U/9IIoww==", - "dependencies": { - "@react-native-community/cli-tools": "^5.0.1", - "chalk": "^3.0.0", - "execa": "^1.0.0", - "fs-extra": "^8.1.0", - "glob": "^7.1.3", - "jetifier": "^1.6.2", - "lodash": "^4.17.15", - "logkitty": "^0.7.1", - "slash": "^3.0.0", - "xmldoc": "^1.1.2" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/@react-native-community/cli-platform-ios": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-5.0.1.tgz", - "integrity": "sha512-Nr/edBEYJfElgBNvjDevs2BuDicsvQaM8nYkTGgp33pyuCZRBxsYxQqfsNmnLalTzcYaebjWj6AnjUSxzQBWqg==", - "dependencies": { - "@react-native-community/cli-tools": "^5.0.1", - "chalk": "^3.0.0", - "glob": "^7.1.3", - "js-yaml": "^3.13.1", - "lodash": "^4.17.15", - "plist": "^3.0.1", - "xcode": "^2.0.0" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/xcode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/xcode/-/xcode-2.1.0.tgz", - "integrity": "sha512-uCrmPITrqTEzhn0TtT57fJaNaw8YJs1aCzs+P/QqxsDbvPZSv7XMPPwXrKvHtD6pLjBM/NaVwraWJm8q83Y4iQ==", - "dependencies": { - "simple-plist": "^1.0.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@react-native-community/cli-server-api": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-5.0.1.tgz", - "integrity": "sha512-OOxL+y9AOZayQzmSW+h5T54wQe+QBc/f67Y9QlWzzJhkKJdYx+S4VOooHoD5PFJzGbYaxhu2YF17p517pcEIIA==", - "dependencies": { - "@react-native-community/cli-debugger-ui": "^5.0.1", - "@react-native-community/cli-tools": "^5.0.1", - "compression": "^1.7.1", - "connect": "^3.6.5", - "errorhandler": "^1.5.0", - "nocache": "^2.1.0", - "pretty-format": "^26.6.2", - "serve-static": "^1.13.1", - "ws": "^1.1.0" - } - }, - "node_modules/@react-native-community/cli-server-api/node_modules/ws": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", - "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", - "dependencies": { - "options": ">=0.0.5", - "ultron": "1.0.x" - } - }, - "node_modules/@react-native-community/cli-tools": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-5.0.1.tgz", - "integrity": "sha512-XOX5w98oSE8+KnkMZZPMRT7I5TaP8fLbDl0tCu40S7Epz+Zz924n80fmdu6nUDIfPT1nV6yH1hmHmWAWTDOR+Q==", - "dependencies": { - "chalk": "^3.0.0", - "lodash": "^4.17.15", - "mime": "^2.4.1", - "node-fetch": "^2.6.0", - "open": "^6.2.0", - "shell-quote": "1.6.1" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@react-native-community/cli-tools/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-types": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-5.0.1.tgz", - "integrity": "sha512-BesXnuFFlU/d1F3+sHhvKt8fUxbQlAbZ3hhMEImp9A6sopl8TEtryUGJ1dbazGjRXcADutxvjwT/i3LJVTIQug==", - "dependencies": { - "ora": "^3.4.0" - } - }, - "node_modules/@react-native-community/masked-view": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/@react-native-community/masked-view/-/masked-view-0.1.10.tgz", - "integrity": "sha512-rk4sWFsmtOw8oyx8SD3KSvawwaK7gRBSEIy2TAwURyGt+3TizssXP1r8nx3zY+R7v2vYYHXZ+k2/GULAT/bcaQ==", - "peerDependencies": { - "react": "^16.0", - "react-native": ">=0.57" - } - }, - "node_modules/@react-native-community/netinfo": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/netinfo/-/netinfo-6.0.0.tgz", - "integrity": "sha512-Z9M8VGcF2IZVOo2x+oUStvpCW/8HjIRi4+iQCu5n+PhC7OqCQX58KYAzdBr///alIfRXiu6oMb+lK+rXQH1FvQ==", - "peerDependencies": { - "react-native": ">=0.59" - } - }, - "node_modules/@react-native-community/slider": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@react-native-community/slider/-/slider-3.0.3.tgz", - "integrity": "sha512-8IeHfDwJ9/CTUwFs6x90VlobV3BfuPgNLjTgC6dRZovfCWigaZwVNIFFJnHBakK3pW2xErAPwhdvNR4JeNoYbw==", - "peerDependencies": { - "react": "*", - "react-native": "*" - } - }, - "node_modules/@react-native/assets": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@react-native/assets/-/assets-1.0.0.tgz", - "integrity": "sha512-KrwSpS1tKI70wuKl68DwJZYEvXktDHdZMG0k2AXD/rJVSlB23/X2CB2cutVR0HwNMJIal9HOUOBB2rVfa6UGtQ==" - }, - "node_modules/@react-native/normalize-color": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-1.0.0.tgz", - "integrity": "sha512-xUNRvNmCl3UGCPbbHvfyFMnpvLPoOjDCcp5bT9m2k+TF/ZBklEQwhPZlkrxRx2NhgFh1X3a5uL7mJ7ZR+8G7Qg==" - }, - "node_modules/@react-native/polyfills": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@react-native/polyfills/-/polyfills-1.0.0.tgz", - "integrity": "sha512-0jbp4RxjYopTsIdLl+/Fy2TiwVYHy4mgeu07DG4b/LyM0OS/+lPP5c9sbnt/AMlnF6qz2JRZpPpGw1eMNS6A4w==" - }, - "node_modules/@react-navigation/core": { - "version": "5.15.3", - "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-5.15.3.tgz", - "integrity": "sha512-3ZdyDInh8qg1kygCNkmh9lFgpDf29lTvPsaMe2mm/qvmxLKSgttWBz07P2fc181aV9jTdgQpzYfWZ5KWT036zw==", - "dependencies": { - "@react-navigation/routers": "^5.7.2", - "escape-string-regexp": "^4.0.0", - "nanoid": "^3.1.15", - "query-string": "^6.13.6", - "react-is": "^16.13.0" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/@react-navigation/material-bottom-tabs": { - "version": "5.3.15", - "resolved": "https://registry.npmjs.org/@react-navigation/material-bottom-tabs/-/material-bottom-tabs-5.3.15.tgz", - "integrity": "sha512-SpCSJxnDqN1a8oHNm3oTt3OYulDEPbeWP1FGwb9zeXW8El2kgwD+69D4KhnUNLYVSKNLu9HadgFOrG3ezp4HPQ==", - "peerDependencies": { - "@react-navigation/native": "^5.0.5", - "react": "*", - "react-native": "*", - "react-native-paper": ">= 3.0.0", - "react-native-vector-icons": ">= 6.0.0" - } - }, - "node_modules/@react-navigation/native": { - "version": "5.9.4", - "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-5.9.4.tgz", - "integrity": "sha512-BUCrOXfZDdKWBqM8OhOKQhCX5we4HUo5XG6tCQtVqQAep+7UcApZmMUuemUXDxVe8NPESUpoUlB0RaEpyIdfTQ==", - "dependencies": { - "@react-navigation/core": "^5.15.3", - "escape-string-regexp": "^4.0.0", - "nanoid": "^3.1.15" - }, - "peerDependencies": { - "react": "*", - "react-native": "*" - } - }, - "node_modules/@react-navigation/routers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-5.7.2.tgz", - "integrity": "sha512-BxNSMLHpU+oS37Xok0ql6rc9U7IC8aUD4+U5ZPbjDJ0pwzZxGGh0YOEBzfV4k/Ig3cbPdvVWbc1C9HHbCVr2oQ==", - "dependencies": { - "nanoid": "^3.1.15" - } - }, - "node_modules/@react-navigation/stack": { - "version": "5.14.4", - "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-5.14.4.tgz", - "integrity": "sha512-gQjWK8JHtVkD1p7wzjtSPuScJI0mSAk/N/gzgjQZo+rDUwgM8rOTDcVNRbtEOqCEgLQcZrZQHwhOjkrJirehjQ==", - "dependencies": { - "color": "^3.1.3", - "react-native-iphone-x-helper": "^1.3.0" - }, - "peerDependencies": { - "@react-native-community/masked-view": ">= 0.1.0", - "@react-navigation/native": "^5.0.5", - "react": "*", - "react-native": "*", - "react-native-gesture-handler": ">= 1.0.0", - "react-native-safe-area-context": ">= 0.6.0", - "react-native-screens": ">= 2.0.0-alpha.0 || >= 2.0.0-beta.0 || >= 2.0.0" - } - }, - "node_modules/@sideway/address": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.2.tgz", - "integrity": "sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", - "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/hammerjs": { - "version": "2.0.39", - "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.39.tgz", - "integrity": "sha512-lYR2Y/tV2ujpk/WyUc7S0VLI0a9hrtVIN9EwnrNo5oSEJI2cK2/XrgwOQmXLL3eTulOESvh9qP6si9+DWM9cOA==" - }, - "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", - "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/node": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.0.1.tgz", - "integrity": "sha512-TMkXt0Ck1y0KKsGr9gJtWGjttxlZnnvDtphxUOSd0bfaR6Q1jle+sPvrzNR1urqYTWMinoKvjKfXUGsumaO1PA==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.3", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", - "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" - }, - "node_modules/@types/react": { - "version": "17.0.4", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.4.tgz", - "integrity": "sha512-onz2BqScSFMoTRdJUZUDD/7xrusM8hBA2Fktk2qgaTYPCgPvWnDEgkrOs8hhPUf2jfcIXkJ5yK6VfYormJS3Jw==", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-redux": { - "version": "7.1.16", - "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.16.tgz", - "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" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz", - "integrity": "sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==" - }, - "node_modules/@types/yargs": { - "version": "15.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", - "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "20.2.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", - "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==" - }, - "node_modules/@unimodules/core": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@unimodules/core/-/core-7.1.0.tgz", - "integrity": "sha512-oLRT4Bkah3GEopkxmTgpHsRTRp+NJ1907ZjE9y/HLh32q7O/3mcbpY77Uvm+EXW0Vh14gOlU+bmkpC0hz3we0w==", - "dependencies": { - "compare-versions": "^3.4.0" - } - }, - "node_modules/@unimodules/react-native-adapter": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-6.2.2.tgz", - "integrity": "sha512-hBXL+IX3u+4TcAHu9lIItdycA7pYWZn3Tt7s5TTna9QKHjyrwo0zVss27LkpJ40tXRHyh/GJ8VzN2CD+0M5I2A==", - "dependencies": { - "invariant": "^2.2.4" - } - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/absolute-path": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/absolute-path/-/absolute-path-0.0.0.tgz", - "integrity": "sha1-p4di+9rftSl76ZsV01p4Wy8JW/c=" - }, - "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/anser": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", - "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==" - }, - "node_modules/ansi-fragments": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", - "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", - "dependencies": { - "colorette": "^1.0.7", - "slice-ansi": "^2.0.0", - "strip-ansi": "^5.0.0" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/any-base": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", - "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==" - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/appdirsjs": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.4.tgz", - "integrity": "sha512-WO5StDORR6JF/xYnXk/Fm0yu+iULaV5ULKuUw0Tu+jbgiTlSquaWBCgbpnsHLMXldf+fM3Gxn5p7vjond7He6w==" - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/argsarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/argsarray/-/argsarray-0.0.1.tgz", - "integrity": "sha1-bnIHtOzbObCviDA/pa4ivajfYcs=" - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-filter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", - "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=" - }, - "node_modules/array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=" - }, - "node_modules/array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=" - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, - "node_modules/assert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", - "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", - "dependencies": { - "es6-object-assign": "^1.1.0", - "is-nan": "^1.2.1", - "object-is": "^1.0.1", - "util": "^0.12.0" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ast-types": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", - "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz", - "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==", - "dependencies": { - "array-filter": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-module-resolver": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz", - "integrity": "sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA==", - "dependencies": { - "find-babel-config": "^1.1.0", - "glob": "^7.1.2", - "pkg-up": "^2.0.0", - "reselect": "^3.0.1", - "resolve": "^1.4.0" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz", - "integrity": "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==", - "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.0", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz", - "integrity": "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.0", - "core-js-compat": "^3.9.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz", - "integrity": "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-react-native-web": { - "version": "0.13.18", - "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.13.18.tgz", - "integrity": "sha512-f8pAxyKqXBNRIh8l4Sqju055BNec+DQlItdtutByYxULU0iJ1F7evIYE3skPKAkTB/xJH17l+n3Z8dVabGIIGg==" - }, - "node_modules/babel-plugin-syntax-trailing-function-commas": { - "version": "7.0.0-beta.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", - "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==" - }, - "node_modules/babel-preset-expo": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-8.3.0.tgz", - "integrity": "sha512-KmoFiEJ0A8QUH0OTh+mj3RBvv069FQsQ1hvZDi6tVMSzrW+Y/imsJMXgVboZN+XGOYnWFaGEKQ8BqNvBX+zKjA==", - "dependencies": { - "@babel/plugin-proposal-decorators": "^7.6.0", - "@babel/preset-env": "^7.6.3", - "babel-plugin-module-resolver": "^3.2.0", - "babel-plugin-react-native-web": "~0.13.6", - "metro-react-native-babel-preset": "~0.59.0" - } - }, - "node_modules/babel-preset-fbjs": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.3.0.tgz", - "integrity": "sha512-7QTLTCd2gwB2qGoi5epSULMHugSVgpcVt5YAeiFO9ABLrutDQzKfGwzxgZHLpugq8qMdg/DhRZDZ5CLKxBkEbw==", - "dependencies": { - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-syntax-class-properties": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-block-scoped-functions": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-member-expression-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-object-super": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-property-literals": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/badgin": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/badgin/-/badgin-1.2.2.tgz", - "integrity": "sha512-XtoSjNhy2D09qGiLhFWBJmBwBlmleQuwyYyjddWNCJ3gqGRBOBR25VGcd8CAOSghpEUmghB3LD4NpHrUG89zCg==" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/big-integer": { - "version": "1.6.48", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", - "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/blueimp-md5": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.18.0.tgz", - "integrity": "sha512-vE52okJvzsVWhcgUHOv+69OG3Mdg151xyn41aVQN/5W5S+S43qZhxECtYLAEHMSFWX6Mv5IZrzj3T5+JqXfj5Q==" - }, - "node_modules/bmp-js": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", - "integrity": "sha1-4Fpj95amwf8l9Hcex62twUjAcjM=" - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" - }, - "node_modules/bplist-creator": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.8.tgz", - "integrity": "sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA==", - "dependencies": { - "stream-buffers": "~2.2.0" - } - }, - "node_modules/bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", - "dependencies": { - "big-integer": "^1.6.44" - }, - "engines": { - "node": ">= 5.10.0" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "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" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dependencies": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "node_modules/buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" - }, - "node_modules/buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" - }, - "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dependencies": { - "callsites": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dependencies": { - "caller-callsite": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "engines": { - "node": ">=4" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001219", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001219.tgz", - "integrity": "sha512-c0yixVG4v9KBc/tQ2rlbB3A/bgBFRvl8h8M4IeUbqCca4gsiCfvtaheUssbnux/Mb66Vjz7x8yYjDgYcNQOhyQ==" - }, - "node_modules/capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dependencies": { - "rsvp": "^4.8.4" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/chalk/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/chalk/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/chalk/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "node_modules/clamp": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz", - "integrity": "sha1-ZqDmQBGBbjcZaCj9yMjBRzEshjQ=" - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-spinners": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", - "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", - "dependencies": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/color-string": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", - "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - }, - "node_modules/compare-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-urls/-/compare-urls-2.0.0.tgz", - "integrity": "sha512-eCJcWn2OYFEIqbm70ta7LQowJOOZZqq1a2YbbFCFI1uwSvj+TWMwXVn7vPR1ceFNcAIt5RSTDbwdlX82gYLTkA==", - "dependencies": { - "normalize-url": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==" - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "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" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/core-js": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.11.1.tgz", - "integrity": "sha512-k93Isqg7e4txZWMGNYwevZL9MiogLk8pd1PtwrmFmi8IBq4GXqUaVW/a33Llt6amSI36uSjd0GWwc9pTT9ALlQ==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.11.1.tgz", - "integrity": "sha512-aZ0e4tmlG/aOBHj92/TuOuZwp6jFvn1WNabU5VOVixzhu5t5Ao+JZkQOPlgNXu6ynwLrwJxklT4Gw1G1VGEh+g==", - "dependencies": { - "browserslist": "^4.16.5", - "semver": "7.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/create-react-class": { - "version": "15.7.0", - "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.7.0.tgz", - "integrity": "sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng==", - "dependencies": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" - } - }, - "node_modules/cross-fetch": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", - "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", - "dependencies": { - "node-fetch": "2.6.1" - } - }, - "node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "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" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", - "engines": { - "node": ">=4" - } - }, - "node_modules/css-in-js-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz", - "integrity": "sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA==", - "dependencies": { - "hyphenate-style-name": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "node_modules/css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dependencies": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "node_modules/css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", - "engines": { - "node": "*" - } - }, - "node_modules/csstype": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", - "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==" - }, - "node_modules/dayjs": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.5.tgz", - "integrity": "sha512-BUFis41ikLz+65iH6LHQCDm4YPMj5r1YFLdupPIyM4SGcXMmtiLQ7U37i+hGS8urIuqe7I/ou3IS1jVc4nbN4g==" - }, - "node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/deep-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-3.0.0.tgz", - "integrity": "sha512-YX2i9XjJ7h5q/aQ/IM9PEwEnDqETAIYbggmdDB3HLTlSgo1CxPsj6pvhPG68rq6SVE0+p+6Ywsm5fTYNrYtBWw==", - "deprecated": "Check out `lodash.merge` or `merge-options` instead.", - "dependencies": { - "is-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/deep-equal": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.5.tgz", - "integrity": "sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==", - "dependencies": { - "call-bind": "^1.0.0", - "es-get-iterator": "^1.1.1", - "get-intrinsic": "^1.0.1", - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.2", - "is-regex": "^1.1.1", - "isarray": "^2.0.5", - "object-is": "^1.1.4", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.3.0", - "side-channel": "^1.0.3", - "which-boxed-primitive": "^1.0.1", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deepmerge": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", - "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dependencies": { - "clone": "^1.0.2" - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/denodeify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", - "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=" - }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "node_modules/dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "dependencies": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" - } - }, - "node_modules/dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" - }, - "node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dependencies": { - "domelementtype": "1" - } - }, - "node_modules/domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "node_modules/electron-to-chromium": { - "version": "1.3.725", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.725.tgz", - "integrity": "sha512-2BbeAESz7kc6KBzs7WVrMc1BY5waUphk4D4DX5dSQXJhsc3tP5ZFaiyuL0AB7vUKzDYpIeYwTYlEfxyjsGUrhw==" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, - "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/error-ex/node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "node_modules/error-stack-parser": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", - "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", - "dependencies": { - "stackframe": "^1.1.1" - } - }, - "node_modules/errorhandler": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", - "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", - "dependencies": { - "accepts": "~1.3.7", - "escape-html": "~1.0.3" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-get-iterator": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", - "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.0", - "has-symbols": "^1.0.1", - "is-arguments": "^1.1.0", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.5", - "isarray": "^2.0.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=" - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/eventemitter2": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-1.0.5.tgz", - "integrity": "sha1-+YNhBRexc3wLncZDvsqTiTwE3xg=" - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "node_modules/exec-sh": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", - "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==" - }, - "node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "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" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/exif-parser": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", - "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=" - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/expo": { - "version": "41.0.1", - "resolved": "https://registry.npmjs.org/expo/-/expo-41.0.1.tgz", - "integrity": "sha512-Lk4Xdst+OfsLgBNeu89hxk0qFrZnHwwXFmBbJkYLlZkdC3tvNJ8jgGHsKg6jYpsnal/z0uVc+uk2ev91qXQykg==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "@expo/metro-config": "^0.1.63", - "@expo/vector-icons": "^12.0.4", - "@unimodules/core": "~7.1.0", - "@unimodules/react-native-adapter": "~6.2.2", - "babel-preset-expo": "~8.3.0", - "cross-spawn": "^6.0.5", - "expo-application": "~3.1.2", - "expo-asset": "~8.3.1", - "expo-constants": "~10.1.3", - "expo-error-recovery": "~2.1.0", - "expo-file-system": "~11.0.2", - "expo-font": "~9.1.0", - "expo-keep-awake": "~9.1.2", - "fbemitter": "^2.1.1", - "invariant": "^2.2.2", - "md5-file": "^3.2.3", - "pretty-format": "^26.4.0", - "react-native-safe-area-context": "3.2.0", - "serialize-error": "^2.1.0", - "uuid": "^3.4.0" - }, - "bin": { - "expo": "bin/cli.js" - } - }, - "node_modules/expo-application": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/expo-application/-/expo-application-3.1.2.tgz", - "integrity": "sha512-JZcKUpGmqzQ1zLxRxUditGzPqnPCXY6JT/Pbq4nyV4VPzjDd8wihVPuud+cuv8gHgdj8QLvKs/lcJJqN94EX5Q==" - }, - "node_modules/expo-asset": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-8.3.2.tgz", - "integrity": "sha512-MKOwkkN0lnQRcOdn5moqkHPmLgFoUSIYyrvMAJ767vTXvLvZgoQgvBwqCAXsXitIwEitG0Az3XZ23SfKJpFbFg==", - "dependencies": { - "blueimp-md5": "^2.10.0", - "invariant": "^2.2.4", - "md5-file": "^3.2.3", - "path-browserify": "^1.0.0", - "url-parse": "^1.4.4" - } - }, - "node_modules/expo-constants": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-10.1.3.tgz", - "integrity": "sha512-Eq/xeshnhSoe4ok89d5lrHvI9jq3bMe1FhJUbiHVGcGmW8mGCotwbQBIfDkkMrAKnSOwQq/Qfyg0XBxnG2XFjw==", - "dependencies": { - "@expo/config": "^3.3.35", - "uuid": "^3.3.2" - } - }, - "node_modules/expo-document-picker": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/expo-document-picker/-/expo-document-picker-9.1.2.tgz", - "integrity": "sha512-I4xq90HZg3JML40AfUv1Uk/dTSRDd3Cy3qLV1P+wAiSudp54ockHMR1Pwow12WCtbihHW5DlHT0TU+fz5jJb7g==", - "dependencies": { - "@expo/config-plugins": "^1.0.18", - "uuid": "^3.3.2" - } - }, - "node_modules/expo-error-recovery": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/expo-error-recovery/-/expo-error-recovery-2.1.0.tgz", - "integrity": "sha512-N5g2QKtdNntUNGQVnB/tG1jHdtJP1+kLMWDS+7ZKRcKfulm3JX/M3l460fsEtqg84n/latxPkBT0yfKw2DSq+Q==" - }, - "node_modules/expo-file-system": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-11.0.2.tgz", - "integrity": "sha512-nodNvUVa+US4N4xnj5BFw8W9ZF/qCHJVC2t45cHWrBiwkVVxz45wjE7uSHUmkMWyWT7a/7AJuL3XJfYp7h90IQ==", - "dependencies": { - "@expo/config-plugins": "^1.0.18", - "uuid": "^3.4.0" - } - }, - "node_modules/expo-font": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-9.1.0.tgz", - "integrity": "sha512-owzbbfrQet7mawTGKMXpVCIA9k56MGhtriO41AW4Zo65dd2Ikm4LoymuHKp2ZlHuIFjRnjECKWz7RXgy/C1yAg==", - "dependencies": { - "fontfaceobserver": "^2.1.0" - } - }, - "node_modules/expo-haptics": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/expo-haptics/-/expo-haptics-10.0.0.tgz", - "integrity": "sha512-dfl4Fef22B8O49x5JEzILmAhathT14bkN0kic2FpuwssJDX/yZ/R2lD12Iu9XqxdgHAFQRjOSq3dFjrxDGkP6g==" - }, - "node_modules/expo-image-loader": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/expo-image-loader/-/expo-image-loader-2.1.1.tgz", - "integrity": "sha512-EeItNIsmw4g+FIb9S9AHE7FAWQkuiIguFMua/RQ2mFHKFZYa/BU32MGagY+e4LzasBVbDKWgd3NHO+EYC6XeEA==" - }, - "node_modules/expo-keep-awake": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-9.1.2.tgz", - "integrity": "sha512-CCuEOQUNLYtMA0rt0sQ9u5LlIMH7lDJG7dImoorfKMsP95yHXy8dl3oCdtaz2zbsPgggVYeom9gE+gQu+Ki4rQ==" - }, - "node_modules/expo-linear-gradient": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/expo-linear-gradient/-/expo-linear-gradient-9.1.0.tgz", - "integrity": "sha512-9W4TxaDrZUzmLzd18+Eo2Ef7ONnuLrHKX0PRyHEGY2/rJCtGiPJtJuR6AS5dkX7WB/Pxlx0zK/p/qDHHw09Uxg==" - }, - "node_modules/expo-linking": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-2.2.3.tgz", - "integrity": "sha512-1NqL8sY4EzwRPVnBxbvNKBCfsG/tNZm72tVwzjoLxhO0XA6VTtZcb72Jaku4IlqEyH0lejxV2YAU0rbLv1pAVA==", - "dependencies": { - "expo-constants": "~10.1.3", - "invariant": "^2.2.4", - "qs": "^6.5.0", - "url-parse": "^1.4.4" - } - }, - "node_modules/expo-notifications": { - "version": "0.11.6", - "resolved": "https://registry.npmjs.org/expo-notifications/-/expo-notifications-0.11.6.tgz", - "integrity": "sha512-skVEOHXKXrXBWofCQ/Zn7yKhAFA2EN0fd9mXqpkbF6nE4NKE7pn63gTWpyCy6sXC9M3YUal8yT0vp9GkD2FsmA==", - "dependencies": { - "@expo/config-plugins": "^1.0.18", - "@expo/image-utils": "^0.3.10", - "@ide/backoff": "^1.0.0", - "abort-controller": "^3.0.0", - "assert": "^2.0.0", - "badgin": "^1.1.5", - "expo-application": "~3.1.2", - "expo-constants": "10.1.3", - "fs-extra": "^9.0.1", - "unimodules-permissions-interface": "~6.1.0", - "uuid": "^3.4.0" - } - }, - "node_modules/expo-notifications/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/expo-notifications/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/expo-permissions": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/expo-permissions/-/expo-permissions-12.0.1.tgz", - "integrity": "sha512-TtypNPPLG4SdVEKBlrArLLZIyhlhE+3B4dhz2HaY1Mve2rcvKE0C7z/e1WoUVU8+LgcdKoNGwg/wRVeCkxeEhg==" - }, - "node_modules/expo-splash-screen": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-0.11.2.tgz", - "integrity": "sha512-4jTAs2IDS4rH9A3NK0WhFDIOyLgDExRe0zCf179vRNPZ6HlXCFEQS7Y9RaUF5EFqyYvsPiwaJQyRes3sO4mA+g==", - "dependencies": { - "@expo/configure-splash-screen": "0.5.0", - "@expo/prebuild-config": "^2.0.0" - } - }, - "node_modules/expo-splash-screen/node_modules/@expo/configure-splash-screen": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@expo/configure-splash-screen/-/configure-splash-screen-0.5.0.tgz", - "integrity": "sha512-wU84OsmACcQaY+cFNj1UOzqdUB+XNRP8hO5mwGN5LWRIDhd/5S1A/3hmWT96X4UQEee+XtCpwnmTw6SGIsTfIg==", - "dependencies": { - "color-string": "^1.5.3", - "commander": "^5.1.0", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "lodash": "^4.17.15", - "pngjs": "^5.0.0", - "xcode": "^3.0.0", - "xml-js": "^1.6.11" - }, - "bin": { - "configure-splash-screen": "build/index-cli.js", - "expo-splash-screen": "build/index-cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/expo-sqlite": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/expo-sqlite/-/expo-sqlite-9.1.0.tgz", - "integrity": "sha512-nr6rHm2GCm+MrMAuMoL0mGbGw8aIHT/UNg/zMDb2/QjFU1ZHj7c/lI+vmmQx0ObZ+NfJfu+tyW6HqxsdMnkeog==", - "dependencies": { - "@expo/websql": "^1.0.1", - "lodash": "^4.17.15" - } - }, - "node_modules/expo-structured-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/expo-structured-headers/-/expo-structured-headers-1.0.1.tgz", - "integrity": "sha512-U4frE8rT5x1LqZv5Ru/9CtzY8gh0wp1MfwTu5hetPydnwxXfWchuXvKgWRjEHglFU2X/29kYFY/J1UkPvCN8xg==" - }, - "node_modules/expo-updates": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/expo-updates/-/expo-updates-0.5.5.tgz", - "integrity": "sha512-1R8EKkT3GoDjMRQnDaTYv31gIYIaYQGHOrjHJfwq8ai9f1W1AHux6KAH2/H6sc2o9a7roWVwjDn2kKwCm9AeHg==", - "dependencies": { - "@expo/config-plugins": "^1.0.18", - "@expo/metro-config": "^0.1.59", - "expo-structured-headers": "~1.0.1", - "fbemitter": "^2.1.1", - "resolve-from": "^5.0.0", - "uuid": "^3.4.0" - } - }, - "node_modules/expo-web-browser": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/expo-web-browser/-/expo-web-browser-9.1.0.tgz", - "integrity": "sha512-1UkOHWUBshY7n/R9xc4Q0LN0Dxqdvvotlp8sCM/6bUB/aE+9B+duoimKtUhlnzcvfAFWgF5y5x+bIf7j6PF7ig==", - "dependencies": { - "compare-urls": "^2.0.0" - } - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend-shallow/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fbemitter": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-2.1.1.tgz", - "integrity": "sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU=", - "dependencies": { - "fbjs": "^0.8.4" - } - }, - "node_modules/fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", - "dependencies": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - } - }, - "node_modules/fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" - }, - "node_modules/fbjs/node_modules/core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "deprecated": "core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js." - }, - "node_modules/file-type": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", - "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/filter-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", - "integrity": "sha1-mzERErxsYSehbgFsbF1/GeCAXFs=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "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" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/find-babel-config": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", - "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==", - "dependencies": { - "json5": "^0.5.1", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/find-babel-config/node_modules/json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/find-babel-config/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "engines": { - "node": ">=4" - } - }, - "node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flow-parser": { - "version": "0.121.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.121.0.tgz", - "integrity": "sha512-1gIBiWJNR0tKUNv8gZuk7l9rVX06OuLzY9AoGio7y/JT4V1IZErEMEq2TJS+PFcw/y0RshZ1J/27VfK1UQzYVg==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/fontfaceobserver": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.1.0.tgz", - "integrity": "sha512-ReOsO2F66jUa0jmv2nlM/s1MiutJx/srhAe2+TE8dJCMi02ZZOcCTxTCQFr3Yet+uODUtnr4Mewg+tNQ+4V1Ng==" - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", - "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/getenv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/getenv/-/getenv-1.0.0.tgz", - "integrity": "sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "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" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "dependencies": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hermes-engine": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/hermes-engine/-/hermes-engine-0.7.2.tgz", - "integrity": "sha512-E2DkRaO97gwL98LPhgfkMqhHiNsrAjIfEk3wWYn2Y31xdkdWn0572H7RnVcGujMJVqZNJvtknxlpsUb8Wzc3KA==" - }, - "node_modules/hermes-profile-transformer": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz", - "integrity": "sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==", - "dependencies": { - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/hermes-profile-transformer/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/htmlparser2-without-node-native": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/htmlparser2-without-node-native/-/htmlparser2-without-node-native-3.9.2.tgz", - "integrity": "sha1-s+0FDYd9D/NGWWnjOYd7f59mMfY=", - "dependencies": { - "domelementtype": "^1.3.0", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "eventemitter2": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "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" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/hyphenate-style-name": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz", - "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==" - }, - "node_modules/iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/image-size": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.6.3.tgz", - "integrity": "sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA==", - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" - }, - "node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "engines": { - "node": ">=4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/inline-style-prefixer": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-6.0.0.tgz", - "integrity": "sha512-XTHvRUS4ZJNzC1GixJRmOlWSS45fSt+DJoyQC9ytj0WxQfcgofQtDtyKKYxHUqEsWCs+LIWftPF1ie7+i012Fg==", - "dependencies": { - "css-in-js-utils": "^2.0.0" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-arguments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", - "dependencies": { - "call-bind": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "node_modules/is-bigint": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", - "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", - "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", - "dependencies": { - "call-bind": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.3.0.tgz", - "integrity": "sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "engines": { - "node": ">=4" - } - }, - "node_modules/is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" - }, - "node_modules/is-generator-function": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz", - "integrity": "sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", - "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", - "dependencies": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dependencies": { - "has-symbols": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz", - "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==", - "dependencies": { - "available-typed-arrays": "^1.0.2", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.0-next.2", - "foreach": "^2.0.5", - "has-symbols": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.1.tgz", - "integrity": "sha512-pi4vhbhVHGLxohUw7PhGsueT4vRGFoXhP7+RGN0jKIv9+8PWYCQTqtADngrxOm2g46hoH0+g8uZZBzMrvVGDmw==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "dependencies": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, - "node_modules/isomorphic-fetch/node_modules/node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "dependencies": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "node_modules/jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "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" - }, - "engines": { - "node": ">= 10.14.2" - }, - "optionalDependencies": { - "fsevents": "^2.1.2" - } - }, - "node_modules/jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "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" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-validate": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "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" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jetifier": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/jetifier/-/jetifier-1.6.8.tgz", - "integrity": "sha512-3Zi16h6L5tXDRQJTb221cnRoVG9/9OvreLdLU2/ZjRv/GILL+2Cemt0IKvkowwkDpvouAU1DQPOJ7qaiHeIdrw==", - "bin": { - "jetifier": "bin/jetify", - "jetifier-standalone": "bin/jetifier-standalone", - "jetify": "bin/jetify" - } - }, - "node_modules/jimp": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.12.1.tgz", - "integrity": "sha512-0soPJif+yjmzmOF+4cF2hyhxUWWpXpQntsm2joJXFFoRcQiPzsG4dbLKYqYPT3Fc6PjZ8MaLtCkDqqckVSfmRw==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/custom": "^0.12.1", - "@jimp/plugins": "^0.12.1", - "@jimp/types": "^0.12.1", - "regenerator-runtime": "^0.13.3" - } - }, - "node_modules/joi": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.4.0.tgz", - "integrity": "sha512-F4WiW2xaV6wc1jxete70Rw4V/VuMd6IN+a5ilZsxG4uYtUXWu2kq9W5P2dz30e7Gmw8RCbY/u/uk+dMPma9tAg==", - "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.0", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/jpeg-js": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.3.tgz", - "integrity": "sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q==" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsc-android": { - "version": "245459.0.0", - "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-245459.0.0.tgz", - "integrity": "sha512-wkjURqwaB1daNkDi2OYYbsLnIdC/lUM2nPXQKRs5pqEU9chDg435bjvo+LSaHotDENygHQDHe+ntUkkw2gwMtg==" - }, - "node_modules/jscodeshift": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.11.0.tgz", - "integrity": "sha512-SdRK2C7jjs4k/kT2mwtO07KJN9RnjxtKn03d9JVj6c3j9WwaLcFYsICYDnLAzY0hp+wG2nxl+Cm2jWLiNVYb8g==", - "dependencies": { - "@babel/core": "^7.1.6", - "@babel/parser": "^7.1.6", - "@babel/plugin-proposal-class-properties": "^7.1.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.1.0", - "@babel/plugin-proposal-optional-chaining": "^7.1.0", - "@babel/plugin-transform-modules-commonjs": "^7.1.0", - "@babel/preset-flow": "^7.0.0", - "@babel/preset-typescript": "^7.1.0", - "@babel/register": "^7.0.0", - "babel-core": "^7.0.0-bridge.0", - "colors": "^1.1.2", - "flow-parser": "0.*", - "graceful-fs": "^4.2.4", - "micromatch": "^3.1.10", - "neo-async": "^2.5.0", - "node-dir": "^0.1.17", - "recast": "^0.20.3", - "temp": "^0.8.1", - "write-file-atomic": "^2.3.0" - }, - "bin": { - "jscodeshift": "bin/jscodeshift.js" - }, - "peerDependencies": { - "@babel/preset-env": "^7.1.6" - } - }, - "node_modules/jscodeshift/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, - "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonfile/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "engines": { - "node": "*" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "optionalDependencies": { - "graceful-fs": "^4.1.9" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "engines": { - "node": ">=6" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/load-bmfont": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", - "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", - "dependencies": { - "buffer-equal": "0.0.1", - "mime": "^1.3.4", - "parse-bmfont-ascii": "^1.0.3", - "parse-bmfont-binary": "^1.0.5", - "parse-bmfont-xml": "^1.1.4", - "phin": "^2.9.1", - "xhr": "^2.0.1", - "xtend": "^4.0.0" - } - }, - "node_modules/load-bmfont/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - }, - "node_modules/lodash.frompairs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.frompairs/-/lodash.frompairs-4.0.1.tgz", - "integrity": "sha1-vE5SB/onV8E25XNhTpZkUGsrG9I=" - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" - }, - "node_modules/lodash.omit": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", - "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=" - }, - "node_modules/lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" - }, - "node_modules/lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "dependencies": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "node_modules/lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "dependencies": { - "lodash._reinterpolate": "^3.0.0" - } - }, - "node_modules/lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" - }, - "node_modules/log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dependencies": { - "chalk": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-symbols/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/logkitty": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz", - "integrity": "sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==", - "dependencies": { - "ansi-fragments": "^0.2.1", - "dayjs": "^1.8.15", - "yargs": "^15.1.0" - }, - "bin": { - "logkitty": "bin/logkitty.js" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dependencies": { - "tmpl": "1.0.x" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/md5-file": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-3.2.3.tgz", - "integrity": "sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw==", - "dependencies": { - "buffer-alloc": "^1.1.0" - }, - "bin": { - "md5-file": "cli.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/metro": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.64.0.tgz", - "integrity": "sha512-G2OC08Rzfs0kqnSEuKo2yZxR+/eNUpA93Ru45c60uN0Dw3HPrDi+ZBipgFftC6iLE0l+6hu8roFFIofotWxybw==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/core": "^7.0.0", - "@babel/generator": "^7.5.0", - "@babel/parser": "^7.0.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "absolute-path": "^0.0.0", - "accepts": "^1.3.7", - "async": "^2.4.0", - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "connect": "^3.6.5", - "debug": "^2.2.0", - "denodeify": "^1.2.1", - "error-stack-parser": "^2.0.6", - "fs-extra": "^1.0.0", - "graceful-fs": "^4.1.3", - "image-size": "^0.6.0", - "invariant": "^2.2.4", - "jest-haste-map": "^26.5.2", - "jest-worker": "^26.0.0", - "lodash.throttle": "^4.1.1", - "metro-babel-register": "0.64.0", - "metro-babel-transformer": "0.64.0", - "metro-cache": "0.64.0", - "metro-cache-key": "0.64.0", - "metro-config": "0.64.0", - "metro-core": "0.64.0", - "metro-hermes-compiler": "0.64.0", - "metro-inspector-proxy": "0.64.0", - "metro-minify-uglify": "0.64.0", - "metro-react-native-babel-preset": "0.64.0", - "metro-resolver": "0.64.0", - "metro-runtime": "0.64.0", - "metro-source-map": "0.64.0", - "metro-symbolicate": "0.64.0", - "metro-transform-plugins": "0.64.0", - "metro-transform-worker": "0.64.0", - "mime-types": "^2.1.27", - "mkdirp": "^0.5.1", - "node-fetch": "^2.2.0", - "nullthrows": "^1.1.1", - "rimraf": "^2.5.4", - "serialize-error": "^2.1.0", - "source-map": "^0.5.6", - "strip-ansi": "^6.0.0", - "temp": "0.8.3", - "throat": "^5.0.0", - "ws": "^1.1.5", - "yargs": "^15.3.1" - }, - "bin": { - "metro": "src/cli.js" - } - }, - "node_modules/metro-babel-register": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-babel-register/-/metro-babel-register-0.64.0.tgz", - "integrity": "sha512-Kf6YvE3kIRumGnjK0Q9LqGDIdnsX9eFGtNBmBuCVDuB9wGGA/5CgX8We8W7Y44dz1RGTcHJRhfw5iGg+pwC3aQ==", - "dependencies": { - "@babel/core": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/register": "^7.0.0", - "escape-string-regexp": "^1.0.5" - } - }, - "node_modules/metro-babel-register/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/metro-babel-transformer": { - "version": "0.59.0", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.59.0.tgz", - "integrity": "sha512-fdZJl8rs54GVFXokxRdD7ZrQ1TJjxWzOi/xSP25VR3E8tbm3nBZqS+/ylu643qSr/IueABR+jrlqAyACwGEf6w==", - "dependencies": { - "@babel/core": "^7.0.0", - "metro-source-map": "0.59.0" - } - }, - "node_modules/metro-cache": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.64.0.tgz", - "integrity": "sha512-QvGfxe/1QQYM9XOlR8W1xqE9eHDw/AgJIgYGn/TxZxBu9Zga+Rgs1omeSZju45D8w5VWgMr83ma5kACgzvOecg==", - "dependencies": { - "metro-core": "0.64.0", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4" - } - }, - "node_modules/metro-cache-key": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.64.0.tgz", - "integrity": "sha512-O9B65G8L/fopck45ZhdRosyVZdMtUQuX5mBWEC1NRj02iWBIUPLmYMjrunqIe8vHipCMp3DtTCm/65IlBmO8jg==" - }, - "node_modules/metro-config": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.64.0.tgz", - "integrity": "sha512-QhM4asnX5KhlRWaugwVGNNXhX0Z85u5nK0UQ/A90bBb4xWyXqUe20e788VtdA75rkQiiI6wXTCIHWT0afbnjwQ==", - "dependencies": { - "cosmiconfig": "^5.0.5", - "jest-validate": "^26.5.2", - "metro": "0.64.0", - "metro-cache": "0.64.0", - "metro-core": "0.64.0", - "metro-runtime": "0.64.0" - } - }, - "node_modules/metro-core": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.64.0.tgz", - "integrity": "sha512-v8ZQ5j72EaUwamQ8pLfHlOHTyp7SbdazvHPzFGDpHnwIQqIT0Bw3Syg8R4regTlVG3ngpeSEAi005UITljmMcQ==", - "dependencies": { - "jest-haste-map": "^26.5.2", - "lodash.throttle": "^4.1.1", - "metro-resolver": "0.64.0" - } - }, - "node_modules/metro-hermes-compiler": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-hermes-compiler/-/metro-hermes-compiler-0.64.0.tgz", - "integrity": "sha512-CLAjVDWGAoGhbi2ZyPHnH5YDdfrDIx6+tzFWfHGIMTZkYBXsYta9IfYXBV8lFb6BIbrXLjlXZAOoosknetMPOA==" - }, - "node_modules/metro-inspector-proxy": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.64.0.tgz", - "integrity": "sha512-KywbH3GNSz9Iqw4UH3smgaV2dBHHYMISeN7ORntDL/G+xfgPc6vt13d+zFb907YpUcXj5N0vdoiAHI5V/0y8IA==", - "dependencies": { - "connect": "^3.6.5", - "debug": "^2.2.0", - "ws": "^1.1.5", - "yargs": "^15.3.1" - }, - "bin": { - "metro-inspector-proxy": "src/cli.js" - } - }, - "node_modules/metro-inspector-proxy/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/metro-inspector-proxy/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/metro-inspector-proxy/node_modules/ws": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", - "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", - "dependencies": { - "options": ">=0.0.5", - "ultron": "1.0.x" - } - }, - "node_modules/metro-minify-uglify": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.64.0.tgz", - "integrity": "sha512-DRwRstqXR5qfte9Nuwoov5dRXxL7fJeVlO5fGyOajWeO3+AgPjvjXh/UcLJqftkMWTPGUFuzAD5/7JC5v5FLWw==", - "dependencies": { - "uglify-es": "^3.1.9" - } - }, - "node_modules/metro-react-native-babel-preset": { - "version": "0.59.0", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.59.0.tgz", - "integrity": "sha512-BoO6ncPfceIDReIH8pQ5tQptcGo5yRWQXJGVXfANbiKLq4tfgdZB1C1e2rMUJ6iypmeJU9dzl+EhPmIFKtgREg==", - "dependencies": { - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.2.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-exponentiation-operator": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-object-assign": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-regenerator": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "react-refresh": "^0.4.0" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/metro-react-native-babel-transformer": { - "version": "0.59.0", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.59.0.tgz", - "integrity": "sha512-1O3wrnMq4NcPQ1asEcl9lRDn/t+F1Oef6S9WaYVIKEhg9m/EQRGVrrTVP+R6B5Eeaj3+zNKbzM8Dx/NWy1hUbQ==", - "dependencies": { - "@babel/core": "^7.0.0", - "babel-preset-fbjs": "^3.3.0", - "metro-babel-transformer": "0.59.0", - "metro-react-native-babel-preset": "0.59.0", - "metro-source-map": "0.59.0" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/metro-resolver": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.64.0.tgz", - "integrity": "sha512-cJ26Id8Zf+HmS/1vFwu71K3u7ep/+HeXXAJIeVDYf+niE7AWB9FijyMtAlQgbD8elWqv1leJCnQ/xHRFBfGKYA==", - "dependencies": { - "absolute-path": "^0.0.0" - } - }, - "node_modules/metro-runtime": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.64.0.tgz", - "integrity": "sha512-m7XbWOaIOeFX7YcxUhmnOi6Pg8EaeL89xyZ+quZyZVF1aNoTr4w8FfbKxvijpjsytKHIZtd+43m2Wt5JrqyQmQ==" - }, - "node_modules/metro-source-map": { - "version": "0.59.0", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.59.0.tgz", - "integrity": "sha512-0w5CmCM+ybSqXIjqU4RiK40t4bvANL6lafabQ2GP2XD3vSwkLY+StWzCtsb4mPuyi9R/SgoLBel+ZOXHXAH0eQ==", - "dependencies": { - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "invariant": "^2.2.4", - "metro-symbolicate": "0.59.0", - "ob1": "0.59.0", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - } - }, - "node_modules/metro-symbolicate": { - "version": "0.59.0", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.59.0.tgz", - "integrity": "sha512-asLaF2A7rndrToGFIknL13aiohwPJ95RKHf0NM3hP/nipiLDoMzXT6ZnQvBqDxkUKyP+51AI75DMtb+Wcyw4Bw==", - "dependencies": { - "invariant": "^2.2.4", - "metro-source-map": "0.59.0", - "source-map": "^0.5.6", - "through2": "^2.0.1", - "vlq": "^1.0.0" - }, - "bin": { - "metro-symbolicate": "src/symbolicate.js" - }, - "engines": { - "node": ">=8.3" - } - }, - "node_modules/metro-transform-plugins": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.64.0.tgz", - "integrity": "sha512-iTIRBD/wBI98plfxj8jAoNUUXfXLNlyvcjPtshhpGvdwu9pzQilGfnDnOaaK+vbITcOk9w5oQectXyJwAqTr1A==", - "dependencies": { - "@babel/core": "^7.0.0", - "@babel/generator": "^7.5.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.0.0", - "nullthrows": "^1.1.1" - } - }, - "node_modules/metro-transform-worker": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.64.0.tgz", - "integrity": "sha512-wegRtK8GyLF6IPZRBJp+zsORgA4iX0h1DRpknyAMDCtSbJ4VU2xV/AojteOgAsDvY3ucAGsvfuZLNDJHUdUNHQ==", - "dependencies": { - "@babel/core": "^7.0.0", - "@babel/generator": "^7.5.0", - "@babel/parser": "^7.0.0", - "@babel/types": "^7.0.0", - "babel-preset-fbjs": "^3.3.0", - "metro": "0.64.0", - "metro-babel-transformer": "0.64.0", - "metro-cache": "0.64.0", - "metro-cache-key": "0.64.0", - "metro-hermes-compiler": "0.64.0", - "metro-source-map": "0.64.0", - "metro-transform-plugins": "0.64.0", - "nullthrows": "^1.1.1" - } - }, - "node_modules/metro-transform-worker/node_modules/metro-babel-transformer": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.64.0.tgz", - "integrity": "sha512-itZaxKTgmKGEZWxNzbSZBc22NngrMZzoUNuU92aHSTGkYi2WH4XlvzEHsstmIKHMsRVKl75cA+mNmgk4gBFJKw==", - "dependencies": { - "@babel/core": "^7.0.0", - "metro-source-map": "0.64.0", - "nullthrows": "^1.1.1" - } - }, - "node_modules/metro-transform-worker/node_modules/metro-source-map": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.64.0.tgz", - "integrity": "sha512-OCG2rtcp5cLEGYvAbfkl6mEc0J2FPRP4/UCEly+juBk7hawS9bCBMBfhJm/HIsvY1frk6nT2Vsl1O8YBbwyx2g==", - "dependencies": { - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "invariant": "^2.2.4", - "metro-symbolicate": "0.64.0", - "nullthrows": "^1.1.1", - "ob1": "0.64.0", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - } - }, - "node_modules/metro-transform-worker/node_modules/metro-symbolicate": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.64.0.tgz", - "integrity": "sha512-qIi+YRrDWnLVmydj6gwidYLPaBsakZRibGWSspuXgHAxOI3UuLwlo4dpQ73Et0gyHjI7ZvRMRY8JPiOntf9AQQ==", - "dependencies": { - "invariant": "^2.2.4", - "metro-source-map": "0.64.0", - "nullthrows": "^1.1.1", - "source-map": "^0.5.6", - "through2": "^2.0.1", - "vlq": "^1.0.0" - }, - "bin": { - "metro-symbolicate": "src/index.js" - }, - "engines": { - "node": ">=8.3" - } - }, - "node_modules/metro-transform-worker/node_modules/ob1": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.64.0.tgz", - "integrity": "sha512-CO1N+5dhvy+MoAwxz8+fymEUcwsT4a+wHhrHFb02LppcJdHxgcBWviwEhUwKOD2kLMQ7ijrrzybOqpGcqEtvpQ==" - }, - "node_modules/metro/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/metro/node_modules/fs-extra": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", - "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0" - } - }, - "node_modules/metro/node_modules/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/metro/node_modules/metro-babel-transformer": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.64.0.tgz", - "integrity": "sha512-itZaxKTgmKGEZWxNzbSZBc22NngrMZzoUNuU92aHSTGkYi2WH4XlvzEHsstmIKHMsRVKl75cA+mNmgk4gBFJKw==", - "dependencies": { - "@babel/core": "^7.0.0", - "metro-source-map": "0.64.0", - "nullthrows": "^1.1.1" - } - }, - "node_modules/metro/node_modules/metro-react-native-babel-preset": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.64.0.tgz", - "integrity": "sha512-HcZ0RWQRuJfpPiaHyFQJzcym+/dDIVUPwUAXWoub/C4GkGu+mPjp8vqK6g0FxokCnnI2TK0gZTza2IDfiNNscQ==", - "dependencies": { - "@babel/core": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.2.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-exponentiation-operator": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-object-assign": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-regenerator": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "react-refresh": "^0.4.0" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/metro/node_modules/metro-source-map": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.64.0.tgz", - "integrity": "sha512-OCG2rtcp5cLEGYvAbfkl6mEc0J2FPRP4/UCEly+juBk7hawS9bCBMBfhJm/HIsvY1frk6nT2Vsl1O8YBbwyx2g==", - "dependencies": { - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "invariant": "^2.2.4", - "metro-symbolicate": "0.64.0", - "nullthrows": "^1.1.1", - "ob1": "0.64.0", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - } - }, - "node_modules/metro/node_modules/metro-symbolicate": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.64.0.tgz", - "integrity": "sha512-qIi+YRrDWnLVmydj6gwidYLPaBsakZRibGWSspuXgHAxOI3UuLwlo4dpQ73Et0gyHjI7ZvRMRY8JPiOntf9AQQ==", - "dependencies": { - "invariant": "^2.2.4", - "metro-source-map": "0.64.0", - "nullthrows": "^1.1.1", - "source-map": "^0.5.6", - "through2": "^2.0.1", - "vlq": "^1.0.0" - }, - "bin": { - "metro-symbolicate": "src/index.js" - }, - "engines": { - "node": ">=8.3" - } - }, - "node_modules/metro/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/metro/node_modules/ob1": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.64.0.tgz", - "integrity": "sha512-CO1N+5dhvy+MoAwxz8+fymEUcwsT4a+wHhrHFb02LppcJdHxgcBWviwEhUwKOD2kLMQ7ijrrzybOqpGcqEtvpQ==" - }, - "node_modules/metro/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/metro/node_modules/ws": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", - "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", - "dependencies": { - "options": ">=0.0.5", - "ultron": "1.0.x" - } - }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.31", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", - "dependencies": { - "mime-db": "1.48.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "dependencies": { - "dom-walk": "^0.1.0" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mockdate": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/mockdate/-/mockdate-3.0.5.tgz", - "integrity": "sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ==" - }, - "node_modules/moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nanoid": { - "version": "3.1.22", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.22.tgz", - "integrity": "sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ==", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "node_modules/nocache": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz", - "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/node-dir": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU=", - "dependencies": { - "minimatch": "^3.0.2" - }, - "engines": { - "node": ">= 0.10.5" - } - }, - "node_modules/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" - }, - "node_modules/node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/node-releases": { - "version": "1.1.71", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", - "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==" - }, - "node_modules/node-stream-zip": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.13.5.tgz", - "integrity": "sha512-Lfi9xhSNvnJU35+4ZFlECXKJ70etAgJYWAVCdcEpksPnMrgwNqwkCJqdunoViVoFFV38C7AIodYE+2apuoK9Gw==", - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/antelle" - } - }, - "node_modules/noop-fn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/noop-fn/-/noop-fn-1.0.0.tgz", - "integrity": "sha1-XzPUfxPSFQ35PgywNmmemC94/78=" - }, - "node_modules/normalize-css-color": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/normalize-css-color/-/normalize-css-color-1.0.2.tgz", - "integrity": "sha1-Apkel8zOxmI/5XOvu/Deah8+n40=" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", - "dependencies": { - "prepend-http": "^2.0.0", - "query-string": "^5.0.1", - "sort-keys": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/normalize-url/node_modules/query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "dependencies": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url/node_modules/strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/nullthrows": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", - "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" - }, - "node_modules/ob1": { - "version": "0.59.0", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.59.0.tgz", - "integrity": "sha512-opXMTxyWJ9m68ZglCxwo0OPRESIC/iGmKFPXEXzMZqsVIrgoRXOHmoMDkQzz4y3irVjbyPJRAh5pI9fd0MJTFQ==" - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", - "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/omggif": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", - "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==" - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/open": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", - "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", - "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ora": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", - "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", - "dependencies": { - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-spinners": "^2.0.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^5.2.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ora/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "engines": { - "node": ">=4" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "node_modules/parse-bmfont-ascii": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", - "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=" - }, - "node_modules/parse-bmfont-binary": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", - "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=" - }, - "node_modules/parse-bmfont-xml": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", - "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", - "dependencies": { - "xml-parse-from-string": "^1.0.0", - "xml2js": "^0.4.5" - } - }, - "node_modules/parse-headers": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", - "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==" - }, - "node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/parse-png": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-png/-/parse-png-2.1.0.tgz", - "integrity": "sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==", - "dependencies": { - "pngjs": "^3.3.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/parse-png/node_modules/pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "engines": { - "node": ">=4" - } - }, - "node_modules/path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - }, - "node_modules/phin": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", - "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" - }, - "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dependencies": { - "node-modules-regexp": "^1.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pixelmatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", - "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", - "dependencies": { - "pngjs": "^3.0.0" - }, - "bin": { - "pixelmatch": "bin/pixelmatch" - } - }, - "node_modules/pixelmatch/node_modules/pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", - "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", - "dependencies": { - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-up/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "engines": { - "node": ">=4" - } - }, - "node_modules/plist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.2.tgz", - "integrity": "sha512-MSrkwZBdQ6YapHy87/8hDU8MnIcyxBKjeF+McXnr5A9MtffPewTs7G3hlpodT5TacyfIyFTaJEhh3GGcmasTgQ==", - "dependencies": { - "base64-js": "^1.5.1", - "xmlbuilder": "^9.0.7", - "xmldom": "^0.5.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pngjs": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", - "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pouchdb-collections": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-1.0.1.tgz", - "integrity": "sha1-/mOhfal3YRq+98uAJssalVP9g1k=" - }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "engines": { - "node": ">=4" - } - }, - "node_modules/pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "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" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/pretty-format/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/pretty-format/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/pretty-format/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/prompts": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", - "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/query-string": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", - "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==", - "dependencies": { - "decode-uri-component": "^0.2.0", - "filter-obj": "^1.1.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/react": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", - "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-devtools-core": { - "version": "4.13.5", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.13.5.tgz", - "integrity": "sha512-k+P5VSKM6P22Go9IQ8dJmjj9fbztvKt1iRDI/4wS5oTvd1EnytIJMYB59wZt+D3kgp64jklNX/MRmY42xAQ08g==", - "dependencies": { - "shell-quote": "^1.6.1", - "ws": "^7" - } - }, - "node_modules/react-devtools-core/node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/react-dom": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz", - "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.1" - }, - "peerDependencies": { - "react": "^16.13.1" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/react-native": { - "version": "0.64.2", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.64.2.tgz", - "integrity": "sha512-Ty/fFHld9DcYsFZujXYdeVjEhvSeQcwuTGXezyoOkxfiGEGrpL/uwUZvMzwShnU4zbbTKDu2PAm/uwuOittRGA==", - "dependencies": { - "@jest/create-cache-key-function": "^26.5.0", - "@react-native-community/cli": "^5.0.1-alpha.1", - "@react-native-community/cli-platform-android": "^5.0.1-alpha.1", - "@react-native-community/cli-platform-ios": "^5.0.1-alpha.1", - "@react-native/assets": "1.0.0", - "@react-native/normalize-color": "1.0.0", - "@react-native/polyfills": "1.0.0", - "abort-controller": "^3.0.0", - "anser": "^1.4.9", - "base64-js": "^1.1.2", - "event-target-shim": "^5.0.1", - "hermes-engine": "~0.7.0", - "invariant": "^2.2.4", - "jsc-android": "^245459.0.0", - "metro-babel-register": "0.64.0", - "metro-react-native-babel-transformer": "0.64.0", - "metro-runtime": "0.64.0", - "metro-source-map": "0.64.0", - "nullthrows": "^1.1.1", - "pretty-format": "^26.5.2", - "promise": "^8.0.3", - "prop-types": "^15.7.2", - "react-devtools-core": "^4.6.0", - "react-native-codegen": "^0.0.6", - "react-refresh": "^0.4.0", - "regenerator-runtime": "^0.13.2", - "scheduler": "^0.20.1", - "shelljs": "^0.8.4", - "stacktrace-parser": "^0.1.3", - "use-subscription": "^1.0.0", - "whatwg-fetch": "^3.0.0", - "ws": "^6.1.4" - }, - "bin": { - "react-native": "cli.js" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "react": "17.0.1" - } - }, - "node_modules/react-native-background-actions": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/react-native-background-actions/-/react-native-background-actions-2.6.1.tgz", - "integrity": "sha512-4YQSEq7Y+qLKU9BxuzMG0DEIeZkvD54jTqA1IKai/w3sV+hc4cJNoSjZScRj1+663oWrEAZwLUk2I8P5QRvgiQ==", - "dependencies": { - "eventemitter3": "^4.0.7" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/Rapsssito" - }, - "peerDependencies": { - "react-native": ">=0.47.0" - } - }, - "node_modules/react-native-cheerio": { - "version": "1.0.0-rc.4", - "resolved": "https://registry.npmjs.org/react-native-cheerio/-/react-native-cheerio-1.0.0-rc.4.tgz", - "integrity": "sha512-V2nAoxikHGV1vl2nKL2rlw832Ze+p8op5p6MDltd5ZrEZGp1+eTl+qjC+l4TY9ju3CNpt/uiNuOEQoWqgdwzUQ==", - "dependencies": { - "buffer": "^5.0.7", - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2-without-node-native": "^3.9.0", - "lodash": "^4.15.0", - "react-native-parse-html": "^2.2.6" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/react-native-codegen": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/react-native-codegen/-/react-native-codegen-0.0.6.tgz", - "integrity": "sha512-cMvrUelD81wiPitEPiwE/TCNscIVauXxmt4NTGcy18HrUd0WRWXfYzAQGXm0eI87u3NMudNhqFj2NISJenxQHg==", - "dependencies": { - "flow-parser": "^0.121.0", - "jscodeshift": "^0.11.0", - "nullthrows": "^1.1.1" - } - }, - "node_modules/react-native-device-info": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-8.1.3.tgz", - "integrity": "sha512-73e3wiGFL8DvIXEd8x4Aq+mO8mZvHARwfYorIEu+X0trLHY92bP5Ict8DJHDjCQ0+HtAvpA4Wda2VoUVN1zh6Q==", - "peerDependencies": { - "react-native": "*" - } - }, - "node_modules/react-native-easing-gradient": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/react-native-easing-gradient/-/react-native-easing-gradient-0.1.2.tgz", - "integrity": "sha512-oeSJ8nSrCxiCO5mLEVc59Evva4unjvH6AQ8vJFyJ7PIKRybIV5JC+OBU8VnF+V7oQ9dnDBpx2qT5Mh+oxd+/tw==", - "peerDependencies": { - "react": "*", - "react-native": "*" - } - }, - "node_modules/react-native-fast-image": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/react-native-fast-image/-/react-native-fast-image-8.3.4.tgz", - "integrity": "sha512-LpzAdjUphihUpVEBn5fEv5AILe55rHav0YiZroPZ1rumKDhAl4u2cG01ku2Pb7l8sayjTsNu7FuURAlXUUDsow==", - "peerDependencies": { - "react": "^16.8.6", - "react-native": ">=0.60.0" - } - }, - "node_modules/react-native-gesture-handler": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-1.10.3.tgz", - "integrity": "sha512-cBGMi1IEsIVMgoox4RvMx7V2r6bNKw0uR1Mu1o7NbuHS6BRSVLq0dP34l2ecnPlC+jpWd3le6Yg1nrdCjby2Mw==", - "dependencies": { - "@egjs/hammerjs": "^2.0.17", - "fbjs": "^3.0.0", - "hoist-non-react-statics": "^3.3.0", - "invariant": "^2.2.4", - "prop-types": "^15.7.2" - } - }, - "node_modules/react-native-gesture-handler/node_modules/fbjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.0.tgz", - "integrity": "sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg==", - "dependencies": { - "cross-fetch": "^3.0.4", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - } - }, - "node_modules/react-native-iphone-x-helper": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.1.tgz", - "integrity": "sha512-HOf0jzRnq2/aFUcdCJ9w9JGzN3gdEg0zFE4FyYlp4jtidqU03D5X7ZegGKfT1EWteR0gPBGp9ye5T5FvSWi9Yg==", - "peerDependencies": { - "react-native": ">=0.42.0" - } - }, - "node_modules/react-native-navigation-bar-color": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/react-native-navigation-bar-color/-/react-native-navigation-bar-color-2.0.1.tgz", - "integrity": "sha512-1kE/oxWt+HYjRxdZdvke9tJ365xaee5n3+euOQA1En8zQuSbOxiE4SYEGM7TeaWnmLJ0l37mRnPHaB2H4mGh0A==" - }, - "node_modules/react-native-pager-view": { - "version": "5.1.10", - "resolved": "https://registry.npmjs.org/react-native-pager-view/-/react-native-pager-view-5.1.10.tgz", - "integrity": "sha512-sVWEPaxSyp2TOQ9yt+v+ecEdZ2lGnZ9TtoNU+WA1c6SjYdQlIvS2ZMb2hvdmgTMCnZpzKF02WH9BimGOzQRDIg==", - "peerDependencies": { - "react": "*", - "react-native": "*" - } - }, - "node_modules/react-native-paper": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/react-native-paper/-/react-native-paper-4.8.1.tgz", - "integrity": "sha512-WgmqrDdcrr0ZbuiLCwMpmOMhl1n8uIvNulxsl2oCGtD8oeMkPJKHf4G/ONR+iNrSXcFbJek+uDRSmcGA5kDfUA==", - "dependencies": { - "@callstack/react-theme-provider": "^3.0.5", - "color": "^3.1.2", - "react-native-iphone-x-helper": "^1.3.1" - }, - "peerDependencies": { - "react": "*", - "react-native": "*", - "react-native-vector-icons": "*" - } - }, - "node_modules/react-native-parse-html": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/react-native-parse-html/-/react-native-parse-html-2.2.6.tgz", - "integrity": "sha1-IfKPl7OEB3hHWbxZ4kS1EQnZzIc=", - "dependencies": { - "react-native-stream": "^0.1.0" - } - }, - "node_modules/react-native-reanimated": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-2.1.0.tgz", - "integrity": "sha512-tlPvvcdf+X7HGQ7g/7npBFhwMznfdk7MHUc9gUB/kp2abSscXNe/kOVKlrNEOO4DS11rNOXc+llFxVFMuNk0zA==", - "dependencies": { - "@babel/plugin-transform-object-assign": "^7.10.4", - "fbjs": "^3.0.0", - "mockdate": "^3.0.2", - "string-hash-64": "^1.0.3" - }, - "peerDependencies": { - "react": "*", - "react-native": "*", - "react-native-gesture-handler": "*" - } - }, - "node_modules/react-native-reanimated/node_modules/fbjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.0.tgz", - "integrity": "sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg==", - "dependencies": { - "cross-fetch": "^3.0.4", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - } - }, - "node_modules/react-native-safe-area-context": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-3.2.0.tgz", - "integrity": "sha512-k2Nty4PwSnrg9HwrYeeE+EYqViYJoOFwEy9LxL5RIRfoqxAq/uQXNGwpUg2/u4gnKpBbEPa9eRh15KKMe/VHkA==", - "peerDependencies": { - "react": "*", - "react-native": "*" - } - }, - "node_modules/react-native-screens": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.0.0.tgz", - "integrity": "sha512-35II5oxTaVp3OP8y0eLPOPpQkxG4fRKQ+dL1YSE1we5kCZFOU0l/Rn0T79HbyUu1LPwUZr6lZupPs0ULnRyMuQ==", - "peerDependencies": { - "react": "*", - "react-native": "*" - } - }, - "node_modules/react-native-stream": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/react-native-stream/-/react-native-stream-0.1.9.tgz", - "integrity": "sha1-E2gMzok8p9NKhmZNnVtO4adyyXw=", - "dependencies": { - "base64-js": "^1.2.0", - "ieee754": "^1.1.8" - } - }, - "node_modules/react-native-swipe-gestures": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/react-native-swipe-gestures/-/react-native-swipe-gestures-1.0.5.tgz", - "integrity": "sha512-Ns7Bn9H/Tyw278+5SQx9oAblDZ7JixyzeOczcBK8dipQk2pD7Djkcfnf1nB/8RErAmMLL9iXgW0QHqiII8AhKw==" - }, - "node_modules/react-native-tab-view": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/react-native-tab-view/-/react-native-tab-view-3.0.1.tgz", - "integrity": "sha512-L7qXtYz5Z+NdWyu38zaJrlHA/8H6rNFRZXe3ydym12UEEPPoefbVZ71b9YK2O6QP0u4pUlzMpMVM/Lsz2DJ4jg==", - "peerDependencies": { - "react": "*", - "react-native": "*", - "react-native-pager-view": "*" - } - }, - "node_modules/react-native-tts": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/react-native-tts/-/react-native-tts-4.1.0.tgz", - "integrity": "sha512-tvf3lQ6u9MqztUie37qoPw5YQPqi0ql1lPhDsBBs/RRA6A/H1J9X9H/qb1A0Hx0ZpjavrEdtVSqQQ2JDZvZCTQ==" - }, - "node_modules/react-native-unimodules": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/react-native-unimodules/-/react-native-unimodules-0.13.3.tgz", - "integrity": "sha512-fjbNbAcvJHF8Ywqe77oveRW1WfaAKCQGV4a3Fxgpai17oNHq1LFwwKw0crFo0k7Njm5u7kCMVNbm9ZILNBfABQ==", - "hasInstallScript": true, - "dependencies": { - "@unimodules/core": "~7.1.0", - "@unimodules/react-native-adapter": "~6.2.2", - "chalk": "^2.4.2", - "expo-asset": "~8.3.1", - "expo-constants": "~10.1.3", - "expo-file-system": "~11.0.2", - "expo-image-loader": "~2.1.1", - "expo-permissions": "~12.0.1", - "find-up": "~5.0.0", - "unimodules-app-loader": "~2.1.0", - "unimodules-barcode-scanner-interface": "~6.1.0", - "unimodules-camera-interface": "~6.1.0", - "unimodules-constants-interface": "~6.1.0", - "unimodules-face-detector-interface": "~6.1.0", - "unimodules-file-system-interface": "~6.1.0", - "unimodules-font-interface": "~6.1.0", - "unimodules-image-loader-interface": "~6.1.0", - "unimodules-permissions-interface": "~6.1.0", - "unimodules-sensors-interface": "~6.1.0", - "unimodules-task-manager-interface": "~6.1.0" - } - }, - "node_modules/react-native-unimodules/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/react-native-unimodules/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/react-native-vector-icons": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-7.1.0.tgz", - "integrity": "sha512-V2a1zJ4i+kS8O4j183gIwX14St9AxxXabxwYpFBgRhvr2NDXyFcjHDEAgrOYYlt2W57e20aN1tBDU/I+wn9WtQ==", - "dependencies": { - "lodash.frompairs": "^4.0.1", - "lodash.isequal": "^4.5.0", - "lodash.isstring": "^4.0.1", - "lodash.omit": "^4.5.0", - "lodash.pick": "^4.4.0", - "lodash.template": "^4.5.0", - "prop-types": "^15.7.2", - "yargs": "^15.0.2" - }, - "bin": { - "fa5-upgrade": "bin/fa5-upgrade.sh", - "generate-icon": "bin/generate-icon.js" - } - }, - "node_modules/react-native-web": { - "version": "0.16.5", - "resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.16.5.tgz", - "integrity": "sha512-bsoSq9pnjPerNKC1uzvJi7464to3SSMbGG9QFdj6woV3xk5fhq2jB2vQ5+iH/KC7F5lpDRukcb2hMHL1rzKJUQ==", - "dependencies": { - "array-find-index": "^1.0.2", - "create-react-class": "^15.7.0", - "fbjs": "^3.0.0", - "hyphenate-style-name": "^1.0.4", - "inline-style-prefixer": "^6.0.0", - "normalize-css-color": "^1.0.2", - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "react": ">=17.0.1", - "react-dom": ">=17.0.1" - } - }, - "node_modules/react-native-web/node_modules/fbjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.0.tgz", - "integrity": "sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg==", - "dependencies": { - "cross-fetch": "^3.0.4", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - } - }, - "node_modules/react-native-webview": { - "version": "11.6.2", - "resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-11.6.2.tgz", - "integrity": "sha512-7e5ltLBgqt1mX0gdTTS2nFPIjfS6y300wqJ4rLWqU71lDO+8ZeayfsF5qo83qxo2Go74CtLnSeWae4pdGwUqYw==", - "dependencies": { - "escape-string-regexp": "2.0.0", - "invariant": "2.2.4" - }, - "peerDependencies": { - "react-native": ">=0.60 <=0.64" - } - }, - "node_modules/react-native-webview/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/react-native/node_modules/@react-native-community/cli": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-5.0.1.tgz", - "integrity": "sha512-9VzSYUYSEqxEH5Ib2UNSdn2eyPiYZ4T7Y79o9DKtRBuSaUIwbCUdZtIm+UUjBpLS1XYBkW26FqL8/UdZDmQvXw==", - "dependencies": { - "@react-native-community/cli-debugger-ui": "^5.0.1", - "@react-native-community/cli-hermes": "^5.0.1", - "@react-native-community/cli-server-api": "^5.0.1", - "@react-native-community/cli-tools": "^5.0.1", - "@react-native-community/cli-types": "^5.0.1", - "appdirsjs": "^1.2.4", - "chalk": "^3.0.0", - "command-exists": "^1.2.8", - "commander": "^2.19.0", - "cosmiconfig": "^5.1.0", - "deepmerge": "^3.2.0", - "envinfo": "^7.7.2", - "execa": "^1.0.0", - "find-up": "^4.1.0", - "fs-extra": "^8.1.0", - "glob": "^7.1.3", - "graceful-fs": "^4.1.3", - "joi": "^17.2.1", - "leven": "^3.1.0", - "lodash": "^4.17.15", - "metro": "^0.64.0", - "metro-config": "^0.64.0", - "metro-core": "^0.64.0", - "metro-react-native-babel-transformer": "^0.64.0", - "metro-resolver": "^0.64.0", - "metro-runtime": "^0.64.0", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "node-stream-zip": "^1.9.1", - "ora": "^3.4.0", - "pretty-format": "^26.6.2", - "prompts": "^2.4.0", - "semver": "^6.3.0", - "serve-static": "^1.13.1", - "strip-ansi": "^5.2.0", - "sudo-prompt": "^9.0.0", - "wcwidth": "^1.0.1" - }, - "bin": { - "react-native": "build/bin.js" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "react-native": ">=0.64.0-rc.0 || 0.0.0-*" - } - }, - "node_modules/react-native/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/react-native/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/react-native/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/react-native/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/react-native/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/react-native/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/react-native/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/react-native/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/react-native/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/react-native/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/react-native/node_modules/metro-babel-transformer": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.64.0.tgz", - "integrity": "sha512-itZaxKTgmKGEZWxNzbSZBc22NngrMZzoUNuU92aHSTGkYi2WH4XlvzEHsstmIKHMsRVKl75cA+mNmgk4gBFJKw==", - "dependencies": { - "@babel/core": "^7.0.0", - "metro-source-map": "0.64.0", - "nullthrows": "^1.1.1" - } - }, - "node_modules/react-native/node_modules/metro-react-native-babel-preset": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.64.0.tgz", - "integrity": "sha512-HcZ0RWQRuJfpPiaHyFQJzcym+/dDIVUPwUAXWoub/C4GkGu+mPjp8vqK6g0FxokCnnI2TK0gZTza2IDfiNNscQ==", - "dependencies": { - "@babel/core": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.2.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-exponentiation-operator": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-object-assign": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-regenerator": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "react-refresh": "^0.4.0" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/react-native/node_modules/metro-react-native-babel-transformer": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.64.0.tgz", - "integrity": "sha512-K1sHO3ODBFCr7uEiCQ4RvVr+cQg0EHQF8ChVPnecGh/WDD8udrTq9ECwB0dRfMjAvlsHtRUlJm6ZSI8UPgum2w==", - "dependencies": { - "@babel/core": "^7.0.0", - "babel-preset-fbjs": "^3.3.0", - "metro-babel-transformer": "0.64.0", - "metro-react-native-babel-preset": "0.64.0", - "metro-source-map": "0.64.0", - "nullthrows": "^1.1.1" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/react-native/node_modules/metro-source-map": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.64.0.tgz", - "integrity": "sha512-OCG2rtcp5cLEGYvAbfkl6mEc0J2FPRP4/UCEly+juBk7hawS9bCBMBfhJm/HIsvY1frk6nT2Vsl1O8YBbwyx2g==", - "dependencies": { - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "invariant": "^2.2.4", - "metro-symbolicate": "0.64.0", - "nullthrows": "^1.1.1", - "ob1": "0.64.0", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - } - }, - "node_modules/react-native/node_modules/metro-symbolicate": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.64.0.tgz", - "integrity": "sha512-qIi+YRrDWnLVmydj6gwidYLPaBsakZRibGWSspuXgHAxOI3UuLwlo4dpQ73Et0gyHjI7ZvRMRY8JPiOntf9AQQ==", - "dependencies": { - "invariant": "^2.2.4", - "metro-source-map": "0.64.0", - "nullthrows": "^1.1.1", - "source-map": "^0.5.6", - "through2": "^2.0.1", - "vlq": "^1.0.0" - }, - "bin": { - "metro-symbolicate": "src/index.js" - }, - "engines": { - "node": ">=8.3" - } - }, - "node_modules/react-native/node_modules/ob1": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.64.0.tgz", - "integrity": "sha512-CO1N+5dhvy+MoAwxz8+fymEUcwsT4a+wHhrHFb02LppcJdHxgcBWviwEhUwKOD2kLMQ7ijrrzybOqpGcqEtvpQ==" - }, - "node_modules/react-native/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-native/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/react-native/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/react-native/node_modules/promise": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", - "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/react-native/node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/react-native/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/react-native/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/react-native/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/react-redux": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.4.tgz", - "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" - }, - "peerDependencies": { - "react": "^16.8.3 || ^17" - }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - } - } - }, - "node_modules/react-refresh": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", - "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "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" - } - }, - "node_modules/readable-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/recast": { - "version": "0.20.4", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.4.tgz", - "integrity": "sha512-6qLIBGGRcwjrTZGIiBpJVC/NeuXpogXNyRQpqU1zWPUigCphvApoCs9KIwDYh1eDuJ6dAFlQoi/QUyE5KQ6RBQ==", - "dependencies": { - "ast-types": "0.14.2", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/recast/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/redux": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.0.tgz", - "integrity": "sha512-uI2dQN43zqLWCt6B/BMGRMY6db7TTY4qeHHfGeKb3EOhmOKjU3KdWvNLJyqaHRksv/ErdNH7cFZWg9jXtewy4g==", - "dependencies": { - "@babel/runtime": "^7.9.2" - } - }, - "node_modules/redux-persist": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-6.0.0.tgz", - "integrity": "sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ==", - "peerDependencies": { - "redux": ">4.0.0" - } - }, - "node_modules/redux-thunk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz", - "integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==" - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "dependencies": { - "regenerate": "^1.4.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - }, - "node_modules/regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" - }, - "node_modules/regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "node_modules/reselect": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-3.0.1.tgz", - "integrity": "sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=" - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated" - }, - "node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "engines": { - "node": ">=0.12" - } - }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/rn-sliding-up-panel": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rn-sliding-up-panel/-/rn-sliding-up-panel-2.4.5.tgz", - "integrity": "sha512-Z8TEJE8KMjx0s9P4ikUDAlvyDgvF9n/6QR5GIUi8iWRKhiYJ4sddKjAIDYVI5yT1q+rJu+iAo7Z310H3yCb3sQ==", - "dependencies": { - "clamp": "^1.0.1", - "prop-types": "^15.7.2" - }, - "peerDependencies": { - "react": ">=16.x", - "react-native": ">=0.47" - } - }, - "node_modules/rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "engines": { - "node": "6.* || >= 7.*" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", - "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" - }, - "bin": { - "sane": "src/cli.js" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/sane/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/sane/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "node_modules/scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "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" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - }, - "node_modules/serialize-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", - "integrity": "sha1-ULZ51WNc34Rme9yOWa9OW4HV9go=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "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" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dependencies": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" - } - }, - "node_modules/shell-quote/node_modules/array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=" - }, - "node_modules/shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "node_modules/simple-plist": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.1.1.tgz", - "integrity": "sha512-pKMCVKvZbZTsqYR6RKgLfBHkh2cV89GXcA/0CVPje3sOiNOnXA8+rp/ciAMZ7JRaUdLzlEM6JFfUn+fS6Nt3hg==", - "dependencies": { - "bplist-creator": "0.0.8", - "bplist-parser": "0.2.0", - "plist": "^3.0.1" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/slugify": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.5.0.tgz", - "integrity": "sha512-Q2UPZ2udzquy1ElHfOLILMBMqBEXkiD3wE75qtBvV+FsDdZZjUqPZ44vqLTejAVq+wLLHacOMcENnP8+ZbzmIA==", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", - "dependencies": { - "is-plain-obj": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "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" - } - }, - "node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" - }, - "node_modules/split-on-first": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", - "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "node_modules/stackframe": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", - "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==" - }, - "node_modules/stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "dependencies": { - "type-fest": "^0.7.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/stacktrace-parser/node_modules/type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/stream-buffers": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", - "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=", - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/strict-uri-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", - "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=", - "engines": { - "node": ">=4" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-hash-64": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string-hash-64/-/string-hash-64-1.0.3.tgz", - "integrity": "sha512-D5OKWKvDhyVWWn2x5Y9b+37NUllks34q1dCDhk/vYcso9fmhs+Tl3KR/gE4v5UNj2UA35cnX4KdVVGkG1deKqw==" - }, - "node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sudo-prompt": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", - "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==" - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/temp": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", - "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", - "engines": [ - "node >=0.8.0" - ], - "dependencies": { - "os-tmpdir": "^1.0.0", - "rimraf": "~2.2.6" - } - }, - "node_modules/temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/temp/node_modules/rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", - "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/tempy": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz", - "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==", - "dependencies": { - "temp-dir": "^1.0.0", - "type-fest": "^0.3.1", - "unique-string": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==" - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/timm": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", - "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==" - }, - "node_modules/tiny-queue": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tiny-queue/-/tiny-queue-0.2.1.tgz", - "integrity": "sha1-JaZ/LG4lOyypQZd7XvdELvl6YEY=" - }, - "node_modules/tinycolor2": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", - "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==", - "engines": { - "node": "*" - } - }, - "node_modules/tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" - }, - "node_modules/type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.28", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", - "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "engines": { - "node": "*" - } - }, - "node_modules/uglify-es": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", - "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", - "deprecated": "support for ECMAScript is superseded by `uglify-js` as of v3.13.0", - "dependencies": { - "commander": "~2.13.0", - "source-map": "~0.6.1" - }, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/uglify-es/node_modules/commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==" - }, - "node_modules/uglify-es/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" - }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "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" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unimodules-app-loader": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unimodules-app-loader/-/unimodules-app-loader-2.1.0.tgz", - "integrity": "sha512-W+D+hVXq6jOvBm7QVwODPENz6Lupj73QequNNG+6GCTkqn4ybq/lba9IQvJQT2QzdL3luVHin+eym18cDblMlg==" - }, - "node_modules/unimodules-barcode-scanner-interface": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/unimodules-barcode-scanner-interface/-/unimodules-barcode-scanner-interface-6.1.0.tgz", - "integrity": "sha512-+McBDniXReXNS8PnGDjIyDikb+cRXSfsZMLsF0gohEEV0xdA6HhPvFA0ryv65j2NKOyIiWmEHjv+yDOoewDq3w==" - }, - "node_modules/unimodules-camera-interface": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/unimodules-camera-interface/-/unimodules-camera-interface-6.1.0.tgz", - "integrity": "sha512-Rbszrh54kIB4vA+AzDWFXplBz1UrxQNR6Ls0eJDAKffbjDfyQIP6SgIPjUlzqGVnzknyZ1SMGiFFSFCM4BCOAw==" - }, - "node_modules/unimodules-constants-interface": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/unimodules-constants-interface/-/unimodules-constants-interface-6.1.0.tgz", - "integrity": "sha512-uPLFGufbdefRQeINyUfkw2mVJJg+6kH23RR4ATfUAsrD6vGLuONwduHvRwh+rcL9fzPVM4jsfH6iATrolmiatg==" - }, - "node_modules/unimodules-face-detector-interface": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/unimodules-face-detector-interface/-/unimodules-face-detector-interface-6.1.0.tgz", - "integrity": "sha512-L2E8a2OjMPxfVh/OGt6Y5HWbEaJ9h3Hkmvx02GCferBPKgN3dcxFMaI53d1BVV9QA3r4YuLBP6RrolG/qy/r7A==" - }, - "node_modules/unimodules-file-system-interface": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/unimodules-file-system-interface/-/unimodules-file-system-interface-6.1.0.tgz", - "integrity": "sha512-iJGm6nWF+PhxqFbeqC2Ku4XjglbL9z7aofkSX5S7bZ3Oi4v1NO1UOe9nczU17Ps19sfYZJgkiD4FiQaFCmAnKg==" - }, - "node_modules/unimodules-font-interface": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/unimodules-font-interface/-/unimodules-font-interface-6.1.0.tgz", - "integrity": "sha512-OfSeWx9ew2SNENj/HhctfPU7hqeW0bzVZYGGJ0M6RNcRRWzwA6ltawyYwtuvRe/EEU3LwrFUSKPMCi9867hLyw==" - }, - "node_modules/unimodules-image-loader-interface": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/unimodules-image-loader-interface/-/unimodules-image-loader-interface-6.1.0.tgz", - "integrity": "sha512-o8hZI6J6DGYyo2xSH6J+ipxME0blNfmaWU3P2Y2AUVxbEPdgjT2sVmufRWMKGhrt7gaNW4xF/JUbF9lq4Rui7w==" - }, - "node_modules/unimodules-permissions-interface": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/unimodules-permissions-interface/-/unimodules-permissions-interface-6.1.0.tgz", - "integrity": "sha512-jeJx/y+Vn/Cp1/4su5XJ06UBul83MpXkYEqIOAb2jwaikhmj6tNwko7HpKy9OhfGfrhddCzwtedlro8xxZUk9A==" - }, - "node_modules/unimodules-sensors-interface": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/unimodules-sensors-interface/-/unimodules-sensors-interface-6.1.0.tgz", - "integrity": "sha512-tJDOo3p4q4wmhyuwapNjYeON7cd5OSPYr3qDfMgPPg9m6pYM/FdQJ1PKMNb1NJUckpDgQ67Dows2jAdqkNRZSw==" - }, - "node_modules/unimodules-task-manager-interface": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/unimodules-task-manager-interface/-/unimodules-task-manager-interface-6.1.0.tgz", - "integrity": "sha512-wSsuX5fzd3oCCjHvrRFxysmCswhHZbJflVyAWzgSHtyMgxBOZobGN1C0UQ/plcu/JWY2+maTDPpE9OU6wzzzdg==" - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "dependencies": { - "crypto-random-string": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated" - }, - "node_modules/url-parse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", - "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/use-subscription": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/use-subscription/-/use-subscription-1.5.1.tgz", - "integrity": "sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==", - "dependencies": { - "object-assign": "^4.1.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/utif": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", - "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", - "dependencies": { - "pako": "^1.0.5" - } - }, - "node_modules/util": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.3.tgz", - "integrity": "sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog==", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vlq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", - "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==" - }, - "node_modules/walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dependencies": { - "makeerror": "1.0.x" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "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" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "node_modules/which-typed-array": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", - "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==", - "dependencies": { - "available-typed-arrays": "^1.0.2", - "call-bind": "^1.0.0", - "es-abstract": "^1.18.0-next.1", - "foreach": "^2.0.5", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.1", - "is-typed-array": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/xcode": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz", - "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==", - "dependencies": { - "simple-plist": "^1.1.0", - "uuid": "^7.0.3" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/xcode/node_modules/uuid": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", - "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/xhr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", - "dependencies": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "dependencies": { - "sax": "^1.2.4" - }, - "bin": { - "xml-js": "bin/cli.js" - } - }, - "node_modules/xml-parse-from-string": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", - "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=" - }, - "node_modules/xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xml2js/node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xmldoc": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.1.2.tgz", - "integrity": "sha512-ruPC/fyPNck2BD1dpz0AZZyrEwMOrWTO5lDdIXS91rs3wtm4j+T8Rp2o+zoOYkkAxJTZRPOSnOGei1egoRmKMQ==", - "dependencies": { - "sax": "^1.2.1" - } - }, - "node_modules/xmldom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.5.0.tgz", - "integrity": "sha512-Foaj5FXVzgn7xFzsKeNIde9g6aFBxTPi37iwsno8QvApmtg7KYrr+OPyRHcJF7dud2a5nGRBXK3n0dL62Gf7PA==", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, - "node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yargs/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "requires": { - "@babel/highlight": "^7.12.13" - } - }, - "@babel/compat-data": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", - "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==" - }, - "@babel/core": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", - "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.0", - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helpers": "^7.9.0", - "@babel/parser": "^7.9.0", - "@babel/template": "^7.8.6", - "@babel/traverse": "^7.9.0", - "@babel/types": "^7.9.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "@babel/generator": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.0.tgz", - "integrity": "sha512-C6u00HbmsrNPug6A+CiNl8rEys7TsdcXwg12BHi2ca5rUfAs3+UwZsuDQSXnc+wCElCXMB8gMaJ3YXDdh8fAlg==", - "requires": { - "@babel/types": "^7.14.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", - "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", - "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", - "requires": { - "@babel/helper-explode-assignable-expression": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", - "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", - "requires": { - "@babel/compat-data": "^7.13.15", - "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.0.tgz", - "integrity": "sha512-6pXDPguA5zC40Y8oI5mqr+jEUpjMJonKvknvA+vD8CYDz5uuXEwWBK8sRAsE/t3gfb1k15AQb9RhwpscC4nUJQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.12.13", - "@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": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz", - "integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "regexpu-core": "^4.7.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz", - "integrity": "sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==", - "requires": { - "@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" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", - "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", - "requires": { - "@babel/types": "^7.13.0" - } - }, - "@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", - "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", - "requires": { - "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.16" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-module-transforms": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", - "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", - "requires": { - "@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.0", - "@babel/types": "^7.14.0" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", - "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-wrap-function": "^7.13.0", - "@babel/types": "^7.13.0" - } - }, - "@babel/helper-replace-supers": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", - "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", - "requires": { - "@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": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" - }, - "@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==" - }, - "@babel/helper-wrap-function": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", - "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", - "requires": { - "@babel/helper-function-name": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" - } - }, - "@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", - "requires": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" - } - }, - "@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } - } - }, - "@babel/parser": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.0.tgz", - "integrity": "sha512-AHbfoxesfBALg33idaTBVUkLnfXtsgvJREf93p4p0Lwsz4ppfE7g1tpEXVm4vrxUcH4DVhAa9Z1m1zqf9WUC7Q==" - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.15.tgz", - "integrity": "sha512-VapibkWzFeoa6ubXy/NgV5U2U4MVnUlvnx6wo1XhlsaTrLYWE0UFpDQsVrmn22q5CzeloqJ8gEMHSKxuee6ZdA==", - "requires": { - "@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": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.13.tgz", - "integrity": "sha512-8SCJ0Ddrpwv4T7Gwb33EmW1V9PY5lggTO+A8WjyIwxrSHDUyBw4MtF96ifn1n8H806YlxbVCoKXbbmzD6RD+cA==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-proposal-decorators": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.13.15.tgz", - "integrity": "sha512-ibAMAqUm97yzi+LPgdr5Nqb9CMkeieGHvwPg1ywSGjZrZHQEGqE01HmOio8kxRpA/+VtOHouIVy2FMpBbtltjA==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.13.11", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-decorators": "^7.12.13" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz", - "integrity": "sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-default-from": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.12.13.tgz", - "integrity": "sha512-idIsBT+DGXdOHL82U+8bwX4goHm/z10g8sGGrQroh+HCRcm7mDv/luaGdWJQMTuCX2FsdXS7X0Nyyzp4znAPJA==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-syntax-export-default-from": "^7.12.13" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz", - "integrity": "sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz", - "integrity": "sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz", - "integrity": "sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz", - "integrity": "sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz", - "integrity": "sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz", - "integrity": "sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==", - "requires": { - "@babel/compat-data": "^7.13.8", - "@babel/helper-compilation-targets": "^7.13.8", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.13.0" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz", - "integrity": "sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz", - "integrity": "sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ==", - "requires": { - "@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": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", - "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", - "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-decorators": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.13.tgz", - "integrity": "sha512-Rw6aIXGuqDLr6/LoBBYE57nKOzQpz/aDkKlMqEwH+Vp0MXbG6H/TfRjaY343LKxzAKAMXIHsQ8JzaZKuDZ9MwA==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-default-from": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.12.13.tgz", - "integrity": "sha512-gVry0zqoums0hA+EniCYK3gABhjYSLX1dVuwYpPw9DrLNA4/GovXySHVg4FGRsZht09ON/5C2NVx3keq+qqVGQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-flow": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.13.tgz", - "integrity": "sha512-J/RYxnlSLXZLVR7wTRsozxKT8qbsx1mNKJzXEEjQ0Kjx1ZACcyHgbanNWNCFtc36IzuWhYWPpvJFFoexoOWFmA==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz", - "integrity": "sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", - "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz", - "integrity": "sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", - "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", - "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", - "requires": { - "@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": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", - "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.13.16.tgz", - "integrity": "sha512-ad3PHUxGnfWF4Efd3qFuznEtZKoBp0spS+DgqzVzRPV7urEBvPLue3y2j80w4Jf2YLzZHj8TOv/Lmvdmh3b2xg==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz", - "integrity": "sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-replace-supers": "^7.13.0", - "@babel/helper-split-export-declaration": "^7.12.13", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", - "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz", - "integrity": "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", - "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", - "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", - "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-flow-strip-types": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.13.0.tgz", - "integrity": "sha512-EXAGFMJgSX8gxWD7PZtW/P6M+z74jpx3wm/+9pn+c2dOawPpBkUX7BrfyPvo6ZpXbgRIEuwgwDb/MGlKvu2pOg==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-flow": "^7.12.13" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", - "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", - "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", - "requires": { - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", - "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", - "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.0.tgz", - "integrity": "sha512-CF4c5LX4LQ03LebQxJ5JZes2OYjzBuk1TdiF7cG7d5dK4lAdw9NZmaxq5K/mouUdNeqwz3TNjnW6v01UqUNgpQ==", - "requires": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", - "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", - "requires": { - "@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": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", - "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", - "requires": { - "@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": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", - "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", - "requires": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", - "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", - "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-object-assign": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.12.13.tgz", - "integrity": "sha512-4QxDMc0lAOkIBSfCrnSGbAJ+4epDBF2XXwcLXuBcG1xl9u7LrktNVD4+LwhL47XuKVPQ7R25e/WdcV+h97HyZA==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", - "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/helper-replace-supers": "^7.12.13" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz", - "integrity": "sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", - "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.13.tgz", - "integrity": "sha512-MprESJzI9O5VnJZrL7gg1MpdqmiFcUv41Jc7SahxYsNP2kDkFqClxxTZq+1Qv4AFCamm+GXMRDQINNn+qrxmiA==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz", - "integrity": "sha512-jcEI2UqIcpCqB5U5DRxIl0tQEProI2gcu+g8VTIqxLO5Iidojb4d77q+fwGseCvd8af/lJ9masp4QWzBXFE2xA==", - "requires": { - "@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-jsx-self": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.13.tgz", - "integrity": "sha512-FXYw98TTJ125GVCCkFLZXlZ1qGcsYqNQhVBQcZjyrwf8FEUtVfKIoidnO8S0q+KBQpDYNTmiGo1gn67Vti04lQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-react-jsx-source": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.13.tgz", - "integrity": "sha512-O5JJi6fyfih0WfDgIJXksSPhGP/G0fQpfxYy87sDc+1sFmsCS6wr3aAn+whbzkhbjtq4VMqLRaSzR6IsshIC0Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", - "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", - "requires": { - "regenerator-transform": "^0.14.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", - "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.15.tgz", - "integrity": "sha512-d+ezl76gx6Jal08XngJUkXM4lFXK/5Ikl9Mh4HKDxSfGJXmZ9xG64XT2oivBzfxb/eQ62VfvoMkaCZUKJMVrBA==", - "requires": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-polyfill-corejs2": "^0.2.0", - "babel-plugin-polyfill-corejs3": "^0.2.0", - "babel-plugin-polyfill-regenerator": "^0.2.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", - "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", - "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", - "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", - "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", - "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.13.0.tgz", - "integrity": "sha512-elQEwluzaU8R8dbVuW2Q2Y8Nznf7hnjM7+DSCd14Lo5fF63C9qNLbwZYbmZrtV9/ySpSUpkRpQXvJb6xyu4hCQ==", - "requires": { - "@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": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", - "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", - "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/preset-env": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.17.tgz", - "integrity": "sha512-9PMijx8zFbCwTHrd2P4PJR5nWGH3zWebx2OcpTjqQrHhCiL2ssSR2Sc9ko2BsI2VmVBfoaQmPrlMTCui4LmXQg==", - "requires": { - "@babel/compat-data": "^7.12.13", - "@babel/helper-compilation-targets": "^7.12.17", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-proposal-async-generator-functions": "^7.12.13", - "@babel/plugin-proposal-class-properties": "^7.12.13", - "@babel/plugin-proposal-dynamic-import": "^7.12.17", - "@babel/plugin-proposal-export-namespace-from": "^7.12.13", - "@babel/plugin-proposal-json-strings": "^7.12.13", - "@babel/plugin-proposal-logical-assignment-operators": "^7.12.13", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.13", - "@babel/plugin-proposal-numeric-separator": "^7.12.13", - "@babel/plugin-proposal-object-rest-spread": "^7.12.13", - "@babel/plugin-proposal-optional-catch-binding": "^7.12.13", - "@babel/plugin-proposal-optional-chaining": "^7.12.17", - "@babel/plugin-proposal-private-methods": "^7.12.13", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@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.13", - "@babel/plugin-transform-arrow-functions": "^7.12.13", - "@babel/plugin-transform-async-to-generator": "^7.12.13", - "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.12.13", - "@babel/plugin-transform-classes": "^7.12.13", - "@babel/plugin-transform-computed-properties": "^7.12.13", - "@babel/plugin-transform-destructuring": "^7.12.13", - "@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.12.13", - "@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.12.13", - "@babel/plugin-transform-modules-commonjs": "^7.12.13", - "@babel/plugin-transform-modules-systemjs": "^7.12.13", - "@babel/plugin-transform-modules-umd": "^7.12.13", - "@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.12.13", - "@babel/plugin-transform-property-literals": "^7.12.13", - "@babel/plugin-transform-regenerator": "^7.12.13", - "@babel/plugin-transform-reserved-words": "^7.12.13", - "@babel/plugin-transform-shorthand-properties": "^7.12.13", - "@babel/plugin-transform-spread": "^7.12.13", - "@babel/plugin-transform-sticky-regex": "^7.12.13", - "@babel/plugin-transform-template-literals": "^7.12.13", - "@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.3", - "@babel/types": "^7.12.17", - "core-js-compat": "^3.8.0", - "semver": "^5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "@babel/preset-flow": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.13.13.tgz", - "integrity": "sha512-MDtwtamMifqq3R2mC7l3A3uFalUb3NH5TIBQWjN/epEPlZktcLq4se3J+ivckKrLMGsR7H9LW8+pYuIUN9tsKg==", - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-transform-flow-strip-types": "^7.13.0" - } - }, - "@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", - "requires": { - "@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-typescript": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.12.17.tgz", - "integrity": "sha512-T513uT4VSThRcmWeqcLkITKJ1oGQho9wfWuhQm10paClQkp1qyd0Wf8mvC8Se7UYssMyRSj4tZYpVTkCmAK/mA==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-transform-typescript": "^7.12.17" - } - }, - "@babel/register": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.13.16.tgz", - "integrity": "sha512-dh2t11ysujTwByQjXNgJ48QZ2zcXKQVdV8s0TbeMI0flmtGWCdTwK9tJiACHXPLmncm5+ktNn/diojA45JE4jg==", - "requires": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.0", - "source-map-support": "^0.5.16" - } - }, - "@babel/runtime": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", - "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/traverse": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", - "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.0", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.0", - "@babel/types": "^7.14.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.0.tgz", - "integrity": "sha512-O2LVLdcnWplaGxiPBz12d0HcdN8QdxdsWYhz5LSeuukV/5mn2xUUc3gBeU4QBYPJ18g/UToe8F532XJ608prmg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - }, - "@callstack/react-theme-provider": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@callstack/react-theme-provider/-/react-theme-provider-3.0.5.tgz", - "integrity": "sha512-Iec+ybWN0FvNj87sD3oWo/49edGUP0UOSdMnzCJEFJIDYr992ECIuOV89burAAh2/ibPCxgLiK6dmgv2mO/8Tg==", - "requires": { - "deepmerge": "^3.2.0", - "hoist-non-react-statics": "^3.3.0" - } - }, - "@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, - "@egjs/hammerjs": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/@egjs/hammerjs/-/hammerjs-2.0.17.tgz", - "integrity": "sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==", - "requires": { - "@types/hammerjs": "^2.0.36" - } - }, - "@expo/config": { - "version": "3.3.38", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-3.3.38.tgz", - "integrity": "sha512-0SsvF7yTy+kdJaAc2W75yhwnaXIRasnA1Vygna83tlPhCx6ynIBzTbJAvdkddSk5euUTJpXc5nePaflGvNboXw==", - "requires": { - "@babel/core": "7.9.0", - "@babel/plugin-proposal-class-properties": "~7.12.13", - "@babel/preset-env": "~7.12.13", - "@babel/preset-typescript": "~7.12.13", - "@expo/config-plugins": "1.0.28", - "@expo/config-types": "^40.0.0-beta.2", - "@expo/json-file": "8.2.29", - "fs-extra": "9.0.0", - "getenv": "^1.0.0", - "glob": "7.1.6", - "require-from-string": "^2.0.2", - "resolve-from": "^5.0.0", - "semver": "7.3.2", - "slugify": "^1.3.4" - } - }, - "@expo/config-plugins": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-1.0.28.tgz", - "integrity": "sha512-i5SpC6U3LjRQlwi1xM4SRj8dR2Qm+0dykPo0GeesByB7IvT36AT1ZjI7VjecuoZ6yKbLpaa5tWvU3JGObxIPSw==", - "requires": { - "@expo/config-types": "^40.0.0-beta.2", - "@expo/configure-splash-screen": "0.3.4", - "@expo/image-utils": "0.3.13", - "@expo/json-file": "8.2.29", - "@expo/plist": "0.0.12", - "find-up": "~5.0.0", - "fs-extra": "9.0.0", - "getenv": "^1.0.0", - "glob": "7.1.6", - "resolve-from": "^5.0.0", - "slash": "^3.0.0", - "slugify": "^1.3.4", - "xcode": "^3.0.1", - "xml2js": "^0.4.23" - } - }, - "@expo/config-types": { - "version": "40.0.0-beta.2", - "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-40.0.0-beta.2.tgz", - "integrity": "sha512-t9pHCQMXOP4nwd7LGXuHkLlFy0JdfknRSCAeVF4Kw2/y+5OBbR9hW9ZVnetpBf0kORrekgiI7K/qDaa3hh5+Qg==" - }, - "@expo/configure-splash-screen": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@expo/configure-splash-screen/-/configure-splash-screen-0.3.4.tgz", - "integrity": "sha512-HsukM03X5/EXSucVsLN/oLqyFq/1jAjpADkgU1HLaezFpkr+TOquI6yDwdDp1450kcm891PE/SYJ+mCdPxzDLw==", - "requires": { - "color-string": "^1.5.3", - "commander": "^5.1.0", - "core-js": "^3.6.5", - "deep-equal": "^2.0.3", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "lodash": "^4.17.15", - "pngjs": "^5.0.0", - "xcode": "^3.0.0", - "xml-js": "^1.6.11" - } - }, - "@expo/image-utils": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.3.13.tgz", - "integrity": "sha512-BpKoFVJBjG9H5AU040Skrm3R2uDGpWXBU/4TivB5H10cyJphoJKp3GNJVPHYLOVc70OtAxjWDIhLMW6xsWfrgw==", - "requires": { - "@expo/spawn-async": "1.5.0", - "chalk": "^4.0.0", - "fs-extra": "9.0.0", - "getenv": "^1.0.0", - "jimp": "0.12.1", - "mime": "^2.4.4", - "node-fetch": "^2.6.0", - "parse-png": "^2.1.0", - "resolve-from": "^5.0.0", - "semver": "7.3.2", - "tempy": "0.3.0" - } - }, - "@expo/json-file": { - "version": "8.2.29", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.2.29.tgz", - "integrity": "sha512-9C8XwpJiJN9fyClnnNDSTh034zJU9hon6MCUqbBa4dZYQN7OZ00KFZEpbtjy+FndE7YD+KagDxRD6O1HS5vU0g==", - "requires": { - "@babel/code-frame": "~7.10.4", - "fs-extra": "9.0.0", - "json5": "^1.0.1", - "write-file-atomic": "^2.3.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - } - } - }, - "@expo/metro-config": { - "version": "0.1.64", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.1.64.tgz", - "integrity": "sha512-ooD+XOVGnKPIIZbyfVTvMeQ3p9HpRt4aNCehSM6H1ueQm8+IpVwrhw8sJjL5xr+FVxFqj0+Ga9DI8d0AXS8U4g==", - "requires": { - "@expo/config": "3.3.38", - "chalk": "^4.1.0", - "getenv": "^1.0.0", - "metro-react-native-babel-transformer": "^0.59.0" - } - }, - "@expo/plist": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.0.12.tgz", - "integrity": "sha512-anGvLk58fxfeHY2PbtH79VxhrLDPGd+173pHYYXNg9HlfbrEVLI2Vo0ZBOrr/cYr7cgU5A/WNcMphRoO/KfYZQ==", - "requires": { - "base64-js": "^1.2.3", - "xmlbuilder": "^14.0.0", - "xmldom": "~0.5.0" - }, - "dependencies": { - "xmlbuilder": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-14.0.0.tgz", - "integrity": "sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg==" - } - } - }, - "@expo/prebuild-config": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-2.0.3.tgz", - "integrity": "sha512-ruZHhdEB0nv7mHwssUFXeYeGQ8Atfeben0CdO461cmjQ/CwxmlusrkFdGfMucj5CocR9WujBr/nIMvfm4FIDIA==", - "requires": { - "@expo/config": "5.0.3", - "@expo/config-plugins": "3.0.3", - "@expo/config-types": "^41.0.0", - "@expo/image-utils": "~0.3.14", - "@expo/json-file": "^8.2.30", - "debug": "^4.3.1", - "fs-extra": "^9.0.0", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@expo/config": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-5.0.3.tgz", - "integrity": "sha512-FMv2Jk/v3QZXaNN/mGKqj3wLvsbAa1RjtSTNhJ7QxMiSLl6vlmfMutmKyBiuzk2KDCbELR65JkDf15m4sAZCGg==", - "requires": { - "@babel/core": "7.9.0", - "@babel/plugin-proposal-class-properties": "~7.12.13", - "@babel/preset-env": "~7.12.13", - "@babel/preset-typescript": "~7.12.13", - "@expo/config-plugins": "3.0.3", - "@expo/config-types": "^41.0.0", - "@expo/json-file": "8.2.30", - "fs-extra": "9.0.0", - "getenv": "^1.0.0", - "glob": "7.1.6", - "require-from-string": "^2.0.2", - "resolve-from": "^5.0.0", - "semver": "7.3.2", - "slugify": "^1.3.4" - } - }, - "@expo/config-plugins": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-3.0.3.tgz", - "integrity": "sha512-+DWHd/2L3O+njVercxGSzcBUXMm5CSzdvIK+7dU+FRhoiF57y2NzBhfNQcReYx/EY1coBrYOsMtENPhV1tWoWQ==", - "requires": { - "@expo/config-types": "^41.0.0", - "@expo/json-file": "8.2.30", - "@expo/plist": "0.0.13", - "debug": "^4.3.1", - "find-up": "~5.0.0", - "fs-extra": "9.0.0", - "getenv": "^1.0.0", - "glob": "7.1.6", - "resolve-from": "^5.0.0", - "slash": "^3.0.0", - "xcode": "^3.0.1", - "xml2js": "^0.4.23" - } - }, - "@expo/config-types": { - "version": "41.0.0", - "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-41.0.0.tgz", - "integrity": "sha512-Ax0pHuY5OQaSrzplOkT9DdpdmNzaVDnq9VySb4Ujq7UJ4U4jriLy8u93W98zunOXpcu0iiKubPsqD6lCiq0pig==" - }, - "@expo/image-utils": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.3.14.tgz", - "integrity": "sha512-n+JkLZ71CWuNKLVVsPTzMGRwmbeKiVQw/2b99Ro7znCKzJy3tyE5T2C6WBvYh/5h/hjg8TqEODjXXWucRIzMXA==", - "requires": { - "@expo/spawn-async": "1.5.0", - "chalk": "^4.0.0", - "fs-extra": "9.0.0", - "getenv": "^1.0.0", - "jimp": "0.12.1", - "mime": "^2.4.4", - "node-fetch": "^2.6.0", - "parse-png": "^2.1.0", - "resolve-from": "^5.0.0", - "semver": "7.3.2", - "tempy": "0.3.0" - } - }, - "@expo/json-file": { - "version": "8.2.30", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.2.30.tgz", - "integrity": "sha512-vrgGyPEXBoFI5NY70IegusCSoSVIFV3T3ry4tjJg1MFQKTUlR7E0r+8g8XR6qC705rc2PawaZQjqXMAVtV6s2A==", - "requires": { - "@babel/code-frame": "~7.10.4", - "fs-extra": "9.0.0", - "json5": "^1.0.1", - "write-file-atomic": "^2.3.0" - } - }, - "@expo/plist": { - "version": "0.0.13", - "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.0.13.tgz", - "integrity": "sha512-zGPSq9OrCn7lWvwLLHLpHUUq2E40KptUFXn53xyZXPViI0k9lbApcR9KlonQZ95C+ELsf0BQ3gRficwK92Ivcw==", - "requires": { - "base64-js": "^1.2.3", - "xmlbuilder": "^14.0.0", - "xmldom": "~0.5.0" - } - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "xmlbuilder": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-14.0.0.tgz", - "integrity": "sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg==" - } - } - }, - "@expo/spawn-async": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.5.0.tgz", - "integrity": "sha512-LB7jWkqrHo+5fJHNrLAFdimuSXQ2MQ4lA7SQW5bf/HbsXuV2VrT/jN/M8f/KoWt0uJMGN4k/j7Opx4AvOOxSew==", - "requires": { - "cross-spawn": "^6.0.5" - } - }, - "@expo/vector-icons": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-12.0.4.tgz", - "integrity": "sha512-/EFbXri7jZmqj1jTY6wpauvMN0DY0Epic003d43yWqrScLlVERaxXrOR07BNuCZvVMHBAzXN4VbOzUUUTq6j8g==", - "requires": { - "lodash.frompairs": "^4.0.1", - "lodash.isequal": "^4.5.0", - "lodash.isstring": "^4.0.1", - "lodash.omit": "^4.5.0", - "lodash.pick": "^4.4.0", - "lodash.template": "^4.5.0" - } - }, - "@expo/websql": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@expo/websql/-/websql-1.0.1.tgz", - "integrity": "sha1-//DPnBuqH3D54dZYt8OaQg2bEKk=", - "requires": { - "argsarray": "^0.0.1", - "immediate": "^3.2.2", - "noop-fn": "^1.0.0", - "pouchdb-collections": "^1.0.1", - "tiny-queue": "^0.2.1" - } - }, - "@hapi/hoek": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz", - "integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==" - }, - "@hapi/topo": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.0.0.tgz", - "integrity": "sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==", - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@ide/backoff": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@ide/backoff/-/backoff-1.0.0.tgz", - "integrity": "sha512-F0YfUDjvT+Mtt/R4xdl2X0EYCHMMiJqNLdxHD++jDT5ydEFIyqbCHh51Qx2E211dgZprPKhV7sHmnXKpLuvc5g==" - }, - "@jest/create-cache-key-function": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-26.6.2.tgz", - "integrity": "sha512-LgEuqU1f/7WEIPYqwLPIvvHuc1sB6gMVbT6zWhin3txYUNYK/kGQrC1F2WR4gR34YlI9bBtViTm5z98RqVZAaw==", - "requires": { - "@jest/types": "^26.6.2" - } - }, - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@jimp/bmp": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.12.1.tgz", - "integrity": "sha512-t16IamuBMv4GiGa1VAMzsgrVKVANxXG81wXECzbikOUkUv7pKJ2vHZDgkLBEsZQ9sAvFCneM1+yoSRpuENrfVQ==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1", - "bmp-js": "^0.1.0" - } - }, - "@jimp/core": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.12.1.tgz", - "integrity": "sha512-mWfjExYEjHxBal+1gPesGChOQBSpxO7WUQkrO9KM7orboitOdQ15G5UA75ce7XVZ+5t+FQPOLmVkVZzzTQSEJA==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1", - "any-base": "^1.1.0", - "buffer": "^5.2.0", - "exif-parser": "^0.1.12", - "file-type": "^9.0.0", - "load-bmfont": "^1.3.1", - "mkdirp": "^0.5.1", - "phin": "^2.9.1", - "pixelmatch": "^4.0.2", - "tinycolor2": "^1.4.1" - } - }, - "@jimp/custom": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.12.1.tgz", - "integrity": "sha512-bVClp8FEJ/11GFTKeRTrfH7NgUWvVO5/tQzO/68aOwMIhbz9BOYQGh533K9+mSy29VjZJo8jxZ0C9ZwYHuFwfA==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/core": "^0.12.1" - } - }, - "@jimp/gif": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.12.1.tgz", - "integrity": "sha512-cGn/AcvMGUGcqR6ByClGSnrja4AYmTwsGVXTQ1+EmfAdTiy6ztGgZCTDpZ/tq4SpdHXwm9wDHez7damKhTrH0g==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1", - "omggif": "^1.0.9" - } - }, - "@jimp/jpeg": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.12.1.tgz", - "integrity": "sha512-UoCUHbKLj2CDCETd7LrJnmK/ExDsSfJXmc1pKkfgomvepjXogdl2KTHf141wL6D+9CfSD2VBWQLC5TvjMvcr9A==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1", - "jpeg-js": "^0.4.0" - } - }, - "@jimp/plugin-blit": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.12.1.tgz", - "integrity": "sha512-VRBB6bx6EpQuaH0WX8ytlGNqUQcmuxXBbzL3e+cD0W6MluYibzQy089okvXcyUS72Q+qpSMmUDCVr3pDqLAsSA==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - } - }, - "@jimp/plugin-blur": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.12.1.tgz", - "integrity": "sha512-rTFY0yrwVJFNgNsAlYGn2GYCRLVEcPQ6cqAuhNylXuR/7oH3Acul+ZWafeKtvN8D8uMlth/6VP74gruXvwffZw==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - } - }, - "@jimp/plugin-circle": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.12.1.tgz", - "integrity": "sha512-+/OiBDjby7RBbQoDX8ZsqJRr1PaGPdTaaKUVGAsrE7KCNO9ODYNFAizB9lpidXkGgJ4Wx5R4mJy21i22oY/a4Q==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - } - }, - "@jimp/plugin-color": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.12.1.tgz", - "integrity": "sha512-xlnK/msWN4uZ+Bu7+UrCs9oMzTSA9QE0jWFnF3h0aBsD8t1LGxozkckHe8nHtC/y/sxIa8BGKSfkiaW+r6FbnA==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1", - "tinycolor2": "^1.4.1" - } - }, - "@jimp/plugin-contain": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.12.1.tgz", - "integrity": "sha512-WZ/D6G0jhnBh2bkBh610PEh/caGhAUIAxYLsQsfSSlOxPsDhbj3S6hMbFKRgnDvf0hsd5zTIA0j1B0UG4kh18A==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - } - }, - "@jimp/plugin-cover": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.12.1.tgz", - "integrity": "sha512-ddWwTQO40GcabJ2UwUYCeuNxnjV4rBTiLprnjGMqAJCzdz3q3Sp20FkRf+H+E22k2v2LHss8dIOFOF4i6ycr9Q==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - } - }, - "@jimp/plugin-crop": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.12.1.tgz", - "integrity": "sha512-CKjVkrNO8FDZKYVpMireQW4SgKBSOdF+Ip/1sWssHHe77+jGEKqOjhYju+VhT3dZJ3+75rJNI9II7Kethp+rTw==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - } - }, - "@jimp/plugin-displace": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.12.1.tgz", - "integrity": "sha512-MQAw2iuf1/bVJ6P95WWTLA+WBjvIZ7TeGBerkvBaTK8oWdj+NSLNRIYOIoyPbZ7DTL8f1SN4Vd6KD6BZaoWrwg==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - } - }, - "@jimp/plugin-dither": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.12.1.tgz", - "integrity": "sha512-mCrBHdx2ViTLJDLcrobqGLlGhZF/Mq41bURWlElQ2ArvrQ3/xR52We9DNDfC08oQ2JVb6q3v1GnCCdn0KNojGQ==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - } - }, - "@jimp/plugin-fisheye": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.12.1.tgz", - "integrity": "sha512-CHvYSXtHNplzkkYzB44tENPDmvfUHiYCnAETTY+Hx58kZ0w8ERZ+OiLhUmiBcvH/QHm/US1iiNjgGUAfeQX6dg==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - } - }, - "@jimp/plugin-flip": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.12.1.tgz", - "integrity": "sha512-xi+Yayrnln8A/C9E3yQBExjxwBSeCkt/ZQg1CxLgszVyX/3Zo8+nkV8MJYpkTpj8LCZGTOKlsE05mxu/a3lbJQ==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - } - }, - "@jimp/plugin-gaussian": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.12.1.tgz", - "integrity": "sha512-7O6eKlhL37hsLfV6WAX1Cvce7vOqSwL1oWbBveC1agutDlrtvcTh1s2mQ4Pde654hCJu55mq1Ur10+ote5j3qw==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - } - }, - "@jimp/plugin-invert": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.12.1.tgz", - "integrity": "sha512-JTAs7A1Erbxwl+7ph7tgcb2PZ4WzB+3nb2WbfiWU8iCrKj17mMDSc5soaCCycn8wfwqvgB1vhRfGpseOLWxsuQ==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - } - }, - "@jimp/plugin-mask": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.12.1.tgz", - "integrity": "sha512-bnDdY0RO/x5Mhqoy+056SN1wEj++sD4muAKqLD2CIT8Zq5M/0TA4hkdf/+lwFy3H2C0YTK39PSE9xyb4jPX3kA==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - } - }, - "@jimp/plugin-normalize": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.12.1.tgz", - "integrity": "sha512-4kSaI4JLM/PNjHwbnAHgyh51V5IlPfPxYvsZyZ1US32pebWtocxSMaSuOaJUg7OGSkwSDBv81UR2h5D+Dz1b5A==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - } - }, - "@jimp/plugin-print": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.12.1.tgz", - "integrity": "sha512-T0lNS3qU9SwCHOEz7AGrdp50+gqiWGZibOL3350/X/dqoFs1EvGDjKVeWncsGCyLlpfd7M/AibHZgu8Fx2bWng==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1", - "load-bmfont": "^1.4.0" - } - }, - "@jimp/plugin-resize": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.12.1.tgz", - "integrity": "sha512-sbNn4tdBGcgGlPt9XFxCuDl4ZOoxa8/Re8nAikyxYhRss2Dqz91ARbBQxOf1vlUGeicQMsjEuWbPQAogTSJRug==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - } - }, - "@jimp/plugin-rotate": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.12.1.tgz", - "integrity": "sha512-RYkLzwG2ervG6hHy8iepbIVeWdT1kz4Qz044eloqo6c66MK0KAqp228YI8+CAKm0joQnVDC/A0FgRIj/K8uyAw==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - } - }, - "@jimp/plugin-scale": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.12.1.tgz", - "integrity": "sha512-zjNVI1fUj+ywfG78T1ZU33g9a5sk4rhEQkkhtny8koAscnVsDN2YaZEKoFli54kqaWh5kSS5DDL7a/9pEfXnFQ==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - } - }, - "@jimp/plugin-shadow": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.12.1.tgz", - "integrity": "sha512-Z82IwvunXWQ2jXegd3W3TYUXpfJcEvNbHodr7Z+oVnwhM1OoQ5QC6RSRQwsj2qXIhbGffQjH8eguHgEgAV+u5w==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - } - }, - "@jimp/plugin-threshold": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.12.1.tgz", - "integrity": "sha512-PFezt5fSk0q+xKvdpuv0eLggy2I7EgYotrK8TRZOT0jimuYFXPF0Z514c6szumoW5kEsRz04L1HkPT1FqI97Yg==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1" - } - }, - "@jimp/plugins": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.12.1.tgz", - "integrity": "sha512-7+Yp29T6BbYo+Oqnc+m7A5AH+O+Oy5xnxvxlfmsp48+SuwEZ4akJp13Gu2PSmRlylENzR7MlWOxzhas5ERNlIg==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/plugin-blit": "^0.12.1", - "@jimp/plugin-blur": "^0.12.1", - "@jimp/plugin-circle": "^0.12.1", - "@jimp/plugin-color": "^0.12.1", - "@jimp/plugin-contain": "^0.12.1", - "@jimp/plugin-cover": "^0.12.1", - "@jimp/plugin-crop": "^0.12.1", - "@jimp/plugin-displace": "^0.12.1", - "@jimp/plugin-dither": "^0.12.1", - "@jimp/plugin-fisheye": "^0.12.1", - "@jimp/plugin-flip": "^0.12.1", - "@jimp/plugin-gaussian": "^0.12.1", - "@jimp/plugin-invert": "^0.12.1", - "@jimp/plugin-mask": "^0.12.1", - "@jimp/plugin-normalize": "^0.12.1", - "@jimp/plugin-print": "^0.12.1", - "@jimp/plugin-resize": "^0.12.1", - "@jimp/plugin-rotate": "^0.12.1", - "@jimp/plugin-scale": "^0.12.1", - "@jimp/plugin-shadow": "^0.12.1", - "@jimp/plugin-threshold": "^0.12.1", - "timm": "^1.6.1" - } - }, - "@jimp/png": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.12.1.tgz", - "integrity": "sha512-tOUSJMJzcMAN82F9/Q20IToquIVWzvOe/7NIpVQJn6m+Lq6TtVmd7d8gdcna9AEFm2FIza5lhq2Kta6Xj0KXhQ==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.12.1", - "pngjs": "^3.3.3" - }, - "dependencies": { - "pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" - } - } - }, - "@jimp/tiff": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.12.1.tgz", - "integrity": "sha512-bzWDgv3202TKhaBGzV9OFF0PVQWEb4194h9kv5js348SSnbCusz/tzTE1EwKrnbDZThZPgTB1ryKs7D+Q9Mhmg==", - "requires": { - "@babel/runtime": "^7.7.2", - "utif": "^2.0.1" - } - }, - "@jimp/types": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.12.1.tgz", - "integrity": "sha512-hg5OKXpWWeKGuDrfibrjWWhr7hqb7f552wqnPWSLQpVrdWgjH+hpOv6cOzdo9bsU78qGTelZJPxr0ERRoc+MhQ==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/bmp": "^0.12.1", - "@jimp/gif": "^0.12.1", - "@jimp/jpeg": "^0.12.1", - "@jimp/png": "^0.12.1", - "@jimp/tiff": "^0.12.1", - "timm": "^1.6.1" - } - }, - "@jimp/utils": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.12.1.tgz", - "integrity": "sha512-EjPkDQOzV/oZfbolEUgFT6SE++PtCccVBvjuACkttyCfl0P2jnpR49SwstyVLc2u8AwBAZEHHAw9lPYaMjtbXQ==", - "requires": { - "@babel/runtime": "^7.7.2", - "regenerator-runtime": "^0.13.3" - } - }, - "@react-native-async-storage/async-storage": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.15.4.tgz", - "integrity": "sha512-pC0MS6UBuv/YiVAxtzi7CgUed8oCQNYMtGt0yb/I9fI/BWTiJK5cj4YtW2XtL95K5IuvPX/6uGWaouZ8KqXwdg==", - "requires": { - "deep-assign": "^3.0.0" - } - }, - "@react-native-community/cli-debugger-ui": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-5.0.1.tgz", - "integrity": "sha512-5gGKaaXYOVE423BUqxIfvfAVSj5Cg1cU/TpGbeg/iqpy2CfqyWqJB3tTuVUbOOiOvR5wbU8tti6pIi1pchJ+oA==", - "requires": { - "serve-static": "^1.13.1" - } - }, - "@react-native-community/cli-hermes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-5.0.1.tgz", - "integrity": "sha512-nD+ZOFvu5MfjLB18eDJ01MNiFrzj8SDtENjGpf0ZRFndOWASDAmU54/UlU/wj8OzTToK1+S1KY7j2P2M1gleww==", - "requires": { - "@react-native-community/cli-platform-android": "^5.0.1", - "@react-native-community/cli-tools": "^5.0.1", - "chalk": "^3.0.0", - "hermes-profile-transformer": "^0.0.6", - "ip": "^1.1.5" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@react-native-community/cli-platform-android": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-5.0.1.tgz", - "integrity": "sha512-qv9GJX6BJ+Y4qvV34vgxKwwN1cnveXUdP6y2YmTW7XoAYs5YUzKqHajpY58EyucAL2y++6+573t5y4U/9IIoww==", - "requires": { - "@react-native-community/cli-tools": "^5.0.1", - "chalk": "^3.0.0", - "execa": "^1.0.0", - "fs-extra": "^8.1.0", - "glob": "^7.1.3", - "jetifier": "^1.6.2", - "lodash": "^4.17.15", - "logkitty": "^0.7.1", - "slash": "^3.0.0", - "xmldoc": "^1.1.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - } - } - }, - "@react-native-community/cli-platform-ios": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-5.0.1.tgz", - "integrity": "sha512-Nr/edBEYJfElgBNvjDevs2BuDicsvQaM8nYkTGgp33pyuCZRBxsYxQqfsNmnLalTzcYaebjWj6AnjUSxzQBWqg==", - "requires": { - "@react-native-community/cli-tools": "^5.0.1", - "chalk": "^3.0.0", - "glob": "^7.1.3", - "js-yaml": "^3.13.1", - "lodash": "^4.17.15", - "plist": "^3.0.1", - "xcode": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "xcode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/xcode/-/xcode-2.1.0.tgz", - "integrity": "sha512-uCrmPITrqTEzhn0TtT57fJaNaw8YJs1aCzs+P/QqxsDbvPZSv7XMPPwXrKvHtD6pLjBM/NaVwraWJm8q83Y4iQ==", - "requires": { - "simple-plist": "^1.0.0", - "uuid": "^3.3.2" - } - } - } - }, - "@react-native-community/cli-server-api": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-5.0.1.tgz", - "integrity": "sha512-OOxL+y9AOZayQzmSW+h5T54wQe+QBc/f67Y9QlWzzJhkKJdYx+S4VOooHoD5PFJzGbYaxhu2YF17p517pcEIIA==", - "requires": { - "@react-native-community/cli-debugger-ui": "^5.0.1", - "@react-native-community/cli-tools": "^5.0.1", - "compression": "^1.7.1", - "connect": "^3.6.5", - "errorhandler": "^1.5.0", - "nocache": "^2.1.0", - "pretty-format": "^26.6.2", - "serve-static": "^1.13.1", - "ws": "^1.1.0" - }, - "dependencies": { - "ws": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", - "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", - "requires": { - "options": ">=0.0.5", - "ultron": "1.0.x" - } - } - } - }, - "@react-native-community/cli-tools": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-5.0.1.tgz", - "integrity": "sha512-XOX5w98oSE8+KnkMZZPMRT7I5TaP8fLbDl0tCu40S7Epz+Zz924n80fmdu6nUDIfPT1nV6yH1hmHmWAWTDOR+Q==", - "requires": { - "chalk": "^3.0.0", - "lodash": "^4.17.15", - "mime": "^2.4.1", - "node-fetch": "^2.6.0", - "open": "^6.2.0", - "shell-quote": "1.6.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@react-native-community/cli-types": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-5.0.1.tgz", - "integrity": "sha512-BesXnuFFlU/d1F3+sHhvKt8fUxbQlAbZ3hhMEImp9A6sopl8TEtryUGJ1dbazGjRXcADutxvjwT/i3LJVTIQug==", - "requires": { - "ora": "^3.4.0" - } - }, - "@react-native-community/masked-view": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/@react-native-community/masked-view/-/masked-view-0.1.10.tgz", - "integrity": "sha512-rk4sWFsmtOw8oyx8SD3KSvawwaK7gRBSEIy2TAwURyGt+3TizssXP1r8nx3zY+R7v2vYYHXZ+k2/GULAT/bcaQ==", - "requires": {} - }, - "@react-native-community/netinfo": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/netinfo/-/netinfo-6.0.0.tgz", - "integrity": "sha512-Z9M8VGcF2IZVOo2x+oUStvpCW/8HjIRi4+iQCu5n+PhC7OqCQX58KYAzdBr///alIfRXiu6oMb+lK+rXQH1FvQ==", - "requires": {} - }, - "@react-native-community/slider": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@react-native-community/slider/-/slider-3.0.3.tgz", - "integrity": "sha512-8IeHfDwJ9/CTUwFs6x90VlobV3BfuPgNLjTgC6dRZovfCWigaZwVNIFFJnHBakK3pW2xErAPwhdvNR4JeNoYbw==", - "requires": {} - }, - "@react-native/assets": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@react-native/assets/-/assets-1.0.0.tgz", - "integrity": "sha512-KrwSpS1tKI70wuKl68DwJZYEvXktDHdZMG0k2AXD/rJVSlB23/X2CB2cutVR0HwNMJIal9HOUOBB2rVfa6UGtQ==" - }, - "@react-native/normalize-color": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-1.0.0.tgz", - "integrity": "sha512-xUNRvNmCl3UGCPbbHvfyFMnpvLPoOjDCcp5bT9m2k+TF/ZBklEQwhPZlkrxRx2NhgFh1X3a5uL7mJ7ZR+8G7Qg==" - }, - "@react-native/polyfills": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@react-native/polyfills/-/polyfills-1.0.0.tgz", - "integrity": "sha512-0jbp4RxjYopTsIdLl+/Fy2TiwVYHy4mgeu07DG4b/LyM0OS/+lPP5c9sbnt/AMlnF6qz2JRZpPpGw1eMNS6A4w==" - }, - "@react-navigation/core": { - "version": "5.15.3", - "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-5.15.3.tgz", - "integrity": "sha512-3ZdyDInh8qg1kygCNkmh9lFgpDf29lTvPsaMe2mm/qvmxLKSgttWBz07P2fc181aV9jTdgQpzYfWZ5KWT036zw==", - "requires": { - "@react-navigation/routers": "^5.7.2", - "escape-string-regexp": "^4.0.0", - "nanoid": "^3.1.15", - "query-string": "^6.13.6", - "react-is": "^16.13.0" - } - }, - "@react-navigation/material-bottom-tabs": { - "version": "5.3.15", - "resolved": "https://registry.npmjs.org/@react-navigation/material-bottom-tabs/-/material-bottom-tabs-5.3.15.tgz", - "integrity": "sha512-SpCSJxnDqN1a8oHNm3oTt3OYulDEPbeWP1FGwb9zeXW8El2kgwD+69D4KhnUNLYVSKNLu9HadgFOrG3ezp4HPQ==", - "requires": {} - }, - "@react-navigation/native": { - "version": "5.9.4", - "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-5.9.4.tgz", - "integrity": "sha512-BUCrOXfZDdKWBqM8OhOKQhCX5we4HUo5XG6tCQtVqQAep+7UcApZmMUuemUXDxVe8NPESUpoUlB0RaEpyIdfTQ==", - "requires": { - "@react-navigation/core": "^5.15.3", - "escape-string-regexp": "^4.0.0", - "nanoid": "^3.1.15" - } - }, - "@react-navigation/routers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-5.7.2.tgz", - "integrity": "sha512-BxNSMLHpU+oS37Xok0ql6rc9U7IC8aUD4+U5ZPbjDJ0pwzZxGGh0YOEBzfV4k/Ig3cbPdvVWbc1C9HHbCVr2oQ==", - "requires": { - "nanoid": "^3.1.15" - } - }, - "@react-navigation/stack": { - "version": "5.14.4", - "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-5.14.4.tgz", - "integrity": "sha512-gQjWK8JHtVkD1p7wzjtSPuScJI0mSAk/N/gzgjQZo+rDUwgM8rOTDcVNRbtEOqCEgLQcZrZQHwhOjkrJirehjQ==", - "requires": { - "color": "^3.1.3", - "react-native-iphone-x-helper": "^1.3.0" - } - }, - "@sideway/address": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.2.tgz", - "integrity": "sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA==", - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@sideway/formula": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", - "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" - }, - "@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - }, - "@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "requires": { - "@types/node": "*" - } - }, - "@types/hammerjs": { - "version": "2.0.39", - "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.39.tgz", - "integrity": "sha512-lYR2Y/tV2ujpk/WyUc7S0VLI0a9hrtVIN9EwnrNo5oSEJI2cK2/XrgwOQmXLL3eTulOESvh9qP6si9+DWM9cOA==" - }, - "@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", - "requires": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/node": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.0.1.tgz", - "integrity": "sha512-TMkXt0Ck1y0KKsGr9gJtWGjttxlZnnvDtphxUOSd0bfaR6Q1jle+sPvrzNR1urqYTWMinoKvjKfXUGsumaO1PA==" - }, - "@types/prop-types": { - "version": "15.7.3", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", - "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" - }, - "@types/react": { - "version": "17.0.4", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.4.tgz", - "integrity": "sha512-onz2BqScSFMoTRdJUZUDD/7xrusM8hBA2Fktk2qgaTYPCgPvWnDEgkrOs8hhPUf2jfcIXkJ5yK6VfYormJS3Jw==", - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-redux": { - "version": "7.1.16", - "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.16.tgz", - "integrity": "sha512-f/FKzIrZwZk7YEO9E1yoxIuDNRiDducxkFlkw/GNMGEnK9n4K8wJzlJBghpSuOVDgEUHoDkDF7Gi9lHNQR4siw==", - "requires": { - "@types/hoist-non-react-statics": "^3.3.0", - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0", - "redux": "^4.0.0" - } - }, - "@types/scheduler": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz", - "integrity": "sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==" - }, - "@types/yargs": { - "version": "15.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", - "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "20.2.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", - "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==" - }, - "@unimodules/core": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@unimodules/core/-/core-7.1.0.tgz", - "integrity": "sha512-oLRT4Bkah3GEopkxmTgpHsRTRp+NJ1907ZjE9y/HLh32q7O/3mcbpY77Uvm+EXW0Vh14gOlU+bmkpC0hz3we0w==", - "requires": { - "compare-versions": "^3.4.0" - } - }, - "@unimodules/react-native-adapter": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-6.2.2.tgz", - "integrity": "sha512-hBXL+IX3u+4TcAHu9lIItdycA7pYWZn3Tt7s5TTna9QKHjyrwo0zVss27LkpJ40tXRHyh/GJ8VzN2CD+0M5I2A==", - "requires": { - "invariant": "^2.2.4" - } - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "absolute-path": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/absolute-path/-/absolute-path-0.0.0.tgz", - "integrity": "sha1-p4di+9rftSl76ZsV01p4Wy8JW/c=" - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "anser": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", - "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==" - }, - "ansi-fragments": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", - "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", - "requires": { - "colorette": "^1.0.7", - "slice-ansi": "^2.0.0", - "strip-ansi": "^5.0.0" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "any-base": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", - "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==" - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "appdirsjs": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.4.tgz", - "integrity": "sha512-WO5StDORR6JF/xYnXk/Fm0yu+iULaV5ULKuUw0Tu+jbgiTlSquaWBCgbpnsHLMXldf+fM3Gxn5p7vjond7He6w==" - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "argsarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/argsarray/-/argsarray-0.0.1.tgz", - "integrity": "sha1-bnIHtOzbObCviDA/pa4ivajfYcs=" - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - }, - "array-filter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", - "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=" - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" - }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=" - }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, - "assert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", - "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", - "requires": { - "es6-object-assign": "^1.1.0", - "is-nan": "^1.2.1", - "object-is": "^1.0.1", - "util": "^0.12.0" - } - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" - }, - "ast-types": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", - "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", - "requires": { - "tslib": "^2.0.1" - } - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" - }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "requires": { - "lodash": "^4.17.14" - } - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - }, - "available-typed-arrays": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz", - "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==", - "requires": { - "array-filter": "^1.0.0" - } - }, - "babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "requires": {} - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-module-resolver": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz", - "integrity": "sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA==", - "requires": { - "find-babel-config": "^1.1.0", - "glob": "^7.1.2", - "pkg-up": "^2.0.0", - "reselect": "^3.0.1", - "resolve": "^1.4.0" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz", - "integrity": "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==", - "requires": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.0", - "semver": "^6.1.1" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz", - "integrity": "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.0", - "core-js-compat": "^3.9.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz", - "integrity": "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.0" - } - }, - "babel-plugin-react-native-web": { - "version": "0.13.18", - "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.13.18.tgz", - "integrity": "sha512-f8pAxyKqXBNRIh8l4Sqju055BNec+DQlItdtutByYxULU0iJ1F7evIYE3skPKAkTB/xJH17l+n3Z8dVabGIIGg==" - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "7.0.0-beta.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", - "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==" - }, - "babel-preset-expo": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-8.3.0.tgz", - "integrity": "sha512-KmoFiEJ0A8QUH0OTh+mj3RBvv069FQsQ1hvZDi6tVMSzrW+Y/imsJMXgVboZN+XGOYnWFaGEKQ8BqNvBX+zKjA==", - "requires": { - "@babel/plugin-proposal-decorators": "^7.6.0", - "@babel/preset-env": "^7.6.3", - "babel-plugin-module-resolver": "^3.2.0", - "babel-plugin-react-native-web": "~0.13.6", - "metro-react-native-babel-preset": "~0.59.0" - } - }, - "babel-preset-fbjs": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.3.0.tgz", - "integrity": "sha512-7QTLTCd2gwB2qGoi5epSULMHugSVgpcVt5YAeiFO9ABLrutDQzKfGwzxgZHLpugq8qMdg/DhRZDZ5CLKxBkEbw==", - "requires": { - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-syntax-class-properties": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-block-scoped-functions": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-member-expression-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-object-super": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-property-literals": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" - } - }, - "badgin": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/badgin/-/badgin-1.2.2.tgz", - "integrity": "sha512-XtoSjNhy2D09qGiLhFWBJmBwBlmleQuwyYyjddWNCJ3gqGRBOBR25VGcd8CAOSghpEUmghB3LD4NpHrUG89zCg==" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "requires": { - "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" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "big-integer": { - "version": "1.6.48", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", - "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==" - }, - "blueimp-md5": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.18.0.tgz", - "integrity": "sha512-vE52okJvzsVWhcgUHOv+69OG3Mdg151xyn41aVQN/5W5S+S43qZhxECtYLAEHMSFWX6Mv5IZrzj3T5+JqXfj5Q==" - }, - "bmp-js": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", - "integrity": "sha1-4Fpj95amwf8l9Hcex62twUjAcjM=" - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" - }, - "bplist-creator": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.8.tgz", - "integrity": "sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA==", - "requires": { - "stream-buffers": "~2.2.0" - } - }, - "bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", - "requires": { - "big-integer": "^1.6.44" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "requires": { - "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": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" - }, - "buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=" - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "requires": { - "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": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "requires": { - "callsites": "^2.0.0" - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "caniuse-lite": { - "version": "1.0.30001219", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001219.tgz", - "integrity": "sha512-c0yixVG4v9KBc/tQ2rlbB3A/bgBFRvl8h8M4IeUbqCca4gsiCfvtaheUssbnux/Mb66Vjz7x8yYjDgYcNQOhyQ==" - }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "requires": { - "rsvp": "^4.8.4" - } - }, - "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "clamp": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz", - "integrity": "sha1-ZqDmQBGBbjcZaCj9yMjBRzEshjQ=" - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-spinners": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", - "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==" - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "color-string": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", - "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" - }, - "command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" - }, - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - }, - "compare-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-urls/-/compare-urls-2.0.0.tgz", - "integrity": "sha512-eCJcWn2OYFEIqbm70ta7LQowJOOZZqq1a2YbbFCFI1uwSvj+TWMwXVn7vPR1ceFNcAIt5RSTDbwdlX82gYLTkA==", - "requires": { - "normalize-url": "^2.0.1" - } - }, - "compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==" - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "requires": { - "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" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - }, - "core-js": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.11.1.tgz", - "integrity": "sha512-k93Isqg7e4txZWMGNYwevZL9MiogLk8pd1PtwrmFmi8IBq4GXqUaVW/a33Llt6amSI36uSjd0GWwc9pTT9ALlQ==" - }, - "core-js-compat": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.11.1.tgz", - "integrity": "sha512-aZ0e4tmlG/aOBHj92/TuOuZwp6jFvn1WNabU5VOVixzhu5t5Ao+JZkQOPlgNXu6ynwLrwJxklT4Gw1G1VGEh+g==", - "requires": { - "browserslist": "^4.16.5", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" - } - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - } - }, - "create-react-class": { - "version": "15.7.0", - "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.7.0.tgz", - "integrity": "sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng==", - "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" - } - }, - "cross-fetch": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", - "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", - "requires": { - "node-fetch": "2.6.1" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" - }, - "css-in-js-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz", - "integrity": "sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA==", - "requires": { - "hyphenate-style-name": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" - }, - "csstype": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", - "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==" - }, - "dayjs": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.5.tgz", - "integrity": "sha512-BUFis41ikLz+65iH6LHQCDm4YPMj5r1YFLdupPIyM4SGcXMmtiLQ7U37i+hGS8urIuqe7I/ou3IS1jVc4nbN4g==" - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, - "deep-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-3.0.0.tgz", - "integrity": "sha512-YX2i9XjJ7h5q/aQ/IM9PEwEnDqETAIYbggmdDB3HLTlSgo1CxPsj6pvhPG68rq6SVE0+p+6Ywsm5fTYNrYtBWw==", - "requires": { - "is-obj": "^1.0.0" - } - }, - "deep-equal": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.5.tgz", - "integrity": "sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==", - "requires": { - "call-bind": "^1.0.0", - "es-get-iterator": "^1.1.1", - "get-intrinsic": "^1.0.1", - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.2", - "is-regex": "^1.1.1", - "isarray": "^2.0.5", - "object-is": "^1.1.4", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.3.0", - "side-channel": "^1.0.3", - "which-boxed-primitive": "^1.0.1", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.2" - } - }, - "deepmerge": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", - "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==" - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "requires": { - "clone": "^1.0.2" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "denodeify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", - "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" - } - }, - "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "electron-to-chromium": { - "version": "1.3.725", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.725.tgz", - "integrity": "sha512-2BbeAESz7kc6KBzs7WVrMc1BY5waUphk4D4DX5dSQXJhsc3tP5ZFaiyuL0AB7vUKzDYpIeYwTYlEfxyjsGUrhw==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "requires": { - "iconv-lite": "^0.6.2" - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==" - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - } - } - }, - "error-stack-parser": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", - "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", - "requires": { - "stackframe": "^1.1.1" - } - }, - "errorhandler": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", - "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", - "requires": { - "accepts": "~1.3.7", - "escape-html": "~1.0.3" - } - }, - "es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", - "requires": { - "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-get-iterator": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", - "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.0", - "has-symbols": "^1.0.1", - "is-arguments": "^1.1.0", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.5", - "isarray": "^2.0.5" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=" - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" - }, - "eventemitter2": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-1.0.5.tgz", - "integrity": "sha1-+YNhBRexc3wLncZDvsqTiTwE3xg=" - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "exec-sh": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", - "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==" - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "requires": { - "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" - } - }, - "exif-parser": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", - "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=" - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "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" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "expo": { - "version": "41.0.1", - "resolved": "https://registry.npmjs.org/expo/-/expo-41.0.1.tgz", - "integrity": "sha512-Lk4Xdst+OfsLgBNeu89hxk0qFrZnHwwXFmBbJkYLlZkdC3tvNJ8jgGHsKg6jYpsnal/z0uVc+uk2ev91qXQykg==", - "requires": { - "@babel/runtime": "^7.1.2", - "@expo/metro-config": "^0.1.63", - "@expo/vector-icons": "^12.0.4", - "@unimodules/core": "~7.1.0", - "@unimodules/react-native-adapter": "~6.2.2", - "babel-preset-expo": "~8.3.0", - "cross-spawn": "^6.0.5", - "expo-application": "~3.1.2", - "expo-asset": "~8.3.1", - "expo-constants": "~10.1.3", - "expo-error-recovery": "~2.1.0", - "expo-file-system": "~11.0.2", - "expo-font": "~9.1.0", - "expo-keep-awake": "~9.1.2", - "fbemitter": "^2.1.1", - "invariant": "^2.2.2", - "md5-file": "^3.2.3", - "pretty-format": "^26.4.0", - "react-native-safe-area-context": "3.2.0", - "serialize-error": "^2.1.0", - "uuid": "^3.4.0" - } - }, - "expo-application": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/expo-application/-/expo-application-3.1.2.tgz", - "integrity": "sha512-JZcKUpGmqzQ1zLxRxUditGzPqnPCXY6JT/Pbq4nyV4VPzjDd8wihVPuud+cuv8gHgdj8QLvKs/lcJJqN94EX5Q==" - }, - "expo-asset": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-8.3.2.tgz", - "integrity": "sha512-MKOwkkN0lnQRcOdn5moqkHPmLgFoUSIYyrvMAJ767vTXvLvZgoQgvBwqCAXsXitIwEitG0Az3XZ23SfKJpFbFg==", - "requires": { - "blueimp-md5": "^2.10.0", - "invariant": "^2.2.4", - "md5-file": "^3.2.3", - "path-browserify": "^1.0.0", - "url-parse": "^1.4.4" - } - }, - "expo-constants": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-10.1.3.tgz", - "integrity": "sha512-Eq/xeshnhSoe4ok89d5lrHvI9jq3bMe1FhJUbiHVGcGmW8mGCotwbQBIfDkkMrAKnSOwQq/Qfyg0XBxnG2XFjw==", - "requires": { - "@expo/config": "^3.3.35", - "uuid": "^3.3.2" - } - }, - "expo-document-picker": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/expo-document-picker/-/expo-document-picker-9.1.2.tgz", - "integrity": "sha512-I4xq90HZg3JML40AfUv1Uk/dTSRDd3Cy3qLV1P+wAiSudp54ockHMR1Pwow12WCtbihHW5DlHT0TU+fz5jJb7g==", - "requires": { - "@expo/config-plugins": "^1.0.18", - "uuid": "^3.3.2" - } - }, - "expo-error-recovery": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/expo-error-recovery/-/expo-error-recovery-2.1.0.tgz", - "integrity": "sha512-N5g2QKtdNntUNGQVnB/tG1jHdtJP1+kLMWDS+7ZKRcKfulm3JX/M3l460fsEtqg84n/latxPkBT0yfKw2DSq+Q==" - }, - "expo-file-system": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-11.0.2.tgz", - "integrity": "sha512-nodNvUVa+US4N4xnj5BFw8W9ZF/qCHJVC2t45cHWrBiwkVVxz45wjE7uSHUmkMWyWT7a/7AJuL3XJfYp7h90IQ==", - "requires": { - "@expo/config-plugins": "^1.0.18", - "uuid": "^3.4.0" - } - }, - "expo-font": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-9.1.0.tgz", - "integrity": "sha512-owzbbfrQet7mawTGKMXpVCIA9k56MGhtriO41AW4Zo65dd2Ikm4LoymuHKp2ZlHuIFjRnjECKWz7RXgy/C1yAg==", - "requires": { - "fontfaceobserver": "^2.1.0" - } - }, - "expo-haptics": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/expo-haptics/-/expo-haptics-10.0.0.tgz", - "integrity": "sha512-dfl4Fef22B8O49x5JEzILmAhathT14bkN0kic2FpuwssJDX/yZ/R2lD12Iu9XqxdgHAFQRjOSq3dFjrxDGkP6g==" - }, - "expo-image-loader": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/expo-image-loader/-/expo-image-loader-2.1.1.tgz", - "integrity": "sha512-EeItNIsmw4g+FIb9S9AHE7FAWQkuiIguFMua/RQ2mFHKFZYa/BU32MGagY+e4LzasBVbDKWgd3NHO+EYC6XeEA==" - }, - "expo-keep-awake": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-9.1.2.tgz", - "integrity": "sha512-CCuEOQUNLYtMA0rt0sQ9u5LlIMH7lDJG7dImoorfKMsP95yHXy8dl3oCdtaz2zbsPgggVYeom9gE+gQu+Ki4rQ==" - }, - "expo-linear-gradient": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/expo-linear-gradient/-/expo-linear-gradient-9.1.0.tgz", - "integrity": "sha512-9W4TxaDrZUzmLzd18+Eo2Ef7ONnuLrHKX0PRyHEGY2/rJCtGiPJtJuR6AS5dkX7WB/Pxlx0zK/p/qDHHw09Uxg==" - }, - "expo-linking": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-2.2.3.tgz", - "integrity": "sha512-1NqL8sY4EzwRPVnBxbvNKBCfsG/tNZm72tVwzjoLxhO0XA6VTtZcb72Jaku4IlqEyH0lejxV2YAU0rbLv1pAVA==", - "requires": { - "expo-constants": "~10.1.3", - "invariant": "^2.2.4", - "qs": "^6.5.0", - "url-parse": "^1.4.4" - } - }, - "expo-notifications": { - "version": "0.11.6", - "resolved": "https://registry.npmjs.org/expo-notifications/-/expo-notifications-0.11.6.tgz", - "integrity": "sha512-skVEOHXKXrXBWofCQ/Zn7yKhAFA2EN0fd9mXqpkbF6nE4NKE7pn63gTWpyCy6sXC9M3YUal8yT0vp9GkD2FsmA==", - "requires": { - "@expo/config-plugins": "^1.0.18", - "@expo/image-utils": "^0.3.10", - "@ide/backoff": "^1.0.0", - "abort-controller": "^3.0.0", - "assert": "^2.0.0", - "badgin": "^1.1.5", - "expo-application": "~3.1.2", - "expo-constants": "10.1.3", - "fs-extra": "^9.0.1", - "unimodules-permissions-interface": "~6.1.0", - "uuid": "^3.4.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - } - } - }, - "expo-permissions": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/expo-permissions/-/expo-permissions-12.0.1.tgz", - "integrity": "sha512-TtypNPPLG4SdVEKBlrArLLZIyhlhE+3B4dhz2HaY1Mve2rcvKE0C7z/e1WoUVU8+LgcdKoNGwg/wRVeCkxeEhg==" - }, - "expo-splash-screen": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-0.11.2.tgz", - "integrity": "sha512-4jTAs2IDS4rH9A3NK0WhFDIOyLgDExRe0zCf179vRNPZ6HlXCFEQS7Y9RaUF5EFqyYvsPiwaJQyRes3sO4mA+g==", - "requires": { - "@expo/configure-splash-screen": "0.5.0", - "@expo/prebuild-config": "^2.0.0" - }, - "dependencies": { - "@expo/configure-splash-screen": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@expo/configure-splash-screen/-/configure-splash-screen-0.5.0.tgz", - "integrity": "sha512-wU84OsmACcQaY+cFNj1UOzqdUB+XNRP8hO5mwGN5LWRIDhd/5S1A/3hmWT96X4UQEee+XtCpwnmTw6SGIsTfIg==", - "requires": { - "color-string": "^1.5.3", - "commander": "^5.1.0", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "lodash": "^4.17.15", - "pngjs": "^5.0.0", - "xcode": "^3.0.0", - "xml-js": "^1.6.11" - } - } - } - }, - "expo-sqlite": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/expo-sqlite/-/expo-sqlite-9.1.0.tgz", - "integrity": "sha512-nr6rHm2GCm+MrMAuMoL0mGbGw8aIHT/UNg/zMDb2/QjFU1ZHj7c/lI+vmmQx0ObZ+NfJfu+tyW6HqxsdMnkeog==", - "requires": { - "@expo/websql": "^1.0.1", - "lodash": "^4.17.15" - } - }, - "expo-structured-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/expo-structured-headers/-/expo-structured-headers-1.0.1.tgz", - "integrity": "sha512-U4frE8rT5x1LqZv5Ru/9CtzY8gh0wp1MfwTu5hetPydnwxXfWchuXvKgWRjEHglFU2X/29kYFY/J1UkPvCN8xg==" - }, - "expo-updates": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/expo-updates/-/expo-updates-0.5.5.tgz", - "integrity": "sha512-1R8EKkT3GoDjMRQnDaTYv31gIYIaYQGHOrjHJfwq8ai9f1W1AHux6KAH2/H6sc2o9a7roWVwjDn2kKwCm9AeHg==", - "requires": { - "@expo/config-plugins": "^1.0.18", - "@expo/metro-config": "^0.1.59", - "expo-structured-headers": "~1.0.1", - "fbemitter": "^2.1.1", - "resolve-from": "^5.0.0", - "uuid": "^3.4.0" - } - }, - "expo-web-browser": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/expo-web-browser/-/expo-web-browser-9.1.0.tgz", - "integrity": "sha512-1UkOHWUBshY7n/R9xc4Q0LN0Dxqdvvotlp8sCM/6bUB/aE+9B+duoimKtUhlnzcvfAFWgF5y5x+bIf7j6PF7ig==", - "requires": { - "compare-urls": "^2.0.0" - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "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" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "requires": { - "bser": "2.1.1" - } - }, - "fbemitter": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-2.1.1.tgz", - "integrity": "sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU=", - "requires": { - "fbjs": "^0.8.4" - } - }, - "fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", - "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - }, - "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" - } - } - }, - "fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" - }, - "file-type": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", - "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==" - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "filter-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", - "integrity": "sha1-mzERErxsYSehbgFsbF1/GeCAXFs=" - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "requires": { - "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" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "find-babel-config": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", - "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==", - "requires": { - "json5": "^0.5.1", - "path-exists": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - } - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flow-parser": { - "version": "0.121.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.121.0.tgz", - "integrity": "sha512-1gIBiWJNR0tKUNv8gZuk7l9rVX06OuLzY9AoGio7y/JT4V1IZErEMEq2TJS+PFcw/y0RshZ1J/27VfK1UQzYVg==" - }, - "fontfaceobserver": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.1.0.tgz", - "integrity": "sha512-ReOsO2F66jUa0jmv2nlM/s1MiutJx/srhAe2+TE8dJCMi02ZZOcCTxTCQFr3Yet+uODUtnr4Mewg+tNQ+4V1Ng==" - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fs-extra": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", - "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - }, - "getenv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/getenv/-/getenv-1.0.0.tgz", - "integrity": "sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==" - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "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": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hermes-engine": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/hermes-engine/-/hermes-engine-0.7.2.tgz", - "integrity": "sha512-E2DkRaO97gwL98LPhgfkMqhHiNsrAjIfEk3wWYn2Y31xdkdWn0572H7RnVcGujMJVqZNJvtknxlpsUb8Wzc3KA==" - }, - "hermes-profile-transformer": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz", - "integrity": "sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==", - "requires": { - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" - } - } - }, - "hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "requires": { - "react-is": "^16.7.0" - } - }, - "htmlparser2-without-node-native": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/htmlparser2-without-node-native/-/htmlparser2-without-node-native-3.9.2.tgz", - "integrity": "sha1-s+0FDYd9D/NGWWnjOYd7f59mMfY=", - "requires": { - "domelementtype": "^1.3.0", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "eventemitter2": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.2" - } - }, - "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "hyphenate-style-name": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz", - "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==" - }, - "iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "image-size": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.6.3.tgz", - "integrity": "sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA==" - }, - "immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" - } - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "inline-style-prefixer": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-6.0.0.tgz", - "integrity": "sha512-XTHvRUS4ZJNzC1GixJRmOlWSS45fSt+DJoyQC9ytj0WxQfcgofQtDtyKKYxHUqEsWCs+LIWftPF1ie7+i012Fg==", - "requires": { - "css-in-js-utils": "^2.0.0" - } - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arguments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", - "requires": { - "call-bind": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "is-bigint": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", - "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==" - }, - "is-boolean-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", - "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", - "requires": { - "call-bind": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.3.0.tgz", - "integrity": "sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw==", - "requires": { - "has": "^1.0.3" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" - }, - "is-generator-function": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz", - "integrity": "sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==" - }, - "is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==" - }, - "is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-number-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", - "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==" - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" - } - }, - "is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==" - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==" - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-typed-array": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz", - "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==", - "requires": { - "available-typed-arrays": "^1.0.2", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.0-next.2", - "foreach": "^2.0.5", - "has-symbols": "^1.0.1" - } - }, - "is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==" - }, - "is-weakset": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.1.tgz", - "integrity": "sha512-pi4vhbhVHGLxohUw7PhGsueT4vRGFoXhP7+RGN0jKIv9+8PWYCQTqtADngrxOm2g46hoH0+g8uZZBzMrvVGDmw==" - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" - }, - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - }, - "dependencies": { - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - } - } - }, - "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==" - }, - "jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "requires": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", - "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" - } - }, - "jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==" - }, - "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "requires": { - "@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": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", - "requires": { - "@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" - }, - "dependencies": { - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" - } - } - }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jetifier": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/jetifier/-/jetifier-1.6.8.tgz", - "integrity": "sha512-3Zi16h6L5tXDRQJTb221cnRoVG9/9OvreLdLU2/ZjRv/GILL+2Cemt0IKvkowwkDpvouAU1DQPOJ7qaiHeIdrw==" - }, - "jimp": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.12.1.tgz", - "integrity": "sha512-0soPJif+yjmzmOF+4cF2hyhxUWWpXpQntsm2joJXFFoRcQiPzsG4dbLKYqYPT3Fc6PjZ8MaLtCkDqqckVSfmRw==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/custom": "^0.12.1", - "@jimp/plugins": "^0.12.1", - "@jimp/types": "^0.12.1", - "regenerator-runtime": "^0.13.3" - } - }, - "joi": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.4.0.tgz", - "integrity": "sha512-F4WiW2xaV6wc1jxete70Rw4V/VuMd6IN+a5ilZsxG4uYtUXWu2kq9W5P2dz30e7Gmw8RCbY/u/uk+dMPma9tAg==", - "requires": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.0", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" - } - }, - "jpeg-js": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.3.tgz", - "integrity": "sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsc-android": { - "version": "245459.0.0", - "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-245459.0.0.tgz", - "integrity": "sha512-wkjURqwaB1daNkDi2OYYbsLnIdC/lUM2nPXQKRs5pqEU9chDg435bjvo+LSaHotDENygHQDHe+ntUkkw2gwMtg==" - }, - "jscodeshift": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.11.0.tgz", - "integrity": "sha512-SdRK2C7jjs4k/kT2mwtO07KJN9RnjxtKn03d9JVj6c3j9WwaLcFYsICYDnLAzY0hp+wG2nxl+Cm2jWLiNVYb8g==", - "requires": { - "@babel/core": "^7.1.6", - "@babel/parser": "^7.1.6", - "@babel/plugin-proposal-class-properties": "^7.1.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.1.0", - "@babel/plugin-proposal-optional-chaining": "^7.1.0", - "@babel/plugin-transform-modules-commonjs": "^7.1.0", - "@babel/preset-flow": "^7.0.0", - "@babel/preset-typescript": "^7.1.0", - "@babel/register": "^7.0.0", - "babel-core": "^7.0.0-bridge.0", - "colors": "^1.1.2", - "flow-parser": "0.*", - "graceful-fs": "^4.2.4", - "micromatch": "^3.1.10", - "neo-async": "^2.5.0", - "node-dir": "^0.1.17", - "recast": "^0.20.3", - "temp": "^0.8.1", - "write-file-atomic": "^2.3.0" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "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" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "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" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "requires": { - "minimist": "^1.2.5" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - }, - "dependencies": { - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - } - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" - }, - "load-bmfont": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", - "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", - "requires": { - "buffer-equal": "0.0.1", - "mime": "^1.3.4", - "parse-bmfont-ascii": "^1.0.3", - "parse-bmfont-binary": "^1.0.5", - "parse-bmfont-xml": "^1.1.4", - "phin": "^2.9.1", - "xhr": "^2.0.1", - "xtend": "^4.0.0" - }, - "dependencies": { - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - } - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - }, - "lodash.frompairs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.frompairs/-/lodash.frompairs-4.0.1.tgz", - "integrity": "sha1-vE5SB/onV8E25XNhTpZkUGsrG9I=" - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" - }, - "lodash.omit": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", - "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=" - }, - "lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" - }, - "lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "requires": { - "lodash._reinterpolate": "^3.0.0" - } - }, - "lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" - }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "requires": { - "chalk": "^2.0.1" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } - } - }, - "logkitty": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz", - "integrity": "sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==", - "requires": { - "ansi-fragments": "^0.2.1", - "dayjs": "^1.8.15", - "yargs": "^15.1.0" - } - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "requires": { - "tmpl": "1.0.x" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "requires": { - "object-visit": "^1.0.0" - } - }, - "md5-file": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-3.2.3.tgz", - "integrity": "sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw==", - "requires": { - "buffer-alloc": "^1.1.0" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "metro": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.64.0.tgz", - "integrity": "sha512-G2OC08Rzfs0kqnSEuKo2yZxR+/eNUpA93Ru45c60uN0Dw3HPrDi+ZBipgFftC6iLE0l+6hu8roFFIofotWxybw==", - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/core": "^7.0.0", - "@babel/generator": "^7.5.0", - "@babel/parser": "^7.0.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "absolute-path": "^0.0.0", - "accepts": "^1.3.7", - "async": "^2.4.0", - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "connect": "^3.6.5", - "debug": "^2.2.0", - "denodeify": "^1.2.1", - "error-stack-parser": "^2.0.6", - "fs-extra": "^1.0.0", - "graceful-fs": "^4.1.3", - "image-size": "^0.6.0", - "invariant": "^2.2.4", - "jest-haste-map": "^26.5.2", - "jest-worker": "^26.0.0", - "lodash.throttle": "^4.1.1", - "metro-babel-register": "0.64.0", - "metro-babel-transformer": "0.64.0", - "metro-cache": "0.64.0", - "metro-cache-key": "0.64.0", - "metro-config": "0.64.0", - "metro-core": "0.64.0", - "metro-hermes-compiler": "0.64.0", - "metro-inspector-proxy": "0.64.0", - "metro-minify-uglify": "0.64.0", - "metro-react-native-babel-preset": "0.64.0", - "metro-resolver": "0.64.0", - "metro-runtime": "0.64.0", - "metro-source-map": "0.64.0", - "metro-symbolicate": "0.64.0", - "metro-transform-plugins": "0.64.0", - "metro-transform-worker": "0.64.0", - "mime-types": "^2.1.27", - "mkdirp": "^0.5.1", - "node-fetch": "^2.2.0", - "nullthrows": "^1.1.1", - "rimraf": "^2.5.4", - "serialize-error": "^2.1.0", - "source-map": "^0.5.6", - "strip-ansi": "^6.0.0", - "temp": "0.8.3", - "throat": "^5.0.0", - "ws": "^1.1.5", - "yargs": "^15.3.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "fs-extra": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", - "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "metro-babel-transformer": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.64.0.tgz", - "integrity": "sha512-itZaxKTgmKGEZWxNzbSZBc22NngrMZzoUNuU92aHSTGkYi2WH4XlvzEHsstmIKHMsRVKl75cA+mNmgk4gBFJKw==", - "requires": { - "@babel/core": "^7.0.0", - "metro-source-map": "0.64.0", - "nullthrows": "^1.1.1" - } - }, - "metro-react-native-babel-preset": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.64.0.tgz", - "integrity": "sha512-HcZ0RWQRuJfpPiaHyFQJzcym+/dDIVUPwUAXWoub/C4GkGu+mPjp8vqK6g0FxokCnnI2TK0gZTza2IDfiNNscQ==", - "requires": { - "@babel/core": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.2.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-exponentiation-operator": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-object-assign": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-regenerator": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "react-refresh": "^0.4.0" - } - }, - "metro-source-map": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.64.0.tgz", - "integrity": "sha512-OCG2rtcp5cLEGYvAbfkl6mEc0J2FPRP4/UCEly+juBk7hawS9bCBMBfhJm/HIsvY1frk6nT2Vsl1O8YBbwyx2g==", - "requires": { - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "invariant": "^2.2.4", - "metro-symbolicate": "0.64.0", - "nullthrows": "^1.1.1", - "ob1": "0.64.0", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - } - }, - "metro-symbolicate": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.64.0.tgz", - "integrity": "sha512-qIi+YRrDWnLVmydj6gwidYLPaBsakZRibGWSspuXgHAxOI3UuLwlo4dpQ73Et0gyHjI7ZvRMRY8JPiOntf9AQQ==", - "requires": { - "invariant": "^2.2.4", - "metro-source-map": "0.64.0", - "nullthrows": "^1.1.1", - "source-map": "^0.5.6", - "through2": "^2.0.1", - "vlq": "^1.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "ob1": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.64.0.tgz", - "integrity": "sha512-CO1N+5dhvy+MoAwxz8+fymEUcwsT4a+wHhrHFb02LppcJdHxgcBWviwEhUwKOD2kLMQ7ijrrzybOqpGcqEtvpQ==" - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "ws": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", - "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", - "requires": { - "options": ">=0.0.5", - "ultron": "1.0.x" - } - } - } - }, - "metro-babel-register": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-babel-register/-/metro-babel-register-0.64.0.tgz", - "integrity": "sha512-Kf6YvE3kIRumGnjK0Q9LqGDIdnsX9eFGtNBmBuCVDuB9wGGA/5CgX8We8W7Y44dz1RGTcHJRhfw5iGg+pwC3aQ==", - "requires": { - "@babel/core": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/register": "^7.0.0", - "escape-string-regexp": "^1.0.5" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } - } - }, - "metro-babel-transformer": { - "version": "0.59.0", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.59.0.tgz", - "integrity": "sha512-fdZJl8rs54GVFXokxRdD7ZrQ1TJjxWzOi/xSP25VR3E8tbm3nBZqS+/ylu643qSr/IueABR+jrlqAyACwGEf6w==", - "requires": { - "@babel/core": "^7.0.0", - "metro-source-map": "0.59.0" - } - }, - "metro-cache": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.64.0.tgz", - "integrity": "sha512-QvGfxe/1QQYM9XOlR8W1xqE9eHDw/AgJIgYGn/TxZxBu9Zga+Rgs1omeSZju45D8w5VWgMr83ma5kACgzvOecg==", - "requires": { - "metro-core": "0.64.0", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4" - } - }, - "metro-cache-key": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.64.0.tgz", - "integrity": "sha512-O9B65G8L/fopck45ZhdRosyVZdMtUQuX5mBWEC1NRj02iWBIUPLmYMjrunqIe8vHipCMp3DtTCm/65IlBmO8jg==" - }, - "metro-config": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.64.0.tgz", - "integrity": "sha512-QhM4asnX5KhlRWaugwVGNNXhX0Z85u5nK0UQ/A90bBb4xWyXqUe20e788VtdA75rkQiiI6wXTCIHWT0afbnjwQ==", - "requires": { - "cosmiconfig": "^5.0.5", - "jest-validate": "^26.5.2", - "metro": "0.64.0", - "metro-cache": "0.64.0", - "metro-core": "0.64.0", - "metro-runtime": "0.64.0" - } - }, - "metro-core": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.64.0.tgz", - "integrity": "sha512-v8ZQ5j72EaUwamQ8pLfHlOHTyp7SbdazvHPzFGDpHnwIQqIT0Bw3Syg8R4regTlVG3ngpeSEAi005UITljmMcQ==", - "requires": { - "jest-haste-map": "^26.5.2", - "lodash.throttle": "^4.1.1", - "metro-resolver": "0.64.0" - } - }, - "metro-hermes-compiler": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-hermes-compiler/-/metro-hermes-compiler-0.64.0.tgz", - "integrity": "sha512-CLAjVDWGAoGhbi2ZyPHnH5YDdfrDIx6+tzFWfHGIMTZkYBXsYta9IfYXBV8lFb6BIbrXLjlXZAOoosknetMPOA==" - }, - "metro-inspector-proxy": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.64.0.tgz", - "integrity": "sha512-KywbH3GNSz9Iqw4UH3smgaV2dBHHYMISeN7ORntDL/G+xfgPc6vt13d+zFb907YpUcXj5N0vdoiAHI5V/0y8IA==", - "requires": { - "connect": "^3.6.5", - "debug": "^2.2.0", - "ws": "^1.1.5", - "yargs": "^15.3.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "ws": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", - "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", - "requires": { - "options": ">=0.0.5", - "ultron": "1.0.x" - } - } - } - }, - "metro-minify-uglify": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.64.0.tgz", - "integrity": "sha512-DRwRstqXR5qfte9Nuwoov5dRXxL7fJeVlO5fGyOajWeO3+AgPjvjXh/UcLJqftkMWTPGUFuzAD5/7JC5v5FLWw==", - "requires": { - "uglify-es": "^3.1.9" - } - }, - "metro-react-native-babel-preset": { - "version": "0.59.0", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.59.0.tgz", - "integrity": "sha512-BoO6ncPfceIDReIH8pQ5tQptcGo5yRWQXJGVXfANbiKLq4tfgdZB1C1e2rMUJ6iypmeJU9dzl+EhPmIFKtgREg==", - "requires": { - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.2.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-exponentiation-operator": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-object-assign": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-regenerator": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "react-refresh": "^0.4.0" - } - }, - "metro-react-native-babel-transformer": { - "version": "0.59.0", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.59.0.tgz", - "integrity": "sha512-1O3wrnMq4NcPQ1asEcl9lRDn/t+F1Oef6S9WaYVIKEhg9m/EQRGVrrTVP+R6B5Eeaj3+zNKbzM8Dx/NWy1hUbQ==", - "requires": { - "@babel/core": "^7.0.0", - "babel-preset-fbjs": "^3.3.0", - "metro-babel-transformer": "0.59.0", - "metro-react-native-babel-preset": "0.59.0", - "metro-source-map": "0.59.0" - } - }, - "metro-resolver": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.64.0.tgz", - "integrity": "sha512-cJ26Id8Zf+HmS/1vFwu71K3u7ep/+HeXXAJIeVDYf+niE7AWB9FijyMtAlQgbD8elWqv1leJCnQ/xHRFBfGKYA==", - "requires": { - "absolute-path": "^0.0.0" - } - }, - "metro-runtime": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.64.0.tgz", - "integrity": "sha512-m7XbWOaIOeFX7YcxUhmnOi6Pg8EaeL89xyZ+quZyZVF1aNoTr4w8FfbKxvijpjsytKHIZtd+43m2Wt5JrqyQmQ==" - }, - "metro-source-map": { - "version": "0.59.0", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.59.0.tgz", - "integrity": "sha512-0w5CmCM+ybSqXIjqU4RiK40t4bvANL6lafabQ2GP2XD3vSwkLY+StWzCtsb4mPuyi9R/SgoLBel+ZOXHXAH0eQ==", - "requires": { - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "invariant": "^2.2.4", - "metro-symbolicate": "0.59.0", - "ob1": "0.59.0", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - } - }, - "metro-symbolicate": { - "version": "0.59.0", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.59.0.tgz", - "integrity": "sha512-asLaF2A7rndrToGFIknL13aiohwPJ95RKHf0NM3hP/nipiLDoMzXT6ZnQvBqDxkUKyP+51AI75DMtb+Wcyw4Bw==", - "requires": { - "invariant": "^2.2.4", - "metro-source-map": "0.59.0", - "source-map": "^0.5.6", - "through2": "^2.0.1", - "vlq": "^1.0.0" - } - }, - "metro-transform-plugins": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.64.0.tgz", - "integrity": "sha512-iTIRBD/wBI98plfxj8jAoNUUXfXLNlyvcjPtshhpGvdwu9pzQilGfnDnOaaK+vbITcOk9w5oQectXyJwAqTr1A==", - "requires": { - "@babel/core": "^7.0.0", - "@babel/generator": "^7.5.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.0.0", - "nullthrows": "^1.1.1" - } - }, - "metro-transform-worker": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.64.0.tgz", - "integrity": "sha512-wegRtK8GyLF6IPZRBJp+zsORgA4iX0h1DRpknyAMDCtSbJ4VU2xV/AojteOgAsDvY3ucAGsvfuZLNDJHUdUNHQ==", - "requires": { - "@babel/core": "^7.0.0", - "@babel/generator": "^7.5.0", - "@babel/parser": "^7.0.0", - "@babel/types": "^7.0.0", - "babel-preset-fbjs": "^3.3.0", - "metro": "0.64.0", - "metro-babel-transformer": "0.64.0", - "metro-cache": "0.64.0", - "metro-cache-key": "0.64.0", - "metro-hermes-compiler": "0.64.0", - "metro-source-map": "0.64.0", - "metro-transform-plugins": "0.64.0", - "nullthrows": "^1.1.1" - }, - "dependencies": { - "metro-babel-transformer": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.64.0.tgz", - "integrity": "sha512-itZaxKTgmKGEZWxNzbSZBc22NngrMZzoUNuU92aHSTGkYi2WH4XlvzEHsstmIKHMsRVKl75cA+mNmgk4gBFJKw==", - "requires": { - "@babel/core": "^7.0.0", - "metro-source-map": "0.64.0", - "nullthrows": "^1.1.1" - } - }, - "metro-source-map": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.64.0.tgz", - "integrity": "sha512-OCG2rtcp5cLEGYvAbfkl6mEc0J2FPRP4/UCEly+juBk7hawS9bCBMBfhJm/HIsvY1frk6nT2Vsl1O8YBbwyx2g==", - "requires": { - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "invariant": "^2.2.4", - "metro-symbolicate": "0.64.0", - "nullthrows": "^1.1.1", - "ob1": "0.64.0", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - } - }, - "metro-symbolicate": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.64.0.tgz", - "integrity": "sha512-qIi+YRrDWnLVmydj6gwidYLPaBsakZRibGWSspuXgHAxOI3UuLwlo4dpQ73Et0gyHjI7ZvRMRY8JPiOntf9AQQ==", - "requires": { - "invariant": "^2.2.4", - "metro-source-map": "0.64.0", - "nullthrows": "^1.1.1", - "source-map": "^0.5.6", - "through2": "^2.0.1", - "vlq": "^1.0.0" - } - }, - "ob1": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.64.0.tgz", - "integrity": "sha512-CO1N+5dhvy+MoAwxz8+fymEUcwsT4a+wHhrHFb02LppcJdHxgcBWviwEhUwKOD2kLMQ7ijrrzybOqpGcqEtvpQ==" - } - } - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" - }, - "mime-db": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==" - }, - "mime-types": { - "version": "2.1.31", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", - "requires": { - "mime-db": "1.48.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "requires": { - "dom-walk": "^0.1.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - }, - "mockdate": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/mockdate/-/mockdate-3.0.5.tgz", - "integrity": "sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ==" - }, - "moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "nanoid": { - "version": "3.1.22", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.22.tgz", - "integrity": "sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ==" - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "requires": { - "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" - } - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "nocache": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz", - "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q==" - }, - "node-dir": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU=", - "requires": { - "minimatch": "^3.0.2" - } - }, - "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" - }, - "node-releases": { - "version": "1.1.71", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", - "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==" - }, - "node-stream-zip": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.13.5.tgz", - "integrity": "sha512-Lfi9xhSNvnJU35+4ZFlECXKJ70etAgJYWAVCdcEpksPnMrgwNqwkCJqdunoViVoFFV38C7AIodYE+2apuoK9Gw==" - }, - "noop-fn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/noop-fn/-/noop-fn-1.0.0.tgz", - "integrity": "sha1-XzPUfxPSFQ35PgywNmmemC94/78=" - }, - "normalize-css-color": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/normalize-css-color/-/normalize-css-color-1.0.2.tgz", - "integrity": "sha1-Apkel8zOxmI/5XOvu/Deah8+n40=" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "normalize-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", - "requires": { - "prepend-http": "^2.0.0", - "query-string": "^5.0.1", - "sort-keys": "^2.0.0" - }, - "dependencies": { - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" - } - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "^2.0.0" - } - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "requires": { - "boolbase": "~1.0.0" - } - }, - "nullthrows": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", - "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" - }, - "ob1": { - "version": "0.59.0", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.59.0.tgz", - "integrity": "sha512-opXMTxyWJ9m68ZglCxwo0OPRESIC/iGmKFPXEXzMZqsVIrgoRXOHmoMDkQzz4y3irVjbyPJRAh5pI9fd0MJTFQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-inspect": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", - "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==" - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "requires": { - "isobject": "^3.0.1" - } - }, - "omggif": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", - "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==" - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "open": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", - "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", - "requires": { - "is-wsl": "^1.1.0" - } - }, - "options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=" - }, - "ora": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", - "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", - "requires": { - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-spinners": "^2.0.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^5.2.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "requires": { - "p-limit": "^3.0.2" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "parse-bmfont-ascii": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", - "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=" - }, - "parse-bmfont-binary": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", - "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=" - }, - "parse-bmfont-xml": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", - "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", - "requires": { - "xml-parse-from-string": "^1.0.0", - "xml2js": "^0.4.5" - } - }, - "parse-headers": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", - "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==" - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parse-png": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-png/-/parse-png-2.1.0.tgz", - "integrity": "sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==", - "requires": { - "pngjs": "^3.3.0" - }, - "dependencies": { - "pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" - } - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - }, - "path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - }, - "phin": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", - "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pixelmatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", - "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", - "requires": { - "pngjs": "^3.0.0" - }, - "dependencies": { - "pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" - } - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - } - } - }, - "pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", - "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", - "requires": { - "find-up": "^2.1.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "requires": { - "p-limit": "^1.1.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - } - } - }, - "plist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.2.tgz", - "integrity": "sha512-MSrkwZBdQ6YapHy87/8hDU8MnIcyxBKjeF+McXnr5A9MtffPewTs7G3hlpodT5TacyfIyFTaJEhh3GGcmasTgQ==", - "requires": { - "base64-js": "^1.5.1", - "xmlbuilder": "^9.0.7", - "xmldom": "^0.5.0" - } - }, - "pngjs": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", - "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==" - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" - }, - "pouchdb-collections": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-1.0.1.tgz", - "integrity": "sha1-/mOhfal3YRq+98uAJssalVP9g1k=" - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" - }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" - } - } - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "requires": { - "asap": "~2.0.3" - } - }, - "prompts": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", - "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "query-string": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", - "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==", - "requires": { - "decode-uri-component": "^0.2.0", - "filter-obj": "^1.1.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" - } - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "react": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", - "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - } - }, - "react-devtools-core": { - "version": "4.13.5", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.13.5.tgz", - "integrity": "sha512-k+P5VSKM6P22Go9IQ8dJmjj9fbztvKt1iRDI/4wS5oTvd1EnytIJMYB59wZt+D3kgp64jklNX/MRmY42xAQ08g==", - "requires": { - "shell-quote": "^1.6.1", - "ws": "^7" - }, - "dependencies": { - "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "requires": {} - } - } - }, - "react-dom": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz", - "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.1" - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "react-native": { - "version": "0.64.2", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.64.2.tgz", - "integrity": "sha512-Ty/fFHld9DcYsFZujXYdeVjEhvSeQcwuTGXezyoOkxfiGEGrpL/uwUZvMzwShnU4zbbTKDu2PAm/uwuOittRGA==", - "requires": { - "@jest/create-cache-key-function": "^26.5.0", - "@react-native-community/cli": "^5.0.1-alpha.1", - "@react-native-community/cli-platform-android": "^5.0.1-alpha.1", - "@react-native-community/cli-platform-ios": "^5.0.1-alpha.1", - "@react-native/assets": "1.0.0", - "@react-native/normalize-color": "1.0.0", - "@react-native/polyfills": "1.0.0", - "abort-controller": "^3.0.0", - "anser": "^1.4.9", - "base64-js": "^1.1.2", - "event-target-shim": "^5.0.1", - "hermes-engine": "~0.7.0", - "invariant": "^2.2.4", - "jsc-android": "^245459.0.0", - "metro-babel-register": "0.64.0", - "metro-react-native-babel-transformer": "0.64.0", - "metro-runtime": "0.64.0", - "metro-source-map": "0.64.0", - "nullthrows": "^1.1.1", - "pretty-format": "^26.5.2", - "promise": "^8.0.3", - "prop-types": "^15.7.2", - "react-devtools-core": "^4.6.0", - "react-native-codegen": "^0.0.6", - "react-refresh": "^0.4.0", - "regenerator-runtime": "^0.13.2", - "scheduler": "^0.20.1", - "shelljs": "^0.8.4", - "stacktrace-parser": "^0.1.3", - "use-subscription": "^1.0.0", - "whatwg-fetch": "^3.0.0", - "ws": "^6.1.4" - }, - "dependencies": { - "@react-native-community/cli": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-5.0.1.tgz", - "integrity": "sha512-9VzSYUYSEqxEH5Ib2UNSdn2eyPiYZ4T7Y79o9DKtRBuSaUIwbCUdZtIm+UUjBpLS1XYBkW26FqL8/UdZDmQvXw==", - "requires": { - "@react-native-community/cli-debugger-ui": "^5.0.1", - "@react-native-community/cli-hermes": "^5.0.1", - "@react-native-community/cli-server-api": "^5.0.1", - "@react-native-community/cli-tools": "^5.0.1", - "@react-native-community/cli-types": "^5.0.1", - "appdirsjs": "^1.2.4", - "chalk": "^3.0.0", - "command-exists": "^1.2.8", - "commander": "^2.19.0", - "cosmiconfig": "^5.1.0", - "deepmerge": "^3.2.0", - "envinfo": "^7.7.2", - "execa": "^1.0.0", - "find-up": "^4.1.0", - "fs-extra": "^8.1.0", - "glob": "^7.1.3", - "graceful-fs": "^4.1.3", - "joi": "^17.2.1", - "leven": "^3.1.0", - "lodash": "^4.17.15", - "metro": "^0.64.0", - "metro-config": "^0.64.0", - "metro-core": "^0.64.0", - "metro-react-native-babel-transformer": "^0.64.0", - "metro-resolver": "^0.64.0", - "metro-runtime": "^0.64.0", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "node-stream-zip": "^1.9.1", - "ora": "^3.4.0", - "pretty-format": "^26.6.2", - "prompts": "^2.4.0", - "semver": "^6.3.0", - "serve-static": "^1.13.1", - "strip-ansi": "^5.2.0", - "sudo-prompt": "^9.0.0", - "wcwidth": "^1.0.1" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "metro-babel-transformer": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.64.0.tgz", - "integrity": "sha512-itZaxKTgmKGEZWxNzbSZBc22NngrMZzoUNuU92aHSTGkYi2WH4XlvzEHsstmIKHMsRVKl75cA+mNmgk4gBFJKw==", - "requires": { - "@babel/core": "^7.0.0", - "metro-source-map": "0.64.0", - "nullthrows": "^1.1.1" - } - }, - "metro-react-native-babel-preset": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.64.0.tgz", - "integrity": "sha512-HcZ0RWQRuJfpPiaHyFQJzcym+/dDIVUPwUAXWoub/C4GkGu+mPjp8vqK6g0FxokCnnI2TK0gZTza2IDfiNNscQ==", - "requires": { - "@babel/core": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.2.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-exponentiation-operator": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-object-assign": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-regenerator": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "react-refresh": "^0.4.0" - } - }, - "metro-react-native-babel-transformer": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.64.0.tgz", - "integrity": "sha512-K1sHO3ODBFCr7uEiCQ4RvVr+cQg0EHQF8ChVPnecGh/WDD8udrTq9ECwB0dRfMjAvlsHtRUlJm6ZSI8UPgum2w==", - "requires": { - "@babel/core": "^7.0.0", - "babel-preset-fbjs": "^3.3.0", - "metro-babel-transformer": "0.64.0", - "metro-react-native-babel-preset": "0.64.0", - "metro-source-map": "0.64.0", - "nullthrows": "^1.1.1" - } - }, - "metro-source-map": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.64.0.tgz", - "integrity": "sha512-OCG2rtcp5cLEGYvAbfkl6mEc0J2FPRP4/UCEly+juBk7hawS9bCBMBfhJm/HIsvY1frk6nT2Vsl1O8YBbwyx2g==", - "requires": { - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "invariant": "^2.2.4", - "metro-symbolicate": "0.64.0", - "nullthrows": "^1.1.1", - "ob1": "0.64.0", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - } - }, - "metro-symbolicate": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.64.0.tgz", - "integrity": "sha512-qIi+YRrDWnLVmydj6gwidYLPaBsakZRibGWSspuXgHAxOI3UuLwlo4dpQ73Et0gyHjI7ZvRMRY8JPiOntf9AQQ==", - "requires": { - "invariant": "^2.2.4", - "metro-source-map": "0.64.0", - "nullthrows": "^1.1.1", - "source-map": "^0.5.6", - "through2": "^2.0.1", - "vlq": "^1.0.0" - } - }, - "ob1": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.64.0.tgz", - "integrity": "sha512-CO1N+5dhvy+MoAwxz8+fymEUcwsT4a+wHhrHFb02LppcJdHxgcBWviwEhUwKOD2kLMQ7ijrrzybOqpGcqEtvpQ==" - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "promise": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", - "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", - "requires": { - "asap": "~2.0.6" - } - }, - "scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - } - } - }, - "react-native-background-actions": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/react-native-background-actions/-/react-native-background-actions-2.6.1.tgz", - "integrity": "sha512-4YQSEq7Y+qLKU9BxuzMG0DEIeZkvD54jTqA1IKai/w3sV+hc4cJNoSjZScRj1+663oWrEAZwLUk2I8P5QRvgiQ==", - "requires": { - "eventemitter3": "^4.0.7" - } - }, - "react-native-cheerio": { - "version": "1.0.0-rc.4", - "resolved": "https://registry.npmjs.org/react-native-cheerio/-/react-native-cheerio-1.0.0-rc.4.tgz", - "integrity": "sha512-V2nAoxikHGV1vl2nKL2rlw832Ze+p8op5p6MDltd5ZrEZGp1+eTl+qjC+l4TY9ju3CNpt/uiNuOEQoWqgdwzUQ==", - "requires": { - "buffer": "^5.0.7", - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2-without-node-native": "^3.9.0", - "lodash": "^4.15.0", - "react-native-parse-html": "^2.2.6" - } - }, - "react-native-codegen": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/react-native-codegen/-/react-native-codegen-0.0.6.tgz", - "integrity": "sha512-cMvrUelD81wiPitEPiwE/TCNscIVauXxmt4NTGcy18HrUd0WRWXfYzAQGXm0eI87u3NMudNhqFj2NISJenxQHg==", - "requires": { - "flow-parser": "^0.121.0", - "jscodeshift": "^0.11.0", - "nullthrows": "^1.1.1" - } - }, - "react-native-device-info": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-8.1.3.tgz", - "integrity": "sha512-73e3wiGFL8DvIXEd8x4Aq+mO8mZvHARwfYorIEu+X0trLHY92bP5Ict8DJHDjCQ0+HtAvpA4Wda2VoUVN1zh6Q==", - "requires": {} - }, - "react-native-easing-gradient": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/react-native-easing-gradient/-/react-native-easing-gradient-0.1.2.tgz", - "integrity": "sha512-oeSJ8nSrCxiCO5mLEVc59Evva4unjvH6AQ8vJFyJ7PIKRybIV5JC+OBU8VnF+V7oQ9dnDBpx2qT5Mh+oxd+/tw==", - "requires": {} - }, - "react-native-fast-image": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/react-native-fast-image/-/react-native-fast-image-8.3.4.tgz", - "integrity": "sha512-LpzAdjUphihUpVEBn5fEv5AILe55rHav0YiZroPZ1rumKDhAl4u2cG01ku2Pb7l8sayjTsNu7FuURAlXUUDsow==", - "requires": {} - }, - "react-native-gesture-handler": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-1.10.3.tgz", - "integrity": "sha512-cBGMi1IEsIVMgoox4RvMx7V2r6bNKw0uR1Mu1o7NbuHS6BRSVLq0dP34l2ecnPlC+jpWd3le6Yg1nrdCjby2Mw==", - "requires": { - "@egjs/hammerjs": "^2.0.17", - "fbjs": "^3.0.0", - "hoist-non-react-statics": "^3.3.0", - "invariant": "^2.2.4", - "prop-types": "^15.7.2" - }, - "dependencies": { - "fbjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.0.tgz", - "integrity": "sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg==", - "requires": { - "cross-fetch": "^3.0.4", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - } - } - } - }, - "react-native-iphone-x-helper": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.1.tgz", - "integrity": "sha512-HOf0jzRnq2/aFUcdCJ9w9JGzN3gdEg0zFE4FyYlp4jtidqU03D5X7ZegGKfT1EWteR0gPBGp9ye5T5FvSWi9Yg==", - "requires": {} - }, - "react-native-navigation-bar-color": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/react-native-navigation-bar-color/-/react-native-navigation-bar-color-2.0.1.tgz", - "integrity": "sha512-1kE/oxWt+HYjRxdZdvke9tJ365xaee5n3+euOQA1En8zQuSbOxiE4SYEGM7TeaWnmLJ0l37mRnPHaB2H4mGh0A==" - }, - "react-native-pager-view": { - "version": "5.1.10", - "resolved": "https://registry.npmjs.org/react-native-pager-view/-/react-native-pager-view-5.1.10.tgz", - "integrity": "sha512-sVWEPaxSyp2TOQ9yt+v+ecEdZ2lGnZ9TtoNU+WA1c6SjYdQlIvS2ZMb2hvdmgTMCnZpzKF02WH9BimGOzQRDIg==", - "requires": {} - }, - "react-native-paper": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/react-native-paper/-/react-native-paper-4.8.1.tgz", - "integrity": "sha512-WgmqrDdcrr0ZbuiLCwMpmOMhl1n8uIvNulxsl2oCGtD8oeMkPJKHf4G/ONR+iNrSXcFbJek+uDRSmcGA5kDfUA==", - "requires": { - "@callstack/react-theme-provider": "^3.0.5", - "color": "^3.1.2", - "react-native-iphone-x-helper": "^1.3.1" - } - }, - "react-native-parse-html": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/react-native-parse-html/-/react-native-parse-html-2.2.6.tgz", - "integrity": "sha1-IfKPl7OEB3hHWbxZ4kS1EQnZzIc=", - "requires": { - "react-native-stream": "^0.1.0" - } - }, - "react-native-reanimated": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-2.1.0.tgz", - "integrity": "sha512-tlPvvcdf+X7HGQ7g/7npBFhwMznfdk7MHUc9gUB/kp2abSscXNe/kOVKlrNEOO4DS11rNOXc+llFxVFMuNk0zA==", - "requires": { - "@babel/plugin-transform-object-assign": "^7.10.4", - "fbjs": "^3.0.0", - "mockdate": "^3.0.2", - "string-hash-64": "^1.0.3" - }, - "dependencies": { - "fbjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.0.tgz", - "integrity": "sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg==", - "requires": { - "cross-fetch": "^3.0.4", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - } - } - } - }, - "react-native-safe-area-context": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-3.2.0.tgz", - "integrity": "sha512-k2Nty4PwSnrg9HwrYeeE+EYqViYJoOFwEy9LxL5RIRfoqxAq/uQXNGwpUg2/u4gnKpBbEPa9eRh15KKMe/VHkA==", - "requires": {} - }, - "react-native-screens": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.0.0.tgz", - "integrity": "sha512-35II5oxTaVp3OP8y0eLPOPpQkxG4fRKQ+dL1YSE1we5kCZFOU0l/Rn0T79HbyUu1LPwUZr6lZupPs0ULnRyMuQ==", - "requires": {} - }, - "react-native-stream": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/react-native-stream/-/react-native-stream-0.1.9.tgz", - "integrity": "sha1-E2gMzok8p9NKhmZNnVtO4adyyXw=", - "requires": { - "base64-js": "^1.2.0", - "ieee754": "^1.1.8" - } - }, - "react-native-swipe-gestures": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/react-native-swipe-gestures/-/react-native-swipe-gestures-1.0.5.tgz", - "integrity": "sha512-Ns7Bn9H/Tyw278+5SQx9oAblDZ7JixyzeOczcBK8dipQk2pD7Djkcfnf1nB/8RErAmMLL9iXgW0QHqiII8AhKw==" - }, - "react-native-tab-view": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/react-native-tab-view/-/react-native-tab-view-3.0.1.tgz", - "integrity": "sha512-L7qXtYz5Z+NdWyu38zaJrlHA/8H6rNFRZXe3ydym12UEEPPoefbVZ71b9YK2O6QP0u4pUlzMpMVM/Lsz2DJ4jg==", - "requires": {} - }, - "react-native-tts": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/react-native-tts/-/react-native-tts-4.1.0.tgz", - "integrity": "sha512-tvf3lQ6u9MqztUie37qoPw5YQPqi0ql1lPhDsBBs/RRA6A/H1J9X9H/qb1A0Hx0ZpjavrEdtVSqQQ2JDZvZCTQ==" - }, - "react-native-unimodules": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/react-native-unimodules/-/react-native-unimodules-0.13.3.tgz", - "integrity": "sha512-fjbNbAcvJHF8Ywqe77oveRW1WfaAKCQGV4a3Fxgpai17oNHq1LFwwKw0crFo0k7Njm5u7kCMVNbm9ZILNBfABQ==", - "requires": { - "@unimodules/core": "~7.1.0", - "@unimodules/react-native-adapter": "~6.2.2", - "chalk": "^2.4.2", - "expo-asset": "~8.3.1", - "expo-constants": "~10.1.3", - "expo-file-system": "~11.0.2", - "expo-image-loader": "~2.1.1", - "expo-permissions": "~12.0.1", - "find-up": "~5.0.0", - "unimodules-app-loader": "~2.1.0", - "unimodules-barcode-scanner-interface": "~6.1.0", - "unimodules-camera-interface": "~6.1.0", - "unimodules-constants-interface": "~6.1.0", - "unimodules-face-detector-interface": "~6.1.0", - "unimodules-file-system-interface": "~6.1.0", - "unimodules-font-interface": "~6.1.0", - "unimodules-image-loader-interface": "~6.1.0", - "unimodules-permissions-interface": "~6.1.0", - "unimodules-sensors-interface": "~6.1.0", - "unimodules-task-manager-interface": "~6.1.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } - } - }, - "react-native-vector-icons": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-7.1.0.tgz", - "integrity": "sha512-V2a1zJ4i+kS8O4j183gIwX14St9AxxXabxwYpFBgRhvr2NDXyFcjHDEAgrOYYlt2W57e20aN1tBDU/I+wn9WtQ==", - "requires": { - "lodash.frompairs": "^4.0.1", - "lodash.isequal": "^4.5.0", - "lodash.isstring": "^4.0.1", - "lodash.omit": "^4.5.0", - "lodash.pick": "^4.4.0", - "lodash.template": "^4.5.0", - "prop-types": "^15.7.2", - "yargs": "^15.0.2" - } - }, - "react-native-web": { - "version": "0.16.5", - "resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.16.5.tgz", - "integrity": "sha512-bsoSq9pnjPerNKC1uzvJi7464to3SSMbGG9QFdj6woV3xk5fhq2jB2vQ5+iH/KC7F5lpDRukcb2hMHL1rzKJUQ==", - "requires": { - "array-find-index": "^1.0.2", - "create-react-class": "^15.7.0", - "fbjs": "^3.0.0", - "hyphenate-style-name": "^1.0.4", - "inline-style-prefixer": "^6.0.0", - "normalize-css-color": "^1.0.2", - "prop-types": "^15.6.0" - }, - "dependencies": { - "fbjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.0.tgz", - "integrity": "sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg==", - "requires": { - "cross-fetch": "^3.0.4", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - } - } - } - }, - "react-native-webview": { - "version": "11.6.2", - "resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-11.6.2.tgz", - "integrity": "sha512-7e5ltLBgqt1mX0gdTTS2nFPIjfS6y300wqJ4rLWqU71lDO+8ZeayfsF5qo83qxo2Go74CtLnSeWae4pdGwUqYw==", - "requires": { - "escape-string-regexp": "2.0.0", - "invariant": "2.2.4" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" - } - } - }, - "react-redux": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.4.tgz", - "integrity": "sha512-hOQ5eOSkEJEXdpIKbnRyl04LhaWabkDPV+Ix97wqQX3T3d2NQ8DUblNXXtNMavc7DpswyQM6xfaN4HQDKNY2JA==", - "requires": { - "@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": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", - "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - } - } - }, - "recast": { - "version": "0.20.4", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.4.tgz", - "integrity": "sha512-6qLIBGGRcwjrTZGIiBpJVC/NeuXpogXNyRQpqU1zWPUigCphvApoCs9KIwDYh1eDuJ6dAFlQoi/QUyE5KQ6RBQ==", - "requires": { - "ast-types": "0.14.2", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tslib": "^2.0.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "requires": { - "resolve": "^1.1.6" - } - }, - "redux": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.0.tgz", - "integrity": "sha512-uI2dQN43zqLWCt6B/BMGRMY6db7TTY4qeHHfGeKb3EOhmOKjU3KdWvNLJyqaHRksv/ErdNH7cFZWg9jXtewy4g==", - "requires": { - "@babel/runtime": "^7.9.2" - } - }, - "redux-persist": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-6.0.0.tgz", - "integrity": "sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ==", - "requires": {} - }, - "redux-thunk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz", - "integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==" - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "requires": { - "regenerate": "^1.4.0" - } - }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - }, - "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", - "requires": { - "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": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" - }, - "regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==" - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "reselect": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-3.0.1.tgz", - "integrity": "sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=" - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - }, - "rn-sliding-up-panel": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rn-sliding-up-panel/-/rn-sliding-up-panel-2.4.5.tgz", - "integrity": "sha512-Z8TEJE8KMjx0s9P4ikUDAlvyDgvF9n/6QR5GIUi8iWRKhiYJ4sddKjAIDYVI5yT1q+rJu+iAo7Z310H3yCb3sQ==", - "requires": { - "clamp": "^1.0.1", - "prop-types": "^15.7.2" - } - }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "requires": { - "@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" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "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" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "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" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "requires": { - "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" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "serialize-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", - "integrity": "sha1-ULZ51WNc34Rme9yOWa9OW4HV9go=" - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "requires": { - "kind-of": "^6.0.2" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "requires": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" - }, - "dependencies": { - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=" - } - } - }, - "shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "simple-plist": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.1.1.tgz", - "integrity": "sha512-pKMCVKvZbZTsqYR6RKgLfBHkh2cV89GXcA/0CVPje3sOiNOnXA8+rp/ciAMZ7JRaUdLzlEM6JFfUn+fS6Nt3hg==", - "requires": { - "bplist-creator": "0.0.8", - "bplist-parser": "0.2.0", - "plist": "^3.0.1" - } - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "requires": { - "is-arrayish": "^0.3.1" - } - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - } - }, - "slugify": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.5.0.tgz", - "integrity": "sha512-Q2UPZ2udzquy1ElHfOLILMBMqBEXkiD3wE75qtBvV+FsDdZZjUqPZ44vqLTejAVq+wLLHacOMcENnP8+ZbzmIA==" - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "requires": { - "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" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "requires": { - "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": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" - }, - "split-on-first": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", - "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==" - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "stackframe": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", - "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==" - }, - "stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "requires": { - "type-fest": "^0.7.1" - }, - "dependencies": { - "type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==" - } - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "stream-buffers": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", - "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=" - }, - "strict-uri-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", - "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string-hash-64": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string-hash-64/-/string-hash-64-1.0.3.tgz", - "integrity": "sha512-D5OKWKvDhyVWWn2x5Y9b+37NUllks34q1dCDhk/vYcso9fmhs+Tl3KR/gE4v5UNj2UA35cnX4KdVVGkG1deKqw==" - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - } - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, - "sudo-prompt": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", - "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "temp": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", - "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", - "requires": { - "os-tmpdir": "^1.0.0", - "rimraf": "~2.2.6" - }, - "dependencies": { - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", - "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=" - } - } - }, - "temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=" - }, - "tempy": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz", - "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==", - "requires": { - "temp-dir": "^1.0.0", - "type-fest": "^0.3.1", - "unique-string": "^1.0.0" - } - }, - "throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==" - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "timm": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", - "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==" - }, - "tiny-queue": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tiny-queue/-/tiny-queue-0.2.1.tgz", - "integrity": "sha1-JaZ/LG4lOyypQZd7XvdELvl6YEY=" - }, - "tinycolor2": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", - "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==" - }, - "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" - }, - "type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==" - }, - "ua-parser-js": { - "version": "0.7.28", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", - "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==" - }, - "uglify-es": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", - "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", - "requires": { - "commander": "~2.13.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" - }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "requires": { - "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": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" - }, - "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" - }, - "unimodules-app-loader": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unimodules-app-loader/-/unimodules-app-loader-2.1.0.tgz", - "integrity": "sha512-W+D+hVXq6jOvBm7QVwODPENz6Lupj73QequNNG+6GCTkqn4ybq/lba9IQvJQT2QzdL3luVHin+eym18cDblMlg==" - }, - "unimodules-barcode-scanner-interface": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/unimodules-barcode-scanner-interface/-/unimodules-barcode-scanner-interface-6.1.0.tgz", - "integrity": "sha512-+McBDniXReXNS8PnGDjIyDikb+cRXSfsZMLsF0gohEEV0xdA6HhPvFA0ryv65j2NKOyIiWmEHjv+yDOoewDq3w==" - }, - "unimodules-camera-interface": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/unimodules-camera-interface/-/unimodules-camera-interface-6.1.0.tgz", - "integrity": "sha512-Rbszrh54kIB4vA+AzDWFXplBz1UrxQNR6Ls0eJDAKffbjDfyQIP6SgIPjUlzqGVnzknyZ1SMGiFFSFCM4BCOAw==" - }, - "unimodules-constants-interface": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/unimodules-constants-interface/-/unimodules-constants-interface-6.1.0.tgz", - "integrity": "sha512-uPLFGufbdefRQeINyUfkw2mVJJg+6kH23RR4ATfUAsrD6vGLuONwduHvRwh+rcL9fzPVM4jsfH6iATrolmiatg==" - }, - "unimodules-face-detector-interface": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/unimodules-face-detector-interface/-/unimodules-face-detector-interface-6.1.0.tgz", - "integrity": "sha512-L2E8a2OjMPxfVh/OGt6Y5HWbEaJ9h3Hkmvx02GCferBPKgN3dcxFMaI53d1BVV9QA3r4YuLBP6RrolG/qy/r7A==" - }, - "unimodules-file-system-interface": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/unimodules-file-system-interface/-/unimodules-file-system-interface-6.1.0.tgz", - "integrity": "sha512-iJGm6nWF+PhxqFbeqC2Ku4XjglbL9z7aofkSX5S7bZ3Oi4v1NO1UOe9nczU17Ps19sfYZJgkiD4FiQaFCmAnKg==" - }, - "unimodules-font-interface": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/unimodules-font-interface/-/unimodules-font-interface-6.1.0.tgz", - "integrity": "sha512-OfSeWx9ew2SNENj/HhctfPU7hqeW0bzVZYGGJ0M6RNcRRWzwA6ltawyYwtuvRe/EEU3LwrFUSKPMCi9867hLyw==" - }, - "unimodules-image-loader-interface": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/unimodules-image-loader-interface/-/unimodules-image-loader-interface-6.1.0.tgz", - "integrity": "sha512-o8hZI6J6DGYyo2xSH6J+ipxME0blNfmaWU3P2Y2AUVxbEPdgjT2sVmufRWMKGhrt7gaNW4xF/JUbF9lq4Rui7w==" - }, - "unimodules-permissions-interface": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/unimodules-permissions-interface/-/unimodules-permissions-interface-6.1.0.tgz", - "integrity": "sha512-jeJx/y+Vn/Cp1/4su5XJ06UBul83MpXkYEqIOAb2jwaikhmj6tNwko7HpKy9OhfGfrhddCzwtedlro8xxZUk9A==" - }, - "unimodules-sensors-interface": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/unimodules-sensors-interface/-/unimodules-sensors-interface-6.1.0.tgz", - "integrity": "sha512-tJDOo3p4q4wmhyuwapNjYeON7cd5OSPYr3qDfMgPPg9m6pYM/FdQJ1PKMNb1NJUckpDgQ67Dows2jAdqkNRZSw==" - }, - "unimodules-task-manager-interface": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/unimodules-task-manager-interface/-/unimodules-task-manager-interface-6.1.0.tgz", - "integrity": "sha512-wSsuX5fzd3oCCjHvrRFxysmCswhHZbJflVyAWzgSHtyMgxBOZobGN1C0UQ/plcu/JWY2+maTDPpE9OU6wzzzdg==" - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "requires": { - "crypto-random-string": "^1.0.0" - } - }, - "universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - } - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - }, - "url-parse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", - "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" - }, - "use-subscription": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/use-subscription/-/use-subscription-1.5.1.tgz", - "integrity": "sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==", - "requires": { - "object-assign": "^4.1.1" - } - }, - "utif": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", - "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", - "requires": { - "pako": "^1.0.5" - } - }, - "util": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.3.tgz", - "integrity": "sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog==", - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "vlq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", - "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==" - }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "requires": { - "makeerror": "1.0.x" - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "requires": { - "defaults": "^1.0.3" - } - }, - "whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "requires": { - "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-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "requires": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "which-typed-array": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", - "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==", - "requires": { - "available-typed-arrays": "^1.0.2", - "call-bind": "^1.0.0", - "es-abstract": "^1.18.0-next.1", - "foreach": "^2.0.5", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.1", - "is-typed-array": "^1.1.3" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xcode": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz", - "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==", - "requires": { - "simple-plist": "^1.1.0", - "uuid": "^7.0.3" - }, - "dependencies": { - "uuid": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", - "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==" - } - } - }, - "xhr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", - "requires": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "requires": { - "sax": "^1.2.4" - } - }, - "xml-parse-from-string": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", - "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=" - }, - "xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "dependencies": { - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" - } - } - }, - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" - }, - "xmldoc": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.1.2.tgz", - "integrity": "sha512-ruPC/fyPNck2BD1dpz0AZZyrEwMOrWTO5lDdIXS91rs3wtm4j+T8Rp2o+zoOYkkAxJTZRPOSnOGei1egoRmKMQ==", - "requires": { - "sax": "^1.2.1" - } - }, - "xmldom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.5.0.tgz", - "integrity": "sha512-Foaj5FXVzgn7xFzsKeNIde9g6aFBxTPi37iwsno8QvApmtg7KYrr+OPyRHcJF7dud2a5nGRBXK3n0dL62Gf7PA==" - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "requires": { - "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" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - } - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" - } - } -} +{ + "name": "lnreader", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "lnreader", + "version": "1.0.0", + "dependencies": { + "@react-native-async-storage/async-storage": "^1.13.0", + "@react-native-community/masked-view": "0.1.10", + "@react-native-community/netinfo": "6.0.0", + "@react-native-community/slider": "3.0.3", + "@react-navigation/material-bottom-tabs": "^5.3.10", + "@react-navigation/native": "^5.8.10", + "@react-navigation/stack": "^5.12.8", + "expo": "^41.0.1", + "expo-document-picker": "^9.1.2", + "expo-file-system": "~11.0.2", + "expo-font": "~9.1.0", + "expo-haptics": "~10.0.0", + "expo-linear-gradient": "~9.1.0", + "expo-linking": "~2.2.3", + "expo-notifications": "~0.11.6", + "expo-splash-screen": "^0.11.2", + "expo-sqlite": "~9.1.0", + "expo-updates": "~0.5.4", + "expo-web-browser": "~9.1.0", + "moment": "^2.29.1", + "qs": "^6.10.1", + "react": "16.13.1", + "react-dom": "16.13.1", + "react-native": "^0.64.2", + "react-native-background-actions": "^2.6.1", + "react-native-cheerio": "^1.0.0-rc.4", + "react-native-device-info": "^8.1.3", + "react-native-easing-gradient": "^0.1.2", + "react-native-fast-image": "^8.3.4", + "react-native-gesture-handler": "~1.10.2", + "react-native-navigation-bar-color": "^2.0.1", + "react-native-pager-view": "^5.1.10", + "react-native-paper": "^4.5.0", + "react-native-reanimated": "^2.1.0", + "react-native-safe-area-context": "3.2.0", + "react-native-screens": "~3.0.0", + "react-native-swipe-gestures": "^1.0.5", + "react-native-tab-view": "^3.0.1", + "react-native-tts": "^4.1.0", + "react-native-unimodules": "~0.13.3", + "react-native-vector-icons": "^7.1.0", + "react-native-web": "^0.16.5", + "react-native-webview": "^11.6.2", + "react-redux": "^7.2.2", + "redux": "^4.0.5", + "redux-persist": "^6.0.0", + "redux-thunk": "^2.3.0", + "rn-sliding-up-panel": "^2.4.4" + }, + "devDependencies": { + "@babel/core": "~7.9.0", + "@react-native-community/eslint-config": "^3.0.1", + "eslint": "^7.32.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dependencies": { + "@babel/highlight": "^7.12.13" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", + "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==" + }, + "node_modules/@babel/core": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", + "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.9.0", + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helpers": "^7.9.0", + "@babel/parser": "^7.9.0", + "@babel/template": "^7.8.6", + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@babel/generator": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.0.tgz", + "integrity": "sha512-C6u00HbmsrNPug6A+CiNl8rEys7TsdcXwg12BHi2ca5rUfAs3+UwZsuDQSXnc+wCElCXMB8gMaJ3YXDdh8fAlg==", + "dependencies": { + "@babel/types": "^7.14.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", + "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", + "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", + "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" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.0.tgz", + "integrity": "sha512-6pXDPguA5zC40Y8oI5mqr+jEUpjMJonKvknvA+vD8CYDz5uuXEwWBK8sRAsE/t3gfb1k15AQb9RhwpscC4nUJQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.12.13", + "@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" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz", + "integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "regexpu-core": "^4.7.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz", + "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" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", + "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", + "dependencies": { + "@babel/types": "^7.13.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", + "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", + "dependencies": { + "@babel/traverse": "^7.13.15", + "@babel/types": "^7.13.16" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "dependencies": { + "@babel/types": "^7.13.12" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "dependencies": { + "@babel/types": "^7.13.12" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", + "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", + "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.0", + "@babel/types": "^7.14.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", + "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-wrap-function": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", + "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" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "dependencies": { + "@babel/types": "^7.13.12" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "dependencies": { + "@babel/types": "^7.12.1" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==" + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", + "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" + } + }, + "node_modules/@babel/helpers": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "dependencies": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.0.tgz", + "integrity": "sha512-AHbfoxesfBALg33idaTBVUkLnfXtsgvJREf93p4p0Lwsz4ppfE7g1tpEXVm4vrxUcH4DVhAa9Z1m1zqf9WUC7Q==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.15.tgz", + "integrity": "sha512-VapibkWzFeoa6ubXy/NgV5U2U4MVnUlvnx6wo1XhlsaTrLYWE0UFpDQsVrmn22q5CzeloqJ8gEMHSKxuee6ZdA==", + "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" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.13.tgz", + "integrity": "sha512-8SCJ0Ddrpwv4T7Gwb33EmW1V9PY5lggTO+A8WjyIwxrSHDUyBw4MtF96ifn1n8H806YlxbVCoKXbbmzD6RD+cA==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.13.15.tgz", + "integrity": "sha512-ibAMAqUm97yzi+LPgdr5Nqb9CMkeieGHvwPg1ywSGjZrZHQEGqE01HmOio8kxRpA/+VtOHouIVy2FMpBbtltjA==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.13.11", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-decorators": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz", + "integrity": "sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-default-from": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.12.13.tgz", + "integrity": "sha512-idIsBT+DGXdOHL82U+8bwX4goHm/z10g8sGGrQroh+HCRcm7mDv/luaGdWJQMTuCX2FsdXS7X0Nyyzp4znAPJA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-export-default-from": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz", + "integrity": "sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz", + "integrity": "sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz", + "integrity": "sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz", + "integrity": "sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz", + "integrity": "sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz", + "integrity": "sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==", + "dependencies": { + "@babel/compat-data": "^7.13.8", + "@babel/helper-compilation-targets": "^7.13.8", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz", + "integrity": "sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz", + "integrity": "sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ==", + "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" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", + "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", + "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.13.tgz", + "integrity": "sha512-Rw6aIXGuqDLr6/LoBBYE57nKOzQpz/aDkKlMqEwH+Vp0MXbG6H/TfRjaY343LKxzAKAMXIHsQ8JzaZKuDZ9MwA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-default-from": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.12.13.tgz", + "integrity": "sha512-gVry0zqoums0hA+EniCYK3gABhjYSLX1dVuwYpPw9DrLNA4/GovXySHVg4FGRsZht09ON/5C2NVx3keq+qqVGQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.13.tgz", + "integrity": "sha512-J/RYxnlSLXZLVR7wTRsozxKT8qbsx1mNKJzXEEjQ0Kjx1ZACcyHgbanNWNCFtc36IzuWhYWPpvJFFoexoOWFmA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz", + "integrity": "sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", + "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz", + "integrity": "sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", + "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", + "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" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", + "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.13.16.tgz", + "integrity": "sha512-ad3PHUxGnfWF4Efd3qFuznEtZKoBp0spS+DgqzVzRPV7urEBvPLue3y2j80w4Jf2YLzZHj8TOv/Lmvdmh3b2xg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz", + "integrity": "sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-split-export-declaration": "^7.12.13", + "globals": "^11.1.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", + "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.13.17", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz", + "integrity": "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", + "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", + "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", + "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.13.0.tgz", + "integrity": "sha512-EXAGFMJgSX8gxWD7PZtW/P6M+z74jpx3wm/+9pn+c2dOawPpBkUX7BrfyPvo6ZpXbgRIEuwgwDb/MGlKvu2pOg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-flow": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", + "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", + "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", + "dependencies": { + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", + "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", + "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.0.tgz", + "integrity": "sha512-CF4c5LX4LQ03LebQxJ5JZes2OYjzBuk1TdiF7cG7d5dK4lAdw9NZmaxq5K/mouUdNeqwz3TNjnW6v01UqUNgpQ==", + "dependencies": { + "@babel/helper-module-transforms": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", + "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" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", + "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" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", + "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", + "dependencies": { + "@babel/helper-module-transforms": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", + "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", + "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-assign": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.12.13.tgz", + "integrity": "sha512-4QxDMc0lAOkIBSfCrnSGbAJ+4epDBF2XXwcLXuBcG1xl9u7LrktNVD4+LwhL47XuKVPQ7R25e/WdcV+h97HyZA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", + "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-replace-supers": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz", + "integrity": "sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", + "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.13.tgz", + "integrity": "sha512-MprESJzI9O5VnJZrL7gg1MpdqmiFcUv41Jc7SahxYsNP2kDkFqClxxTZq+1Qv4AFCamm+GXMRDQINNn+qrxmiA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz", + "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" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.13.tgz", + "integrity": "sha512-FXYw98TTJ125GVCCkFLZXlZ1qGcsYqNQhVBQcZjyrwf8FEUtVfKIoidnO8S0q+KBQpDYNTmiGo1gn67Vti04lQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.13.tgz", + "integrity": "sha512-O5JJi6fyfih0WfDgIJXksSPhGP/G0fQpfxYy87sDc+1sFmsCS6wr3aAn+whbzkhbjtq4VMqLRaSzR6IsshIC0Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", + "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", + "dependencies": { + "regenerator-transform": "^0.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", + "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.15.tgz", + "integrity": "sha512-d+ezl76gx6Jal08XngJUkXM4lFXK/5Ikl9Mh4HKDxSfGJXmZ9xG64XT2oivBzfxb/eQ62VfvoMkaCZUKJMVrBA==", + "dependencies": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-plugin-utils": "^7.13.0", + "babel-plugin-polyfill-corejs2": "^0.2.0", + "babel-plugin-polyfill-corejs3": "^0.2.0", + "babel-plugin-polyfill-regenerator": "^0.2.0", + "semver": "^6.3.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", + "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", + "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", + "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", + "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", + "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.13.0.tgz", + "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" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", + "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", + "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.17.tgz", + "integrity": "sha512-9PMijx8zFbCwTHrd2P4PJR5nWGH3zWebx2OcpTjqQrHhCiL2ssSR2Sc9ko2BsI2VmVBfoaQmPrlMTCui4LmXQg==", + "dependencies": { + "@babel/compat-data": "^7.12.13", + "@babel/helper-compilation-targets": "^7.12.17", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-validator-option": "^7.12.17", + "@babel/plugin-proposal-async-generator-functions": "^7.12.13", + "@babel/plugin-proposal-class-properties": "^7.12.13", + "@babel/plugin-proposal-dynamic-import": "^7.12.17", + "@babel/plugin-proposal-export-namespace-from": "^7.12.13", + "@babel/plugin-proposal-json-strings": "^7.12.13", + "@babel/plugin-proposal-logical-assignment-operators": "^7.12.13", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.13", + "@babel/plugin-proposal-numeric-separator": "^7.12.13", + "@babel/plugin-proposal-object-rest-spread": "^7.12.13", + "@babel/plugin-proposal-optional-catch-binding": "^7.12.13", + "@babel/plugin-proposal-optional-chaining": "^7.12.17", + "@babel/plugin-proposal-private-methods": "^7.12.13", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@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.13", + "@babel/plugin-transform-arrow-functions": "^7.12.13", + "@babel/plugin-transform-async-to-generator": "^7.12.13", + "@babel/plugin-transform-block-scoped-functions": "^7.12.13", + "@babel/plugin-transform-block-scoping": "^7.12.13", + "@babel/plugin-transform-classes": "^7.12.13", + "@babel/plugin-transform-computed-properties": "^7.12.13", + "@babel/plugin-transform-destructuring": "^7.12.13", + "@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.12.13", + "@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.12.13", + "@babel/plugin-transform-modules-commonjs": "^7.12.13", + "@babel/plugin-transform-modules-systemjs": "^7.12.13", + "@babel/plugin-transform-modules-umd": "^7.12.13", + "@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.12.13", + "@babel/plugin-transform-property-literals": "^7.12.13", + "@babel/plugin-transform-regenerator": "^7.12.13", + "@babel/plugin-transform-reserved-words": "^7.12.13", + "@babel/plugin-transform-shorthand-properties": "^7.12.13", + "@babel/plugin-transform-spread": "^7.12.13", + "@babel/plugin-transform-sticky-regex": "^7.12.13", + "@babel/plugin-transform-template-literals": "^7.12.13", + "@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.3", + "@babel/types": "^7.12.17", + "core-js-compat": "^3.8.0", + "semver": "^5.5.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@babel/preset-flow": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.13.13.tgz", + "integrity": "sha512-MDtwtamMifqq3R2mC7l3A3uFalUb3NH5TIBQWjN/epEPlZktcLq4se3J+ivckKrLMGsR7H9LW8+pYuIUN9tsKg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-option": "^7.12.17", + "@babel/plugin-transform-flow-strip-types": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "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" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.12.17.tgz", + "integrity": "sha512-T513uT4VSThRcmWeqcLkITKJ1oGQho9wfWuhQm10paClQkp1qyd0Wf8mvC8Se7UYssMyRSj4tZYpVTkCmAK/mA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-validator-option": "^7.12.17", + "@babel/plugin-transform-typescript": "^7.12.17" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/register": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.13.16.tgz", + "integrity": "sha512-dh2t11ysujTwByQjXNgJ48QZ2zcXKQVdV8s0TbeMI0flmtGWCdTwK9tJiACHXPLmncm5+ktNn/diojA45JE4jg==", + "dependencies": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.0", + "source-map-support": "^0.5.16" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", + "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + } + }, + "node_modules/@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/traverse": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", + "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.0", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.0", + "@babel/types": "^7.14.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "node_modules/@babel/types": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.0.tgz", + "integrity": "sha512-O2LVLdcnWplaGxiPBz12d0HcdN8QdxdsWYhz5LSeuukV/5mn2xUUc3gBeU4QBYPJ18g/UToe8F532XJ608prmg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" + } + }, + "node_modules/@callstack/react-theme-provider": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@callstack/react-theme-provider/-/react-theme-provider-3.0.5.tgz", + "integrity": "sha512-Iec+ybWN0FvNj87sD3oWo/49edGUP0UOSdMnzCJEFJIDYr992ECIuOV89burAAh2/ibPCxgLiK6dmgv2mO/8Tg==", + "dependencies": { + "deepmerge": "^3.2.0", + "hoist-non-react-statics": "^3.3.0" + }, + "peerDependencies": { + "react": "^16.3.0" + } + }, + "node_modules/@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "dependencies": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + }, + "bin": { + "watch": "cli.js" + }, + "engines": { + "node": ">=0.1.95" + } + }, + "node_modules/@egjs/hammerjs": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/@egjs/hammerjs/-/hammerjs-2.0.17.tgz", + "integrity": "sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==", + "dependencies": { + "@types/hammerjs": "^2.0.36" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.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" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", + "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@eslint/eslintrc/node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@expo/config": { + "version": "3.3.38", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-3.3.38.tgz", + "integrity": "sha512-0SsvF7yTy+kdJaAc2W75yhwnaXIRasnA1Vygna83tlPhCx6ynIBzTbJAvdkddSk5euUTJpXc5nePaflGvNboXw==", + "dependencies": { + "@babel/core": "7.9.0", + "@babel/plugin-proposal-class-properties": "~7.12.13", + "@babel/preset-env": "~7.12.13", + "@babel/preset-typescript": "~7.12.13", + "@expo/config-plugins": "1.0.28", + "@expo/config-types": "^40.0.0-beta.2", + "@expo/json-file": "8.2.29", + "fs-extra": "9.0.0", + "getenv": "^1.0.0", + "glob": "7.1.6", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0", + "semver": "7.3.2", + "slugify": "^1.3.4" + } + }, + "node_modules/@expo/config-plugins": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-1.0.28.tgz", + "integrity": "sha512-i5SpC6U3LjRQlwi1xM4SRj8dR2Qm+0dykPo0GeesByB7IvT36AT1ZjI7VjecuoZ6yKbLpaa5tWvU3JGObxIPSw==", + "dependencies": { + "@expo/config-types": "^40.0.0-beta.2", + "@expo/configure-splash-screen": "0.3.4", + "@expo/image-utils": "0.3.13", + "@expo/json-file": "8.2.29", + "@expo/plist": "0.0.12", + "find-up": "~5.0.0", + "fs-extra": "9.0.0", + "getenv": "^1.0.0", + "glob": "7.1.6", + "resolve-from": "^5.0.0", + "slash": "^3.0.0", + "slugify": "^1.3.4", + "xcode": "^3.0.1", + "xml2js": "^0.4.23" + } + }, + "node_modules/@expo/config-types": { + "version": "40.0.0-beta.2", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-40.0.0-beta.2.tgz", + "integrity": "sha512-t9pHCQMXOP4nwd7LGXuHkLlFy0JdfknRSCAeVF4Kw2/y+5OBbR9hW9ZVnetpBf0kORrekgiI7K/qDaa3hh5+Qg==" + }, + "node_modules/@expo/configure-splash-screen": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@expo/configure-splash-screen/-/configure-splash-screen-0.3.4.tgz", + "integrity": "sha512-HsukM03X5/EXSucVsLN/oLqyFq/1jAjpADkgU1HLaezFpkr+TOquI6yDwdDp1450kcm891PE/SYJ+mCdPxzDLw==", + "dependencies": { + "color-string": "^1.5.3", + "commander": "^5.1.0", + "core-js": "^3.6.5", + "deep-equal": "^2.0.3", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "lodash": "^4.17.15", + "pngjs": "^5.0.0", + "xcode": "^3.0.0", + "xml-js": "^1.6.11" + }, + "bin": { + "configure-splash-screen": "build/index-cli.js", + "expo-splash-screen": "build/index-cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/image-utils": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.3.13.tgz", + "integrity": "sha512-BpKoFVJBjG9H5AU040Skrm3R2uDGpWXBU/4TivB5H10cyJphoJKp3GNJVPHYLOVc70OtAxjWDIhLMW6xsWfrgw==", + "dependencies": { + "@expo/spawn-async": "1.5.0", + "chalk": "^4.0.0", + "fs-extra": "9.0.0", + "getenv": "^1.0.0", + "jimp": "0.12.1", + "mime": "^2.4.4", + "node-fetch": "^2.6.0", + "parse-png": "^2.1.0", + "resolve-from": "^5.0.0", + "semver": "7.3.2", + "tempy": "0.3.0" + } + }, + "node_modules/@expo/json-file": { + "version": "8.2.29", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.2.29.tgz", + "integrity": "sha512-9C8XwpJiJN9fyClnnNDSTh034zJU9hon6MCUqbBa4dZYQN7OZ00KFZEpbtjy+FndE7YD+KagDxRD6O1HS5vU0g==", + "dependencies": { + "@babel/code-frame": "~7.10.4", + "fs-extra": "9.0.0", + "json5": "^1.0.1", + "write-file-atomic": "^2.3.0" + } + }, + "node_modules/@expo/json-file/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@expo/json-file/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/@expo/metro-config": { + "version": "0.1.64", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.1.64.tgz", + "integrity": "sha512-ooD+XOVGnKPIIZbyfVTvMeQ3p9HpRt4aNCehSM6H1ueQm8+IpVwrhw8sJjL5xr+FVxFqj0+Ga9DI8d0AXS8U4g==", + "dependencies": { + "@expo/config": "3.3.38", + "chalk": "^4.1.0", + "getenv": "^1.0.0", + "metro-react-native-babel-transformer": "^0.59.0" + } + }, + "node_modules/@expo/plist": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.0.12.tgz", + "integrity": "sha512-anGvLk58fxfeHY2PbtH79VxhrLDPGd+173pHYYXNg9HlfbrEVLI2Vo0ZBOrr/cYr7cgU5A/WNcMphRoO/KfYZQ==", + "dependencies": { + "base64-js": "^1.2.3", + "xmlbuilder": "^14.0.0", + "xmldom": "~0.5.0" + } + }, + "node_modules/@expo/plist/node_modules/xmlbuilder": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-14.0.0.tgz", + "integrity": "sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg==", + "engines": { + "node": ">=8.0" + } + }, + "node_modules/@expo/prebuild-config": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-2.0.3.tgz", + "integrity": "sha512-ruZHhdEB0nv7mHwssUFXeYeGQ8Atfeben0CdO461cmjQ/CwxmlusrkFdGfMucj5CocR9WujBr/nIMvfm4FIDIA==", + "dependencies": { + "@expo/config": "5.0.3", + "@expo/config-plugins": "3.0.3", + "@expo/config-types": "^41.0.0", + "@expo/image-utils": "~0.3.14", + "@expo/json-file": "^8.2.30", + "debug": "^4.3.1", + "fs-extra": "^9.0.0", + "resolve-from": "^5.0.0" + } + }, + "node_modules/@expo/prebuild-config/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@expo/prebuild-config/node_modules/@expo/config": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-5.0.3.tgz", + "integrity": "sha512-FMv2Jk/v3QZXaNN/mGKqj3wLvsbAa1RjtSTNhJ7QxMiSLl6vlmfMutmKyBiuzk2KDCbELR65JkDf15m4sAZCGg==", + "dependencies": { + "@babel/core": "7.9.0", + "@babel/plugin-proposal-class-properties": "~7.12.13", + "@babel/preset-env": "~7.12.13", + "@babel/preset-typescript": "~7.12.13", + "@expo/config-plugins": "3.0.3", + "@expo/config-types": "^41.0.0", + "@expo/json-file": "8.2.30", + "fs-extra": "9.0.0", + "getenv": "^1.0.0", + "glob": "7.1.6", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0", + "semver": "7.3.2", + "slugify": "^1.3.4" + } + }, + "node_modules/@expo/prebuild-config/node_modules/@expo/config-plugins": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-3.0.3.tgz", + "integrity": "sha512-+DWHd/2L3O+njVercxGSzcBUXMm5CSzdvIK+7dU+FRhoiF57y2NzBhfNQcReYx/EY1coBrYOsMtENPhV1tWoWQ==", + "dependencies": { + "@expo/config-types": "^41.0.0", + "@expo/json-file": "8.2.30", + "@expo/plist": "0.0.13", + "debug": "^4.3.1", + "find-up": "~5.0.0", + "fs-extra": "9.0.0", + "getenv": "^1.0.0", + "glob": "7.1.6", + "resolve-from": "^5.0.0", + "slash": "^3.0.0", + "xcode": "^3.0.1", + "xml2js": "^0.4.23" + } + }, + "node_modules/@expo/prebuild-config/node_modules/@expo/config-types": { + "version": "41.0.0", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-41.0.0.tgz", + "integrity": "sha512-Ax0pHuY5OQaSrzplOkT9DdpdmNzaVDnq9VySb4Ujq7UJ4U4jriLy8u93W98zunOXpcu0iiKubPsqD6lCiq0pig==" + }, + "node_modules/@expo/prebuild-config/node_modules/@expo/image-utils": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.3.14.tgz", + "integrity": "sha512-n+JkLZ71CWuNKLVVsPTzMGRwmbeKiVQw/2b99Ro7znCKzJy3tyE5T2C6WBvYh/5h/hjg8TqEODjXXWucRIzMXA==", + "dependencies": { + "@expo/spawn-async": "1.5.0", + "chalk": "^4.0.0", + "fs-extra": "9.0.0", + "getenv": "^1.0.0", + "jimp": "0.12.1", + "mime": "^2.4.4", + "node-fetch": "^2.6.0", + "parse-png": "^2.1.0", + "resolve-from": "^5.0.0", + "semver": "7.3.2", + "tempy": "0.3.0" + } + }, + "node_modules/@expo/prebuild-config/node_modules/@expo/json-file": { + "version": "8.2.30", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.2.30.tgz", + "integrity": "sha512-vrgGyPEXBoFI5NY70IegusCSoSVIFV3T3ry4tjJg1MFQKTUlR7E0r+8g8XR6qC705rc2PawaZQjqXMAVtV6s2A==", + "dependencies": { + "@babel/code-frame": "~7.10.4", + "fs-extra": "9.0.0", + "json5": "^1.0.1", + "write-file-atomic": "^2.3.0" + } + }, + "node_modules/@expo/prebuild-config/node_modules/@expo/plist": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.0.13.tgz", + "integrity": "sha512-zGPSq9OrCn7lWvwLLHLpHUUq2E40KptUFXn53xyZXPViI0k9lbApcR9KlonQZ95C+ELsf0BQ3gRficwK92Ivcw==", + "dependencies": { + "base64-js": "^1.2.3", + "xmlbuilder": "^14.0.0", + "xmldom": "~0.5.0" + } + }, + "node_modules/@expo/prebuild-config/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/@expo/prebuild-config/node_modules/xmlbuilder": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-14.0.0.tgz", + "integrity": "sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg==", + "engines": { + "node": ">=8.0" + } + }, + "node_modules/@expo/spawn-async": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.5.0.tgz", + "integrity": "sha512-LB7jWkqrHo+5fJHNrLAFdimuSXQ2MQ4lA7SQW5bf/HbsXuV2VrT/jN/M8f/KoWt0uJMGN4k/j7Opx4AvOOxSew==", + "dependencies": { + "cross-spawn": "^6.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@expo/vector-icons": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-12.0.4.tgz", + "integrity": "sha512-/EFbXri7jZmqj1jTY6wpauvMN0DY0Epic003d43yWqrScLlVERaxXrOR07BNuCZvVMHBAzXN4VbOzUUUTq6j8g==", + "dependencies": { + "lodash.frompairs": "^4.0.1", + "lodash.isequal": "^4.5.0", + "lodash.isstring": "^4.0.1", + "lodash.omit": "^4.5.0", + "lodash.pick": "^4.4.0", + "lodash.template": "^4.5.0" + } + }, + "node_modules/@expo/websql": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@expo/websql/-/websql-1.0.1.tgz", + "integrity": "sha1-//DPnBuqH3D54dZYt8OaQg2bEKk=", + "dependencies": { + "argsarray": "^0.0.1", + "immediate": "^3.2.2", + "noop-fn": "^1.0.0", + "pouchdb-collections": "^1.0.1", + "tiny-queue": "^0.2.1" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz", + "integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==" + }, + "node_modules/@hapi/topo": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.0.0.tgz", + "integrity": "sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true + }, + "node_modules/@ide/backoff": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@ide/backoff/-/backoff-1.0.0.tgz", + "integrity": "sha512-F0YfUDjvT+Mtt/R4xdl2X0EYCHMMiJqNLdxHD++jDT5ydEFIyqbCHh51Qx2E211dgZprPKhV7sHmnXKpLuvc5g==" + }, + "node_modules/@jest/create-cache-key-function": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-26.6.2.tgz", + "integrity": "sha512-LgEuqU1f/7WEIPYqwLPIvvHuc1sB6gMVbT6zWhin3txYUNYK/kGQrC1F2WR4gR34YlI9bBtViTm5z98RqVZAaw==", + "dependencies": { + "@jest/types": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "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" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jimp/bmp": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.12.1.tgz", + "integrity": "sha512-t16IamuBMv4GiGa1VAMzsgrVKVANxXG81wXECzbikOUkUv7pKJ2vHZDgkLBEsZQ9sAvFCneM1+yoSRpuENrfVQ==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1", + "bmp-js": "^0.1.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/core": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.12.1.tgz", + "integrity": "sha512-mWfjExYEjHxBal+1gPesGChOQBSpxO7WUQkrO9KM7orboitOdQ15G5UA75ce7XVZ+5t+FQPOLmVkVZzzTQSEJA==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1", + "any-base": "^1.1.0", + "buffer": "^5.2.0", + "exif-parser": "^0.1.12", + "file-type": "^9.0.0", + "load-bmfont": "^1.3.1", + "mkdirp": "^0.5.1", + "phin": "^2.9.1", + "pixelmatch": "^4.0.2", + "tinycolor2": "^1.4.1" + } + }, + "node_modules/@jimp/custom": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.12.1.tgz", + "integrity": "sha512-bVClp8FEJ/11GFTKeRTrfH7NgUWvVO5/tQzO/68aOwMIhbz9BOYQGh533K9+mSy29VjZJo8jxZ0C9ZwYHuFwfA==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/core": "^0.12.1" + } + }, + "node_modules/@jimp/gif": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.12.1.tgz", + "integrity": "sha512-cGn/AcvMGUGcqR6ByClGSnrja4AYmTwsGVXTQ1+EmfAdTiy6ztGgZCTDpZ/tq4SpdHXwm9wDHez7damKhTrH0g==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1", + "omggif": "^1.0.9" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/jpeg": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.12.1.tgz", + "integrity": "sha512-UoCUHbKLj2CDCETd7LrJnmK/ExDsSfJXmc1pKkfgomvepjXogdl2KTHf141wL6D+9CfSD2VBWQLC5TvjMvcr9A==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1", + "jpeg-js": "^0.4.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-blit": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.12.1.tgz", + "integrity": "sha512-VRBB6bx6EpQuaH0WX8ytlGNqUQcmuxXBbzL3e+cD0W6MluYibzQy089okvXcyUS72Q+qpSMmUDCVr3pDqLAsSA==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-blur": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.12.1.tgz", + "integrity": "sha512-rTFY0yrwVJFNgNsAlYGn2GYCRLVEcPQ6cqAuhNylXuR/7oH3Acul+ZWafeKtvN8D8uMlth/6VP74gruXvwffZw==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-circle": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.12.1.tgz", + "integrity": "sha512-+/OiBDjby7RBbQoDX8ZsqJRr1PaGPdTaaKUVGAsrE7KCNO9ODYNFAizB9lpidXkGgJ4Wx5R4mJy21i22oY/a4Q==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-color": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.12.1.tgz", + "integrity": "sha512-xlnK/msWN4uZ+Bu7+UrCs9oMzTSA9QE0jWFnF3h0aBsD8t1LGxozkckHe8nHtC/y/sxIa8BGKSfkiaW+r6FbnA==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1", + "tinycolor2": "^1.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-contain": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.12.1.tgz", + "integrity": "sha512-WZ/D6G0jhnBh2bkBh610PEh/caGhAUIAxYLsQsfSSlOxPsDhbj3S6hMbFKRgnDvf0hsd5zTIA0j1B0UG4kh18A==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5", + "@jimp/plugin-scale": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-cover": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.12.1.tgz", + "integrity": "sha512-ddWwTQO40GcabJ2UwUYCeuNxnjV4rBTiLprnjGMqAJCzdz3q3Sp20FkRf+H+E22k2v2LHss8dIOFOF4i6ycr9Q==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-crop": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5", + "@jimp/plugin-scale": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-crop": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.12.1.tgz", + "integrity": "sha512-CKjVkrNO8FDZKYVpMireQW4SgKBSOdF+Ip/1sWssHHe77+jGEKqOjhYju+VhT3dZJ3+75rJNI9II7Kethp+rTw==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-displace": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.12.1.tgz", + "integrity": "sha512-MQAw2iuf1/bVJ6P95WWTLA+WBjvIZ7TeGBerkvBaTK8oWdj+NSLNRIYOIoyPbZ7DTL8f1SN4Vd6KD6BZaoWrwg==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-dither": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.12.1.tgz", + "integrity": "sha512-mCrBHdx2ViTLJDLcrobqGLlGhZF/Mq41bURWlElQ2ArvrQ3/xR52We9DNDfC08oQ2JVb6q3v1GnCCdn0KNojGQ==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-fisheye": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.12.1.tgz", + "integrity": "sha512-CHvYSXtHNplzkkYzB44tENPDmvfUHiYCnAETTY+Hx58kZ0w8ERZ+OiLhUmiBcvH/QHm/US1iiNjgGUAfeQX6dg==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-flip": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.12.1.tgz", + "integrity": "sha512-xi+Yayrnln8A/C9E3yQBExjxwBSeCkt/ZQg1CxLgszVyX/3Zo8+nkV8MJYpkTpj8LCZGTOKlsE05mxu/a3lbJQ==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-rotate": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-gaussian": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.12.1.tgz", + "integrity": "sha512-7O6eKlhL37hsLfV6WAX1Cvce7vOqSwL1oWbBveC1agutDlrtvcTh1s2mQ4Pde654hCJu55mq1Ur10+ote5j3qw==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-invert": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.12.1.tgz", + "integrity": "sha512-JTAs7A1Erbxwl+7ph7tgcb2PZ4WzB+3nb2WbfiWU8iCrKj17mMDSc5soaCCycn8wfwqvgB1vhRfGpseOLWxsuQ==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-mask": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.12.1.tgz", + "integrity": "sha512-bnDdY0RO/x5Mhqoy+056SN1wEj++sD4muAKqLD2CIT8Zq5M/0TA4hkdf/+lwFy3H2C0YTK39PSE9xyb4jPX3kA==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-normalize": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.12.1.tgz", + "integrity": "sha512-4kSaI4JLM/PNjHwbnAHgyh51V5IlPfPxYvsZyZ1US32pebWtocxSMaSuOaJUg7OGSkwSDBv81UR2h5D+Dz1b5A==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-print": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.12.1.tgz", + "integrity": "sha512-T0lNS3qU9SwCHOEz7AGrdp50+gqiWGZibOL3350/X/dqoFs1EvGDjKVeWncsGCyLlpfd7M/AibHZgu8Fx2bWng==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1", + "load-bmfont": "^1.4.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-resize": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.12.1.tgz", + "integrity": "sha512-sbNn4tdBGcgGlPt9XFxCuDl4ZOoxa8/Re8nAikyxYhRss2Dqz91ARbBQxOf1vlUGeicQMsjEuWbPQAogTSJRug==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-rotate": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.12.1.tgz", + "integrity": "sha512-RYkLzwG2ervG6hHy8iepbIVeWdT1kz4Qz044eloqo6c66MK0KAqp228YI8+CAKm0joQnVDC/A0FgRIj/K8uyAw==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5", + "@jimp/plugin-crop": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-scale": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.12.1.tgz", + "integrity": "sha512-zjNVI1fUj+ywfG78T1ZU33g9a5sk4rhEQkkhtny8koAscnVsDN2YaZEKoFli54kqaWh5kSS5DDL7a/9pEfXnFQ==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-shadow": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.12.1.tgz", + "integrity": "sha512-Z82IwvunXWQ2jXegd3W3TYUXpfJcEvNbHodr7Z+oVnwhM1OoQ5QC6RSRQwsj2qXIhbGffQjH8eguHgEgAV+u5w==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blur": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-threshold": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.12.1.tgz", + "integrity": "sha512-PFezt5fSk0q+xKvdpuv0eLggy2I7EgYotrK8TRZOT0jimuYFXPF0Z514c6szumoW5kEsRz04L1HkPT1FqI97Yg==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-color": ">=0.8.0", + "@jimp/plugin-resize": ">=0.8.0" + } + }, + "node_modules/@jimp/plugins": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.12.1.tgz", + "integrity": "sha512-7+Yp29T6BbYo+Oqnc+m7A5AH+O+Oy5xnxvxlfmsp48+SuwEZ4akJp13Gu2PSmRlylENzR7MlWOxzhas5ERNlIg==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/plugin-blit": "^0.12.1", + "@jimp/plugin-blur": "^0.12.1", + "@jimp/plugin-circle": "^0.12.1", + "@jimp/plugin-color": "^0.12.1", + "@jimp/plugin-contain": "^0.12.1", + "@jimp/plugin-cover": "^0.12.1", + "@jimp/plugin-crop": "^0.12.1", + "@jimp/plugin-displace": "^0.12.1", + "@jimp/plugin-dither": "^0.12.1", + "@jimp/plugin-fisheye": "^0.12.1", + "@jimp/plugin-flip": "^0.12.1", + "@jimp/plugin-gaussian": "^0.12.1", + "@jimp/plugin-invert": "^0.12.1", + "@jimp/plugin-mask": "^0.12.1", + "@jimp/plugin-normalize": "^0.12.1", + "@jimp/plugin-print": "^0.12.1", + "@jimp/plugin-resize": "^0.12.1", + "@jimp/plugin-rotate": "^0.12.1", + "@jimp/plugin-scale": "^0.12.1", + "@jimp/plugin-shadow": "^0.12.1", + "@jimp/plugin-threshold": "^0.12.1", + "timm": "^1.6.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/png": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.12.1.tgz", + "integrity": "sha512-tOUSJMJzcMAN82F9/Q20IToquIVWzvOe/7NIpVQJn6m+Lq6TtVmd7d8gdcna9AEFm2FIza5lhq2Kta6Xj0KXhQ==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1", + "pngjs": "^3.3.3" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/png/node_modules/pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@jimp/tiff": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.12.1.tgz", + "integrity": "sha512-bzWDgv3202TKhaBGzV9OFF0PVQWEb4194h9kv5js348SSnbCusz/tzTE1EwKrnbDZThZPgTB1ryKs7D+Q9Mhmg==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "utif": "^2.0.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/types": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.12.1.tgz", + "integrity": "sha512-hg5OKXpWWeKGuDrfibrjWWhr7hqb7f552wqnPWSLQpVrdWgjH+hpOv6cOzdo9bsU78qGTelZJPxr0ERRoc+MhQ==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/bmp": "^0.12.1", + "@jimp/gif": "^0.12.1", + "@jimp/jpeg": "^0.12.1", + "@jimp/png": "^0.12.1", + "@jimp/tiff": "^0.12.1", + "timm": "^1.6.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/utils": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.12.1.tgz", + "integrity": "sha512-EjPkDQOzV/oZfbolEUgFT6SE++PtCccVBvjuACkttyCfl0P2jnpR49SwstyVLc2u8AwBAZEHHAw9lPYaMjtbXQ==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "regenerator-runtime": "^0.13.3" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@react-native-async-storage/async-storage": { + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.15.4.tgz", + "integrity": "sha512-pC0MS6UBuv/YiVAxtzi7CgUed8oCQNYMtGt0yb/I9fI/BWTiJK5cj4YtW2XtL95K5IuvPX/6uGWaouZ8KqXwdg==", + "dependencies": { + "deep-assign": "^3.0.0" + }, + "peerDependencies": { + "react-native": "^0.60.6 || ^0.61.5 || ^0.62.2 || ^0.63.2 || ^0.64.0 || 1000.0.0" + } + }, + "node_modules/@react-native-community/cli-debugger-ui": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-5.0.1.tgz", + "integrity": "sha512-5gGKaaXYOVE423BUqxIfvfAVSj5Cg1cU/TpGbeg/iqpy2CfqyWqJB3tTuVUbOOiOvR5wbU8tti6pIi1pchJ+oA==", + "dependencies": { + "serve-static": "^1.13.1" + } + }, + "node_modules/@react-native-community/cli-hermes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-5.0.1.tgz", + "integrity": "sha512-nD+ZOFvu5MfjLB18eDJ01MNiFrzj8SDtENjGpf0ZRFndOWASDAmU54/UlU/wj8OzTToK1+S1KY7j2P2M1gleww==", + "dependencies": { + "@react-native-community/cli-platform-android": "^5.0.1", + "@react-native-community/cli-tools": "^5.0.1", + "chalk": "^3.0.0", + "hermes-profile-transformer": "^0.0.6", + "ip": "^1.1.5" + } + }, + "node_modules/@react-native-community/cli-hermes/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-hermes/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-hermes/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@react-native-community/cli-hermes/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@react-native-community/cli-hermes/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-hermes/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-android": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-5.0.1.tgz", + "integrity": "sha512-qv9GJX6BJ+Y4qvV34vgxKwwN1cnveXUdP6y2YmTW7XoAYs5YUzKqHajpY58EyucAL2y++6+573t5y4U/9IIoww==", + "dependencies": { + "@react-native-community/cli-tools": "^5.0.1", + "chalk": "^3.0.0", + "execa": "^1.0.0", + "fs-extra": "^8.1.0", + "glob": "^7.1.3", + "jetifier": "^1.6.2", + "lodash": "^4.17.15", + "logkitty": "^0.7.1", + "slash": "^3.0.0", + "xmldoc": "^1.1.2" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@react-native-community/cli-platform-ios": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-5.0.1.tgz", + "integrity": "sha512-Nr/edBEYJfElgBNvjDevs2BuDicsvQaM8nYkTGgp33pyuCZRBxsYxQqfsNmnLalTzcYaebjWj6AnjUSxzQBWqg==", + "dependencies": { + "@react-native-community/cli-tools": "^5.0.1", + "chalk": "^3.0.0", + "glob": "^7.1.3", + "js-yaml": "^3.13.1", + "lodash": "^4.17.15", + "plist": "^3.0.1", + "xcode": "^2.0.0" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/xcode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/xcode/-/xcode-2.1.0.tgz", + "integrity": "sha512-uCrmPITrqTEzhn0TtT57fJaNaw8YJs1aCzs+P/QqxsDbvPZSv7XMPPwXrKvHtD6pLjBM/NaVwraWJm8q83Y4iQ==", + "dependencies": { + "simple-plist": "^1.0.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@react-native-community/cli-server-api": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-5.0.1.tgz", + "integrity": "sha512-OOxL+y9AOZayQzmSW+h5T54wQe+QBc/f67Y9QlWzzJhkKJdYx+S4VOooHoD5PFJzGbYaxhu2YF17p517pcEIIA==", + "dependencies": { + "@react-native-community/cli-debugger-ui": "^5.0.1", + "@react-native-community/cli-tools": "^5.0.1", + "compression": "^1.7.1", + "connect": "^3.6.5", + "errorhandler": "^1.5.0", + "nocache": "^2.1.0", + "pretty-format": "^26.6.2", + "serve-static": "^1.13.1", + "ws": "^1.1.0" + } + }, + "node_modules/@react-native-community/cli-server-api/node_modules/ws": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "dependencies": { + "options": ">=0.0.5", + "ultron": "1.0.x" + } + }, + "node_modules/@react-native-community/cli-tools": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-5.0.1.tgz", + "integrity": "sha512-XOX5w98oSE8+KnkMZZPMRT7I5TaP8fLbDl0tCu40S7Epz+Zz924n80fmdu6nUDIfPT1nV6yH1hmHmWAWTDOR+Q==", + "dependencies": { + "chalk": "^3.0.0", + "lodash": "^4.17.15", + "mime": "^2.4.1", + "node-fetch": "^2.6.0", + "open": "^6.2.0", + "shell-quote": "1.6.1" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@react-native-community/cli-tools/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-types": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-5.0.1.tgz", + "integrity": "sha512-BesXnuFFlU/d1F3+sHhvKt8fUxbQlAbZ3hhMEImp9A6sopl8TEtryUGJ1dbazGjRXcADutxvjwT/i3LJVTIQug==", + "dependencies": { + "ora": "^3.4.0" + } + }, + "node_modules/@react-native-community/eslint-config": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@react-native-community/eslint-config/-/eslint-config-3.0.1.tgz", + "integrity": "sha512-h0MRsaHkyfoQjEiTjG3a+Ie/p6AmQNAHXpYrVhtYMZNRF26TCwNOsQNp4/13QhKAq6vhS8EJppge0P43GnPmfQ==", + "dev": true, + "dependencies": { + "@react-native-community/eslint-plugin": "^1.1.0", + "@typescript-eslint/eslint-plugin": "^4.22.1", + "@typescript-eslint/parser": "^4.22.1", + "babel-eslint": "^10.1.0", + "eslint-config-prettier": "^6.10.1", + "eslint-plugin-eslint-comments": "^3.1.2", + "eslint-plugin-flowtype": "2.50.3", + "eslint-plugin-jest": "22.4.1", + "eslint-plugin-prettier": "3.1.2", + "eslint-plugin-react": "^7.20.0", + "eslint-plugin-react-hooks": "^4.0.7", + "eslint-plugin-react-native": "^3.10.0", + "prettier": "^2.0.2" + }, + "peerDependencies": { + "eslint": ">=7", + "prettier": ">=2" + } + }, + "node_modules/@react-native-community/eslint-plugin": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@react-native-community/eslint-plugin/-/eslint-plugin-1.1.0.tgz", + "integrity": "sha512-W/J0fNYVO01tioHjvYWQ9m6RgndVtbElzYozBq1ZPrHO/iCzlqoySHl4gO/fpCl9QEFjvJfjPgtPMTMlsoq5DQ==", + "dev": true + }, + "node_modules/@react-native-community/masked-view": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/@react-native-community/masked-view/-/masked-view-0.1.10.tgz", + "integrity": "sha512-rk4sWFsmtOw8oyx8SD3KSvawwaK7gRBSEIy2TAwURyGt+3TizssXP1r8nx3zY+R7v2vYYHXZ+k2/GULAT/bcaQ==", + "peerDependencies": { + "react": "^16.0", + "react-native": ">=0.57" + } + }, + "node_modules/@react-native-community/netinfo": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/netinfo/-/netinfo-6.0.0.tgz", + "integrity": "sha512-Z9M8VGcF2IZVOo2x+oUStvpCW/8HjIRi4+iQCu5n+PhC7OqCQX58KYAzdBr///alIfRXiu6oMb+lK+rXQH1FvQ==", + "peerDependencies": { + "react-native": ">=0.59" + } + }, + "node_modules/@react-native-community/slider": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@react-native-community/slider/-/slider-3.0.3.tgz", + "integrity": "sha512-8IeHfDwJ9/CTUwFs6x90VlobV3BfuPgNLjTgC6dRZovfCWigaZwVNIFFJnHBakK3pW2xErAPwhdvNR4JeNoYbw==", + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/@react-native/assets": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@react-native/assets/-/assets-1.0.0.tgz", + "integrity": "sha512-KrwSpS1tKI70wuKl68DwJZYEvXktDHdZMG0k2AXD/rJVSlB23/X2CB2cutVR0HwNMJIal9HOUOBB2rVfa6UGtQ==" + }, + "node_modules/@react-native/normalize-color": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-1.0.0.tgz", + "integrity": "sha512-xUNRvNmCl3UGCPbbHvfyFMnpvLPoOjDCcp5bT9m2k+TF/ZBklEQwhPZlkrxRx2NhgFh1X3a5uL7mJ7ZR+8G7Qg==" + }, + "node_modules/@react-native/polyfills": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@react-native/polyfills/-/polyfills-1.0.0.tgz", + "integrity": "sha512-0jbp4RxjYopTsIdLl+/Fy2TiwVYHy4mgeu07DG4b/LyM0OS/+lPP5c9sbnt/AMlnF6qz2JRZpPpGw1eMNS6A4w==" + }, + "node_modules/@react-navigation/core": { + "version": "5.15.3", + "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-5.15.3.tgz", + "integrity": "sha512-3ZdyDInh8qg1kygCNkmh9lFgpDf29lTvPsaMe2mm/qvmxLKSgttWBz07P2fc181aV9jTdgQpzYfWZ5KWT036zw==", + "dependencies": { + "@react-navigation/routers": "^5.7.2", + "escape-string-regexp": "^4.0.0", + "nanoid": "^3.1.15", + "query-string": "^6.13.6", + "react-is": "^16.13.0" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/@react-navigation/material-bottom-tabs": { + "version": "5.3.15", + "resolved": "https://registry.npmjs.org/@react-navigation/material-bottom-tabs/-/material-bottom-tabs-5.3.15.tgz", + "integrity": "sha512-SpCSJxnDqN1a8oHNm3oTt3OYulDEPbeWP1FGwb9zeXW8El2kgwD+69D4KhnUNLYVSKNLu9HadgFOrG3ezp4HPQ==", + "peerDependencies": { + "@react-navigation/native": "^5.0.5", + "react": "*", + "react-native": "*", + "react-native-paper": ">= 3.0.0", + "react-native-vector-icons": ">= 6.0.0" + } + }, + "node_modules/@react-navigation/native": { + "version": "5.9.4", + "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-5.9.4.tgz", + "integrity": "sha512-BUCrOXfZDdKWBqM8OhOKQhCX5we4HUo5XG6tCQtVqQAep+7UcApZmMUuemUXDxVe8NPESUpoUlB0RaEpyIdfTQ==", + "dependencies": { + "@react-navigation/core": "^5.15.3", + "escape-string-regexp": "^4.0.0", + "nanoid": "^3.1.15" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/@react-navigation/routers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-5.7.2.tgz", + "integrity": "sha512-BxNSMLHpU+oS37Xok0ql6rc9U7IC8aUD4+U5ZPbjDJ0pwzZxGGh0YOEBzfV4k/Ig3cbPdvVWbc1C9HHbCVr2oQ==", + "dependencies": { + "nanoid": "^3.1.15" + } + }, + "node_modules/@react-navigation/stack": { + "version": "5.14.4", + "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-5.14.4.tgz", + "integrity": "sha512-gQjWK8JHtVkD1p7wzjtSPuScJI0mSAk/N/gzgjQZo+rDUwgM8rOTDcVNRbtEOqCEgLQcZrZQHwhOjkrJirehjQ==", + "dependencies": { + "color": "^3.1.3", + "react-native-iphone-x-helper": "^1.3.0" + }, + "peerDependencies": { + "@react-native-community/masked-view": ">= 0.1.0", + "@react-navigation/native": "^5.0.5", + "react": "*", + "react-native": "*", + "react-native-gesture-handler": ">= 1.0.0", + "react-native-safe-area-context": ">= 0.6.0", + "react-native-screens": ">= 2.0.0-alpha.0 || >= 2.0.0-beta.0 || >= 2.0.0" + } + }, + "node_modules/@sideway/address": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.2.tgz", + "integrity": "sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", + "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/hammerjs": { + "version": "2.0.39", + "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.39.tgz", + "integrity": "sha512-lYR2Y/tV2ujpk/WyUc7S0VLI0a9hrtVIN9EwnrNo5oSEJI2cK2/XrgwOQmXLL3eTulOESvh9qP6si9+DWM9cOA==" + }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", + "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.0.1.tgz", + "integrity": "sha512-TMkXt0Ck1y0KKsGr9gJtWGjttxlZnnvDtphxUOSd0bfaR6Q1jle+sPvrzNR1urqYTWMinoKvjKfXUGsumaO1PA==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.3", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", + "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" + }, + "node_modules/@types/react": { + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.4.tgz", + "integrity": "sha512-onz2BqScSFMoTRdJUZUDD/7xrusM8hBA2Fktk2qgaTYPCgPvWnDEgkrOs8hhPUf2jfcIXkJ5yK6VfYormJS3Jw==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-redux": { + "version": "7.1.16", + "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.16.tgz", + "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" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz", + "integrity": "sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==" + }, + "node_modules/@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", + "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.32.0.tgz", + "integrity": "sha512-+OWTuWRSbWI1KDK8iEyG/6uK2rTm3kpS38wuVifGUTDB6kjEuNrzBI1MUtxnkneuWG/23QehABe2zHHrj+4yuA==", + "dev": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "4.32.0", + "@typescript-eslint/scope-manager": "4.32.0", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^4.0.0", + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.32.0.tgz", + "integrity": "sha512-WLoXcc+cQufxRYjTWr4kFt0DyEv6hDgSaFqYhIzQZ05cF+kXfqXdUh+//kgquPJVUBbL3oQGKQxwPbLxHRqm6A==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.32.0", + "@typescript-eslint/types": "4.32.0", + "@typescript-eslint/typescript-estree": "4.32.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.32.0.tgz", + "integrity": "sha512-lhtYqQ2iEPV5JqV7K+uOVlPePjClj4dOw7K4/Z1F2yvjIUvyr13yJnDzkK6uon4BjHYuHy3EG0c2Z9jEhFk56w==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "4.32.0", + "@typescript-eslint/types": "4.32.0", + "@typescript-eslint/typescript-estree": "4.32.0", + "debug": "^4.3.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.32.0.tgz", + "integrity": "sha512-DK+fMSHdM216C0OM/KR1lHXjP1CNtVIhJ54kQxfOE6x8UGFAjha8cXgDMBEIYS2XCYjjCtvTkjQYwL3uvGOo0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.32.0", + "@typescript-eslint/visitor-keys": "4.32.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.32.0.tgz", + "integrity": "sha512-LE7Z7BAv0E2UvqzogssGf1x7GPpUalgG07nGCBYb1oK4mFsOiFC/VrSMKbZQzFJdN2JL5XYmsx7C7FX9p9ns0w==", + "dev": true, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.32.0.tgz", + "integrity": "sha512-tRYCgJ3g1UjMw1cGG8Yn1KzOzNlQ6u1h9AmEtPhb5V5a1TmiHWcRyF/Ic+91M4f43QeChyYlVTcf3DvDTZR9vw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.32.0", + "@typescript-eslint/visitor-keys": "4.32.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.32.0.tgz", + "integrity": "sha512-e7NE0qz8W+atzv3Cy9qaQ7BTLwWsm084Z0c4nIO2l3Bp6u9WIgdqCgyPyV5oSPDMIW3b20H59OOCmVk3jw3Ptw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.32.0", + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@unimodules/core": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@unimodules/core/-/core-7.1.0.tgz", + "integrity": "sha512-oLRT4Bkah3GEopkxmTgpHsRTRp+NJ1907ZjE9y/HLh32q7O/3mcbpY77Uvm+EXW0Vh14gOlU+bmkpC0hz3we0w==", + "dependencies": { + "compare-versions": "^3.4.0" + } + }, + "node_modules/@unimodules/react-native-adapter": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-6.2.2.tgz", + "integrity": "sha512-hBXL+IX3u+4TcAHu9lIItdycA7pYWZn3Tt7s5TTna9QKHjyrwo0zVss27LkpJ40tXRHyh/GJ8VzN2CD+0M5I2A==", + "dependencies": { + "invariant": "^2.2.4" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/absolute-path": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/absolute-path/-/absolute-path-0.0.0.tgz", + "integrity": "sha1-p4di+9rftSl76ZsV01p4Wy8JW/c=" + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/anser": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", + "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==" + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-fragments": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", + "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", + "dependencies": { + "colorette": "^1.0.7", + "slice-ansi": "^2.0.0", + "strip-ansi": "^5.0.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/any-base": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", + "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==" + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/appdirsjs": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.4.tgz", + "integrity": "sha512-WO5StDORR6JF/xYnXk/Fm0yu+iULaV5ULKuUw0Tu+jbgiTlSquaWBCgbpnsHLMXldf+fM3Gxn5p7vjond7He6w==" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/argsarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/argsarray/-/argsarray-0.0.1.tgz", + "integrity": "sha1-bnIHtOzbObCviDA/pa4ivajfYcs=" + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-filter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", + "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=" + }, + "node_modules/array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-includes": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", + "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "dev": true, + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=" + }, + "node_modules/array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", + "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "node_modules/assert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", + "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", + "dependencies": { + "es6-object-assign": "^1.1.0", + "is-nan": "^1.2.1", + "object-is": "^1.0.1", + "util": "^0.12.0" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ast-types": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", + "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz", + "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==", + "dependencies": { + "array-filter": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", + "dev": true, + "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" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "eslint": ">= 4.12.1" + } + }, + "node_modules/babel-eslint/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-module-resolver": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz", + "integrity": "sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA==", + "dependencies": { + "find-babel-config": "^1.1.0", + "glob": "^7.1.2", + "pkg-up": "^2.0.0", + "reselect": "^3.0.1", + "resolve": "^1.4.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz", + "integrity": "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==", + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.0", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz", + "integrity": "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.2.0", + "core-js-compat": "^3.9.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz", + "integrity": "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-react-native-web": { + "version": "0.13.18", + "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.13.18.tgz", + "integrity": "sha512-f8pAxyKqXBNRIh8l4Sqju055BNec+DQlItdtutByYxULU0iJ1F7evIYE3skPKAkTB/xJH17l+n3Z8dVabGIIGg==" + }, + "node_modules/babel-plugin-syntax-trailing-function-commas": { + "version": "7.0.0-beta.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", + "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==" + }, + "node_modules/babel-preset-expo": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-8.3.0.tgz", + "integrity": "sha512-KmoFiEJ0A8QUH0OTh+mj3RBvv069FQsQ1hvZDi6tVMSzrW+Y/imsJMXgVboZN+XGOYnWFaGEKQ8BqNvBX+zKjA==", + "dependencies": { + "@babel/plugin-proposal-decorators": "^7.6.0", + "@babel/preset-env": "^7.6.3", + "babel-plugin-module-resolver": "^3.2.0", + "babel-plugin-react-native-web": "~0.13.6", + "metro-react-native-babel-preset": "~0.59.0" + } + }, + "node_modules/babel-preset-fbjs": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.3.0.tgz", + "integrity": "sha512-7QTLTCd2gwB2qGoi5epSULMHugSVgpcVt5YAeiFO9ABLrutDQzKfGwzxgZHLpugq8qMdg/DhRZDZ5CLKxBkEbw==", + "dependencies": { + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-syntax-class-properties": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoped-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-member-expression-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-super": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-property-literals": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/badgin": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/badgin/-/badgin-1.2.2.tgz", + "integrity": "sha512-XtoSjNhy2D09qGiLhFWBJmBwBlmleQuwyYyjddWNCJ3gqGRBOBR25VGcd8CAOSghpEUmghB3LD4NpHrUG89zCg==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/big-integer": { + "version": "1.6.48", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", + "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/blueimp-md5": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.18.0.tgz", + "integrity": "sha512-vE52okJvzsVWhcgUHOv+69OG3Mdg151xyn41aVQN/5W5S+S43qZhxECtYLAEHMSFWX6Mv5IZrzj3T5+JqXfj5Q==" + }, + "node_modules/bmp-js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", + "integrity": "sha1-4Fpj95amwf8l9Hcex62twUjAcjM=" + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "node_modules/bplist-creator": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.8.tgz", + "integrity": "sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA==", + "dependencies": { + "stream-buffers": "~2.2.0" + } + }, + "node_modules/bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dependencies": { + "big-integer": "^1.6.44" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "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" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, + "node_modules/buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dependencies": { + "callsites": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dependencies": { + "caller-callsite": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "engines": { + "node": ">=4" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001219", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001219.tgz", + "integrity": "sha512-c0yixVG4v9KBc/tQ2rlbB3A/bgBFRvl8h8M4IeUbqCca4gsiCfvtaheUssbnux/Mb66Vjz7x8yYjDgYcNQOhyQ==" + }, + "node_modules/capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dependencies": { + "rsvp": "^4.8.4" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/chalk/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/chalk/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "node_modules/clamp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz", + "integrity": "sha1-ZqDmQBGBbjcZaCj9yMjBRzEshjQ=" + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-spinners": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", + "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", + "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "dependencies": { + "color-convert": "^1.9.1", + "color-string": "^1.5.4" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/color-string": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", + "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "node_modules/compare-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-urls/-/compare-urls-2.0.0.tgz", + "integrity": "sha512-eCJcWn2OYFEIqbm70ta7LQowJOOZZqq1a2YbbFCFI1uwSvj+TWMwXVn7vPR1ceFNcAIt5RSTDbwdlX82gYLTkA==", + "dependencies": { + "normalize-url": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/compare-versions": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==" + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-js": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.11.1.tgz", + "integrity": "sha512-k93Isqg7e4txZWMGNYwevZL9MiogLk8pd1PtwrmFmi8IBq4GXqUaVW/a33Llt6amSI36uSjd0GWwc9pTT9ALlQ==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.11.1.tgz", + "integrity": "sha512-aZ0e4tmlG/aOBHj92/TuOuZwp6jFvn1WNabU5VOVixzhu5t5Ao+JZkQOPlgNXu6ynwLrwJxklT4Gw1G1VGEh+g==", + "dependencies": { + "browserslist": "^4.16.5", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/create-react-class": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.7.0.tgz", + "integrity": "sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng==", + "dependencies": { + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } + }, + "node_modules/cross-fetch": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", + "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", + "dependencies": { + "node-fetch": "2.6.1" + } + }, + "node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "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" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/cross-spawn/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/css-in-js-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz", + "integrity": "sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA==", + "dependencies": { + "hyphenate-style-name": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "node_modules/css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dependencies": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "node_modules/css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "engines": { + "node": "*" + } + }, + "node_modules/csstype": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", + "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==" + }, + "node_modules/dayjs": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.5.tgz", + "integrity": "sha512-BUFis41ikLz+65iH6LHQCDm4YPMj5r1YFLdupPIyM4SGcXMmtiLQ7U37i+hGS8urIuqe7I/ou3IS1jVc4nbN4g==" + }, + "node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deep-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-3.0.0.tgz", + "integrity": "sha512-YX2i9XjJ7h5q/aQ/IM9PEwEnDqETAIYbggmdDB3HLTlSgo1CxPsj6pvhPG68rq6SVE0+p+6Ywsm5fTYNrYtBWw==", + "deprecated": "Check out `lodash.merge` or `merge-options` instead.", + "dependencies": { + "is-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deep-equal": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.5.tgz", + "integrity": "sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==", + "dependencies": { + "call-bind": "^1.0.0", + "es-get-iterator": "^1.1.1", + "get-intrinsic": "^1.0.1", + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.2", + "is-regex": "^1.1.1", + "isarray": "^2.0.5", + "object-is": "^1.1.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.3.0", + "side-channel": "^1.0.3", + "which-boxed-primitive": "^1.0.1", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", + "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=" + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "dependencies": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "node_modules/dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, + "node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "node_modules/domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "node_modules/electron-to-chromium": { + "version": "1.3.725", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.725.tgz", + "integrity": "sha512-2BbeAESz7kc6KBzs7WVrMc1BY5waUphk4D4DX5dSQXJhsc3tP5ZFaiyuL0AB7vUKzDYpIeYwTYlEfxyjsGUrhw==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "node_modules/envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-ex/node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "node_modules/error-stack-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", + "dependencies": { + "stackframe": "^1.1.1" + } + }, + "node_modules/errorhandler": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", + "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", + "dependencies": { + "accepts": "~1.3.7", + "escape-html": "~1.0.3" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-abstract": { + "version": "1.18.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.7.tgz", + "integrity": "sha512-uFG1gyVX91tZIiDWNmPsL8XNpiCk/6tkB7MZphoSJflS4w+KgWyQ2gjCVDnsPxFAo9WjRXG3eqONNYdfbJjAtw==", + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-string": "^1.0.7", + "object-inspect": "^1.11.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.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-get-iterator": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", + "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.0", + "has-symbols": "^1.0.1", + "is-arguments": "^1.1.0", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es6-object-assign": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=" + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "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", + "escape-string-regexp": "^4.0.0", + "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", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "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.merge": "^4.6.2", + "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.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", + "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", + "dev": true, + "dependencies": { + "get-stdin": "^6.0.0" + }, + "bin": { + "eslint-config-prettier-check": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=3.14.1" + } + }, + "node_modules/eslint-plugin-eslint-comments": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz", + "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5", + "ignore": "^5.0.5" + }, + "engines": { + "node": ">=6.5.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-eslint-comments/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-plugin-flowtype": { + "version": "2.50.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.3.tgz", + "integrity": "sha512-X+AoKVOr7Re0ko/yEXyM5SSZ0tazc6ffdIOocp2fFUlWoDt7DV0Bz99mngOkAFLOAWjqRA5jPwqUCbrx13XoxQ==", + "dev": true, + "dependencies": { + "lodash": "^4.17.10" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": ">=2.0.0" + } + }, + "node_modules/eslint-plugin-jest": { + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-22.4.1.tgz", + "integrity": "sha512-gcLfn6P2PrFAVx3AobaOzlIEevpAEf9chTpFZz7bYfc7pz8XRv7vuKTIE4hxPKZSha6XWKKplDQ0x9Pq8xX2mg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.2.tgz", + "integrity": "sha512-GlolCC9y3XZfv3RQfwGew7NnuFDKsfI4lbvRK+PIIo23SFH+LemGs4cKwzAaRa+Mdb+lQO/STaIayno8T5sJJA==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "eslint": ">= 5.0.0", + "prettier": ">= 1.13.0" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.26.0.tgz", + "integrity": "sha512-dceliS5itjk4EZdQYtLMz6GulcsasguIs+VTXuiC7Q5IPIdGTkyfXVdmsQOqEhlD9MciofH4cMcT1bw1WWNxCQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.3", + "array.prototype.flatmap": "^1.2.4", + "doctrine": "^2.1.0", + "estraverse": "^5.2.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.0.4", + "object.entries": "^1.1.4", + "object.fromentries": "^2.0.4", + "object.hasown": "^1.0.0", + "object.values": "^1.1.4", + "prop-types": "^15.7.2", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.5" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz", + "integrity": "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/eslint-plugin-react-native": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-native/-/eslint-plugin-react-native-3.11.0.tgz", + "integrity": "sha512-7F3OTwrtQPfPFd+VygqKA2VZ0f2fz0M4gJmry/TRE18JBb94/OtMxwbL7Oqwu7FGyrdeIOWnXQbBAveMcSTZIA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.7.4", + "eslint-plugin-react-native-globals": "^0.1.1" + }, + "peerDependencies": { + "eslint": "^3.17.0 || ^4 || ^5 || ^6 || ^7" + } + }, + "node_modules/eslint-plugin-react-native-globals": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-native-globals/-/eslint-plugin-react-native-globals-0.1.2.tgz", + "integrity": "sha512-9aEPf1JEpiTjcFAmmyw8eiIXmcNZOqaZyHO77wgm0/dWfT/oxC1SrIq8ET38pMxHYrcB6Uew+TzUVsBeczF88g==", + "dev": true + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/eslint/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/eslint/node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", + "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint/node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter2": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-1.0.5.tgz", + "integrity": "sha1-+YNhBRexc3wLncZDvsqTiTwE3xg=" + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/exec-sh": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", + "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==" + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "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" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/exif-parser": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", + "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=" + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/expo": { + "version": "41.0.1", + "resolved": "https://registry.npmjs.org/expo/-/expo-41.0.1.tgz", + "integrity": "sha512-Lk4Xdst+OfsLgBNeu89hxk0qFrZnHwwXFmBbJkYLlZkdC3tvNJ8jgGHsKg6jYpsnal/z0uVc+uk2ev91qXQykg==", + "dependencies": { + "@babel/runtime": "^7.1.2", + "@expo/metro-config": "^0.1.63", + "@expo/vector-icons": "^12.0.4", + "@unimodules/core": "~7.1.0", + "@unimodules/react-native-adapter": "~6.2.2", + "babel-preset-expo": "~8.3.0", + "cross-spawn": "^6.0.5", + "expo-application": "~3.1.2", + "expo-asset": "~8.3.1", + "expo-constants": "~10.1.3", + "expo-error-recovery": "~2.1.0", + "expo-file-system": "~11.0.2", + "expo-font": "~9.1.0", + "expo-keep-awake": "~9.1.2", + "fbemitter": "^2.1.1", + "invariant": "^2.2.2", + "md5-file": "^3.2.3", + "pretty-format": "^26.4.0", + "react-native-safe-area-context": "3.2.0", + "serialize-error": "^2.1.0", + "uuid": "^3.4.0" + }, + "bin": { + "expo": "bin/cli.js" + } + }, + "node_modules/expo-application": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/expo-application/-/expo-application-3.1.2.tgz", + "integrity": "sha512-JZcKUpGmqzQ1zLxRxUditGzPqnPCXY6JT/Pbq4nyV4VPzjDd8wihVPuud+cuv8gHgdj8QLvKs/lcJJqN94EX5Q==" + }, + "node_modules/expo-asset": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-8.3.2.tgz", + "integrity": "sha512-MKOwkkN0lnQRcOdn5moqkHPmLgFoUSIYyrvMAJ767vTXvLvZgoQgvBwqCAXsXitIwEitG0Az3XZ23SfKJpFbFg==", + "dependencies": { + "blueimp-md5": "^2.10.0", + "invariant": "^2.2.4", + "md5-file": "^3.2.3", + "path-browserify": "^1.0.0", + "url-parse": "^1.4.4" + } + }, + "node_modules/expo-constants": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-10.1.3.tgz", + "integrity": "sha512-Eq/xeshnhSoe4ok89d5lrHvI9jq3bMe1FhJUbiHVGcGmW8mGCotwbQBIfDkkMrAKnSOwQq/Qfyg0XBxnG2XFjw==", + "dependencies": { + "@expo/config": "^3.3.35", + "uuid": "^3.3.2" + } + }, + "node_modules/expo-document-picker": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/expo-document-picker/-/expo-document-picker-9.1.2.tgz", + "integrity": "sha512-I4xq90HZg3JML40AfUv1Uk/dTSRDd3Cy3qLV1P+wAiSudp54ockHMR1Pwow12WCtbihHW5DlHT0TU+fz5jJb7g==", + "dependencies": { + "@expo/config-plugins": "^1.0.18", + "uuid": "^3.3.2" + } + }, + "node_modules/expo-error-recovery": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/expo-error-recovery/-/expo-error-recovery-2.1.0.tgz", + "integrity": "sha512-N5g2QKtdNntUNGQVnB/tG1jHdtJP1+kLMWDS+7ZKRcKfulm3JX/M3l460fsEtqg84n/latxPkBT0yfKw2DSq+Q==" + }, + "node_modules/expo-file-system": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-11.0.2.tgz", + "integrity": "sha512-nodNvUVa+US4N4xnj5BFw8W9ZF/qCHJVC2t45cHWrBiwkVVxz45wjE7uSHUmkMWyWT7a/7AJuL3XJfYp7h90IQ==", + "dependencies": { + "@expo/config-plugins": "^1.0.18", + "uuid": "^3.4.0" + } + }, + "node_modules/expo-font": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-9.1.0.tgz", + "integrity": "sha512-owzbbfrQet7mawTGKMXpVCIA9k56MGhtriO41AW4Zo65dd2Ikm4LoymuHKp2ZlHuIFjRnjECKWz7RXgy/C1yAg==", + "dependencies": { + "fontfaceobserver": "^2.1.0" + } + }, + "node_modules/expo-haptics": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/expo-haptics/-/expo-haptics-10.0.0.tgz", + "integrity": "sha512-dfl4Fef22B8O49x5JEzILmAhathT14bkN0kic2FpuwssJDX/yZ/R2lD12Iu9XqxdgHAFQRjOSq3dFjrxDGkP6g==" + }, + "node_modules/expo-image-loader": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/expo-image-loader/-/expo-image-loader-2.1.1.tgz", + "integrity": "sha512-EeItNIsmw4g+FIb9S9AHE7FAWQkuiIguFMua/RQ2mFHKFZYa/BU32MGagY+e4LzasBVbDKWgd3NHO+EYC6XeEA==" + }, + "node_modules/expo-keep-awake": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-9.1.2.tgz", + "integrity": "sha512-CCuEOQUNLYtMA0rt0sQ9u5LlIMH7lDJG7dImoorfKMsP95yHXy8dl3oCdtaz2zbsPgggVYeom9gE+gQu+Ki4rQ==" + }, + "node_modules/expo-linear-gradient": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/expo-linear-gradient/-/expo-linear-gradient-9.1.0.tgz", + "integrity": "sha512-9W4TxaDrZUzmLzd18+Eo2Ef7ONnuLrHKX0PRyHEGY2/rJCtGiPJtJuR6AS5dkX7WB/Pxlx0zK/p/qDHHw09Uxg==" + }, + "node_modules/expo-linking": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-2.2.3.tgz", + "integrity": "sha512-1NqL8sY4EzwRPVnBxbvNKBCfsG/tNZm72tVwzjoLxhO0XA6VTtZcb72Jaku4IlqEyH0lejxV2YAU0rbLv1pAVA==", + "dependencies": { + "expo-constants": "~10.1.3", + "invariant": "^2.2.4", + "qs": "^6.5.0", + "url-parse": "^1.4.4" + } + }, + "node_modules/expo-notifications": { + "version": "0.11.6", + "resolved": "https://registry.npmjs.org/expo-notifications/-/expo-notifications-0.11.6.tgz", + "integrity": "sha512-skVEOHXKXrXBWofCQ/Zn7yKhAFA2EN0fd9mXqpkbF6nE4NKE7pn63gTWpyCy6sXC9M3YUal8yT0vp9GkD2FsmA==", + "dependencies": { + "@expo/config-plugins": "^1.0.18", + "@expo/image-utils": "^0.3.10", + "@ide/backoff": "^1.0.0", + "abort-controller": "^3.0.0", + "assert": "^2.0.0", + "badgin": "^1.1.5", + "expo-application": "~3.1.2", + "expo-constants": "10.1.3", + "fs-extra": "^9.0.1", + "unimodules-permissions-interface": "~6.1.0", + "uuid": "^3.4.0" + } + }, + "node_modules/expo-notifications/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/expo-notifications/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/expo-permissions": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/expo-permissions/-/expo-permissions-12.0.1.tgz", + "integrity": "sha512-TtypNPPLG4SdVEKBlrArLLZIyhlhE+3B4dhz2HaY1Mve2rcvKE0C7z/e1WoUVU8+LgcdKoNGwg/wRVeCkxeEhg==" + }, + "node_modules/expo-splash-screen": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-0.11.2.tgz", + "integrity": "sha512-4jTAs2IDS4rH9A3NK0WhFDIOyLgDExRe0zCf179vRNPZ6HlXCFEQS7Y9RaUF5EFqyYvsPiwaJQyRes3sO4mA+g==", + "dependencies": { + "@expo/configure-splash-screen": "0.5.0", + "@expo/prebuild-config": "^2.0.0" + } + }, + "node_modules/expo-splash-screen/node_modules/@expo/configure-splash-screen": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@expo/configure-splash-screen/-/configure-splash-screen-0.5.0.tgz", + "integrity": "sha512-wU84OsmACcQaY+cFNj1UOzqdUB+XNRP8hO5mwGN5LWRIDhd/5S1A/3hmWT96X4UQEee+XtCpwnmTw6SGIsTfIg==", + "dependencies": { + "color-string": "^1.5.3", + "commander": "^5.1.0", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "lodash": "^4.17.15", + "pngjs": "^5.0.0", + "xcode": "^3.0.0", + "xml-js": "^1.6.11" + }, + "bin": { + "configure-splash-screen": "build/index-cli.js", + "expo-splash-screen": "build/index-cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/expo-sqlite": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/expo-sqlite/-/expo-sqlite-9.1.0.tgz", + "integrity": "sha512-nr6rHm2GCm+MrMAuMoL0mGbGw8aIHT/UNg/zMDb2/QjFU1ZHj7c/lI+vmmQx0ObZ+NfJfu+tyW6HqxsdMnkeog==", + "dependencies": { + "@expo/websql": "^1.0.1", + "lodash": "^4.17.15" + } + }, + "node_modules/expo-structured-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/expo-structured-headers/-/expo-structured-headers-1.0.1.tgz", + "integrity": "sha512-U4frE8rT5x1LqZv5Ru/9CtzY8gh0wp1MfwTu5hetPydnwxXfWchuXvKgWRjEHglFU2X/29kYFY/J1UkPvCN8xg==" + }, + "node_modules/expo-updates": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/expo-updates/-/expo-updates-0.5.5.tgz", + "integrity": "sha512-1R8EKkT3GoDjMRQnDaTYv31gIYIaYQGHOrjHJfwq8ai9f1W1AHux6KAH2/H6sc2o9a7roWVwjDn2kKwCm9AeHg==", + "dependencies": { + "@expo/config-plugins": "^1.0.18", + "@expo/metro-config": "^0.1.59", + "expo-structured-headers": "~1.0.1", + "fbemitter": "^2.1.1", + "resolve-from": "^5.0.0", + "uuid": "^3.4.0" + } + }, + "node_modules/expo-web-browser": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/expo-web-browser/-/expo-web-browser-9.1.0.tgz", + "integrity": "sha512-1UkOHWUBshY7n/R9xc4Q0LN0Dxqdvvotlp8sCM/6bUB/aE+9B+duoimKtUhlnzcvfAFWgF5y5x+bIf7j6PF7ig==", + "dependencies": { + "compare-urls": "^2.0.0" + } + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fbemitter": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-2.1.1.tgz", + "integrity": "sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU=", + "dependencies": { + "fbjs": "^0.8.4" + } + }, + "node_modules/fbjs": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "dependencies": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + } + }, + "node_modules/fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + }, + "node_modules/fbjs/node_modules/core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", + "deprecated": "core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js." + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-type": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", + "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha1-mzERErxsYSehbgFsbF1/GeCAXFs=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "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" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/find-babel-config": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", + "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==", + "dependencies": { + "json5": "^0.5.1", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/find-babel-config/node_modules/json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/find-babel-config/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "engines": { + "node": ">=4" + } + }, + "node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flatted": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", + "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", + "dev": true + }, + "node_modules/flow-parser": { + "version": "0.121.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.121.0.tgz", + "integrity": "sha512-1gIBiWJNR0tKUNv8gZuk7l9rVX06OuLzY9AoGio7y/JT4V1IZErEMEq2TJS+PFcw/y0RshZ1J/27VfK1UQzYVg==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/fontfaceobserver": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.1.0.tgz", + "integrity": "sha512-ReOsO2F66jUa0jmv2nlM/s1MiutJx/srhAe2+TE8dJCMi02ZZOcCTxTCQFr3Yet+uODUtnr4Mewg+tNQ+4V1Ng==" + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/getenv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/getenv/-/getenv-1.0.0.tgz", + "integrity": "sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hermes-engine": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/hermes-engine/-/hermes-engine-0.7.2.tgz", + "integrity": "sha512-E2DkRaO97gwL98LPhgfkMqhHiNsrAjIfEk3wWYn2Y31xdkdWn0572H7RnVcGujMJVqZNJvtknxlpsUb8Wzc3KA==" + }, + "node_modules/hermes-profile-transformer": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz", + "integrity": "sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==", + "dependencies": { + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/hermes-profile-transformer/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/htmlparser2-without-node-native": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/htmlparser2-without-node-native/-/htmlparser2-without-node-native-3.9.2.tgz", + "integrity": "sha1-s+0FDYd9D/NGWWnjOYd7f59mMfY=", + "dependencies": { + "domelementtype": "^1.3.0", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "eventemitter2": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "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" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/hyphenate-style-name": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz", + "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==" + }, + "node_modules/iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-size": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.6.3.tgz", + "integrity": "sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA==", + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/immediate": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", + "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" + }, + "node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/inline-style-prefixer": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-6.0.0.tgz", + "integrity": "sha512-XTHvRUS4ZJNzC1GixJRmOlWSS45fSt+DJoyQC9ytj0WxQfcgofQtDtyKKYxHUqEsWCs+LIWftPF1ie7+i012Fg==", + "dependencies": { + "css-in-js-utils": "^2.0.0" + } + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, + "node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arguments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "dependencies": { + "call-bind": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/is-bigint": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", + "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", + "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", + "dependencies": { + "call-bind": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.3.0.tgz", + "integrity": "sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "engines": { + "node": ">=4" + } + }, + "node_modules/is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + }, + "node_modules/is-generator-function": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz", + "integrity": "sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dependencies": { + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz", + "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==", + "dependencies": { + "available-typed-arrays": "^1.0.2", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.0-next.2", + "foreach": "^2.0.5", + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.1.tgz", + "integrity": "sha512-pi4vhbhVHGLxohUw7PhGsueT4vRGFoXhP7+RGN0jKIv9+8PWYCQTqtADngrxOm2g46hoH0+g8uZZBzMrvVGDmw==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "dependencies": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "node_modules/isomorphic-fetch/node_modules/node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "dependencies": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "node_modules/jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-haste-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "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" + }, + "engines": { + "node": ">= 10.14.2" + }, + "optionalDependencies": { + "fsevents": "^2.1.2" + } + }, + "node_modules/jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-serializer": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "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" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-validate": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", + "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" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jetifier": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/jetifier/-/jetifier-1.6.8.tgz", + "integrity": "sha512-3Zi16h6L5tXDRQJTb221cnRoVG9/9OvreLdLU2/ZjRv/GILL+2Cemt0IKvkowwkDpvouAU1DQPOJ7qaiHeIdrw==", + "bin": { + "jetifier": "bin/jetify", + "jetifier-standalone": "bin/jetifier-standalone", + "jetify": "bin/jetify" + } + }, + "node_modules/jimp": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.12.1.tgz", + "integrity": "sha512-0soPJif+yjmzmOF+4cF2hyhxUWWpXpQntsm2joJXFFoRcQiPzsG4dbLKYqYPT3Fc6PjZ8MaLtCkDqqckVSfmRw==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/custom": "^0.12.1", + "@jimp/plugins": "^0.12.1", + "@jimp/types": "^0.12.1", + "regenerator-runtime": "^0.13.3" + } + }, + "node_modules/joi": { + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.4.0.tgz", + "integrity": "sha512-F4WiW2xaV6wc1jxete70Rw4V/VuMd6IN+a5ilZsxG4uYtUXWu2kq9W5P2dz30e7Gmw8RCbY/u/uk+dMPma9tAg==", + "dependencies": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.0", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/jpeg-js": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.3.tgz", + "integrity": "sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q==" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsc-android": { + "version": "245459.0.0", + "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-245459.0.0.tgz", + "integrity": "sha512-wkjURqwaB1daNkDi2OYYbsLnIdC/lUM2nPXQKRs5pqEU9chDg435bjvo+LSaHotDENygHQDHe+ntUkkw2gwMtg==" + }, + "node_modules/jscodeshift": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.11.0.tgz", + "integrity": "sha512-SdRK2C7jjs4k/kT2mwtO07KJN9RnjxtKn03d9JVj6c3j9WwaLcFYsICYDnLAzY0hp+wG2nxl+Cm2jWLiNVYb8g==", + "dependencies": { + "@babel/core": "^7.1.6", + "@babel/parser": "^7.1.6", + "@babel/plugin-proposal-class-properties": "^7.1.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.1.0", + "@babel/plugin-proposal-optional-chaining": "^7.1.0", + "@babel/plugin-transform-modules-commonjs": "^7.1.0", + "@babel/preset-flow": "^7.0.0", + "@babel/preset-typescript": "^7.1.0", + "@babel/register": "^7.0.0", + "babel-core": "^7.0.0-bridge.0", + "colors": "^1.1.2", + "flow-parser": "0.*", + "graceful-fs": "^4.2.4", + "micromatch": "^3.1.10", + "neo-async": "^2.5.0", + "node-dir": "^0.1.17", + "recast": "^0.20.3", + "temp": "^0.8.1", + "write-file-atomic": "^2.3.0" + }, + "bin": { + "jscodeshift": "bin/jscodeshift.js" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, + "node_modules/jscodeshift/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonfile/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "engines": { + "node": "*" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", + "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.3", + "object.assign": "^4.1.2" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "optionalDependencies": { + "graceful-fs": "^4.1.9" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/load-bmfont": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", + "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", + "dependencies": { + "buffer-equal": "0.0.1", + "mime": "^1.3.4", + "parse-bmfont-ascii": "^1.0.3", + "parse-bmfont-binary": "^1.0.5", + "parse-bmfont-xml": "^1.1.4", + "phin": "^2.9.1", + "xhr": "^2.0.1", + "xtend": "^4.0.0" + } + }, + "node_modules/load-bmfont/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + }, + "node_modules/lodash.frompairs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.frompairs/-/lodash.frompairs-4.0.1.tgz", + "integrity": "sha1-vE5SB/onV8E25XNhTpZkUGsrG9I=" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.omit": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", + "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=" + }, + "node_modules/lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" + }, + "node_modules/lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "dependencies": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "node_modules/lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "dependencies": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "node_modules/lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/logkitty": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz", + "integrity": "sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==", + "dependencies": { + "ansi-fragments": "^0.2.1", + "dayjs": "^1.8.15", + "yargs": "^15.1.0" + }, + "bin": { + "logkitty": "bin/logkitty.js" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dependencies": { + "tmpl": "1.0.x" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/md5-file": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-3.2.3.tgz", + "integrity": "sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw==", + "dependencies": { + "buffer-alloc": "^1.1.0" + }, + "bin": { + "md5-file": "cli.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/metro": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.64.0.tgz", + "integrity": "sha512-G2OC08Rzfs0kqnSEuKo2yZxR+/eNUpA93Ru45c60uN0Dw3HPrDi+ZBipgFftC6iLE0l+6hu8roFFIofotWxybw==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@babel/core": "^7.0.0", + "@babel/generator": "^7.5.0", + "@babel/parser": "^7.0.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "absolute-path": "^0.0.0", + "accepts": "^1.3.7", + "async": "^2.4.0", + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "denodeify": "^1.2.1", + "error-stack-parser": "^2.0.6", + "fs-extra": "^1.0.0", + "graceful-fs": "^4.1.3", + "image-size": "^0.6.0", + "invariant": "^2.2.4", + "jest-haste-map": "^26.5.2", + "jest-worker": "^26.0.0", + "lodash.throttle": "^4.1.1", + "metro-babel-register": "0.64.0", + "metro-babel-transformer": "0.64.0", + "metro-cache": "0.64.0", + "metro-cache-key": "0.64.0", + "metro-config": "0.64.0", + "metro-core": "0.64.0", + "metro-hermes-compiler": "0.64.0", + "metro-inspector-proxy": "0.64.0", + "metro-minify-uglify": "0.64.0", + "metro-react-native-babel-preset": "0.64.0", + "metro-resolver": "0.64.0", + "metro-runtime": "0.64.0", + "metro-source-map": "0.64.0", + "metro-symbolicate": "0.64.0", + "metro-transform-plugins": "0.64.0", + "metro-transform-worker": "0.64.0", + "mime-types": "^2.1.27", + "mkdirp": "^0.5.1", + "node-fetch": "^2.2.0", + "nullthrows": "^1.1.1", + "rimraf": "^2.5.4", + "serialize-error": "^2.1.0", + "source-map": "^0.5.6", + "strip-ansi": "^6.0.0", + "temp": "0.8.3", + "throat": "^5.0.0", + "ws": "^1.1.5", + "yargs": "^15.3.1" + }, + "bin": { + "metro": "src/cli.js" + } + }, + "node_modules/metro-babel-register": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-babel-register/-/metro-babel-register-0.64.0.tgz", + "integrity": "sha512-Kf6YvE3kIRumGnjK0Q9LqGDIdnsX9eFGtNBmBuCVDuB9wGGA/5CgX8We8W7Y44dz1RGTcHJRhfw5iGg+pwC3aQ==", + "dependencies": { + "@babel/core": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/register": "^7.0.0", + "escape-string-regexp": "^1.0.5" + } + }, + "node_modules/metro-babel-register/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/metro-babel-transformer": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.59.0.tgz", + "integrity": "sha512-fdZJl8rs54GVFXokxRdD7ZrQ1TJjxWzOi/xSP25VR3E8tbm3nBZqS+/ylu643qSr/IueABR+jrlqAyACwGEf6w==", + "dependencies": { + "@babel/core": "^7.0.0", + "metro-source-map": "0.59.0" + } + }, + "node_modules/metro-cache": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.64.0.tgz", + "integrity": "sha512-QvGfxe/1QQYM9XOlR8W1xqE9eHDw/AgJIgYGn/TxZxBu9Zga+Rgs1omeSZju45D8w5VWgMr83ma5kACgzvOecg==", + "dependencies": { + "metro-core": "0.64.0", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4" + } + }, + "node_modules/metro-cache-key": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.64.0.tgz", + "integrity": "sha512-O9B65G8L/fopck45ZhdRosyVZdMtUQuX5mBWEC1NRj02iWBIUPLmYMjrunqIe8vHipCMp3DtTCm/65IlBmO8jg==" + }, + "node_modules/metro-config": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.64.0.tgz", + "integrity": "sha512-QhM4asnX5KhlRWaugwVGNNXhX0Z85u5nK0UQ/A90bBb4xWyXqUe20e788VtdA75rkQiiI6wXTCIHWT0afbnjwQ==", + "dependencies": { + "cosmiconfig": "^5.0.5", + "jest-validate": "^26.5.2", + "metro": "0.64.0", + "metro-cache": "0.64.0", + "metro-core": "0.64.0", + "metro-runtime": "0.64.0" + } + }, + "node_modules/metro-core": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.64.0.tgz", + "integrity": "sha512-v8ZQ5j72EaUwamQ8pLfHlOHTyp7SbdazvHPzFGDpHnwIQqIT0Bw3Syg8R4regTlVG3ngpeSEAi005UITljmMcQ==", + "dependencies": { + "jest-haste-map": "^26.5.2", + "lodash.throttle": "^4.1.1", + "metro-resolver": "0.64.0" + } + }, + "node_modules/metro-hermes-compiler": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-hermes-compiler/-/metro-hermes-compiler-0.64.0.tgz", + "integrity": "sha512-CLAjVDWGAoGhbi2ZyPHnH5YDdfrDIx6+tzFWfHGIMTZkYBXsYta9IfYXBV8lFb6BIbrXLjlXZAOoosknetMPOA==" + }, + "node_modules/metro-inspector-proxy": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.64.0.tgz", + "integrity": "sha512-KywbH3GNSz9Iqw4UH3smgaV2dBHHYMISeN7ORntDL/G+xfgPc6vt13d+zFb907YpUcXj5N0vdoiAHI5V/0y8IA==", + "dependencies": { + "connect": "^3.6.5", + "debug": "^2.2.0", + "ws": "^1.1.5", + "yargs": "^15.3.1" + }, + "bin": { + "metro-inspector-proxy": "src/cli.js" + } + }, + "node_modules/metro-inspector-proxy/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/metro-inspector-proxy/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/metro-inspector-proxy/node_modules/ws": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "dependencies": { + "options": ">=0.0.5", + "ultron": "1.0.x" + } + }, + "node_modules/metro-minify-uglify": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.64.0.tgz", + "integrity": "sha512-DRwRstqXR5qfte9Nuwoov5dRXxL7fJeVlO5fGyOajWeO3+AgPjvjXh/UcLJqftkMWTPGUFuzAD5/7JC5v5FLWw==", + "dependencies": { + "uglify-es": "^3.1.9" + } + }, + "node_modules/metro-react-native-babel-preset": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.59.0.tgz", + "integrity": "sha512-BoO6ncPfceIDReIH8pQ5tQptcGo5yRWQXJGVXfANbiKLq4tfgdZB1C1e2rMUJ6iypmeJU9dzl+EhPmIFKtgREg==", + "dependencies": { + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.2.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-exponentiation-operator": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-assign": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "react-refresh": "^0.4.0" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/metro-react-native-babel-transformer": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.59.0.tgz", + "integrity": "sha512-1O3wrnMq4NcPQ1asEcl9lRDn/t+F1Oef6S9WaYVIKEhg9m/EQRGVrrTVP+R6B5Eeaj3+zNKbzM8Dx/NWy1hUbQ==", + "dependencies": { + "@babel/core": "^7.0.0", + "babel-preset-fbjs": "^3.3.0", + "metro-babel-transformer": "0.59.0", + "metro-react-native-babel-preset": "0.59.0", + "metro-source-map": "0.59.0" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/metro-resolver": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.64.0.tgz", + "integrity": "sha512-cJ26Id8Zf+HmS/1vFwu71K3u7ep/+HeXXAJIeVDYf+niE7AWB9FijyMtAlQgbD8elWqv1leJCnQ/xHRFBfGKYA==", + "dependencies": { + "absolute-path": "^0.0.0" + } + }, + "node_modules/metro-runtime": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.64.0.tgz", + "integrity": "sha512-m7XbWOaIOeFX7YcxUhmnOi6Pg8EaeL89xyZ+quZyZVF1aNoTr4w8FfbKxvijpjsytKHIZtd+43m2Wt5JrqyQmQ==" + }, + "node_modules/metro-source-map": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.59.0.tgz", + "integrity": "sha512-0w5CmCM+ybSqXIjqU4RiK40t4bvANL6lafabQ2GP2XD3vSwkLY+StWzCtsb4mPuyi9R/SgoLBel+ZOXHXAH0eQ==", + "dependencies": { + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "invariant": "^2.2.4", + "metro-symbolicate": "0.59.0", + "ob1": "0.59.0", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + } + }, + "node_modules/metro-symbolicate": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.59.0.tgz", + "integrity": "sha512-asLaF2A7rndrToGFIknL13aiohwPJ95RKHf0NM3hP/nipiLDoMzXT6ZnQvBqDxkUKyP+51AI75DMtb+Wcyw4Bw==", + "dependencies": { + "invariant": "^2.2.4", + "metro-source-map": "0.59.0", + "source-map": "^0.5.6", + "through2": "^2.0.1", + "vlq": "^1.0.0" + }, + "bin": { + "metro-symbolicate": "src/symbolicate.js" + }, + "engines": { + "node": ">=8.3" + } + }, + "node_modules/metro-transform-plugins": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.64.0.tgz", + "integrity": "sha512-iTIRBD/wBI98plfxj8jAoNUUXfXLNlyvcjPtshhpGvdwu9pzQilGfnDnOaaK+vbITcOk9w5oQectXyJwAqTr1A==", + "dependencies": { + "@babel/core": "^7.0.0", + "@babel/generator": "^7.5.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "nullthrows": "^1.1.1" + } + }, + "node_modules/metro-transform-worker": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.64.0.tgz", + "integrity": "sha512-wegRtK8GyLF6IPZRBJp+zsORgA4iX0h1DRpknyAMDCtSbJ4VU2xV/AojteOgAsDvY3ucAGsvfuZLNDJHUdUNHQ==", + "dependencies": { + "@babel/core": "^7.0.0", + "@babel/generator": "^7.5.0", + "@babel/parser": "^7.0.0", + "@babel/types": "^7.0.0", + "babel-preset-fbjs": "^3.3.0", + "metro": "0.64.0", + "metro-babel-transformer": "0.64.0", + "metro-cache": "0.64.0", + "metro-cache-key": "0.64.0", + "metro-hermes-compiler": "0.64.0", + "metro-source-map": "0.64.0", + "metro-transform-plugins": "0.64.0", + "nullthrows": "^1.1.1" + } + }, + "node_modules/metro-transform-worker/node_modules/metro-babel-transformer": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.64.0.tgz", + "integrity": "sha512-itZaxKTgmKGEZWxNzbSZBc22NngrMZzoUNuU92aHSTGkYi2WH4XlvzEHsstmIKHMsRVKl75cA+mNmgk4gBFJKw==", + "dependencies": { + "@babel/core": "^7.0.0", + "metro-source-map": "0.64.0", + "nullthrows": "^1.1.1" + } + }, + "node_modules/metro-transform-worker/node_modules/metro-source-map": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.64.0.tgz", + "integrity": "sha512-OCG2rtcp5cLEGYvAbfkl6mEc0J2FPRP4/UCEly+juBk7hawS9bCBMBfhJm/HIsvY1frk6nT2Vsl1O8YBbwyx2g==", + "dependencies": { + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "invariant": "^2.2.4", + "metro-symbolicate": "0.64.0", + "nullthrows": "^1.1.1", + "ob1": "0.64.0", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + } + }, + "node_modules/metro-transform-worker/node_modules/metro-symbolicate": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.64.0.tgz", + "integrity": "sha512-qIi+YRrDWnLVmydj6gwidYLPaBsakZRibGWSspuXgHAxOI3UuLwlo4dpQ73Et0gyHjI7ZvRMRY8JPiOntf9AQQ==", + "dependencies": { + "invariant": "^2.2.4", + "metro-source-map": "0.64.0", + "nullthrows": "^1.1.1", + "source-map": "^0.5.6", + "through2": "^2.0.1", + "vlq": "^1.0.0" + }, + "bin": { + "metro-symbolicate": "src/index.js" + }, + "engines": { + "node": ">=8.3" + } + }, + "node_modules/metro-transform-worker/node_modules/ob1": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.64.0.tgz", + "integrity": "sha512-CO1N+5dhvy+MoAwxz8+fymEUcwsT4a+wHhrHFb02LppcJdHxgcBWviwEhUwKOD2kLMQ7ijrrzybOqpGcqEtvpQ==" + }, + "node_modules/metro/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/metro/node_modules/fs-extra": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", + "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0" + } + }, + "node_modules/metro/node_modules/jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/metro/node_modules/metro-babel-transformer": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.64.0.tgz", + "integrity": "sha512-itZaxKTgmKGEZWxNzbSZBc22NngrMZzoUNuU92aHSTGkYi2WH4XlvzEHsstmIKHMsRVKl75cA+mNmgk4gBFJKw==", + "dependencies": { + "@babel/core": "^7.0.0", + "metro-source-map": "0.64.0", + "nullthrows": "^1.1.1" + } + }, + "node_modules/metro/node_modules/metro-react-native-babel-preset": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.64.0.tgz", + "integrity": "sha512-HcZ0RWQRuJfpPiaHyFQJzcym+/dDIVUPwUAXWoub/C4GkGu+mPjp8vqK6g0FxokCnnI2TK0gZTza2IDfiNNscQ==", + "dependencies": { + "@babel/core": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.2.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-exponentiation-operator": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-assign": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "react-refresh": "^0.4.0" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/metro/node_modules/metro-source-map": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.64.0.tgz", + "integrity": "sha512-OCG2rtcp5cLEGYvAbfkl6mEc0J2FPRP4/UCEly+juBk7hawS9bCBMBfhJm/HIsvY1frk6nT2Vsl1O8YBbwyx2g==", + "dependencies": { + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "invariant": "^2.2.4", + "metro-symbolicate": "0.64.0", + "nullthrows": "^1.1.1", + "ob1": "0.64.0", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + } + }, + "node_modules/metro/node_modules/metro-symbolicate": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.64.0.tgz", + "integrity": "sha512-qIi+YRrDWnLVmydj6gwidYLPaBsakZRibGWSspuXgHAxOI3UuLwlo4dpQ73Et0gyHjI7ZvRMRY8JPiOntf9AQQ==", + "dependencies": { + "invariant": "^2.2.4", + "metro-source-map": "0.64.0", + "nullthrows": "^1.1.1", + "source-map": "^0.5.6", + "through2": "^2.0.1", + "vlq": "^1.0.0" + }, + "bin": { + "metro-symbolicate": "src/index.js" + }, + "engines": { + "node": ">=8.3" + } + }, + "node_modules/metro/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/metro/node_modules/ob1": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.64.0.tgz", + "integrity": "sha512-CO1N+5dhvy+MoAwxz8+fymEUcwsT4a+wHhrHFb02LppcJdHxgcBWviwEhUwKOD2kLMQ7ijrrzybOqpGcqEtvpQ==" + }, + "node_modules/metro/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/metro/node_modules/ws": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "dependencies": { + "options": ">=0.0.5", + "ultron": "1.0.x" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", + "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.31", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", + "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "dependencies": { + "mime-db": "1.48.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mockdate": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/mockdate/-/mockdate-3.0.5.tgz", + "integrity": "sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ==" + }, + "node_modules/moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/nanoid": { + "version": "3.1.22", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.22.tgz", + "integrity": "sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node_modules/nocache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz", + "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/node-dir": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", + "integrity": "sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU=", + "dependencies": { + "minimatch": "^3.0.2" + }, + "engines": { + "node": ">= 0.10.5" + } + }, + "node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" + }, + "node_modules/node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-releases": { + "version": "1.1.71", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", + "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==" + }, + "node_modules/node-stream-zip": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.13.5.tgz", + "integrity": "sha512-Lfi9xhSNvnJU35+4ZFlECXKJ70etAgJYWAVCdcEpksPnMrgwNqwkCJqdunoViVoFFV38C7AIodYE+2apuoK9Gw==", + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/antelle" + } + }, + "node_modules/noop-fn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/noop-fn/-/noop-fn-1.0.0.tgz", + "integrity": "sha1-XzPUfxPSFQ35PgywNmmemC94/78=" + }, + "node_modules/normalize-css-color": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/normalize-css-color/-/normalize-css-color-1.0.2.tgz", + "integrity": "sha1-Apkel8zOxmI/5XOvu/Deah8+n40=" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "dependencies": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/normalize-url/node_modules/query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dependencies": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url/node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" + }, + "node_modules/ob1": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.59.0.tgz", + "integrity": "sha512-opXMTxyWJ9m68ZglCxwo0OPRESIC/iGmKFPXEXzMZqsVIrgoRXOHmoMDkQzz4y3irVjbyPJRAh5pI9fd0MJTFQ==" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", + "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", + "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.hasown": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.0.0.tgz", + "integrity": "sha512-qYMF2CLIjxxLGleeM0jrcB4kiv3loGVAjKQKvH8pSU/i2VcRRvUNmxbD+nEMmrXRfORhuVJuH8OtSYCZoue3zA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.values": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", + "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/omggif": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", + "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==" + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "dependencies": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "engines": { + "node": ">=4" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module/node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-bmfont-ascii": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", + "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=" + }, + "node_modules/parse-bmfont-binary": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", + "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=" + }, + "node_modules/parse-bmfont-xml": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", + "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", + "dependencies": { + "xml-parse-from-string": "^1.0.0", + "xml2js": "^0.4.5" + } + }, + "node_modules/parse-headers": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", + "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==" + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parse-png": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-png/-/parse-png-2.1.0.tgz", + "integrity": "sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==", + "dependencies": { + "pngjs": "^3.3.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/parse-png/node_modules/pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/phin": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", + "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" + }, + "node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dependencies": { + "node-modules-regexp": "^1.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pixelmatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", + "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", + "dependencies": { + "pngjs": "^3.0.0" + }, + "bin": { + "pixelmatch": "bin/pixelmatch" + } + }, + "node_modules/pixelmatch/node_modules/pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "dependencies": { + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-up/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "engines": { + "node": ">=4" + } + }, + "node_modules/plist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.2.tgz", + "integrity": "sha512-MSrkwZBdQ6YapHy87/8hDU8MnIcyxBKjeF+McXnr5A9MtffPewTs7G3hlpodT5TacyfIyFTaJEhh3GGcmasTgQ==", + "dependencies": { + "base64-js": "^1.5.1", + "xmlbuilder": "^9.0.7", + "xmldom": "^0.5.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pouchdb-collections": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-1.0.1.tgz", + "integrity": "sha1-/mOhfal3YRq+98uAJssalVP9g1k=" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "engines": { + "node": ">=4" + } + }, + "node_modules/prettier": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "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" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pretty-format/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/pretty-format/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/prompts": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", + "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/query-string": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", + "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==", + "dependencies": { + "decode-uri-component": "^0.2.0", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/react": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", + "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-devtools-core": { + "version": "4.13.5", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.13.5.tgz", + "integrity": "sha512-k+P5VSKM6P22Go9IQ8dJmjj9fbztvKt1iRDI/4wS5oTvd1EnytIJMYB59wZt+D3kgp64jklNX/MRmY42xAQ08g==", + "dependencies": { + "shell-quote": "^1.6.1", + "ws": "^7" + } + }, + "node_modules/react-devtools-core/node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/react-dom": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz", + "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.1" + }, + "peerDependencies": { + "react": "^16.13.1" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-native": { + "version": "0.64.2", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.64.2.tgz", + "integrity": "sha512-Ty/fFHld9DcYsFZujXYdeVjEhvSeQcwuTGXezyoOkxfiGEGrpL/uwUZvMzwShnU4zbbTKDu2PAm/uwuOittRGA==", + "dependencies": { + "@jest/create-cache-key-function": "^26.5.0", + "@react-native-community/cli": "^5.0.1-alpha.1", + "@react-native-community/cli-platform-android": "^5.0.1-alpha.1", + "@react-native-community/cli-platform-ios": "^5.0.1-alpha.1", + "@react-native/assets": "1.0.0", + "@react-native/normalize-color": "1.0.0", + "@react-native/polyfills": "1.0.0", + "abort-controller": "^3.0.0", + "anser": "^1.4.9", + "base64-js": "^1.1.2", + "event-target-shim": "^5.0.1", + "hermes-engine": "~0.7.0", + "invariant": "^2.2.4", + "jsc-android": "^245459.0.0", + "metro-babel-register": "0.64.0", + "metro-react-native-babel-transformer": "0.64.0", + "metro-runtime": "0.64.0", + "metro-source-map": "0.64.0", + "nullthrows": "^1.1.1", + "pretty-format": "^26.5.2", + "promise": "^8.0.3", + "prop-types": "^15.7.2", + "react-devtools-core": "^4.6.0", + "react-native-codegen": "^0.0.6", + "react-refresh": "^0.4.0", + "regenerator-runtime": "^0.13.2", + "scheduler": "^0.20.1", + "shelljs": "^0.8.4", + "stacktrace-parser": "^0.1.3", + "use-subscription": "^1.0.0", + "whatwg-fetch": "^3.0.0", + "ws": "^6.1.4" + }, + "bin": { + "react-native": "cli.js" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "react": "17.0.1" + } + }, + "node_modules/react-native-background-actions": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/react-native-background-actions/-/react-native-background-actions-2.6.1.tgz", + "integrity": "sha512-4YQSEq7Y+qLKU9BxuzMG0DEIeZkvD54jTqA1IKai/w3sV+hc4cJNoSjZScRj1+663oWrEAZwLUk2I8P5QRvgiQ==", + "dependencies": { + "eventemitter3": "^4.0.7" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/Rapsssito" + }, + "peerDependencies": { + "react-native": ">=0.47.0" + } + }, + "node_modules/react-native-cheerio": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/react-native-cheerio/-/react-native-cheerio-1.0.0-rc.4.tgz", + "integrity": "sha512-V2nAoxikHGV1vl2nKL2rlw832Ze+p8op5p6MDltd5ZrEZGp1+eTl+qjC+l4TY9ju3CNpt/uiNuOEQoWqgdwzUQ==", + "dependencies": { + "buffer": "^5.0.7", + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2-without-node-native": "^3.9.0", + "lodash": "^4.15.0", + "react-native-parse-html": "^2.2.6" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/react-native-codegen": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/react-native-codegen/-/react-native-codegen-0.0.6.tgz", + "integrity": "sha512-cMvrUelD81wiPitEPiwE/TCNscIVauXxmt4NTGcy18HrUd0WRWXfYzAQGXm0eI87u3NMudNhqFj2NISJenxQHg==", + "dependencies": { + "flow-parser": "^0.121.0", + "jscodeshift": "^0.11.0", + "nullthrows": "^1.1.1" + } + }, + "node_modules/react-native-device-info": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-8.1.3.tgz", + "integrity": "sha512-73e3wiGFL8DvIXEd8x4Aq+mO8mZvHARwfYorIEu+X0trLHY92bP5Ict8DJHDjCQ0+HtAvpA4Wda2VoUVN1zh6Q==", + "peerDependencies": { + "react-native": "*" + } + }, + "node_modules/react-native-easing-gradient": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/react-native-easing-gradient/-/react-native-easing-gradient-0.1.2.tgz", + "integrity": "sha512-oeSJ8nSrCxiCO5mLEVc59Evva4unjvH6AQ8vJFyJ7PIKRybIV5JC+OBU8VnF+V7oQ9dnDBpx2qT5Mh+oxd+/tw==", + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-fast-image": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/react-native-fast-image/-/react-native-fast-image-8.3.4.tgz", + "integrity": "sha512-LpzAdjUphihUpVEBn5fEv5AILe55rHav0YiZroPZ1rumKDhAl4u2cG01ku2Pb7l8sayjTsNu7FuURAlXUUDsow==", + "peerDependencies": { + "react": "^16.8.6", + "react-native": ">=0.60.0" + } + }, + "node_modules/react-native-gesture-handler": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-1.10.3.tgz", + "integrity": "sha512-cBGMi1IEsIVMgoox4RvMx7V2r6bNKw0uR1Mu1o7NbuHS6BRSVLq0dP34l2ecnPlC+jpWd3le6Yg1nrdCjby2Mw==", + "dependencies": { + "@egjs/hammerjs": "^2.0.17", + "fbjs": "^3.0.0", + "hoist-non-react-statics": "^3.3.0", + "invariant": "^2.2.4", + "prop-types": "^15.7.2" + } + }, + "node_modules/react-native-gesture-handler/node_modules/fbjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.0.tgz", + "integrity": "sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg==", + "dependencies": { + "cross-fetch": "^3.0.4", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + } + }, + "node_modules/react-native-iphone-x-helper": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.1.tgz", + "integrity": "sha512-HOf0jzRnq2/aFUcdCJ9w9JGzN3gdEg0zFE4FyYlp4jtidqU03D5X7ZegGKfT1EWteR0gPBGp9ye5T5FvSWi9Yg==", + "peerDependencies": { + "react-native": ">=0.42.0" + } + }, + "node_modules/react-native-navigation-bar-color": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/react-native-navigation-bar-color/-/react-native-navigation-bar-color-2.0.1.tgz", + "integrity": "sha512-1kE/oxWt+HYjRxdZdvke9tJ365xaee5n3+euOQA1En8zQuSbOxiE4SYEGM7TeaWnmLJ0l37mRnPHaB2H4mGh0A==" + }, + "node_modules/react-native-pager-view": { + "version": "5.1.10", + "resolved": "https://registry.npmjs.org/react-native-pager-view/-/react-native-pager-view-5.1.10.tgz", + "integrity": "sha512-sVWEPaxSyp2TOQ9yt+v+ecEdZ2lGnZ9TtoNU+WA1c6SjYdQlIvS2ZMb2hvdmgTMCnZpzKF02WH9BimGOzQRDIg==", + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-paper": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/react-native-paper/-/react-native-paper-4.8.1.tgz", + "integrity": "sha512-WgmqrDdcrr0ZbuiLCwMpmOMhl1n8uIvNulxsl2oCGtD8oeMkPJKHf4G/ONR+iNrSXcFbJek+uDRSmcGA5kDfUA==", + "dependencies": { + "@callstack/react-theme-provider": "^3.0.5", + "color": "^3.1.2", + "react-native-iphone-x-helper": "^1.3.1" + }, + "peerDependencies": { + "react": "*", + "react-native": "*", + "react-native-vector-icons": "*" + } + }, + "node_modules/react-native-parse-html": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/react-native-parse-html/-/react-native-parse-html-2.2.6.tgz", + "integrity": "sha1-IfKPl7OEB3hHWbxZ4kS1EQnZzIc=", + "dependencies": { + "react-native-stream": "^0.1.0" + } + }, + "node_modules/react-native-reanimated": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-2.1.0.tgz", + "integrity": "sha512-tlPvvcdf+X7HGQ7g/7npBFhwMznfdk7MHUc9gUB/kp2abSscXNe/kOVKlrNEOO4DS11rNOXc+llFxVFMuNk0zA==", + "dependencies": { + "@babel/plugin-transform-object-assign": "^7.10.4", + "fbjs": "^3.0.0", + "mockdate": "^3.0.2", + "string-hash-64": "^1.0.3" + }, + "peerDependencies": { + "react": "*", + "react-native": "*", + "react-native-gesture-handler": "*" + } + }, + "node_modules/react-native-reanimated/node_modules/fbjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.0.tgz", + "integrity": "sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg==", + "dependencies": { + "cross-fetch": "^3.0.4", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + } + }, + "node_modules/react-native-safe-area-context": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-3.2.0.tgz", + "integrity": "sha512-k2Nty4PwSnrg9HwrYeeE+EYqViYJoOFwEy9LxL5RIRfoqxAq/uQXNGwpUg2/u4gnKpBbEPa9eRh15KKMe/VHkA==", + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-screens": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.0.0.tgz", + "integrity": "sha512-35II5oxTaVp3OP8y0eLPOPpQkxG4fRKQ+dL1YSE1we5kCZFOU0l/Rn0T79HbyUu1LPwUZr6lZupPs0ULnRyMuQ==", + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-stream": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/react-native-stream/-/react-native-stream-0.1.9.tgz", + "integrity": "sha1-E2gMzok8p9NKhmZNnVtO4adyyXw=", + "dependencies": { + "base64-js": "^1.2.0", + "ieee754": "^1.1.8" + } + }, + "node_modules/react-native-swipe-gestures": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/react-native-swipe-gestures/-/react-native-swipe-gestures-1.0.5.tgz", + "integrity": "sha512-Ns7Bn9H/Tyw278+5SQx9oAblDZ7JixyzeOczcBK8dipQk2pD7Djkcfnf1nB/8RErAmMLL9iXgW0QHqiII8AhKw==" + }, + "node_modules/react-native-tab-view": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/react-native-tab-view/-/react-native-tab-view-3.0.1.tgz", + "integrity": "sha512-L7qXtYz5Z+NdWyu38zaJrlHA/8H6rNFRZXe3ydym12UEEPPoefbVZ71b9YK2O6QP0u4pUlzMpMVM/Lsz2DJ4jg==", + "peerDependencies": { + "react": "*", + "react-native": "*", + "react-native-pager-view": "*" + } + }, + "node_modules/react-native-tts": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/react-native-tts/-/react-native-tts-4.1.0.tgz", + "integrity": "sha512-tvf3lQ6u9MqztUie37qoPw5YQPqi0ql1lPhDsBBs/RRA6A/H1J9X9H/qb1A0Hx0ZpjavrEdtVSqQQ2JDZvZCTQ==" + }, + "node_modules/react-native-unimodules": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/react-native-unimodules/-/react-native-unimodules-0.13.3.tgz", + "integrity": "sha512-fjbNbAcvJHF8Ywqe77oveRW1WfaAKCQGV4a3Fxgpai17oNHq1LFwwKw0crFo0k7Njm5u7kCMVNbm9ZILNBfABQ==", + "hasInstallScript": true, + "dependencies": { + "@unimodules/core": "~7.1.0", + "@unimodules/react-native-adapter": "~6.2.2", + "chalk": "^2.4.2", + "expo-asset": "~8.3.1", + "expo-constants": "~10.1.3", + "expo-file-system": "~11.0.2", + "expo-image-loader": "~2.1.1", + "expo-permissions": "~12.0.1", + "find-up": "~5.0.0", + "unimodules-app-loader": "~2.1.0", + "unimodules-barcode-scanner-interface": "~6.1.0", + "unimodules-camera-interface": "~6.1.0", + "unimodules-constants-interface": "~6.1.0", + "unimodules-face-detector-interface": "~6.1.0", + "unimodules-file-system-interface": "~6.1.0", + "unimodules-font-interface": "~6.1.0", + "unimodules-image-loader-interface": "~6.1.0", + "unimodules-permissions-interface": "~6.1.0", + "unimodules-sensors-interface": "~6.1.0", + "unimodules-task-manager-interface": "~6.1.0" + } + }, + "node_modules/react-native-unimodules/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/react-native-unimodules/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/react-native-vector-icons": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-7.1.0.tgz", + "integrity": "sha512-V2a1zJ4i+kS8O4j183gIwX14St9AxxXabxwYpFBgRhvr2NDXyFcjHDEAgrOYYlt2W57e20aN1tBDU/I+wn9WtQ==", + "dependencies": { + "lodash.frompairs": "^4.0.1", + "lodash.isequal": "^4.5.0", + "lodash.isstring": "^4.0.1", + "lodash.omit": "^4.5.0", + "lodash.pick": "^4.4.0", + "lodash.template": "^4.5.0", + "prop-types": "^15.7.2", + "yargs": "^15.0.2" + }, + "bin": { + "fa5-upgrade": "bin/fa5-upgrade.sh", + "generate-icon": "bin/generate-icon.js" + } + }, + "node_modules/react-native-web": { + "version": "0.16.5", + "resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.16.5.tgz", + "integrity": "sha512-bsoSq9pnjPerNKC1uzvJi7464to3SSMbGG9QFdj6woV3xk5fhq2jB2vQ5+iH/KC7F5lpDRukcb2hMHL1rzKJUQ==", + "dependencies": { + "array-find-index": "^1.0.2", + "create-react-class": "^15.7.0", + "fbjs": "^3.0.0", + "hyphenate-style-name": "^1.0.4", + "inline-style-prefixer": "^6.0.0", + "normalize-css-color": "^1.0.2", + "prop-types": "^15.6.0" + }, + "peerDependencies": { + "react": ">=17.0.1", + "react-dom": ">=17.0.1" + } + }, + "node_modules/react-native-web/node_modules/fbjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.0.tgz", + "integrity": "sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg==", + "dependencies": { + "cross-fetch": "^3.0.4", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + } + }, + "node_modules/react-native-webview": { + "version": "11.6.2", + "resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-11.6.2.tgz", + "integrity": "sha512-7e5ltLBgqt1mX0gdTTS2nFPIjfS6y300wqJ4rLWqU71lDO+8ZeayfsF5qo83qxo2Go74CtLnSeWae4pdGwUqYw==", + "dependencies": { + "escape-string-regexp": "2.0.0", + "invariant": "2.2.4" + }, + "peerDependencies": { + "react-native": ">=0.60 <=0.64" + } + }, + "node_modules/react-native-webview/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/react-native/node_modules/@react-native-community/cli": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-5.0.1.tgz", + "integrity": "sha512-9VzSYUYSEqxEH5Ib2UNSdn2eyPiYZ4T7Y79o9DKtRBuSaUIwbCUdZtIm+UUjBpLS1XYBkW26FqL8/UdZDmQvXw==", + "dependencies": { + "@react-native-community/cli-debugger-ui": "^5.0.1", + "@react-native-community/cli-hermes": "^5.0.1", + "@react-native-community/cli-server-api": "^5.0.1", + "@react-native-community/cli-tools": "^5.0.1", + "@react-native-community/cli-types": "^5.0.1", + "appdirsjs": "^1.2.4", + "chalk": "^3.0.0", + "command-exists": "^1.2.8", + "commander": "^2.19.0", + "cosmiconfig": "^5.1.0", + "deepmerge": "^3.2.0", + "envinfo": "^7.7.2", + "execa": "^1.0.0", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0", + "glob": "^7.1.3", + "graceful-fs": "^4.1.3", + "joi": "^17.2.1", + "leven": "^3.1.0", + "lodash": "^4.17.15", + "metro": "^0.64.0", + "metro-config": "^0.64.0", + "metro-core": "^0.64.0", + "metro-react-native-babel-transformer": "^0.64.0", + "metro-resolver": "^0.64.0", + "metro-runtime": "^0.64.0", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "node-stream-zip": "^1.9.1", + "ora": "^3.4.0", + "pretty-format": "^26.6.2", + "prompts": "^2.4.0", + "semver": "^6.3.0", + "serve-static": "^1.13.1", + "strip-ansi": "^5.2.0", + "sudo-prompt": "^9.0.0", + "wcwidth": "^1.0.1" + }, + "bin": { + "react-native": "build/bin.js" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "react-native": ">=0.64.0-rc.0 || 0.0.0-*" + } + }, + "node_modules/react-native/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/react-native/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/react-native/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/react-native/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/react-native/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/react-native/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/react-native/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/react-native/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/react-native/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/react-native/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/react-native/node_modules/metro-babel-transformer": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.64.0.tgz", + "integrity": "sha512-itZaxKTgmKGEZWxNzbSZBc22NngrMZzoUNuU92aHSTGkYi2WH4XlvzEHsstmIKHMsRVKl75cA+mNmgk4gBFJKw==", + "dependencies": { + "@babel/core": "^7.0.0", + "metro-source-map": "0.64.0", + "nullthrows": "^1.1.1" + } + }, + "node_modules/react-native/node_modules/metro-react-native-babel-preset": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.64.0.tgz", + "integrity": "sha512-HcZ0RWQRuJfpPiaHyFQJzcym+/dDIVUPwUAXWoub/C4GkGu+mPjp8vqK6g0FxokCnnI2TK0gZTza2IDfiNNscQ==", + "dependencies": { + "@babel/core": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.2.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-exponentiation-operator": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-assign": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "react-refresh": "^0.4.0" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/react-native/node_modules/metro-react-native-babel-transformer": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.64.0.tgz", + "integrity": "sha512-K1sHO3ODBFCr7uEiCQ4RvVr+cQg0EHQF8ChVPnecGh/WDD8udrTq9ECwB0dRfMjAvlsHtRUlJm6ZSI8UPgum2w==", + "dependencies": { + "@babel/core": "^7.0.0", + "babel-preset-fbjs": "^3.3.0", + "metro-babel-transformer": "0.64.0", + "metro-react-native-babel-preset": "0.64.0", + "metro-source-map": "0.64.0", + "nullthrows": "^1.1.1" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/react-native/node_modules/metro-source-map": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.64.0.tgz", + "integrity": "sha512-OCG2rtcp5cLEGYvAbfkl6mEc0J2FPRP4/UCEly+juBk7hawS9bCBMBfhJm/HIsvY1frk6nT2Vsl1O8YBbwyx2g==", + "dependencies": { + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "invariant": "^2.2.4", + "metro-symbolicate": "0.64.0", + "nullthrows": "^1.1.1", + "ob1": "0.64.0", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + } + }, + "node_modules/react-native/node_modules/metro-symbolicate": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.64.0.tgz", + "integrity": "sha512-qIi+YRrDWnLVmydj6gwidYLPaBsakZRibGWSspuXgHAxOI3UuLwlo4dpQ73Et0gyHjI7ZvRMRY8JPiOntf9AQQ==", + "dependencies": { + "invariant": "^2.2.4", + "metro-source-map": "0.64.0", + "nullthrows": "^1.1.1", + "source-map": "^0.5.6", + "through2": "^2.0.1", + "vlq": "^1.0.0" + }, + "bin": { + "metro-symbolicate": "src/index.js" + }, + "engines": { + "node": ">=8.3" + } + }, + "node_modules/react-native/node_modules/ob1": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.64.0.tgz", + "integrity": "sha512-CO1N+5dhvy+MoAwxz8+fymEUcwsT4a+wHhrHFb02LppcJdHxgcBWviwEhUwKOD2kLMQ7ijrrzybOqpGcqEtvpQ==" + }, + "node_modules/react-native/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-native/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/react-native/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/react-native/node_modules/promise": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", + "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/react-native/node_modules/scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/react-native/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/react-native/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/react-native/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/react-redux": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.4.tgz", + "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" + }, + "peerDependencies": { + "react": "^16.8.3 || ^17" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/react-refresh": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", + "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "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" + } + }, + "node_modules/readable-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/recast": { + "version": "0.20.4", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.4.tgz", + "integrity": "sha512-6qLIBGGRcwjrTZGIiBpJVC/NeuXpogXNyRQpqU1zWPUigCphvApoCs9KIwDYh1eDuJ6dAFlQoi/QUyE5KQ6RBQ==", + "dependencies": { + "ast-types": "0.14.2", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/recast/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/redux": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.0.tgz", + "integrity": "sha512-uI2dQN43zqLWCt6B/BMGRMY6db7TTY4qeHHfGeKb3EOhmOKjU3KdWvNLJyqaHRksv/ErdNH7cFZWg9jXtewy4g==", + "dependencies": { + "@babel/runtime": "^7.9.2" + } + }, + "node_modules/redux-persist": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-6.0.0.tgz", + "integrity": "sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ==", + "peerDependencies": { + "redux": ">4.0.0" + } + }, + "node_modules/redux-thunk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz", + "integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==" + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "node_modules/regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dependencies": { + "regenerate": "^1.4.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" + }, + "node_modules/regjsparser": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", + "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "node_modules/reselect": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-3.0.1.tgz", + "integrity": "sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=" + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated" + }, + "node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "engines": { + "node": ">=0.12" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rn-sliding-up-panel": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rn-sliding-up-panel/-/rn-sliding-up-panel-2.4.5.tgz", + "integrity": "sha512-Z8TEJE8KMjx0s9P4ikUDAlvyDgvF9n/6QR5GIUi8iWRKhiYJ4sddKjAIDYVI5yT1q+rJu+iAo7Z310H3yCb3sQ==", + "dependencies": { + "clamp": "^1.0.1", + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "react": ">=16.x", + "react-native": ">=0.47" + } + }, + "node_modules/rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "engines": { + "node": "6.* || >= 7.*" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", + "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" + }, + "bin": { + "sane": "src/cli.js" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/sane/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/sane/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "node_modules/serialize-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", + "integrity": "sha1-ULZ51WNc34Rme9yOWa9OW4HV9go=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "dependencies": { + "array-filter": "~0.0.0", + "array-map": "~0.0.0", + "array-reduce": "~0.0.0", + "jsonify": "~0.0.0" + } + }, + "node_modules/shell-quote/node_modules/array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=" + }, + "node_modules/shelljs": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", + "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "node_modules/simple-plist": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.1.1.tgz", + "integrity": "sha512-pKMCVKvZbZTsqYR6RKgLfBHkh2cV89GXcA/0CVPje3sOiNOnXA8+rp/ciAMZ7JRaUdLzlEM6JFfUn+fS6Nt3hg==", + "dependencies": { + "bplist-creator": "0.0.8", + "bplist-parser": "0.2.0", + "plist": "^3.0.1" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/slugify": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.5.0.tgz", + "integrity": "sha512-Q2UPZ2udzquy1ElHfOLILMBMqBEXkiD3wE75qtBvV+FsDdZZjUqPZ44vqLTejAVq+wLLHacOMcENnP8+ZbzmIA==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "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" + } + }, + "node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" + }, + "node_modules/split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "node_modules/stackframe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", + "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==" + }, + "node_modules/stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "dependencies": { + "type-fest": "^0.7.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stream-buffers": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=", + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=", + "engines": { + "node": ">=4" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-hash-64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string-hash-64/-/string-hash-64-1.0.3.tgz", + "integrity": "sha512-D5OKWKvDhyVWWn2x5Y9b+37NUllks34q1dCDhk/vYcso9fmhs+Tl3KR/gE4v5UNj2UA35cnX4KdVVGkG1deKqw==" + }, + "node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", + "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sudo-prompt": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", + "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==" + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, + "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" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.6.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", + "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/table/node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/table/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/table/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/table/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/table/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/temp": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", + "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", + "engines": [ + "node >=0.8.0" + ], + "dependencies": { + "os-tmpdir": "^1.0.0", + "rimraf": "~2.2.6" + } + }, + "node_modules/temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/temp/node_modules/rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/tempy": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz", + "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==", + "dependencies": { + "temp-dir": "^1.0.0", + "type-fest": "^0.3.1", + "unique-string": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==" + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/timm": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", + "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==" + }, + "node_modules/tiny-queue": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tiny-queue/-/tiny-queue-0.2.1.tgz", + "integrity": "sha1-JaZ/LG4lOyypQZd7XvdELvl6YEY=" + }, + "node_modules/tinycolor2": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", + "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==", + "engines": { + "node": "*" + } + }, + "node_modules/tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/typescript": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz", + "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==", + "dev": true, + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "deprecated": "support for ECMAScript is superseded by `uglify-js` as of v3.13.0", + "dependencies": { + "commander": "~2.13.0", + "source-map": "~0.6.1" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uglify-es/node_modules/commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==" + }, + "node_modules/uglify-es/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unimodules-app-loader": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unimodules-app-loader/-/unimodules-app-loader-2.1.0.tgz", + "integrity": "sha512-W+D+hVXq6jOvBm7QVwODPENz6Lupj73QequNNG+6GCTkqn4ybq/lba9IQvJQT2QzdL3luVHin+eym18cDblMlg==" + }, + "node_modules/unimodules-barcode-scanner-interface": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/unimodules-barcode-scanner-interface/-/unimodules-barcode-scanner-interface-6.1.0.tgz", + "integrity": "sha512-+McBDniXReXNS8PnGDjIyDikb+cRXSfsZMLsF0gohEEV0xdA6HhPvFA0ryv65j2NKOyIiWmEHjv+yDOoewDq3w==" + }, + "node_modules/unimodules-camera-interface": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/unimodules-camera-interface/-/unimodules-camera-interface-6.1.0.tgz", + "integrity": "sha512-Rbszrh54kIB4vA+AzDWFXplBz1UrxQNR6Ls0eJDAKffbjDfyQIP6SgIPjUlzqGVnzknyZ1SMGiFFSFCM4BCOAw==" + }, + "node_modules/unimodules-constants-interface": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/unimodules-constants-interface/-/unimodules-constants-interface-6.1.0.tgz", + "integrity": "sha512-uPLFGufbdefRQeINyUfkw2mVJJg+6kH23RR4ATfUAsrD6vGLuONwduHvRwh+rcL9fzPVM4jsfH6iATrolmiatg==" + }, + "node_modules/unimodules-face-detector-interface": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/unimodules-face-detector-interface/-/unimodules-face-detector-interface-6.1.0.tgz", + "integrity": "sha512-L2E8a2OjMPxfVh/OGt6Y5HWbEaJ9h3Hkmvx02GCferBPKgN3dcxFMaI53d1BVV9QA3r4YuLBP6RrolG/qy/r7A==" + }, + "node_modules/unimodules-file-system-interface": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/unimodules-file-system-interface/-/unimodules-file-system-interface-6.1.0.tgz", + "integrity": "sha512-iJGm6nWF+PhxqFbeqC2Ku4XjglbL9z7aofkSX5S7bZ3Oi4v1NO1UOe9nczU17Ps19sfYZJgkiD4FiQaFCmAnKg==" + }, + "node_modules/unimodules-font-interface": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/unimodules-font-interface/-/unimodules-font-interface-6.1.0.tgz", + "integrity": "sha512-OfSeWx9ew2SNENj/HhctfPU7hqeW0bzVZYGGJ0M6RNcRRWzwA6ltawyYwtuvRe/EEU3LwrFUSKPMCi9867hLyw==" + }, + "node_modules/unimodules-image-loader-interface": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/unimodules-image-loader-interface/-/unimodules-image-loader-interface-6.1.0.tgz", + "integrity": "sha512-o8hZI6J6DGYyo2xSH6J+ipxME0blNfmaWU3P2Y2AUVxbEPdgjT2sVmufRWMKGhrt7gaNW4xF/JUbF9lq4Rui7w==" + }, + "node_modules/unimodules-permissions-interface": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/unimodules-permissions-interface/-/unimodules-permissions-interface-6.1.0.tgz", + "integrity": "sha512-jeJx/y+Vn/Cp1/4su5XJ06UBul83MpXkYEqIOAb2jwaikhmj6tNwko7HpKy9OhfGfrhddCzwtedlro8xxZUk9A==" + }, + "node_modules/unimodules-sensors-interface": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/unimodules-sensors-interface/-/unimodules-sensors-interface-6.1.0.tgz", + "integrity": "sha512-tJDOo3p4q4wmhyuwapNjYeON7cd5OSPYr3qDfMgPPg9m6pYM/FdQJ1PKMNb1NJUckpDgQ67Dows2jAdqkNRZSw==" + }, + "node_modules/unimodules-task-manager-interface": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/unimodules-task-manager-interface/-/unimodules-task-manager-interface-6.1.0.tgz", + "integrity": "sha512-wSsuX5fzd3oCCjHvrRFxysmCswhHZbJflVyAWzgSHtyMgxBOZobGN1C0UQ/plcu/JWY2+maTDPpE9OU6wzzzdg==" + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dependencies": { + "crypto-random-string": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated" + }, + "node_modules/url-parse": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", + "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/use-subscription": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/use-subscription/-/use-subscription-1.5.1.tgz", + "integrity": "sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==", + "dependencies": { + "object-assign": "^4.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0" + } + }, + "node_modules/utif": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", + "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", + "dependencies": { + "pako": "^1.0.5" + } + }, + "node_modules/util": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.3.tgz", + "integrity": "sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vlq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", + "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==" + }, + "node_modules/walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dependencies": { + "makeerror": "1.0.x" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "node_modules/which-typed-array": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", + "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==", + "dependencies": { + "available-typed-arrays": "^1.0.2", + "call-bind": "^1.0.0", + "es-abstract": "^1.18.0-next.1", + "foreach": "^2.0.5", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.1", + "is-typed-array": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "node_modules/ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/xcode": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz", + "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==", + "dependencies": { + "simple-plist": "^1.1.0", + "uuid": "^7.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/xcode/node_modules/uuid": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", + "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "dependencies": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/xml-js": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "dependencies": { + "sax": "^1.2.4" + }, + "bin": { + "xml-js": "bin/cli.js" + } + }, + "node_modules/xml-parse-from-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", + "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=" + }, + "node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xml2js/node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmldoc": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.1.2.tgz", + "integrity": "sha512-ruPC/fyPNck2BD1dpz0AZZyrEwMOrWTO5lDdIXS91rs3wtm4j+T8Rp2o+zoOYkkAxJTZRPOSnOGei1egoRmKMQ==", + "dependencies": { + "sax": "^1.2.1" + } + }, + "node_modules/xmldom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.5.0.tgz", + "integrity": "sha512-Foaj5FXVzgn7xFzsKeNIde9g6aFBxTPi37iwsno8QvApmtg7KYrr+OPyRHcJF7dud2a5nGRBXK3n0dL62Gf7PA==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/compat-data": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", + "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==" + }, + "@babel/core": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", + "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.9.0", + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helpers": "^7.9.0", + "@babel/parser": "^7.9.0", + "@babel/template": "^7.8.6", + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@babel/generator": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.0.tgz", + "integrity": "sha512-C6u00HbmsrNPug6A+CiNl8rEys7TsdcXwg12BHi2ca5rUfAs3+UwZsuDQSXnc+wCElCXMB8gMaJ3YXDdh8fAlg==", + "requires": { + "@babel/types": "^7.14.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", + "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", + "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", + "requires": { + "@babel/helper-explode-assignable-expression": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", + "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", + "requires": { + "@babel/compat-data": "^7.13.15", + "@babel/helper-validator-option": "^7.12.17", + "browserslist": "^4.14.5", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.0.tgz", + "integrity": "sha512-6pXDPguA5zC40Y8oI5mqr+jEUpjMJonKvknvA+vD8CYDz5uuXEwWBK8sRAsE/t3gfb1k15AQb9RhwpscC4nUJQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.12.13", + "@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": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz", + "integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "regexpu-core": "^4.7.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz", + "integrity": "sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==", + "requires": { + "@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" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", + "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", + "requires": { + "@babel/types": "^7.13.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", + "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", + "requires": { + "@babel/traverse": "^7.13.15", + "@babel/types": "^7.13.16" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-module-imports": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-module-transforms": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", + "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", + "requires": { + "@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.0", + "@babel/types": "^7.14.0" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", + "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-wrap-function": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", + "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "requires": { + "@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": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" + }, + "@babel/helper-validator-option": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==" + }, + "@babel/helper-wrap-function": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", + "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", + "requires": { + "@babel/helper-function-name": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "@babel/helpers": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "requires": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" + } + }, + "@babel/highlight": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + } + } + }, + "@babel/parser": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.0.tgz", + "integrity": "sha512-AHbfoxesfBALg33idaTBVUkLnfXtsgvJREf93p4p0Lwsz4ppfE7g1tpEXVm4vrxUcH4DVhAa9Z1m1zqf9WUC7Q==" + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.15.tgz", + "integrity": "sha512-VapibkWzFeoa6ubXy/NgV5U2U4MVnUlvnx6wo1XhlsaTrLYWE0UFpDQsVrmn22q5CzeloqJ8gEMHSKxuee6ZdA==", + "requires": { + "@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": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.13.tgz", + "integrity": "sha512-8SCJ0Ddrpwv4T7Gwb33EmW1V9PY5lggTO+A8WjyIwxrSHDUyBw4MtF96ifn1n8H806YlxbVCoKXbbmzD6RD+cA==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.13.15.tgz", + "integrity": "sha512-ibAMAqUm97yzi+LPgdr5Nqb9CMkeieGHvwPg1ywSGjZrZHQEGqE01HmOio8kxRpA/+VtOHouIVy2FMpBbtltjA==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.13.11", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-decorators": "^7.12.13" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz", + "integrity": "sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-default-from": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.12.13.tgz", + "integrity": "sha512-idIsBT+DGXdOHL82U+8bwX4goHm/z10g8sGGrQroh+HCRcm7mDv/luaGdWJQMTuCX2FsdXS7X0Nyyzp4znAPJA==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-export-default-from": "^7.12.13" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz", + "integrity": "sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz", + "integrity": "sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz", + "integrity": "sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz", + "integrity": "sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz", + "integrity": "sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz", + "integrity": "sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==", + "requires": { + "@babel/compat-data": "^7.13.8", + "@babel/helper-compilation-targets": "^7.13.8", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.13.0" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz", + "integrity": "sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz", + "integrity": "sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ==", + "requires": { + "@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": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", + "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", + "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.13.tgz", + "integrity": "sha512-Rw6aIXGuqDLr6/LoBBYE57nKOzQpz/aDkKlMqEwH+Vp0MXbG6H/TfRjaY343LKxzAKAMXIHsQ8JzaZKuDZ9MwA==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-default-from": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.12.13.tgz", + "integrity": "sha512-gVry0zqoums0hA+EniCYK3gABhjYSLX1dVuwYpPw9DrLNA4/GovXySHVg4FGRsZht09ON/5C2NVx3keq+qqVGQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-flow": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.13.tgz", + "integrity": "sha512-J/RYxnlSLXZLVR7wTRsozxKT8qbsx1mNKJzXEEjQ0Kjx1ZACcyHgbanNWNCFtc36IzuWhYWPpvJFFoexoOWFmA==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz", + "integrity": "sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", + "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz", + "integrity": "sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", + "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", + "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", + "requires": { + "@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": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", + "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.13.16.tgz", + "integrity": "sha512-ad3PHUxGnfWF4Efd3qFuznEtZKoBp0spS+DgqzVzRPV7urEBvPLue3y2j80w4Jf2YLzZHj8TOv/Lmvdmh3b2xg==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz", + "integrity": "sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-split-export-declaration": "^7.12.13", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", + "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.13.17", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz", + "integrity": "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", + "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", + "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", + "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-flow-strip-types": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.13.0.tgz", + "integrity": "sha512-EXAGFMJgSX8gxWD7PZtW/P6M+z74jpx3wm/+9pn+c2dOawPpBkUX7BrfyPvo6ZpXbgRIEuwgwDb/MGlKvu2pOg==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-flow": "^7.12.13" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", + "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", + "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", + "requires": { + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", + "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", + "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.0.tgz", + "integrity": "sha512-CF4c5LX4LQ03LebQxJ5JZes2OYjzBuk1TdiF7cG7d5dK4lAdw9NZmaxq5K/mouUdNeqwz3TNjnW6v01UqUNgpQ==", + "requires": { + "@babel/helper-module-transforms": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", + "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", + "requires": { + "@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": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", + "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", + "requires": { + "@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": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", + "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", + "requires": { + "@babel/helper-module-transforms": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", + "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", + "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-object-assign": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.12.13.tgz", + "integrity": "sha512-4QxDMc0lAOkIBSfCrnSGbAJ+4epDBF2XXwcLXuBcG1xl9u7LrktNVD4+LwhL47XuKVPQ7R25e/WdcV+h97HyZA==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", + "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-replace-supers": "^7.12.13" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz", + "integrity": "sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", + "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.13.tgz", + "integrity": "sha512-MprESJzI9O5VnJZrL7gg1MpdqmiFcUv41Jc7SahxYsNP2kDkFqClxxTZq+1Qv4AFCamm+GXMRDQINNn+qrxmiA==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz", + "integrity": "sha512-jcEI2UqIcpCqB5U5DRxIl0tQEProI2gcu+g8VTIqxLO5Iidojb4d77q+fwGseCvd8af/lJ9masp4QWzBXFE2xA==", + "requires": { + "@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-jsx-self": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.13.tgz", + "integrity": "sha512-FXYw98TTJ125GVCCkFLZXlZ1qGcsYqNQhVBQcZjyrwf8FEUtVfKIoidnO8S0q+KBQpDYNTmiGo1gn67Vti04lQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.13.tgz", + "integrity": "sha512-O5JJi6fyfih0WfDgIJXksSPhGP/G0fQpfxYy87sDc+1sFmsCS6wr3aAn+whbzkhbjtq4VMqLRaSzR6IsshIC0Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", + "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", + "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.15.tgz", + "integrity": "sha512-d+ezl76gx6Jal08XngJUkXM4lFXK/5Ikl9Mh4HKDxSfGJXmZ9xG64XT2oivBzfxb/eQ62VfvoMkaCZUKJMVrBA==", + "requires": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-plugin-utils": "^7.13.0", + "babel-plugin-polyfill-corejs2": "^0.2.0", + "babel-plugin-polyfill-corejs3": "^0.2.0", + "babel-plugin-polyfill-regenerator": "^0.2.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", + "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", + "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", + "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", + "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", + "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.13.0.tgz", + "integrity": "sha512-elQEwluzaU8R8dbVuW2Q2Y8Nznf7hnjM7+DSCd14Lo5fF63C9qNLbwZYbmZrtV9/ySpSUpkRpQXvJb6xyu4hCQ==", + "requires": { + "@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": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", + "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", + "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/preset-env": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.17.tgz", + "integrity": "sha512-9PMijx8zFbCwTHrd2P4PJR5nWGH3zWebx2OcpTjqQrHhCiL2ssSR2Sc9ko2BsI2VmVBfoaQmPrlMTCui4LmXQg==", + "requires": { + "@babel/compat-data": "^7.12.13", + "@babel/helper-compilation-targets": "^7.12.17", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-validator-option": "^7.12.17", + "@babel/plugin-proposal-async-generator-functions": "^7.12.13", + "@babel/plugin-proposal-class-properties": "^7.12.13", + "@babel/plugin-proposal-dynamic-import": "^7.12.17", + "@babel/plugin-proposal-export-namespace-from": "^7.12.13", + "@babel/plugin-proposal-json-strings": "^7.12.13", + "@babel/plugin-proposal-logical-assignment-operators": "^7.12.13", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.13", + "@babel/plugin-proposal-numeric-separator": "^7.12.13", + "@babel/plugin-proposal-object-rest-spread": "^7.12.13", + "@babel/plugin-proposal-optional-catch-binding": "^7.12.13", + "@babel/plugin-proposal-optional-chaining": "^7.12.17", + "@babel/plugin-proposal-private-methods": "^7.12.13", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@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.13", + "@babel/plugin-transform-arrow-functions": "^7.12.13", + "@babel/plugin-transform-async-to-generator": "^7.12.13", + "@babel/plugin-transform-block-scoped-functions": "^7.12.13", + "@babel/plugin-transform-block-scoping": "^7.12.13", + "@babel/plugin-transform-classes": "^7.12.13", + "@babel/plugin-transform-computed-properties": "^7.12.13", + "@babel/plugin-transform-destructuring": "^7.12.13", + "@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.12.13", + "@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.12.13", + "@babel/plugin-transform-modules-commonjs": "^7.12.13", + "@babel/plugin-transform-modules-systemjs": "^7.12.13", + "@babel/plugin-transform-modules-umd": "^7.12.13", + "@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.12.13", + "@babel/plugin-transform-property-literals": "^7.12.13", + "@babel/plugin-transform-regenerator": "^7.12.13", + "@babel/plugin-transform-reserved-words": "^7.12.13", + "@babel/plugin-transform-shorthand-properties": "^7.12.13", + "@babel/plugin-transform-spread": "^7.12.13", + "@babel/plugin-transform-sticky-regex": "^7.12.13", + "@babel/plugin-transform-template-literals": "^7.12.13", + "@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.3", + "@babel/types": "^7.12.17", + "core-js-compat": "^3.8.0", + "semver": "^5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@babel/preset-flow": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.13.13.tgz", + "integrity": "sha512-MDtwtamMifqq3R2mC7l3A3uFalUb3NH5TIBQWjN/epEPlZktcLq4se3J+ivckKrLMGsR7H9LW8+pYuIUN9tsKg==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-option": "^7.12.17", + "@babel/plugin-transform-flow-strip-types": "^7.13.0" + } + }, + "@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "requires": { + "@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-typescript": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.12.17.tgz", + "integrity": "sha512-T513uT4VSThRcmWeqcLkITKJ1oGQho9wfWuhQm10paClQkp1qyd0Wf8mvC8Se7UYssMyRSj4tZYpVTkCmAK/mA==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-validator-option": "^7.12.17", + "@babel/plugin-transform-typescript": "^7.12.17" + } + }, + "@babel/register": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.13.16.tgz", + "integrity": "sha512-dh2t11ysujTwByQjXNgJ48QZ2zcXKQVdV8s0TbeMI0flmtGWCdTwK9tJiACHXPLmncm5+ktNn/diojA45JE4jg==", + "requires": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.0", + "source-map-support": "^0.5.16" + } + }, + "@babel/runtime": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", + "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", + "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.0", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.0", + "@babel/types": "^7.14.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.0.tgz", + "integrity": "sha512-O2LVLdcnWplaGxiPBz12d0HcdN8QdxdsWYhz5LSeuukV/5mn2xUUc3gBeU4QBYPJ18g/UToe8F532XJ608prmg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" + } + }, + "@callstack/react-theme-provider": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@callstack/react-theme-provider/-/react-theme-provider-3.0.5.tgz", + "integrity": "sha512-Iec+ybWN0FvNj87sD3oWo/49edGUP0UOSdMnzCJEFJIDYr992ECIuOV89burAAh2/ibPCxgLiK6dmgv2mO/8Tg==", + "requires": { + "deepmerge": "^3.2.0", + "hoist-non-react-statics": "^3.3.0" + } + }, + "@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, + "@egjs/hammerjs": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/@egjs/hammerjs/-/hammerjs-2.0.17.tgz", + "integrity": "sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==", + "requires": { + "@types/hammerjs": "^2.0.36" + } + }, + "@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.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" + }, + "dependencies": { + "globals": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", + "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "@expo/config": { + "version": "3.3.38", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-3.3.38.tgz", + "integrity": "sha512-0SsvF7yTy+kdJaAc2W75yhwnaXIRasnA1Vygna83tlPhCx6ynIBzTbJAvdkddSk5euUTJpXc5nePaflGvNboXw==", + "requires": { + "@babel/core": "7.9.0", + "@babel/plugin-proposal-class-properties": "~7.12.13", + "@babel/preset-env": "~7.12.13", + "@babel/preset-typescript": "~7.12.13", + "@expo/config-plugins": "1.0.28", + "@expo/config-types": "^40.0.0-beta.2", + "@expo/json-file": "8.2.29", + "fs-extra": "9.0.0", + "getenv": "^1.0.0", + "glob": "7.1.6", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0", + "semver": "7.3.2", + "slugify": "^1.3.4" + } + }, + "@expo/config-plugins": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-1.0.28.tgz", + "integrity": "sha512-i5SpC6U3LjRQlwi1xM4SRj8dR2Qm+0dykPo0GeesByB7IvT36AT1ZjI7VjecuoZ6yKbLpaa5tWvU3JGObxIPSw==", + "requires": { + "@expo/config-types": "^40.0.0-beta.2", + "@expo/configure-splash-screen": "0.3.4", + "@expo/image-utils": "0.3.13", + "@expo/json-file": "8.2.29", + "@expo/plist": "0.0.12", + "find-up": "~5.0.0", + "fs-extra": "9.0.0", + "getenv": "^1.0.0", + "glob": "7.1.6", + "resolve-from": "^5.0.0", + "slash": "^3.0.0", + "slugify": "^1.3.4", + "xcode": "^3.0.1", + "xml2js": "^0.4.23" + } + }, + "@expo/config-types": { + "version": "40.0.0-beta.2", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-40.0.0-beta.2.tgz", + "integrity": "sha512-t9pHCQMXOP4nwd7LGXuHkLlFy0JdfknRSCAeVF4Kw2/y+5OBbR9hW9ZVnetpBf0kORrekgiI7K/qDaa3hh5+Qg==" + }, + "@expo/configure-splash-screen": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@expo/configure-splash-screen/-/configure-splash-screen-0.3.4.tgz", + "integrity": "sha512-HsukM03X5/EXSucVsLN/oLqyFq/1jAjpADkgU1HLaezFpkr+TOquI6yDwdDp1450kcm891PE/SYJ+mCdPxzDLw==", + "requires": { + "color-string": "^1.5.3", + "commander": "^5.1.0", + "core-js": "^3.6.5", + "deep-equal": "^2.0.3", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "lodash": "^4.17.15", + "pngjs": "^5.0.0", + "xcode": "^3.0.0", + "xml-js": "^1.6.11" + } + }, + "@expo/image-utils": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.3.13.tgz", + "integrity": "sha512-BpKoFVJBjG9H5AU040Skrm3R2uDGpWXBU/4TivB5H10cyJphoJKp3GNJVPHYLOVc70OtAxjWDIhLMW6xsWfrgw==", + "requires": { + "@expo/spawn-async": "1.5.0", + "chalk": "^4.0.0", + "fs-extra": "9.0.0", + "getenv": "^1.0.0", + "jimp": "0.12.1", + "mime": "^2.4.4", + "node-fetch": "^2.6.0", + "parse-png": "^2.1.0", + "resolve-from": "^5.0.0", + "semver": "7.3.2", + "tempy": "0.3.0" + } + }, + "@expo/json-file": { + "version": "8.2.29", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.2.29.tgz", + "integrity": "sha512-9C8XwpJiJN9fyClnnNDSTh034zJU9hon6MCUqbBa4dZYQN7OZ00KFZEpbtjy+FndE7YD+KagDxRD6O1HS5vU0g==", + "requires": { + "@babel/code-frame": "~7.10.4", + "fs-extra": "9.0.0", + "json5": "^1.0.1", + "write-file-atomic": "^2.3.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "@expo/metro-config": { + "version": "0.1.64", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.1.64.tgz", + "integrity": "sha512-ooD+XOVGnKPIIZbyfVTvMeQ3p9HpRt4aNCehSM6H1ueQm8+IpVwrhw8sJjL5xr+FVxFqj0+Ga9DI8d0AXS8U4g==", + "requires": { + "@expo/config": "3.3.38", + "chalk": "^4.1.0", + "getenv": "^1.0.0", + "metro-react-native-babel-transformer": "^0.59.0" + } + }, + "@expo/plist": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.0.12.tgz", + "integrity": "sha512-anGvLk58fxfeHY2PbtH79VxhrLDPGd+173pHYYXNg9HlfbrEVLI2Vo0ZBOrr/cYr7cgU5A/WNcMphRoO/KfYZQ==", + "requires": { + "base64-js": "^1.2.3", + "xmlbuilder": "^14.0.0", + "xmldom": "~0.5.0" + }, + "dependencies": { + "xmlbuilder": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-14.0.0.tgz", + "integrity": "sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg==" + } + } + }, + "@expo/prebuild-config": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-2.0.3.tgz", + "integrity": "sha512-ruZHhdEB0nv7mHwssUFXeYeGQ8Atfeben0CdO461cmjQ/CwxmlusrkFdGfMucj5CocR9WujBr/nIMvfm4FIDIA==", + "requires": { + "@expo/config": "5.0.3", + "@expo/config-plugins": "3.0.3", + "@expo/config-types": "^41.0.0", + "@expo/image-utils": "~0.3.14", + "@expo/json-file": "^8.2.30", + "debug": "^4.3.1", + "fs-extra": "^9.0.0", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@expo/config": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-5.0.3.tgz", + "integrity": "sha512-FMv2Jk/v3QZXaNN/mGKqj3wLvsbAa1RjtSTNhJ7QxMiSLl6vlmfMutmKyBiuzk2KDCbELR65JkDf15m4sAZCGg==", + "requires": { + "@babel/core": "7.9.0", + "@babel/plugin-proposal-class-properties": "~7.12.13", + "@babel/preset-env": "~7.12.13", + "@babel/preset-typescript": "~7.12.13", + "@expo/config-plugins": "3.0.3", + "@expo/config-types": "^41.0.0", + "@expo/json-file": "8.2.30", + "fs-extra": "9.0.0", + "getenv": "^1.0.0", + "glob": "7.1.6", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0", + "semver": "7.3.2", + "slugify": "^1.3.4" + } + }, + "@expo/config-plugins": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-3.0.3.tgz", + "integrity": "sha512-+DWHd/2L3O+njVercxGSzcBUXMm5CSzdvIK+7dU+FRhoiF57y2NzBhfNQcReYx/EY1coBrYOsMtENPhV1tWoWQ==", + "requires": { + "@expo/config-types": "^41.0.0", + "@expo/json-file": "8.2.30", + "@expo/plist": "0.0.13", + "debug": "^4.3.1", + "find-up": "~5.0.0", + "fs-extra": "9.0.0", + "getenv": "^1.0.0", + "glob": "7.1.6", + "resolve-from": "^5.0.0", + "slash": "^3.0.0", + "xcode": "^3.0.1", + "xml2js": "^0.4.23" + } + }, + "@expo/config-types": { + "version": "41.0.0", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-41.0.0.tgz", + "integrity": "sha512-Ax0pHuY5OQaSrzplOkT9DdpdmNzaVDnq9VySb4Ujq7UJ4U4jriLy8u93W98zunOXpcu0iiKubPsqD6lCiq0pig==" + }, + "@expo/image-utils": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.3.14.tgz", + "integrity": "sha512-n+JkLZ71CWuNKLVVsPTzMGRwmbeKiVQw/2b99Ro7znCKzJy3tyE5T2C6WBvYh/5h/hjg8TqEODjXXWucRIzMXA==", + "requires": { + "@expo/spawn-async": "1.5.0", + "chalk": "^4.0.0", + "fs-extra": "9.0.0", + "getenv": "^1.0.0", + "jimp": "0.12.1", + "mime": "^2.4.4", + "node-fetch": "^2.6.0", + "parse-png": "^2.1.0", + "resolve-from": "^5.0.0", + "semver": "7.3.2", + "tempy": "0.3.0" + } + }, + "@expo/json-file": { + "version": "8.2.30", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.2.30.tgz", + "integrity": "sha512-vrgGyPEXBoFI5NY70IegusCSoSVIFV3T3ry4tjJg1MFQKTUlR7E0r+8g8XR6qC705rc2PawaZQjqXMAVtV6s2A==", + "requires": { + "@babel/code-frame": "~7.10.4", + "fs-extra": "9.0.0", + "json5": "^1.0.1", + "write-file-atomic": "^2.3.0" + } + }, + "@expo/plist": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.0.13.tgz", + "integrity": "sha512-zGPSq9OrCn7lWvwLLHLpHUUq2E40KptUFXn53xyZXPViI0k9lbApcR9KlonQZ95C+ELsf0BQ3gRficwK92Ivcw==", + "requires": { + "base64-js": "^1.2.3", + "xmlbuilder": "^14.0.0", + "xmldom": "~0.5.0" + } + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "xmlbuilder": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-14.0.0.tgz", + "integrity": "sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg==" + } + } + }, + "@expo/spawn-async": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.5.0.tgz", + "integrity": "sha512-LB7jWkqrHo+5fJHNrLAFdimuSXQ2MQ4lA7SQW5bf/HbsXuV2VrT/jN/M8f/KoWt0uJMGN4k/j7Opx4AvOOxSew==", + "requires": { + "cross-spawn": "^6.0.5" + } + }, + "@expo/vector-icons": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-12.0.4.tgz", + "integrity": "sha512-/EFbXri7jZmqj1jTY6wpauvMN0DY0Epic003d43yWqrScLlVERaxXrOR07BNuCZvVMHBAzXN4VbOzUUUTq6j8g==", + "requires": { + "lodash.frompairs": "^4.0.1", + "lodash.isequal": "^4.5.0", + "lodash.isstring": "^4.0.1", + "lodash.omit": "^4.5.0", + "lodash.pick": "^4.4.0", + "lodash.template": "^4.5.0" + } + }, + "@expo/websql": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@expo/websql/-/websql-1.0.1.tgz", + "integrity": "sha1-//DPnBuqH3D54dZYt8OaQg2bEKk=", + "requires": { + "argsarray": "^0.0.1", + "immediate": "^3.2.2", + "noop-fn": "^1.0.0", + "pouchdb-collections": "^1.0.1", + "tiny-queue": "^0.2.1" + } + }, + "@hapi/hoek": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz", + "integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==" + }, + "@hapi/topo": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.0.0.tgz", + "integrity": "sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==", + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true + }, + "@ide/backoff": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@ide/backoff/-/backoff-1.0.0.tgz", + "integrity": "sha512-F0YfUDjvT+Mtt/R4xdl2X0EYCHMMiJqNLdxHD++jDT5ydEFIyqbCHh51Qx2E211dgZprPKhV7sHmnXKpLuvc5g==" + }, + "@jest/create-cache-key-function": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-26.6.2.tgz", + "integrity": "sha512-LgEuqU1f/7WEIPYqwLPIvvHuc1sB6gMVbT6zWhin3txYUNYK/kGQrC1F2WR4gR34YlI9bBtViTm5z98RqVZAaw==", + "requires": { + "@jest/types": "^26.6.2" + } + }, + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@jimp/bmp": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.12.1.tgz", + "integrity": "sha512-t16IamuBMv4GiGa1VAMzsgrVKVANxXG81wXECzbikOUkUv7pKJ2vHZDgkLBEsZQ9sAvFCneM1+yoSRpuENrfVQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1", + "bmp-js": "^0.1.0" + } + }, + "@jimp/core": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.12.1.tgz", + "integrity": "sha512-mWfjExYEjHxBal+1gPesGChOQBSpxO7WUQkrO9KM7orboitOdQ15G5UA75ce7XVZ+5t+FQPOLmVkVZzzTQSEJA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1", + "any-base": "^1.1.0", + "buffer": "^5.2.0", + "exif-parser": "^0.1.12", + "file-type": "^9.0.0", + "load-bmfont": "^1.3.1", + "mkdirp": "^0.5.1", + "phin": "^2.9.1", + "pixelmatch": "^4.0.2", + "tinycolor2": "^1.4.1" + } + }, + "@jimp/custom": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.12.1.tgz", + "integrity": "sha512-bVClp8FEJ/11GFTKeRTrfH7NgUWvVO5/tQzO/68aOwMIhbz9BOYQGh533K9+mSy29VjZJo8jxZ0C9ZwYHuFwfA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/core": "^0.12.1" + } + }, + "@jimp/gif": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.12.1.tgz", + "integrity": "sha512-cGn/AcvMGUGcqR6ByClGSnrja4AYmTwsGVXTQ1+EmfAdTiy6ztGgZCTDpZ/tq4SpdHXwm9wDHez7damKhTrH0g==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1", + "omggif": "^1.0.9" + } + }, + "@jimp/jpeg": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.12.1.tgz", + "integrity": "sha512-UoCUHbKLj2CDCETd7LrJnmK/ExDsSfJXmc1pKkfgomvepjXogdl2KTHf141wL6D+9CfSD2VBWQLC5TvjMvcr9A==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1", + "jpeg-js": "^0.4.0" + } + }, + "@jimp/plugin-blit": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.12.1.tgz", + "integrity": "sha512-VRBB6bx6EpQuaH0WX8ytlGNqUQcmuxXBbzL3e+cD0W6MluYibzQy089okvXcyUS72Q+qpSMmUDCVr3pDqLAsSA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + } + }, + "@jimp/plugin-blur": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.12.1.tgz", + "integrity": "sha512-rTFY0yrwVJFNgNsAlYGn2GYCRLVEcPQ6cqAuhNylXuR/7oH3Acul+ZWafeKtvN8D8uMlth/6VP74gruXvwffZw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + } + }, + "@jimp/plugin-circle": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.12.1.tgz", + "integrity": "sha512-+/OiBDjby7RBbQoDX8ZsqJRr1PaGPdTaaKUVGAsrE7KCNO9ODYNFAizB9lpidXkGgJ4Wx5R4mJy21i22oY/a4Q==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + } + }, + "@jimp/plugin-color": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.12.1.tgz", + "integrity": "sha512-xlnK/msWN4uZ+Bu7+UrCs9oMzTSA9QE0jWFnF3h0aBsD8t1LGxozkckHe8nHtC/y/sxIa8BGKSfkiaW+r6FbnA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1", + "tinycolor2": "^1.4.1" + } + }, + "@jimp/plugin-contain": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.12.1.tgz", + "integrity": "sha512-WZ/D6G0jhnBh2bkBh610PEh/caGhAUIAxYLsQsfSSlOxPsDhbj3S6hMbFKRgnDvf0hsd5zTIA0j1B0UG4kh18A==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + } + }, + "@jimp/plugin-cover": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.12.1.tgz", + "integrity": "sha512-ddWwTQO40GcabJ2UwUYCeuNxnjV4rBTiLprnjGMqAJCzdz3q3Sp20FkRf+H+E22k2v2LHss8dIOFOF4i6ycr9Q==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + } + }, + "@jimp/plugin-crop": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.12.1.tgz", + "integrity": "sha512-CKjVkrNO8FDZKYVpMireQW4SgKBSOdF+Ip/1sWssHHe77+jGEKqOjhYju+VhT3dZJ3+75rJNI9II7Kethp+rTw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + } + }, + "@jimp/plugin-displace": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.12.1.tgz", + "integrity": "sha512-MQAw2iuf1/bVJ6P95WWTLA+WBjvIZ7TeGBerkvBaTK8oWdj+NSLNRIYOIoyPbZ7DTL8f1SN4Vd6KD6BZaoWrwg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + } + }, + "@jimp/plugin-dither": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.12.1.tgz", + "integrity": "sha512-mCrBHdx2ViTLJDLcrobqGLlGhZF/Mq41bURWlElQ2ArvrQ3/xR52We9DNDfC08oQ2JVb6q3v1GnCCdn0KNojGQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + } + }, + "@jimp/plugin-fisheye": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.12.1.tgz", + "integrity": "sha512-CHvYSXtHNplzkkYzB44tENPDmvfUHiYCnAETTY+Hx58kZ0w8ERZ+OiLhUmiBcvH/QHm/US1iiNjgGUAfeQX6dg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + } + }, + "@jimp/plugin-flip": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.12.1.tgz", + "integrity": "sha512-xi+Yayrnln8A/C9E3yQBExjxwBSeCkt/ZQg1CxLgszVyX/3Zo8+nkV8MJYpkTpj8LCZGTOKlsE05mxu/a3lbJQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + } + }, + "@jimp/plugin-gaussian": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.12.1.tgz", + "integrity": "sha512-7O6eKlhL37hsLfV6WAX1Cvce7vOqSwL1oWbBveC1agutDlrtvcTh1s2mQ4Pde654hCJu55mq1Ur10+ote5j3qw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + } + }, + "@jimp/plugin-invert": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.12.1.tgz", + "integrity": "sha512-JTAs7A1Erbxwl+7ph7tgcb2PZ4WzB+3nb2WbfiWU8iCrKj17mMDSc5soaCCycn8wfwqvgB1vhRfGpseOLWxsuQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + } + }, + "@jimp/plugin-mask": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.12.1.tgz", + "integrity": "sha512-bnDdY0RO/x5Mhqoy+056SN1wEj++sD4muAKqLD2CIT8Zq5M/0TA4hkdf/+lwFy3H2C0YTK39PSE9xyb4jPX3kA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + } + }, + "@jimp/plugin-normalize": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.12.1.tgz", + "integrity": "sha512-4kSaI4JLM/PNjHwbnAHgyh51V5IlPfPxYvsZyZ1US32pebWtocxSMaSuOaJUg7OGSkwSDBv81UR2h5D+Dz1b5A==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + } + }, + "@jimp/plugin-print": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.12.1.tgz", + "integrity": "sha512-T0lNS3qU9SwCHOEz7AGrdp50+gqiWGZibOL3350/X/dqoFs1EvGDjKVeWncsGCyLlpfd7M/AibHZgu8Fx2bWng==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1", + "load-bmfont": "^1.4.0" + } + }, + "@jimp/plugin-resize": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.12.1.tgz", + "integrity": "sha512-sbNn4tdBGcgGlPt9XFxCuDl4ZOoxa8/Re8nAikyxYhRss2Dqz91ARbBQxOf1vlUGeicQMsjEuWbPQAogTSJRug==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + } + }, + "@jimp/plugin-rotate": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.12.1.tgz", + "integrity": "sha512-RYkLzwG2ervG6hHy8iepbIVeWdT1kz4Qz044eloqo6c66MK0KAqp228YI8+CAKm0joQnVDC/A0FgRIj/K8uyAw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + } + }, + "@jimp/plugin-scale": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.12.1.tgz", + "integrity": "sha512-zjNVI1fUj+ywfG78T1ZU33g9a5sk4rhEQkkhtny8koAscnVsDN2YaZEKoFli54kqaWh5kSS5DDL7a/9pEfXnFQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + } + }, + "@jimp/plugin-shadow": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.12.1.tgz", + "integrity": "sha512-Z82IwvunXWQ2jXegd3W3TYUXpfJcEvNbHodr7Z+oVnwhM1OoQ5QC6RSRQwsj2qXIhbGffQjH8eguHgEgAV+u5w==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + } + }, + "@jimp/plugin-threshold": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.12.1.tgz", + "integrity": "sha512-PFezt5fSk0q+xKvdpuv0eLggy2I7EgYotrK8TRZOT0jimuYFXPF0Z514c6szumoW5kEsRz04L1HkPT1FqI97Yg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1" + } + }, + "@jimp/plugins": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.12.1.tgz", + "integrity": "sha512-7+Yp29T6BbYo+Oqnc+m7A5AH+O+Oy5xnxvxlfmsp48+SuwEZ4akJp13Gu2PSmRlylENzR7MlWOxzhas5ERNlIg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/plugin-blit": "^0.12.1", + "@jimp/plugin-blur": "^0.12.1", + "@jimp/plugin-circle": "^0.12.1", + "@jimp/plugin-color": "^0.12.1", + "@jimp/plugin-contain": "^0.12.1", + "@jimp/plugin-cover": "^0.12.1", + "@jimp/plugin-crop": "^0.12.1", + "@jimp/plugin-displace": "^0.12.1", + "@jimp/plugin-dither": "^0.12.1", + "@jimp/plugin-fisheye": "^0.12.1", + "@jimp/plugin-flip": "^0.12.1", + "@jimp/plugin-gaussian": "^0.12.1", + "@jimp/plugin-invert": "^0.12.1", + "@jimp/plugin-mask": "^0.12.1", + "@jimp/plugin-normalize": "^0.12.1", + "@jimp/plugin-print": "^0.12.1", + "@jimp/plugin-resize": "^0.12.1", + "@jimp/plugin-rotate": "^0.12.1", + "@jimp/plugin-scale": "^0.12.1", + "@jimp/plugin-shadow": "^0.12.1", + "@jimp/plugin-threshold": "^0.12.1", + "timm": "^1.6.1" + } + }, + "@jimp/png": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.12.1.tgz", + "integrity": "sha512-tOUSJMJzcMAN82F9/Q20IToquIVWzvOe/7NIpVQJn6m+Lq6TtVmd7d8gdcna9AEFm2FIza5lhq2Kta6Xj0KXhQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.12.1", + "pngjs": "^3.3.3" + }, + "dependencies": { + "pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" + } + } + }, + "@jimp/tiff": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.12.1.tgz", + "integrity": "sha512-bzWDgv3202TKhaBGzV9OFF0PVQWEb4194h9kv5js348SSnbCusz/tzTE1EwKrnbDZThZPgTB1ryKs7D+Q9Mhmg==", + "requires": { + "@babel/runtime": "^7.7.2", + "utif": "^2.0.1" + } + }, + "@jimp/types": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.12.1.tgz", + "integrity": "sha512-hg5OKXpWWeKGuDrfibrjWWhr7hqb7f552wqnPWSLQpVrdWgjH+hpOv6cOzdo9bsU78qGTelZJPxr0ERRoc+MhQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/bmp": "^0.12.1", + "@jimp/gif": "^0.12.1", + "@jimp/jpeg": "^0.12.1", + "@jimp/png": "^0.12.1", + "@jimp/tiff": "^0.12.1", + "timm": "^1.6.1" + } + }, + "@jimp/utils": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.12.1.tgz", + "integrity": "sha512-EjPkDQOzV/oZfbolEUgFT6SE++PtCccVBvjuACkttyCfl0P2jnpR49SwstyVLc2u8AwBAZEHHAw9lPYaMjtbXQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "regenerator-runtime": "^0.13.3" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@react-native-async-storage/async-storage": { + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.15.4.tgz", + "integrity": "sha512-pC0MS6UBuv/YiVAxtzi7CgUed8oCQNYMtGt0yb/I9fI/BWTiJK5cj4YtW2XtL95K5IuvPX/6uGWaouZ8KqXwdg==", + "requires": { + "deep-assign": "^3.0.0" + } + }, + "@react-native-community/cli-debugger-ui": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-5.0.1.tgz", + "integrity": "sha512-5gGKaaXYOVE423BUqxIfvfAVSj5Cg1cU/TpGbeg/iqpy2CfqyWqJB3tTuVUbOOiOvR5wbU8tti6pIi1pchJ+oA==", + "requires": { + "serve-static": "^1.13.1" + } + }, + "@react-native-community/cli-hermes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-5.0.1.tgz", + "integrity": "sha512-nD+ZOFvu5MfjLB18eDJ01MNiFrzj8SDtENjGpf0ZRFndOWASDAmU54/UlU/wj8OzTToK1+S1KY7j2P2M1gleww==", + "requires": { + "@react-native-community/cli-platform-android": "^5.0.1", + "@react-native-community/cli-tools": "^5.0.1", + "chalk": "^3.0.0", + "hermes-profile-transformer": "^0.0.6", + "ip": "^1.1.5" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@react-native-community/cli-platform-android": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-5.0.1.tgz", + "integrity": "sha512-qv9GJX6BJ+Y4qvV34vgxKwwN1cnveXUdP6y2YmTW7XoAYs5YUzKqHajpY58EyucAL2y++6+573t5y4U/9IIoww==", + "requires": { + "@react-native-community/cli-tools": "^5.0.1", + "chalk": "^3.0.0", + "execa": "^1.0.0", + "fs-extra": "^8.1.0", + "glob": "^7.1.3", + "jetifier": "^1.6.2", + "lodash": "^4.17.15", + "logkitty": "^0.7.1", + "slash": "^3.0.0", + "xmldoc": "^1.1.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + } + } + }, + "@react-native-community/cli-platform-ios": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-5.0.1.tgz", + "integrity": "sha512-Nr/edBEYJfElgBNvjDevs2BuDicsvQaM8nYkTGgp33pyuCZRBxsYxQqfsNmnLalTzcYaebjWj6AnjUSxzQBWqg==", + "requires": { + "@react-native-community/cli-tools": "^5.0.1", + "chalk": "^3.0.0", + "glob": "^7.1.3", + "js-yaml": "^3.13.1", + "lodash": "^4.17.15", + "plist": "^3.0.1", + "xcode": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "xcode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/xcode/-/xcode-2.1.0.tgz", + "integrity": "sha512-uCrmPITrqTEzhn0TtT57fJaNaw8YJs1aCzs+P/QqxsDbvPZSv7XMPPwXrKvHtD6pLjBM/NaVwraWJm8q83Y4iQ==", + "requires": { + "simple-plist": "^1.0.0", + "uuid": "^3.3.2" + } + } + } + }, + "@react-native-community/cli-server-api": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-5.0.1.tgz", + "integrity": "sha512-OOxL+y9AOZayQzmSW+h5T54wQe+QBc/f67Y9QlWzzJhkKJdYx+S4VOooHoD5PFJzGbYaxhu2YF17p517pcEIIA==", + "requires": { + "@react-native-community/cli-debugger-ui": "^5.0.1", + "@react-native-community/cli-tools": "^5.0.1", + "compression": "^1.7.1", + "connect": "^3.6.5", + "errorhandler": "^1.5.0", + "nocache": "^2.1.0", + "pretty-format": "^26.6.2", + "serve-static": "^1.13.1", + "ws": "^1.1.0" + }, + "dependencies": { + "ws": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "requires": { + "options": ">=0.0.5", + "ultron": "1.0.x" + } + } + } + }, + "@react-native-community/cli-tools": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-5.0.1.tgz", + "integrity": "sha512-XOX5w98oSE8+KnkMZZPMRT7I5TaP8fLbDl0tCu40S7Epz+Zz924n80fmdu6nUDIfPT1nV6yH1hmHmWAWTDOR+Q==", + "requires": { + "chalk": "^3.0.0", + "lodash": "^4.17.15", + "mime": "^2.4.1", + "node-fetch": "^2.6.0", + "open": "^6.2.0", + "shell-quote": "1.6.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@react-native-community/cli-types": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-5.0.1.tgz", + "integrity": "sha512-BesXnuFFlU/d1F3+sHhvKt8fUxbQlAbZ3hhMEImp9A6sopl8TEtryUGJ1dbazGjRXcADutxvjwT/i3LJVTIQug==", + "requires": { + "ora": "^3.4.0" + } + }, + "@react-native-community/eslint-config": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@react-native-community/eslint-config/-/eslint-config-3.0.1.tgz", + "integrity": "sha512-h0MRsaHkyfoQjEiTjG3a+Ie/p6AmQNAHXpYrVhtYMZNRF26TCwNOsQNp4/13QhKAq6vhS8EJppge0P43GnPmfQ==", + "dev": true, + "requires": { + "@react-native-community/eslint-plugin": "^1.1.0", + "@typescript-eslint/eslint-plugin": "^4.22.1", + "@typescript-eslint/parser": "^4.22.1", + "babel-eslint": "^10.1.0", + "eslint-config-prettier": "^6.10.1", + "eslint-plugin-eslint-comments": "^3.1.2", + "eslint-plugin-flowtype": "2.50.3", + "eslint-plugin-jest": "22.4.1", + "eslint-plugin-prettier": "3.1.2", + "eslint-plugin-react": "^7.20.0", + "eslint-plugin-react-hooks": "^4.0.7", + "eslint-plugin-react-native": "^3.10.0", + "prettier": "^2.0.2" + } + }, + "@react-native-community/eslint-plugin": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@react-native-community/eslint-plugin/-/eslint-plugin-1.1.0.tgz", + "integrity": "sha512-W/J0fNYVO01tioHjvYWQ9m6RgndVtbElzYozBq1ZPrHO/iCzlqoySHl4gO/fpCl9QEFjvJfjPgtPMTMlsoq5DQ==", + "dev": true + }, + "@react-native-community/masked-view": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/@react-native-community/masked-view/-/masked-view-0.1.10.tgz", + "integrity": "sha512-rk4sWFsmtOw8oyx8SD3KSvawwaK7gRBSEIy2TAwURyGt+3TizssXP1r8nx3zY+R7v2vYYHXZ+k2/GULAT/bcaQ==", + "requires": {} + }, + "@react-native-community/netinfo": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/netinfo/-/netinfo-6.0.0.tgz", + "integrity": "sha512-Z9M8VGcF2IZVOo2x+oUStvpCW/8HjIRi4+iQCu5n+PhC7OqCQX58KYAzdBr///alIfRXiu6oMb+lK+rXQH1FvQ==", + "requires": {} + }, + "@react-native-community/slider": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@react-native-community/slider/-/slider-3.0.3.tgz", + "integrity": "sha512-8IeHfDwJ9/CTUwFs6x90VlobV3BfuPgNLjTgC6dRZovfCWigaZwVNIFFJnHBakK3pW2xErAPwhdvNR4JeNoYbw==", + "requires": {} + }, + "@react-native/assets": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@react-native/assets/-/assets-1.0.0.tgz", + "integrity": "sha512-KrwSpS1tKI70wuKl68DwJZYEvXktDHdZMG0k2AXD/rJVSlB23/X2CB2cutVR0HwNMJIal9HOUOBB2rVfa6UGtQ==" + }, + "@react-native/normalize-color": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-1.0.0.tgz", + "integrity": "sha512-xUNRvNmCl3UGCPbbHvfyFMnpvLPoOjDCcp5bT9m2k+TF/ZBklEQwhPZlkrxRx2NhgFh1X3a5uL7mJ7ZR+8G7Qg==" + }, + "@react-native/polyfills": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@react-native/polyfills/-/polyfills-1.0.0.tgz", + "integrity": "sha512-0jbp4RxjYopTsIdLl+/Fy2TiwVYHy4mgeu07DG4b/LyM0OS/+lPP5c9sbnt/AMlnF6qz2JRZpPpGw1eMNS6A4w==" + }, + "@react-navigation/core": { + "version": "5.15.3", + "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-5.15.3.tgz", + "integrity": "sha512-3ZdyDInh8qg1kygCNkmh9lFgpDf29lTvPsaMe2mm/qvmxLKSgttWBz07P2fc181aV9jTdgQpzYfWZ5KWT036zw==", + "requires": { + "@react-navigation/routers": "^5.7.2", + "escape-string-regexp": "^4.0.0", + "nanoid": "^3.1.15", + "query-string": "^6.13.6", + "react-is": "^16.13.0" + } + }, + "@react-navigation/material-bottom-tabs": { + "version": "5.3.15", + "resolved": "https://registry.npmjs.org/@react-navigation/material-bottom-tabs/-/material-bottom-tabs-5.3.15.tgz", + "integrity": "sha512-SpCSJxnDqN1a8oHNm3oTt3OYulDEPbeWP1FGwb9zeXW8El2kgwD+69D4KhnUNLYVSKNLu9HadgFOrG3ezp4HPQ==", + "requires": {} + }, + "@react-navigation/native": { + "version": "5.9.4", + "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-5.9.4.tgz", + "integrity": "sha512-BUCrOXfZDdKWBqM8OhOKQhCX5we4HUo5XG6tCQtVqQAep+7UcApZmMUuemUXDxVe8NPESUpoUlB0RaEpyIdfTQ==", + "requires": { + "@react-navigation/core": "^5.15.3", + "escape-string-regexp": "^4.0.0", + "nanoid": "^3.1.15" + } + }, + "@react-navigation/routers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-5.7.2.tgz", + "integrity": "sha512-BxNSMLHpU+oS37Xok0ql6rc9U7IC8aUD4+U5ZPbjDJ0pwzZxGGh0YOEBzfV4k/Ig3cbPdvVWbc1C9HHbCVr2oQ==", + "requires": { + "nanoid": "^3.1.15" + } + }, + "@react-navigation/stack": { + "version": "5.14.4", + "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-5.14.4.tgz", + "integrity": "sha512-gQjWK8JHtVkD1p7wzjtSPuScJI0mSAk/N/gzgjQZo+rDUwgM8rOTDcVNRbtEOqCEgLQcZrZQHwhOjkrJirehjQ==", + "requires": { + "color": "^3.1.3", + "react-native-iphone-x-helper": "^1.3.0" + } + }, + "@sideway/address": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.2.tgz", + "integrity": "sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA==", + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@sideway/formula": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", + "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" + }, + "@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "requires": { + "@types/node": "*" + } + }, + "@types/hammerjs": { + "version": "2.0.39", + "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.39.tgz", + "integrity": "sha512-lYR2Y/tV2ujpk/WyUc7S0VLI0a9hrtVIN9EwnrNo5oSEJI2cK2/XrgwOQmXLL3eTulOESvh9qP6si9+DWM9cOA==" + }, + "@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "requires": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", + "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "@types/node": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.0.1.tgz", + "integrity": "sha512-TMkXt0Ck1y0KKsGr9gJtWGjttxlZnnvDtphxUOSd0bfaR6Q1jle+sPvrzNR1urqYTWMinoKvjKfXUGsumaO1PA==" + }, + "@types/prop-types": { + "version": "15.7.3", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", + "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" + }, + "@types/react": { + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.4.tgz", + "integrity": "sha512-onz2BqScSFMoTRdJUZUDD/7xrusM8hBA2Fktk2qgaTYPCgPvWnDEgkrOs8hhPUf2jfcIXkJ5yK6VfYormJS3Jw==", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-redux": { + "version": "7.1.16", + "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.16.tgz", + "integrity": "sha512-f/FKzIrZwZk7YEO9E1yoxIuDNRiDducxkFlkw/GNMGEnK9n4K8wJzlJBghpSuOVDgEUHoDkDF7Gi9lHNQR4siw==", + "requires": { + "@types/hoist-non-react-statics": "^3.3.0", + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0", + "redux": "^4.0.0" + } + }, + "@types/scheduler": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz", + "integrity": "sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==" + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", + "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==" + }, + "@typescript-eslint/eslint-plugin": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.32.0.tgz", + "integrity": "sha512-+OWTuWRSbWI1KDK8iEyG/6uK2rTm3kpS38wuVifGUTDB6kjEuNrzBI1MUtxnkneuWG/23QehABe2zHHrj+4yuA==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "4.32.0", + "@typescript-eslint/scope-manager": "4.32.0", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/experimental-utils": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.32.0.tgz", + "integrity": "sha512-WLoXcc+cQufxRYjTWr4kFt0DyEv6hDgSaFqYhIzQZ05cF+kXfqXdUh+//kgquPJVUBbL3oQGKQxwPbLxHRqm6A==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.32.0", + "@typescript-eslint/types": "4.32.0", + "@typescript-eslint/typescript-estree": "4.32.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.32.0.tgz", + "integrity": "sha512-lhtYqQ2iEPV5JqV7K+uOVlPePjClj4dOw7K4/Z1F2yvjIUvyr13yJnDzkK6uon4BjHYuHy3EG0c2Z9jEhFk56w==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.32.0", + "@typescript-eslint/types": "4.32.0", + "@typescript-eslint/typescript-estree": "4.32.0", + "debug": "^4.3.1" + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.32.0.tgz", + "integrity": "sha512-DK+fMSHdM216C0OM/KR1lHXjP1CNtVIhJ54kQxfOE6x8UGFAjha8cXgDMBEIYS2XCYjjCtvTkjQYwL3uvGOo0w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.32.0", + "@typescript-eslint/visitor-keys": "4.32.0" + } + }, + "@typescript-eslint/types": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.32.0.tgz", + "integrity": "sha512-LE7Z7BAv0E2UvqzogssGf1x7GPpUalgG07nGCBYb1oK4mFsOiFC/VrSMKbZQzFJdN2JL5XYmsx7C7FX9p9ns0w==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.32.0.tgz", + "integrity": "sha512-tRYCgJ3g1UjMw1cGG8Yn1KzOzNlQ6u1h9AmEtPhb5V5a1TmiHWcRyF/Ic+91M4f43QeChyYlVTcf3DvDTZR9vw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.32.0", + "@typescript-eslint/visitor-keys": "4.32.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.32.0.tgz", + "integrity": "sha512-e7NE0qz8W+atzv3Cy9qaQ7BTLwWsm084Z0c4nIO2l3Bp6u9WIgdqCgyPyV5oSPDMIW3b20H59OOCmVk3jw3Ptw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.32.0", + "eslint-visitor-keys": "^2.0.0" + } + }, + "@unimodules/core": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@unimodules/core/-/core-7.1.0.tgz", + "integrity": "sha512-oLRT4Bkah3GEopkxmTgpHsRTRp+NJ1907ZjE9y/HLh32q7O/3mcbpY77Uvm+EXW0Vh14gOlU+bmkpC0hz3we0w==", + "requires": { + "compare-versions": "^3.4.0" + } + }, + "@unimodules/react-native-adapter": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-6.2.2.tgz", + "integrity": "sha512-hBXL+IX3u+4TcAHu9lIItdycA7pYWZn3Tt7s5TTna9QKHjyrwo0zVss27LkpJ40tXRHyh/GJ8VzN2CD+0M5I2A==", + "requires": { + "invariant": "^2.2.4" + } + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "absolute-path": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/absolute-path/-/absolute-path-0.0.0.tgz", + "integrity": "sha1-p4di+9rftSl76ZsV01p4Wy8JW/c=" + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "anser": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", + "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==" + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-fragments": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", + "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", + "requires": { + "colorette": "^1.0.7", + "slice-ansi": "^2.0.0", + "strip-ansi": "^5.0.0" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "any-base": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", + "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==" + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "appdirsjs": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.4.tgz", + "integrity": "sha512-WO5StDORR6JF/xYnXk/Fm0yu+iULaV5ULKuUw0Tu+jbgiTlSquaWBCgbpnsHLMXldf+fM3Gxn5p7vjond7He6w==" + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "argsarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/argsarray/-/argsarray-0.0.1.tgz", + "integrity": "sha1-bnIHtOzbObCviDA/pa4ivajfYcs=" + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-filter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", + "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=" + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" + }, + "array-includes": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", + "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "dev": true, + "requires": { + "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-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=" + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=" + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "array.prototype.flatmap": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", + "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "function-bind": "^1.1.1" + } + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "assert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", + "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", + "requires": { + "es6-object-assign": "^1.1.0", + "is-nan": "^1.2.1", + "object-is": "^1.0.1", + "util": "^0.12.0" + } + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "ast-types": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", + "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", + "requires": { + "tslib": "^2.0.1" + } + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + } + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "available-typed-arrays": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz", + "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==", + "requires": { + "array-filter": "^1.0.0" + } + }, + "babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", + "requires": {} + }, + "babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "dev": true, + "requires": { + "@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" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-module-resolver": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz", + "integrity": "sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA==", + "requires": { + "find-babel-config": "^1.1.0", + "glob": "^7.1.2", + "pkg-up": "^2.0.0", + "reselect": "^3.0.1", + "resolve": "^1.4.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz", + "integrity": "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==", + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.0", + "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz", + "integrity": "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==", + "requires": { + "@babel/helper-define-polyfill-provider": "^0.2.0", + "core-js-compat": "^3.9.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz", + "integrity": "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==", + "requires": { + "@babel/helper-define-polyfill-provider": "^0.2.0" + } + }, + "babel-plugin-react-native-web": { + "version": "0.13.18", + "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.13.18.tgz", + "integrity": "sha512-f8pAxyKqXBNRIh8l4Sqju055BNec+DQlItdtutByYxULU0iJ1F7evIYE3skPKAkTB/xJH17l+n3Z8dVabGIIGg==" + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "7.0.0-beta.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", + "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==" + }, + "babel-preset-expo": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-8.3.0.tgz", + "integrity": "sha512-KmoFiEJ0A8QUH0OTh+mj3RBvv069FQsQ1hvZDi6tVMSzrW+Y/imsJMXgVboZN+XGOYnWFaGEKQ8BqNvBX+zKjA==", + "requires": { + "@babel/plugin-proposal-decorators": "^7.6.0", + "@babel/preset-env": "^7.6.3", + "babel-plugin-module-resolver": "^3.2.0", + "babel-plugin-react-native-web": "~0.13.6", + "metro-react-native-babel-preset": "~0.59.0" + } + }, + "babel-preset-fbjs": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.3.0.tgz", + "integrity": "sha512-7QTLTCd2gwB2qGoi5epSULMHugSVgpcVt5YAeiFO9ABLrutDQzKfGwzxgZHLpugq8qMdg/DhRZDZ5CLKxBkEbw==", + "requires": { + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-syntax-class-properties": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoped-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-member-expression-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-super": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-property-literals": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" + } + }, + "badgin": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/badgin/-/badgin-1.2.2.tgz", + "integrity": "sha512-XtoSjNhy2D09qGiLhFWBJmBwBlmleQuwyYyjddWNCJ3gqGRBOBR25VGcd8CAOSghpEUmghB3LD4NpHrUG89zCg==" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "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" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "big-integer": { + "version": "1.6.48", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", + "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==" + }, + "blueimp-md5": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.18.0.tgz", + "integrity": "sha512-vE52okJvzsVWhcgUHOv+69OG3Mdg151xyn41aVQN/5W5S+S43qZhxECtYLAEHMSFWX6Mv5IZrzj3T5+JqXfj5Q==" + }, + "bmp-js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", + "integrity": "sha1-4Fpj95amwf8l9Hcex62twUjAcjM=" + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "bplist-creator": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.8.tgz", + "integrity": "sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA==", + "requires": { + "stream-buffers": "~2.2.0" + } + }, + "bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "requires": { + "big-integer": "^1.6.44" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "requires": { + "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": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, + "buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=" + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "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": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "caniuse-lite": { + "version": "1.0.30001219", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001219.tgz", + "integrity": "sha512-c0yixVG4v9KBc/tQ2rlbB3A/bgBFRvl8h8M4IeUbqCca4gsiCfvtaheUssbnux/Mb66Vjz7x8yYjDgYcNQOhyQ==" + }, + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "requires": { + "rsvp": "^4.8.4" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "clamp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz", + "integrity": "sha1-ZqDmQBGBbjcZaCj9yMjBRzEshjQ=" + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-spinners": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", + "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==" + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", + "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.4" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", + "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + }, + "command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" + }, + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "compare-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-urls/-/compare-urls-2.0.0.tgz", + "integrity": "sha512-eCJcWn2OYFEIqbm70ta7LQowJOOZZqq1a2YbbFCFI1uwSvj+TWMwXVn7vPR1ceFNcAIt5RSTDbwdlX82gYLTkA==", + "requires": { + "normalize-url": "^2.0.1" + } + }, + "compare-versions": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==" + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "requires": { + "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" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "core-js": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.11.1.tgz", + "integrity": "sha512-k93Isqg7e4txZWMGNYwevZL9MiogLk8pd1PtwrmFmi8IBq4GXqUaVW/a33Llt6amSI36uSjd0GWwc9pTT9ALlQ==" + }, + "core-js-compat": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.11.1.tgz", + "integrity": "sha512-aZ0e4tmlG/aOBHj92/TuOuZwp6jFvn1WNabU5VOVixzhu5t5Ao+JZkQOPlgNXu6ynwLrwJxklT4Gw1G1VGEh+g==", + "requires": { + "browserslist": "^4.16.5", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "create-react-class": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.7.0.tgz", + "integrity": "sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng==", + "requires": { + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } + }, + "cross-fetch": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", + "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", + "requires": { + "node-fetch": "2.6.1" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" + }, + "css-in-js-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz", + "integrity": "sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA==", + "requires": { + "hyphenate-style-name": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" + }, + "csstype": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", + "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==" + }, + "dayjs": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.5.tgz", + "integrity": "sha512-BUFis41ikLz+65iH6LHQCDm4YPMj5r1YFLdupPIyM4SGcXMmtiLQ7U37i+hGS8urIuqe7I/ou3IS1jVc4nbN4g==" + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "deep-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-3.0.0.tgz", + "integrity": "sha512-YX2i9XjJ7h5q/aQ/IM9PEwEnDqETAIYbggmdDB3HLTlSgo1CxPsj6pvhPG68rq6SVE0+p+6Ywsm5fTYNrYtBWw==", + "requires": { + "is-obj": "^1.0.0" + } + }, + "deep-equal": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.5.tgz", + "integrity": "sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==", + "requires": { + "call-bind": "^1.0.0", + "es-get-iterator": "^1.1.1", + "get-intrinsic": "^1.0.1", + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.2", + "is-regex": "^1.1.1", + "isarray": "^2.0.5", + "object-is": "^1.1.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.3.0", + "side-channel": "^1.0.3", + "which-boxed-primitive": "^1.0.1", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.2" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "deepmerge": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", + "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==" + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "requires": { + "clone": "^1.0.2" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "requires": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "electron-to-chromium": { + "version": "1.3.725", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.725.tgz", + "integrity": "sha512-2BbeAESz7kc6KBzs7WVrMc1BY5waUphk4D4DX5dSQXJhsc3tP5ZFaiyuL0AB7vUKzDYpIeYwTYlEfxyjsGUrhw==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "requires": { + "iconv-lite": "^0.6.2" + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==" + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + } + } + }, + "error-stack-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", + "requires": { + "stackframe": "^1.1.1" + } + }, + "errorhandler": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", + "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", + "requires": { + "accepts": "~1.3.7", + "escape-html": "~1.0.3" + } + }, + "es-abstract": { + "version": "1.18.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.7.tgz", + "integrity": "sha512-uFG1gyVX91tZIiDWNmPsL8XNpiCk/6tkB7MZphoSJflS4w+KgWyQ2gjCVDnsPxFAo9WjRXG3eqONNYdfbJjAtw==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-string": "^1.0.7", + "object-inspect": "^1.11.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.1" + } + }, + "es-get-iterator": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", + "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.0", + "has-symbols": "^1.0.1", + "is-arguments": "^1.1.0", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-object-assign": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=" + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, + "eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "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", + "escape-string-regexp": "^4.0.0", + "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", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "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.merge": "^4.6.2", + "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.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "globals": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", + "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "eslint-config-prettier": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", + "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", + "dev": true, + "requires": { + "get-stdin": "^6.0.0" + } + }, + "eslint-plugin-eslint-comments": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz", + "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "ignore": "^5.0.5" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + } + } + }, + "eslint-plugin-flowtype": { + "version": "2.50.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.3.tgz", + "integrity": "sha512-X+AoKVOr7Re0ko/yEXyM5SSZ0tazc6ffdIOocp2fFUlWoDt7DV0Bz99mngOkAFLOAWjqRA5jPwqUCbrx13XoxQ==", + "dev": true, + "requires": { + "lodash": "^4.17.10" + } + }, + "eslint-plugin-jest": { + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-22.4.1.tgz", + "integrity": "sha512-gcLfn6P2PrFAVx3AobaOzlIEevpAEf9chTpFZz7bYfc7pz8XRv7vuKTIE4hxPKZSha6XWKKplDQ0x9Pq8xX2mg==", + "dev": true, + "requires": {} + }, + "eslint-plugin-prettier": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.2.tgz", + "integrity": "sha512-GlolCC9y3XZfv3RQfwGew7NnuFDKsfI4lbvRK+PIIo23SFH+LemGs4cKwzAaRa+Mdb+lQO/STaIayno8T5sJJA==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-plugin-react": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.26.0.tgz", + "integrity": "sha512-dceliS5itjk4EZdQYtLMz6GulcsasguIs+VTXuiC7Q5IPIdGTkyfXVdmsQOqEhlD9MciofH4cMcT1bw1WWNxCQ==", + "dev": true, + "requires": { + "array-includes": "^3.1.3", + "array.prototype.flatmap": "^1.2.4", + "doctrine": "^2.1.0", + "estraverse": "^5.2.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.0.4", + "object.entries": "^1.1.4", + "object.fromentries": "^2.0.4", + "object.hasown": "^1.0.0", + "object.values": "^1.1.4", + "prop-types": "^15.7.2", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.5" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "resolve": { + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "eslint-plugin-react-hooks": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz", + "integrity": "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==", + "dev": true, + "requires": {} + }, + "eslint-plugin-react-native": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-native/-/eslint-plugin-react-native-3.11.0.tgz", + "integrity": "sha512-7F3OTwrtQPfPFd+VygqKA2VZ0f2fz0M4gJmry/TRE18JBb94/OtMxwbL7Oqwu7FGyrdeIOWnXQbBAveMcSTZIA==", + "dev": true, + "requires": { + "@babel/traverse": "^7.7.4", + "eslint-plugin-react-native-globals": "^0.1.1" + } + }, + "eslint-plugin-react-native-globals": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-native-globals/-/eslint-plugin-react-native-globals-0.1.2.tgz", + "integrity": "sha512-9aEPf1JEpiTjcFAmmyw8eiIXmcNZOqaZyHO77wgm0/dWfT/oxC1SrIq8ET38pMxHYrcB6Uew+TzUVsBeczF88g==", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "dependencies": { + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + } + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + }, + "eventemitter2": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-1.0.5.tgz", + "integrity": "sha1-+YNhBRexc3wLncZDvsqTiTwE3xg=" + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "exec-sh": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", + "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==" + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "requires": { + "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" + } + }, + "exif-parser": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", + "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=" + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "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" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "expo": { + "version": "41.0.1", + "resolved": "https://registry.npmjs.org/expo/-/expo-41.0.1.tgz", + "integrity": "sha512-Lk4Xdst+OfsLgBNeu89hxk0qFrZnHwwXFmBbJkYLlZkdC3tvNJ8jgGHsKg6jYpsnal/z0uVc+uk2ev91qXQykg==", + "requires": { + "@babel/runtime": "^7.1.2", + "@expo/metro-config": "^0.1.63", + "@expo/vector-icons": "^12.0.4", + "@unimodules/core": "~7.1.0", + "@unimodules/react-native-adapter": "~6.2.2", + "babel-preset-expo": "~8.3.0", + "cross-spawn": "^6.0.5", + "expo-application": "~3.1.2", + "expo-asset": "~8.3.1", + "expo-constants": "~10.1.3", + "expo-error-recovery": "~2.1.0", + "expo-file-system": "~11.0.2", + "expo-font": "~9.1.0", + "expo-keep-awake": "~9.1.2", + "fbemitter": "^2.1.1", + "invariant": "^2.2.2", + "md5-file": "^3.2.3", + "pretty-format": "^26.4.0", + "react-native-safe-area-context": "3.2.0", + "serialize-error": "^2.1.0", + "uuid": "^3.4.0" + } + }, + "expo-application": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/expo-application/-/expo-application-3.1.2.tgz", + "integrity": "sha512-JZcKUpGmqzQ1zLxRxUditGzPqnPCXY6JT/Pbq4nyV4VPzjDd8wihVPuud+cuv8gHgdj8QLvKs/lcJJqN94EX5Q==" + }, + "expo-asset": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-8.3.2.tgz", + "integrity": "sha512-MKOwkkN0lnQRcOdn5moqkHPmLgFoUSIYyrvMAJ767vTXvLvZgoQgvBwqCAXsXitIwEitG0Az3XZ23SfKJpFbFg==", + "requires": { + "blueimp-md5": "^2.10.0", + "invariant": "^2.2.4", + "md5-file": "^3.2.3", + "path-browserify": "^1.0.0", + "url-parse": "^1.4.4" + } + }, + "expo-constants": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-10.1.3.tgz", + "integrity": "sha512-Eq/xeshnhSoe4ok89d5lrHvI9jq3bMe1FhJUbiHVGcGmW8mGCotwbQBIfDkkMrAKnSOwQq/Qfyg0XBxnG2XFjw==", + "requires": { + "@expo/config": "^3.3.35", + "uuid": "^3.3.2" + } + }, + "expo-document-picker": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/expo-document-picker/-/expo-document-picker-9.1.2.tgz", + "integrity": "sha512-I4xq90HZg3JML40AfUv1Uk/dTSRDd3Cy3qLV1P+wAiSudp54ockHMR1Pwow12WCtbihHW5DlHT0TU+fz5jJb7g==", + "requires": { + "@expo/config-plugins": "^1.0.18", + "uuid": "^3.3.2" + } + }, + "expo-error-recovery": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/expo-error-recovery/-/expo-error-recovery-2.1.0.tgz", + "integrity": "sha512-N5g2QKtdNntUNGQVnB/tG1jHdtJP1+kLMWDS+7ZKRcKfulm3JX/M3l460fsEtqg84n/latxPkBT0yfKw2DSq+Q==" + }, + "expo-file-system": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-11.0.2.tgz", + "integrity": "sha512-nodNvUVa+US4N4xnj5BFw8W9ZF/qCHJVC2t45cHWrBiwkVVxz45wjE7uSHUmkMWyWT7a/7AJuL3XJfYp7h90IQ==", + "requires": { + "@expo/config-plugins": "^1.0.18", + "uuid": "^3.4.0" + } + }, + "expo-font": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-9.1.0.tgz", + "integrity": "sha512-owzbbfrQet7mawTGKMXpVCIA9k56MGhtriO41AW4Zo65dd2Ikm4LoymuHKp2ZlHuIFjRnjECKWz7RXgy/C1yAg==", + "requires": { + "fontfaceobserver": "^2.1.0" + } + }, + "expo-haptics": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/expo-haptics/-/expo-haptics-10.0.0.tgz", + "integrity": "sha512-dfl4Fef22B8O49x5JEzILmAhathT14bkN0kic2FpuwssJDX/yZ/R2lD12Iu9XqxdgHAFQRjOSq3dFjrxDGkP6g==" + }, + "expo-image-loader": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/expo-image-loader/-/expo-image-loader-2.1.1.tgz", + "integrity": "sha512-EeItNIsmw4g+FIb9S9AHE7FAWQkuiIguFMua/RQ2mFHKFZYa/BU32MGagY+e4LzasBVbDKWgd3NHO+EYC6XeEA==" + }, + "expo-keep-awake": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-9.1.2.tgz", + "integrity": "sha512-CCuEOQUNLYtMA0rt0sQ9u5LlIMH7lDJG7dImoorfKMsP95yHXy8dl3oCdtaz2zbsPgggVYeom9gE+gQu+Ki4rQ==" + }, + "expo-linear-gradient": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/expo-linear-gradient/-/expo-linear-gradient-9.1.0.tgz", + "integrity": "sha512-9W4TxaDrZUzmLzd18+Eo2Ef7ONnuLrHKX0PRyHEGY2/rJCtGiPJtJuR6AS5dkX7WB/Pxlx0zK/p/qDHHw09Uxg==" + }, + "expo-linking": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-2.2.3.tgz", + "integrity": "sha512-1NqL8sY4EzwRPVnBxbvNKBCfsG/tNZm72tVwzjoLxhO0XA6VTtZcb72Jaku4IlqEyH0lejxV2YAU0rbLv1pAVA==", + "requires": { + "expo-constants": "~10.1.3", + "invariant": "^2.2.4", + "qs": "^6.5.0", + "url-parse": "^1.4.4" + } + }, + "expo-notifications": { + "version": "0.11.6", + "resolved": "https://registry.npmjs.org/expo-notifications/-/expo-notifications-0.11.6.tgz", + "integrity": "sha512-skVEOHXKXrXBWofCQ/Zn7yKhAFA2EN0fd9mXqpkbF6nE4NKE7pn63gTWpyCy6sXC9M3YUal8yT0vp9GkD2FsmA==", + "requires": { + "@expo/config-plugins": "^1.0.18", + "@expo/image-utils": "^0.3.10", + "@ide/backoff": "^1.0.0", + "abort-controller": "^3.0.0", + "assert": "^2.0.0", + "badgin": "^1.1.5", + "expo-application": "~3.1.2", + "expo-constants": "10.1.3", + "fs-extra": "^9.0.1", + "unimodules-permissions-interface": "~6.1.0", + "uuid": "^3.4.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } + } + }, + "expo-permissions": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/expo-permissions/-/expo-permissions-12.0.1.tgz", + "integrity": "sha512-TtypNPPLG4SdVEKBlrArLLZIyhlhE+3B4dhz2HaY1Mve2rcvKE0C7z/e1WoUVU8+LgcdKoNGwg/wRVeCkxeEhg==" + }, + "expo-splash-screen": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-0.11.2.tgz", + "integrity": "sha512-4jTAs2IDS4rH9A3NK0WhFDIOyLgDExRe0zCf179vRNPZ6HlXCFEQS7Y9RaUF5EFqyYvsPiwaJQyRes3sO4mA+g==", + "requires": { + "@expo/configure-splash-screen": "0.5.0", + "@expo/prebuild-config": "^2.0.0" + }, + "dependencies": { + "@expo/configure-splash-screen": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@expo/configure-splash-screen/-/configure-splash-screen-0.5.0.tgz", + "integrity": "sha512-wU84OsmACcQaY+cFNj1UOzqdUB+XNRP8hO5mwGN5LWRIDhd/5S1A/3hmWT96X4UQEee+XtCpwnmTw6SGIsTfIg==", + "requires": { + "color-string": "^1.5.3", + "commander": "^5.1.0", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "lodash": "^4.17.15", + "pngjs": "^5.0.0", + "xcode": "^3.0.0", + "xml-js": "^1.6.11" + } + } + } + }, + "expo-sqlite": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/expo-sqlite/-/expo-sqlite-9.1.0.tgz", + "integrity": "sha512-nr6rHm2GCm+MrMAuMoL0mGbGw8aIHT/UNg/zMDb2/QjFU1ZHj7c/lI+vmmQx0ObZ+NfJfu+tyW6HqxsdMnkeog==", + "requires": { + "@expo/websql": "^1.0.1", + "lodash": "^4.17.15" + } + }, + "expo-structured-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/expo-structured-headers/-/expo-structured-headers-1.0.1.tgz", + "integrity": "sha512-U4frE8rT5x1LqZv5Ru/9CtzY8gh0wp1MfwTu5hetPydnwxXfWchuXvKgWRjEHglFU2X/29kYFY/J1UkPvCN8xg==" + }, + "expo-updates": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/expo-updates/-/expo-updates-0.5.5.tgz", + "integrity": "sha512-1R8EKkT3GoDjMRQnDaTYv31gIYIaYQGHOrjHJfwq8ai9f1W1AHux6KAH2/H6sc2o9a7roWVwjDn2kKwCm9AeHg==", + "requires": { + "@expo/config-plugins": "^1.0.18", + "@expo/metro-config": "^0.1.59", + "expo-structured-headers": "~1.0.1", + "fbemitter": "^2.1.1", + "resolve-from": "^5.0.0", + "uuid": "^3.4.0" + } + }, + "expo-web-browser": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/expo-web-browser/-/expo-web-browser-9.1.0.tgz", + "integrity": "sha512-1UkOHWUBshY7n/R9xc4Q0LN0Dxqdvvotlp8sCM/6bUB/aE+9B+duoimKtUhlnzcvfAFWgF5y5x+bIf7j6PF7ig==", + "requires": { + "compare-urls": "^2.0.0" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "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" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "requires": { + "bser": "2.1.1" + } + }, + "fbemitter": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-2.1.1.tgz", + "integrity": "sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU=", + "requires": { + "fbjs": "^0.8.4" + } + }, + "fbjs": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "requires": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + }, + "dependencies": { + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + } + } + }, + "fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "file-type": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", + "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha1-mzERErxsYSehbgFsbF1/GeCAXFs=" + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "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" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "find-babel-config": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", + "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==", + "requires": { + "json5": "^0.5.1", + "path-exists": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + } + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", + "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", + "dev": true + }, + "flow-parser": { + "version": "0.121.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.121.0.tgz", + "integrity": "sha512-1gIBiWJNR0tKUNv8gZuk7l9rVX06OuLzY9AoGio7y/JT4V1IZErEMEq2TJS+PFcw/y0RshZ1J/27VfK1UQzYVg==" + }, + "fontfaceobserver": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.1.0.tgz", + "integrity": "sha512-ReOsO2F66jUa0jmv2nlM/s1MiutJx/srhAe2+TE8dJCMi02ZZOcCTxTCQFr3Yet+uODUtnr4Mewg+tNQ+4V1Ng==" + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs-extra": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "getenv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/getenv/-/getenv-1.0.0.tgz", + "integrity": "sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==" + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "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" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "requires": { + "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" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hermes-engine": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/hermes-engine/-/hermes-engine-0.7.2.tgz", + "integrity": "sha512-E2DkRaO97gwL98LPhgfkMqhHiNsrAjIfEk3wWYn2Y31xdkdWn0572H7RnVcGujMJVqZNJvtknxlpsUb8Wzc3KA==" + }, + "hermes-profile-transformer": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz", + "integrity": "sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==", + "requires": { + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + } + } + }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } + }, + "htmlparser2-without-node-native": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/htmlparser2-without-node-native/-/htmlparser2-without-node-native-3.9.2.tgz", + "integrity": "sha1-s+0FDYd9D/NGWWnjOYd7f59mMfY=", + "requires": { + "domelementtype": "^1.3.0", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "eventemitter2": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "hyphenate-style-name": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz", + "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==" + }, + "iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "image-size": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.6.3.tgz", + "integrity": "sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA==" + }, + "immediate": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", + "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "inline-style-prefixer": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-6.0.0.tgz", + "integrity": "sha512-XTHvRUS4ZJNzC1GixJRmOlWSS45fSt+DJoyQC9ytj0WxQfcgofQtDtyKKYxHUqEsWCs+LIWftPF1ie7+i012Fg==", + "requires": { + "css-in-js-utils": "^2.0.0" + } + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arguments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "requires": { + "call-bind": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "is-bigint": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", + "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==" + }, + "is-boolean-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", + "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", + "requires": { + "call-bind": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.3.0.tgz", + "integrity": "sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw==", + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + }, + "is-generator-function": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz", + "integrity": "sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==" + }, + "is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-number-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==" + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-typed-array": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz", + "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==", + "requires": { + "available-typed-arrays": "^1.0.2", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.0-next.2", + "foreach": "^2.0.5", + "has-symbols": "^1.0.1" + } + }, + "is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==" + }, + "is-weakset": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.1.tgz", + "integrity": "sha512-pi4vhbhVHGLxohUw7PhGsueT4vRGFoXhP7+RGN0jKIv9+8PWYCQTqtADngrxOm2g46hoH0+g8uZZBzMrvVGDmw==" + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + }, + "dependencies": { + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + } + } + }, + "jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==" + }, + "jest-haste-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "requires": { + "@jest/types": "^26.6.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.1.2", + "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" + } + }, + "jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==" + }, + "jest-serializer": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + } + }, + "jest-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "requires": { + "@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": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", + "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", + "requires": { + "@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" + }, + "dependencies": { + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" + } + } + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jetifier": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/jetifier/-/jetifier-1.6.8.tgz", + "integrity": "sha512-3Zi16h6L5tXDRQJTb221cnRoVG9/9OvreLdLU2/ZjRv/GILL+2Cemt0IKvkowwkDpvouAU1DQPOJ7qaiHeIdrw==" + }, + "jimp": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.12.1.tgz", + "integrity": "sha512-0soPJif+yjmzmOF+4cF2hyhxUWWpXpQntsm2joJXFFoRcQiPzsG4dbLKYqYPT3Fc6PjZ8MaLtCkDqqckVSfmRw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/custom": "^0.12.1", + "@jimp/plugins": "^0.12.1", + "@jimp/types": "^0.12.1", + "regenerator-runtime": "^0.13.3" + } + }, + "joi": { + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.4.0.tgz", + "integrity": "sha512-F4WiW2xaV6wc1jxete70Rw4V/VuMd6IN+a5ilZsxG4uYtUXWu2kq9W5P2dz30e7Gmw8RCbY/u/uk+dMPma9tAg==", + "requires": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.0", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" + } + }, + "jpeg-js": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.3.tgz", + "integrity": "sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsc-android": { + "version": "245459.0.0", + "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-245459.0.0.tgz", + "integrity": "sha512-wkjURqwaB1daNkDi2OYYbsLnIdC/lUM2nPXQKRs5pqEU9chDg435bjvo+LSaHotDENygHQDHe+ntUkkw2gwMtg==" + }, + "jscodeshift": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.11.0.tgz", + "integrity": "sha512-SdRK2C7jjs4k/kT2mwtO07KJN9RnjxtKn03d9JVj6c3j9WwaLcFYsICYDnLAzY0hp+wG2nxl+Cm2jWLiNVYb8g==", + "requires": { + "@babel/core": "^7.1.6", + "@babel/parser": "^7.1.6", + "@babel/plugin-proposal-class-properties": "^7.1.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.1.0", + "@babel/plugin-proposal-optional-chaining": "^7.1.0", + "@babel/plugin-transform-modules-commonjs": "^7.1.0", + "@babel/preset-flow": "^7.0.0", + "@babel/preset-typescript": "^7.1.0", + "@babel/register": "^7.0.0", + "babel-core": "^7.0.0-bridge.0", + "colors": "^1.1.2", + "flow-parser": "0.*", + "graceful-fs": "^4.2.4", + "micromatch": "^3.1.10", + "neo-async": "^2.5.0", + "node-dir": "^0.1.17", + "recast": "^0.20.3", + "temp": "^0.8.1", + "write-file-atomic": "^2.3.0" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "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" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "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" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + }, + "dependencies": { + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "jsx-ast-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", + "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", + "dev": true, + "requires": { + "array-includes": "^3.1.3", + "object.assign": "^4.1.2" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "requires": { + "graceful-fs": "^4.1.9" + } + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "load-bmfont": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", + "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", + "requires": { + "buffer-equal": "0.0.1", + "mime": "^1.3.4", + "parse-bmfont-ascii": "^1.0.3", + "parse-bmfont-binary": "^1.0.5", + "parse-bmfont-xml": "^1.1.4", + "phin": "^2.9.1", + "xhr": "^2.0.1", + "xtend": "^4.0.0" + }, + "dependencies": { + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + } + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + }, + "lodash.frompairs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.frompairs/-/lodash.frompairs-4.0.1.tgz", + "integrity": "sha1-vE5SB/onV8E25XNhTpZkUGsrG9I=" + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.omit": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", + "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=" + }, + "lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" + }, + "lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "requires": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "requires": { + "chalk": "^2.0.1" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + } + } + }, + "logkitty": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz", + "integrity": "sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==", + "requires": { + "ansi-fragments": "^0.2.1", + "dayjs": "^1.8.15", + "yargs": "^15.1.0" + } + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "requires": { + "tmpl": "1.0.x" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } + }, + "md5-file": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-3.2.3.tgz", + "integrity": "sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw==", + "requires": { + "buffer-alloc": "^1.1.0" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "metro": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.64.0.tgz", + "integrity": "sha512-G2OC08Rzfs0kqnSEuKo2yZxR+/eNUpA93Ru45c60uN0Dw3HPrDi+ZBipgFftC6iLE0l+6hu8roFFIofotWxybw==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/core": "^7.0.0", + "@babel/generator": "^7.5.0", + "@babel/parser": "^7.0.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "absolute-path": "^0.0.0", + "accepts": "^1.3.7", + "async": "^2.4.0", + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "denodeify": "^1.2.1", + "error-stack-parser": "^2.0.6", + "fs-extra": "^1.0.0", + "graceful-fs": "^4.1.3", + "image-size": "^0.6.0", + "invariant": "^2.2.4", + "jest-haste-map": "^26.5.2", + "jest-worker": "^26.0.0", + "lodash.throttle": "^4.1.1", + "metro-babel-register": "0.64.0", + "metro-babel-transformer": "0.64.0", + "metro-cache": "0.64.0", + "metro-cache-key": "0.64.0", + "metro-config": "0.64.0", + "metro-core": "0.64.0", + "metro-hermes-compiler": "0.64.0", + "metro-inspector-proxy": "0.64.0", + "metro-minify-uglify": "0.64.0", + "metro-react-native-babel-preset": "0.64.0", + "metro-resolver": "0.64.0", + "metro-runtime": "0.64.0", + "metro-source-map": "0.64.0", + "metro-symbolicate": "0.64.0", + "metro-transform-plugins": "0.64.0", + "metro-transform-worker": "0.64.0", + "mime-types": "^2.1.27", + "mkdirp": "^0.5.1", + "node-fetch": "^2.2.0", + "nullthrows": "^1.1.1", + "rimraf": "^2.5.4", + "serialize-error": "^2.1.0", + "source-map": "^0.5.6", + "strip-ansi": "^6.0.0", + "temp": "0.8.3", + "throat": "^5.0.0", + "ws": "^1.1.5", + "yargs": "^15.3.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "fs-extra": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", + "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "metro-babel-transformer": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.64.0.tgz", + "integrity": "sha512-itZaxKTgmKGEZWxNzbSZBc22NngrMZzoUNuU92aHSTGkYi2WH4XlvzEHsstmIKHMsRVKl75cA+mNmgk4gBFJKw==", + "requires": { + "@babel/core": "^7.0.0", + "metro-source-map": "0.64.0", + "nullthrows": "^1.1.1" + } + }, + "metro-react-native-babel-preset": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.64.0.tgz", + "integrity": "sha512-HcZ0RWQRuJfpPiaHyFQJzcym+/dDIVUPwUAXWoub/C4GkGu+mPjp8vqK6g0FxokCnnI2TK0gZTza2IDfiNNscQ==", + "requires": { + "@babel/core": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.2.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-exponentiation-operator": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-assign": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "react-refresh": "^0.4.0" + } + }, + "metro-source-map": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.64.0.tgz", + "integrity": "sha512-OCG2rtcp5cLEGYvAbfkl6mEc0J2FPRP4/UCEly+juBk7hawS9bCBMBfhJm/HIsvY1frk6nT2Vsl1O8YBbwyx2g==", + "requires": { + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "invariant": "^2.2.4", + "metro-symbolicate": "0.64.0", + "nullthrows": "^1.1.1", + "ob1": "0.64.0", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + } + }, + "metro-symbolicate": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.64.0.tgz", + "integrity": "sha512-qIi+YRrDWnLVmydj6gwidYLPaBsakZRibGWSspuXgHAxOI3UuLwlo4dpQ73Et0gyHjI7ZvRMRY8JPiOntf9AQQ==", + "requires": { + "invariant": "^2.2.4", + "metro-source-map": "0.64.0", + "nullthrows": "^1.1.1", + "source-map": "^0.5.6", + "through2": "^2.0.1", + "vlq": "^1.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "ob1": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.64.0.tgz", + "integrity": "sha512-CO1N+5dhvy+MoAwxz8+fymEUcwsT4a+wHhrHFb02LppcJdHxgcBWviwEhUwKOD2kLMQ7ijrrzybOqpGcqEtvpQ==" + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "ws": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "requires": { + "options": ">=0.0.5", + "ultron": "1.0.x" + } + } + } + }, + "metro-babel-register": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-babel-register/-/metro-babel-register-0.64.0.tgz", + "integrity": "sha512-Kf6YvE3kIRumGnjK0Q9LqGDIdnsX9eFGtNBmBuCVDuB9wGGA/5CgX8We8W7Y44dz1RGTcHJRhfw5iGg+pwC3aQ==", + "requires": { + "@babel/core": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/register": "^7.0.0", + "escape-string-regexp": "^1.0.5" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + } + } + }, + "metro-babel-transformer": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.59.0.tgz", + "integrity": "sha512-fdZJl8rs54GVFXokxRdD7ZrQ1TJjxWzOi/xSP25VR3E8tbm3nBZqS+/ylu643qSr/IueABR+jrlqAyACwGEf6w==", + "requires": { + "@babel/core": "^7.0.0", + "metro-source-map": "0.59.0" + } + }, + "metro-cache": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.64.0.tgz", + "integrity": "sha512-QvGfxe/1QQYM9XOlR8W1xqE9eHDw/AgJIgYGn/TxZxBu9Zga+Rgs1omeSZju45D8w5VWgMr83ma5kACgzvOecg==", + "requires": { + "metro-core": "0.64.0", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4" + } + }, + "metro-cache-key": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.64.0.tgz", + "integrity": "sha512-O9B65G8L/fopck45ZhdRosyVZdMtUQuX5mBWEC1NRj02iWBIUPLmYMjrunqIe8vHipCMp3DtTCm/65IlBmO8jg==" + }, + "metro-config": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.64.0.tgz", + "integrity": "sha512-QhM4asnX5KhlRWaugwVGNNXhX0Z85u5nK0UQ/A90bBb4xWyXqUe20e788VtdA75rkQiiI6wXTCIHWT0afbnjwQ==", + "requires": { + "cosmiconfig": "^5.0.5", + "jest-validate": "^26.5.2", + "metro": "0.64.0", + "metro-cache": "0.64.0", + "metro-core": "0.64.0", + "metro-runtime": "0.64.0" + } + }, + "metro-core": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.64.0.tgz", + "integrity": "sha512-v8ZQ5j72EaUwamQ8pLfHlOHTyp7SbdazvHPzFGDpHnwIQqIT0Bw3Syg8R4regTlVG3ngpeSEAi005UITljmMcQ==", + "requires": { + "jest-haste-map": "^26.5.2", + "lodash.throttle": "^4.1.1", + "metro-resolver": "0.64.0" + } + }, + "metro-hermes-compiler": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-hermes-compiler/-/metro-hermes-compiler-0.64.0.tgz", + "integrity": "sha512-CLAjVDWGAoGhbi2ZyPHnH5YDdfrDIx6+tzFWfHGIMTZkYBXsYta9IfYXBV8lFb6BIbrXLjlXZAOoosknetMPOA==" + }, + "metro-inspector-proxy": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.64.0.tgz", + "integrity": "sha512-KywbH3GNSz9Iqw4UH3smgaV2dBHHYMISeN7ORntDL/G+xfgPc6vt13d+zFb907YpUcXj5N0vdoiAHI5V/0y8IA==", + "requires": { + "connect": "^3.6.5", + "debug": "^2.2.0", + "ws": "^1.1.5", + "yargs": "^15.3.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "ws": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "requires": { + "options": ">=0.0.5", + "ultron": "1.0.x" + } + } + } + }, + "metro-minify-uglify": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.64.0.tgz", + "integrity": "sha512-DRwRstqXR5qfte9Nuwoov5dRXxL7fJeVlO5fGyOajWeO3+AgPjvjXh/UcLJqftkMWTPGUFuzAD5/7JC5v5FLWw==", + "requires": { + "uglify-es": "^3.1.9" + } + }, + "metro-react-native-babel-preset": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.59.0.tgz", + "integrity": "sha512-BoO6ncPfceIDReIH8pQ5tQptcGo5yRWQXJGVXfANbiKLq4tfgdZB1C1e2rMUJ6iypmeJU9dzl+EhPmIFKtgREg==", + "requires": { + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.2.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-exponentiation-operator": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-assign": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "react-refresh": "^0.4.0" + } + }, + "metro-react-native-babel-transformer": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.59.0.tgz", + "integrity": "sha512-1O3wrnMq4NcPQ1asEcl9lRDn/t+F1Oef6S9WaYVIKEhg9m/EQRGVrrTVP+R6B5Eeaj3+zNKbzM8Dx/NWy1hUbQ==", + "requires": { + "@babel/core": "^7.0.0", + "babel-preset-fbjs": "^3.3.0", + "metro-babel-transformer": "0.59.0", + "metro-react-native-babel-preset": "0.59.0", + "metro-source-map": "0.59.0" + } + }, + "metro-resolver": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.64.0.tgz", + "integrity": "sha512-cJ26Id8Zf+HmS/1vFwu71K3u7ep/+HeXXAJIeVDYf+niE7AWB9FijyMtAlQgbD8elWqv1leJCnQ/xHRFBfGKYA==", + "requires": { + "absolute-path": "^0.0.0" + } + }, + "metro-runtime": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.64.0.tgz", + "integrity": "sha512-m7XbWOaIOeFX7YcxUhmnOi6Pg8EaeL89xyZ+quZyZVF1aNoTr4w8FfbKxvijpjsytKHIZtd+43m2Wt5JrqyQmQ==" + }, + "metro-source-map": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.59.0.tgz", + "integrity": "sha512-0w5CmCM+ybSqXIjqU4RiK40t4bvANL6lafabQ2GP2XD3vSwkLY+StWzCtsb4mPuyi9R/SgoLBel+ZOXHXAH0eQ==", + "requires": { + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "invariant": "^2.2.4", + "metro-symbolicate": "0.59.0", + "ob1": "0.59.0", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + } + }, + "metro-symbolicate": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.59.0.tgz", + "integrity": "sha512-asLaF2A7rndrToGFIknL13aiohwPJ95RKHf0NM3hP/nipiLDoMzXT6ZnQvBqDxkUKyP+51AI75DMtb+Wcyw4Bw==", + "requires": { + "invariant": "^2.2.4", + "metro-source-map": "0.59.0", + "source-map": "^0.5.6", + "through2": "^2.0.1", + "vlq": "^1.0.0" + } + }, + "metro-transform-plugins": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.64.0.tgz", + "integrity": "sha512-iTIRBD/wBI98plfxj8jAoNUUXfXLNlyvcjPtshhpGvdwu9pzQilGfnDnOaaK+vbITcOk9w5oQectXyJwAqTr1A==", + "requires": { + "@babel/core": "^7.0.0", + "@babel/generator": "^7.5.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "nullthrows": "^1.1.1" + } + }, + "metro-transform-worker": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.64.0.tgz", + "integrity": "sha512-wegRtK8GyLF6IPZRBJp+zsORgA4iX0h1DRpknyAMDCtSbJ4VU2xV/AojteOgAsDvY3ucAGsvfuZLNDJHUdUNHQ==", + "requires": { + "@babel/core": "^7.0.0", + "@babel/generator": "^7.5.0", + "@babel/parser": "^7.0.0", + "@babel/types": "^7.0.0", + "babel-preset-fbjs": "^3.3.0", + "metro": "0.64.0", + "metro-babel-transformer": "0.64.0", + "metro-cache": "0.64.0", + "metro-cache-key": "0.64.0", + "metro-hermes-compiler": "0.64.0", + "metro-source-map": "0.64.0", + "metro-transform-plugins": "0.64.0", + "nullthrows": "^1.1.1" + }, + "dependencies": { + "metro-babel-transformer": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.64.0.tgz", + "integrity": "sha512-itZaxKTgmKGEZWxNzbSZBc22NngrMZzoUNuU92aHSTGkYi2WH4XlvzEHsstmIKHMsRVKl75cA+mNmgk4gBFJKw==", + "requires": { + "@babel/core": "^7.0.0", + "metro-source-map": "0.64.0", + "nullthrows": "^1.1.1" + } + }, + "metro-source-map": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.64.0.tgz", + "integrity": "sha512-OCG2rtcp5cLEGYvAbfkl6mEc0J2FPRP4/UCEly+juBk7hawS9bCBMBfhJm/HIsvY1frk6nT2Vsl1O8YBbwyx2g==", + "requires": { + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "invariant": "^2.2.4", + "metro-symbolicate": "0.64.0", + "nullthrows": "^1.1.1", + "ob1": "0.64.0", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + } + }, + "metro-symbolicate": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.64.0.tgz", + "integrity": "sha512-qIi+YRrDWnLVmydj6gwidYLPaBsakZRibGWSspuXgHAxOI3UuLwlo4dpQ73Et0gyHjI7ZvRMRY8JPiOntf9AQQ==", + "requires": { + "invariant": "^2.2.4", + "metro-source-map": "0.64.0", + "nullthrows": "^1.1.1", + "source-map": "^0.5.6", + "through2": "^2.0.1", + "vlq": "^1.0.0" + } + }, + "ob1": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.64.0.tgz", + "integrity": "sha512-CO1N+5dhvy+MoAwxz8+fymEUcwsT4a+wHhrHFb02LppcJdHxgcBWviwEhUwKOD2kLMQ7ijrrzybOqpGcqEtvpQ==" + } + } + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" + }, + "mime-db": { + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", + "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==" + }, + "mime-types": { + "version": "2.1.31", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", + "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "requires": { + "mime-db": "1.48.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "requires": { + "dom-walk": "^0.1.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "mockdate": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/mockdate/-/mockdate-3.0.5.tgz", + "integrity": "sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ==" + }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "nanoid": { + "version": "3.1.22", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.22.tgz", + "integrity": "sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ==" + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "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" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "nocache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz", + "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q==" + }, + "node-dir": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", + "integrity": "sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU=", + "requires": { + "minimatch": "^3.0.2" + } + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" + }, + "node-releases": { + "version": "1.1.71", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", + "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==" + }, + "node-stream-zip": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.13.5.tgz", + "integrity": "sha512-Lfi9xhSNvnJU35+4ZFlECXKJ70etAgJYWAVCdcEpksPnMrgwNqwkCJqdunoViVoFFV38C7AIodYE+2apuoK9Gw==" + }, + "noop-fn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/noop-fn/-/noop-fn-1.0.0.tgz", + "integrity": "sha1-XzPUfxPSFQ35PgywNmmemC94/78=" + }, + "normalize-css-color": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/normalize-css-color/-/normalize-css-color-1.0.2.tgz", + "integrity": "sha1-Apkel8zOxmI/5XOvu/Deah8+n40=" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "requires": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + }, + "dependencies": { + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + } + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "^2.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "requires": { + "boolbase": "~1.0.0" + } + }, + "nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" + }, + "ob1": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.59.0.tgz", + "integrity": "sha512-opXMTxyWJ9m68ZglCxwo0OPRESIC/iGmKFPXEXzMZqsVIrgoRXOHmoMDkQzz4y3irVjbyPJRAh5pI9fd0MJTFQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==" + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", + "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + } + }, + "object.fromentries": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", + "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + } + }, + "object.hasown": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.0.0.tgz", + "integrity": "sha512-qYMF2CLIjxxLGleeM0jrcB4kiv3loGVAjKQKvH8pSU/i2VcRRvUNmxbD+nEMmrXRfORhuVJuH8OtSYCZoue3zA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", + "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + } + }, + "omggif": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", + "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "requires": { + "is-wsl": "^1.1.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "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" + } + }, + "options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=" + }, + "ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "requires": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + } + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "requires": { + "p-limit": "^3.0.2" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + } + } + }, + "parse-bmfont-ascii": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", + "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=" + }, + "parse-bmfont-binary": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", + "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=" + }, + "parse-bmfont-xml": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", + "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", + "requires": { + "xml-parse-from-string": "^1.0.0", + "xml2js": "^0.4.5" + } + }, + "parse-headers": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", + "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==" + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse-png": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-png/-/parse-png-2.1.0.tgz", + "integrity": "sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==", + "requires": { + "pngjs": "^3.3.0" + }, + "dependencies": { + "pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" + } + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "phin": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", + "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, + "pixelmatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", + "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", + "requires": { + "pngjs": "^3.0.0" + }, + "dependencies": { + "pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" + } + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + } + } + }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "requires": { + "find-up": "^2.1.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + } + } + }, + "plist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.2.tgz", + "integrity": "sha512-MSrkwZBdQ6YapHy87/8hDU8MnIcyxBKjeF+McXnr5A9MtffPewTs7G3hlpodT5TacyfIyFTaJEhh3GGcmasTgQ==", + "requires": { + "base64-js": "^1.5.1", + "xmlbuilder": "^9.0.7", + "xmldom": "^0.5.0" + } + }, + "pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==" + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "pouchdb-collections": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-1.0.1.tgz", + "integrity": "sha1-/mOhfal3YRq+98uAJssalVP9g1k=" + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + }, + "prettier": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "requires": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + } + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "~2.0.3" + } + }, + "prompts": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", + "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "query-string": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", + "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==", + "requires": { + "decode-uri-component": "^0.2.0", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + } + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "react": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", + "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + } + }, + "react-devtools-core": { + "version": "4.13.5", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.13.5.tgz", + "integrity": "sha512-k+P5VSKM6P22Go9IQ8dJmjj9fbztvKt1iRDI/4wS5oTvd1EnytIJMYB59wZt+D3kgp64jklNX/MRmY42xAQ08g==", + "requires": { + "shell-quote": "^1.6.1", + "ws": "^7" + }, + "dependencies": { + "ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "requires": {} + } + } + }, + "react-dom": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz", + "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.1" + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "react-native": { + "version": "0.64.2", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.64.2.tgz", + "integrity": "sha512-Ty/fFHld9DcYsFZujXYdeVjEhvSeQcwuTGXezyoOkxfiGEGrpL/uwUZvMzwShnU4zbbTKDu2PAm/uwuOittRGA==", + "requires": { + "@jest/create-cache-key-function": "^26.5.0", + "@react-native-community/cli": "^5.0.1-alpha.1", + "@react-native-community/cli-platform-android": "^5.0.1-alpha.1", + "@react-native-community/cli-platform-ios": "^5.0.1-alpha.1", + "@react-native/assets": "1.0.0", + "@react-native/normalize-color": "1.0.0", + "@react-native/polyfills": "1.0.0", + "abort-controller": "^3.0.0", + "anser": "^1.4.9", + "base64-js": "^1.1.2", + "event-target-shim": "^5.0.1", + "hermes-engine": "~0.7.0", + "invariant": "^2.2.4", + "jsc-android": "^245459.0.0", + "metro-babel-register": "0.64.0", + "metro-react-native-babel-transformer": "0.64.0", + "metro-runtime": "0.64.0", + "metro-source-map": "0.64.0", + "nullthrows": "^1.1.1", + "pretty-format": "^26.5.2", + "promise": "^8.0.3", + "prop-types": "^15.7.2", + "react-devtools-core": "^4.6.0", + "react-native-codegen": "^0.0.6", + "react-refresh": "^0.4.0", + "regenerator-runtime": "^0.13.2", + "scheduler": "^0.20.1", + "shelljs": "^0.8.4", + "stacktrace-parser": "^0.1.3", + "use-subscription": "^1.0.0", + "whatwg-fetch": "^3.0.0", + "ws": "^6.1.4" + }, + "dependencies": { + "@react-native-community/cli": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-5.0.1.tgz", + "integrity": "sha512-9VzSYUYSEqxEH5Ib2UNSdn2eyPiYZ4T7Y79o9DKtRBuSaUIwbCUdZtIm+UUjBpLS1XYBkW26FqL8/UdZDmQvXw==", + "requires": { + "@react-native-community/cli-debugger-ui": "^5.0.1", + "@react-native-community/cli-hermes": "^5.0.1", + "@react-native-community/cli-server-api": "^5.0.1", + "@react-native-community/cli-tools": "^5.0.1", + "@react-native-community/cli-types": "^5.0.1", + "appdirsjs": "^1.2.4", + "chalk": "^3.0.0", + "command-exists": "^1.2.8", + "commander": "^2.19.0", + "cosmiconfig": "^5.1.0", + "deepmerge": "^3.2.0", + "envinfo": "^7.7.2", + "execa": "^1.0.0", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0", + "glob": "^7.1.3", + "graceful-fs": "^4.1.3", + "joi": "^17.2.1", + "leven": "^3.1.0", + "lodash": "^4.17.15", + "metro": "^0.64.0", + "metro-config": "^0.64.0", + "metro-core": "^0.64.0", + "metro-react-native-babel-transformer": "^0.64.0", + "metro-resolver": "^0.64.0", + "metro-runtime": "^0.64.0", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "node-stream-zip": "^1.9.1", + "ora": "^3.4.0", + "pretty-format": "^26.6.2", + "prompts": "^2.4.0", + "semver": "^6.3.0", + "serve-static": "^1.13.1", + "strip-ansi": "^5.2.0", + "sudo-prompt": "^9.0.0", + "wcwidth": "^1.0.1" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "metro-babel-transformer": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.64.0.tgz", + "integrity": "sha512-itZaxKTgmKGEZWxNzbSZBc22NngrMZzoUNuU92aHSTGkYi2WH4XlvzEHsstmIKHMsRVKl75cA+mNmgk4gBFJKw==", + "requires": { + "@babel/core": "^7.0.0", + "metro-source-map": "0.64.0", + "nullthrows": "^1.1.1" + } + }, + "metro-react-native-babel-preset": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.64.0.tgz", + "integrity": "sha512-HcZ0RWQRuJfpPiaHyFQJzcym+/dDIVUPwUAXWoub/C4GkGu+mPjp8vqK6g0FxokCnnI2TK0gZTza2IDfiNNscQ==", + "requires": { + "@babel/core": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.2.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-exponentiation-operator": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-assign": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "react-refresh": "^0.4.0" + } + }, + "metro-react-native-babel-transformer": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.64.0.tgz", + "integrity": "sha512-K1sHO3ODBFCr7uEiCQ4RvVr+cQg0EHQF8ChVPnecGh/WDD8udrTq9ECwB0dRfMjAvlsHtRUlJm6ZSI8UPgum2w==", + "requires": { + "@babel/core": "^7.0.0", + "babel-preset-fbjs": "^3.3.0", + "metro-babel-transformer": "0.64.0", + "metro-react-native-babel-preset": "0.64.0", + "metro-source-map": "0.64.0", + "nullthrows": "^1.1.1" + } + }, + "metro-source-map": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.64.0.tgz", + "integrity": "sha512-OCG2rtcp5cLEGYvAbfkl6mEc0J2FPRP4/UCEly+juBk7hawS9bCBMBfhJm/HIsvY1frk6nT2Vsl1O8YBbwyx2g==", + "requires": { + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "invariant": "^2.2.4", + "metro-symbolicate": "0.64.0", + "nullthrows": "^1.1.1", + "ob1": "0.64.0", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + } + }, + "metro-symbolicate": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.64.0.tgz", + "integrity": "sha512-qIi+YRrDWnLVmydj6gwidYLPaBsakZRibGWSspuXgHAxOI3UuLwlo4dpQ73Et0gyHjI7ZvRMRY8JPiOntf9AQQ==", + "requires": { + "invariant": "^2.2.4", + "metro-source-map": "0.64.0", + "nullthrows": "^1.1.1", + "source-map": "^0.5.6", + "through2": "^2.0.1", + "vlq": "^1.0.0" + } + }, + "ob1": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.64.0.tgz", + "integrity": "sha512-CO1N+5dhvy+MoAwxz8+fymEUcwsT4a+wHhrHFb02LppcJdHxgcBWviwEhUwKOD2kLMQ7ijrrzybOqpGcqEtvpQ==" + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "promise": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", + "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "requires": { + "asap": "~2.0.6" + } + }, + "scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + } + } + }, + "react-native-background-actions": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/react-native-background-actions/-/react-native-background-actions-2.6.1.tgz", + "integrity": "sha512-4YQSEq7Y+qLKU9BxuzMG0DEIeZkvD54jTqA1IKai/w3sV+hc4cJNoSjZScRj1+663oWrEAZwLUk2I8P5QRvgiQ==", + "requires": { + "eventemitter3": "^4.0.7" + } + }, + "react-native-cheerio": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/react-native-cheerio/-/react-native-cheerio-1.0.0-rc.4.tgz", + "integrity": "sha512-V2nAoxikHGV1vl2nKL2rlw832Ze+p8op5p6MDltd5ZrEZGp1+eTl+qjC+l4TY9ju3CNpt/uiNuOEQoWqgdwzUQ==", + "requires": { + "buffer": "^5.0.7", + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2-without-node-native": "^3.9.0", + "lodash": "^4.15.0", + "react-native-parse-html": "^2.2.6" + } + }, + "react-native-codegen": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/react-native-codegen/-/react-native-codegen-0.0.6.tgz", + "integrity": "sha512-cMvrUelD81wiPitEPiwE/TCNscIVauXxmt4NTGcy18HrUd0WRWXfYzAQGXm0eI87u3NMudNhqFj2NISJenxQHg==", + "requires": { + "flow-parser": "^0.121.0", + "jscodeshift": "^0.11.0", + "nullthrows": "^1.1.1" + } + }, + "react-native-device-info": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-8.1.3.tgz", + "integrity": "sha512-73e3wiGFL8DvIXEd8x4Aq+mO8mZvHARwfYorIEu+X0trLHY92bP5Ict8DJHDjCQ0+HtAvpA4Wda2VoUVN1zh6Q==", + "requires": {} + }, + "react-native-easing-gradient": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/react-native-easing-gradient/-/react-native-easing-gradient-0.1.2.tgz", + "integrity": "sha512-oeSJ8nSrCxiCO5mLEVc59Evva4unjvH6AQ8vJFyJ7PIKRybIV5JC+OBU8VnF+V7oQ9dnDBpx2qT5Mh+oxd+/tw==", + "requires": {} + }, + "react-native-fast-image": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/react-native-fast-image/-/react-native-fast-image-8.3.4.tgz", + "integrity": "sha512-LpzAdjUphihUpVEBn5fEv5AILe55rHav0YiZroPZ1rumKDhAl4u2cG01ku2Pb7l8sayjTsNu7FuURAlXUUDsow==", + "requires": {} + }, + "react-native-gesture-handler": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-1.10.3.tgz", + "integrity": "sha512-cBGMi1IEsIVMgoox4RvMx7V2r6bNKw0uR1Mu1o7NbuHS6BRSVLq0dP34l2ecnPlC+jpWd3le6Yg1nrdCjby2Mw==", + "requires": { + "@egjs/hammerjs": "^2.0.17", + "fbjs": "^3.0.0", + "hoist-non-react-statics": "^3.3.0", + "invariant": "^2.2.4", + "prop-types": "^15.7.2" + }, + "dependencies": { + "fbjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.0.tgz", + "integrity": "sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg==", + "requires": { + "cross-fetch": "^3.0.4", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + } + } + } + }, + "react-native-iphone-x-helper": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.1.tgz", + "integrity": "sha512-HOf0jzRnq2/aFUcdCJ9w9JGzN3gdEg0zFE4FyYlp4jtidqU03D5X7ZegGKfT1EWteR0gPBGp9ye5T5FvSWi9Yg==", + "requires": {} + }, + "react-native-navigation-bar-color": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/react-native-navigation-bar-color/-/react-native-navigation-bar-color-2.0.1.tgz", + "integrity": "sha512-1kE/oxWt+HYjRxdZdvke9tJ365xaee5n3+euOQA1En8zQuSbOxiE4SYEGM7TeaWnmLJ0l37mRnPHaB2H4mGh0A==" + }, + "react-native-pager-view": { + "version": "5.1.10", + "resolved": "https://registry.npmjs.org/react-native-pager-view/-/react-native-pager-view-5.1.10.tgz", + "integrity": "sha512-sVWEPaxSyp2TOQ9yt+v+ecEdZ2lGnZ9TtoNU+WA1c6SjYdQlIvS2ZMb2hvdmgTMCnZpzKF02WH9BimGOzQRDIg==", + "requires": {} + }, + "react-native-paper": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/react-native-paper/-/react-native-paper-4.8.1.tgz", + "integrity": "sha512-WgmqrDdcrr0ZbuiLCwMpmOMhl1n8uIvNulxsl2oCGtD8oeMkPJKHf4G/ONR+iNrSXcFbJek+uDRSmcGA5kDfUA==", + "requires": { + "@callstack/react-theme-provider": "^3.0.5", + "color": "^3.1.2", + "react-native-iphone-x-helper": "^1.3.1" + } + }, + "react-native-parse-html": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/react-native-parse-html/-/react-native-parse-html-2.2.6.tgz", + "integrity": "sha1-IfKPl7OEB3hHWbxZ4kS1EQnZzIc=", + "requires": { + "react-native-stream": "^0.1.0" + } + }, + "react-native-reanimated": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-2.1.0.tgz", + "integrity": "sha512-tlPvvcdf+X7HGQ7g/7npBFhwMznfdk7MHUc9gUB/kp2abSscXNe/kOVKlrNEOO4DS11rNOXc+llFxVFMuNk0zA==", + "requires": { + "@babel/plugin-transform-object-assign": "^7.10.4", + "fbjs": "^3.0.0", + "mockdate": "^3.0.2", + "string-hash-64": "^1.0.3" + }, + "dependencies": { + "fbjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.0.tgz", + "integrity": "sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg==", + "requires": { + "cross-fetch": "^3.0.4", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + } + } + } + }, + "react-native-safe-area-context": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-3.2.0.tgz", + "integrity": "sha512-k2Nty4PwSnrg9HwrYeeE+EYqViYJoOFwEy9LxL5RIRfoqxAq/uQXNGwpUg2/u4gnKpBbEPa9eRh15KKMe/VHkA==", + "requires": {} + }, + "react-native-screens": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.0.0.tgz", + "integrity": "sha512-35II5oxTaVp3OP8y0eLPOPpQkxG4fRKQ+dL1YSE1we5kCZFOU0l/Rn0T79HbyUu1LPwUZr6lZupPs0ULnRyMuQ==", + "requires": {} + }, + "react-native-stream": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/react-native-stream/-/react-native-stream-0.1.9.tgz", + "integrity": "sha1-E2gMzok8p9NKhmZNnVtO4adyyXw=", + "requires": { + "base64-js": "^1.2.0", + "ieee754": "^1.1.8" + } + }, + "react-native-swipe-gestures": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/react-native-swipe-gestures/-/react-native-swipe-gestures-1.0.5.tgz", + "integrity": "sha512-Ns7Bn9H/Tyw278+5SQx9oAblDZ7JixyzeOczcBK8dipQk2pD7Djkcfnf1nB/8RErAmMLL9iXgW0QHqiII8AhKw==" + }, + "react-native-tab-view": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/react-native-tab-view/-/react-native-tab-view-3.0.1.tgz", + "integrity": "sha512-L7qXtYz5Z+NdWyu38zaJrlHA/8H6rNFRZXe3ydym12UEEPPoefbVZ71b9YK2O6QP0u4pUlzMpMVM/Lsz2DJ4jg==", + "requires": {} + }, + "react-native-tts": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/react-native-tts/-/react-native-tts-4.1.0.tgz", + "integrity": "sha512-tvf3lQ6u9MqztUie37qoPw5YQPqi0ql1lPhDsBBs/RRA6A/H1J9X9H/qb1A0Hx0ZpjavrEdtVSqQQ2JDZvZCTQ==" + }, + "react-native-unimodules": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/react-native-unimodules/-/react-native-unimodules-0.13.3.tgz", + "integrity": "sha512-fjbNbAcvJHF8Ywqe77oveRW1WfaAKCQGV4a3Fxgpai17oNHq1LFwwKw0crFo0k7Njm5u7kCMVNbm9ZILNBfABQ==", + "requires": { + "@unimodules/core": "~7.1.0", + "@unimodules/react-native-adapter": "~6.2.2", + "chalk": "^2.4.2", + "expo-asset": "~8.3.1", + "expo-constants": "~10.1.3", + "expo-file-system": "~11.0.2", + "expo-image-loader": "~2.1.1", + "expo-permissions": "~12.0.1", + "find-up": "~5.0.0", + "unimodules-app-loader": "~2.1.0", + "unimodules-barcode-scanner-interface": "~6.1.0", + "unimodules-camera-interface": "~6.1.0", + "unimodules-constants-interface": "~6.1.0", + "unimodules-face-detector-interface": "~6.1.0", + "unimodules-file-system-interface": "~6.1.0", + "unimodules-font-interface": "~6.1.0", + "unimodules-image-loader-interface": "~6.1.0", + "unimodules-permissions-interface": "~6.1.0", + "unimodules-sensors-interface": "~6.1.0", + "unimodules-task-manager-interface": "~6.1.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + } + } + }, + "react-native-vector-icons": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-7.1.0.tgz", + "integrity": "sha512-V2a1zJ4i+kS8O4j183gIwX14St9AxxXabxwYpFBgRhvr2NDXyFcjHDEAgrOYYlt2W57e20aN1tBDU/I+wn9WtQ==", + "requires": { + "lodash.frompairs": "^4.0.1", + "lodash.isequal": "^4.5.0", + "lodash.isstring": "^4.0.1", + "lodash.omit": "^4.5.0", + "lodash.pick": "^4.4.0", + "lodash.template": "^4.5.0", + "prop-types": "^15.7.2", + "yargs": "^15.0.2" + } + }, + "react-native-web": { + "version": "0.16.5", + "resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.16.5.tgz", + "integrity": "sha512-bsoSq9pnjPerNKC1uzvJi7464to3SSMbGG9QFdj6woV3xk5fhq2jB2vQ5+iH/KC7F5lpDRukcb2hMHL1rzKJUQ==", + "requires": { + "array-find-index": "^1.0.2", + "create-react-class": "^15.7.0", + "fbjs": "^3.0.0", + "hyphenate-style-name": "^1.0.4", + "inline-style-prefixer": "^6.0.0", + "normalize-css-color": "^1.0.2", + "prop-types": "^15.6.0" + }, + "dependencies": { + "fbjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.0.tgz", + "integrity": "sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg==", + "requires": { + "cross-fetch": "^3.0.4", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + } + } + } + }, + "react-native-webview": { + "version": "11.6.2", + "resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-11.6.2.tgz", + "integrity": "sha512-7e5ltLBgqt1mX0gdTTS2nFPIjfS6y300wqJ4rLWqU71lDO+8ZeayfsF5qo83qxo2Go74CtLnSeWae4pdGwUqYw==", + "requires": { + "escape-string-regexp": "2.0.0", + "invariant": "2.2.4" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + } + } + }, + "react-redux": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.4.tgz", + "integrity": "sha512-hOQ5eOSkEJEXdpIKbnRyl04LhaWabkDPV+Ix97wqQX3T3d2NQ8DUblNXXtNMavc7DpswyQM6xfaN4HQDKNY2JA==", + "requires": { + "@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": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", + "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + } + } + }, + "recast": { + "version": "0.20.4", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.4.tgz", + "integrity": "sha512-6qLIBGGRcwjrTZGIiBpJVC/NeuXpogXNyRQpqU1zWPUigCphvApoCs9KIwDYh1eDuJ6dAFlQoi/QUyE5KQ6RBQ==", + "requires": { + "ast-types": "0.14.2", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tslib": "^2.0.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "requires": { + "resolve": "^1.1.6" + } + }, + "redux": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.0.tgz", + "integrity": "sha512-uI2dQN43zqLWCt6B/BMGRMY6db7TTY4qeHHfGeKb3EOhmOKjU3KdWvNLJyqaHRksv/ErdNH7cFZWg9jXtewy4g==", + "requires": { + "@babel/runtime": "^7.9.2" + } + }, + "redux-persist": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-6.0.0.tgz", + "integrity": "sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ==", + "requires": {} + }, + "redux-thunk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz", + "integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==" + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "requires": { + "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": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" + }, + "regjsparser": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", + "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "reselect": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-3.0.1.tgz", + "integrity": "sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=" + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "rn-sliding-up-panel": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rn-sliding-up-panel/-/rn-sliding-up-panel-2.4.5.tgz", + "integrity": "sha512-Z8TEJE8KMjx0s9P4ikUDAlvyDgvF9n/6QR5GIUi8iWRKhiYJ4sddKjAIDYVI5yT1q+rJu+iAo7Z310H3yCb3sQ==", + "requires": { + "clamp": "^1.0.1", + "prop-types": "^15.7.2" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "requires": { + "@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" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "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" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "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" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "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" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serialize-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", + "integrity": "sha1-ULZ51WNc34Rme9yOWa9OW4HV9go=" + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "requires": { + "array-filter": "~0.0.0", + "array-map": "~0.0.0", + "array-reduce": "~0.0.0", + "jsonify": "~0.0.0" + }, + "dependencies": { + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=" + } + } + }, + "shelljs": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", + "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "simple-plist": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.1.1.tgz", + "integrity": "sha512-pKMCVKvZbZTsqYR6RKgLfBHkh2cV89GXcA/0CVPje3sOiNOnXA8+rp/ciAMZ7JRaUdLzlEM6JFfUn+fS6Nt3hg==", + "requires": { + "bplist-creator": "0.0.8", + "bplist-parser": "0.2.0", + "plist": "^3.0.1" + } + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "requires": { + "is-arrayish": "^0.3.1" + } + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "slugify": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.5.0.tgz", + "integrity": "sha512-Q2UPZ2udzquy1ElHfOLILMBMqBEXkiD3wE75qtBvV+FsDdZZjUqPZ44vqLTejAVq+wLLHacOMcENnP8+ZbzmIA==" + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "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" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "requires": { + "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": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" + }, + "split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==" + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "stackframe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", + "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==" + }, + "stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "requires": { + "type-fest": "^0.7.1" + }, + "dependencies": { + "type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==" + } + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "stream-buffers": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=" + }, + "strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-hash-64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string-hash-64/-/string-hash-64-1.0.3.tgz", + "integrity": "sha512-D5OKWKvDhyVWWn2x5Y9b+37NUllks34q1dCDhk/vYcso9fmhs+Tl3KR/gE4v5UNj2UA35cnX4KdVVGkG1deKqw==" + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "string.prototype.matchall": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", + "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + } + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "sudo-prompt": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", + "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "ajv": { + "version": "8.6.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", + "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "temp": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", + "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", + "requires": { + "os-tmpdir": "^1.0.0", + "rimraf": "~2.2.6" + }, + "dependencies": { + "rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=" + } + } + }, + "temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=" + }, + "tempy": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz", + "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==", + "requires": { + "temp-dir": "^1.0.0", + "type-fest": "^0.3.1", + "unique-string": "^1.0.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==" + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "timm": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", + "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==" + }, + "tiny-queue": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tiny-queue/-/tiny-queue-0.2.1.tgz", + "integrity": "sha1-JaZ/LG4lOyypQZd7XvdELvl6YEY=" + }, + "tinycolor2": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", + "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==" + }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==" + }, + "typescript": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz", + "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==", + "dev": true, + "peer": true + }, + "ua-parser-js": { + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==" + }, + "uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "requires": { + "commander": "~2.13.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" + }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "requires": { + "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": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" + }, + "unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" + }, + "unimodules-app-loader": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unimodules-app-loader/-/unimodules-app-loader-2.1.0.tgz", + "integrity": "sha512-W+D+hVXq6jOvBm7QVwODPENz6Lupj73QequNNG+6GCTkqn4ybq/lba9IQvJQT2QzdL3luVHin+eym18cDblMlg==" + }, + "unimodules-barcode-scanner-interface": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/unimodules-barcode-scanner-interface/-/unimodules-barcode-scanner-interface-6.1.0.tgz", + "integrity": "sha512-+McBDniXReXNS8PnGDjIyDikb+cRXSfsZMLsF0gohEEV0xdA6HhPvFA0ryv65j2NKOyIiWmEHjv+yDOoewDq3w==" + }, + "unimodules-camera-interface": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/unimodules-camera-interface/-/unimodules-camera-interface-6.1.0.tgz", + "integrity": "sha512-Rbszrh54kIB4vA+AzDWFXplBz1UrxQNR6Ls0eJDAKffbjDfyQIP6SgIPjUlzqGVnzknyZ1SMGiFFSFCM4BCOAw==" + }, + "unimodules-constants-interface": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/unimodules-constants-interface/-/unimodules-constants-interface-6.1.0.tgz", + "integrity": "sha512-uPLFGufbdefRQeINyUfkw2mVJJg+6kH23RR4ATfUAsrD6vGLuONwduHvRwh+rcL9fzPVM4jsfH6iATrolmiatg==" + }, + "unimodules-face-detector-interface": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/unimodules-face-detector-interface/-/unimodules-face-detector-interface-6.1.0.tgz", + "integrity": "sha512-L2E8a2OjMPxfVh/OGt6Y5HWbEaJ9h3Hkmvx02GCferBPKgN3dcxFMaI53d1BVV9QA3r4YuLBP6RrolG/qy/r7A==" + }, + "unimodules-file-system-interface": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/unimodules-file-system-interface/-/unimodules-file-system-interface-6.1.0.tgz", + "integrity": "sha512-iJGm6nWF+PhxqFbeqC2Ku4XjglbL9z7aofkSX5S7bZ3Oi4v1NO1UOe9nczU17Ps19sfYZJgkiD4FiQaFCmAnKg==" + }, + "unimodules-font-interface": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/unimodules-font-interface/-/unimodules-font-interface-6.1.0.tgz", + "integrity": "sha512-OfSeWx9ew2SNENj/HhctfPU7hqeW0bzVZYGGJ0M6RNcRRWzwA6ltawyYwtuvRe/EEU3LwrFUSKPMCi9867hLyw==" + }, + "unimodules-image-loader-interface": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/unimodules-image-loader-interface/-/unimodules-image-loader-interface-6.1.0.tgz", + "integrity": "sha512-o8hZI6J6DGYyo2xSH6J+ipxME0blNfmaWU3P2Y2AUVxbEPdgjT2sVmufRWMKGhrt7gaNW4xF/JUbF9lq4Rui7w==" + }, + "unimodules-permissions-interface": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/unimodules-permissions-interface/-/unimodules-permissions-interface-6.1.0.tgz", + "integrity": "sha512-jeJx/y+Vn/Cp1/4su5XJ06UBul83MpXkYEqIOAb2jwaikhmj6tNwko7HpKy9OhfGfrhddCzwtedlro8xxZUk9A==" + }, + "unimodules-sensors-interface": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/unimodules-sensors-interface/-/unimodules-sensors-interface-6.1.0.tgz", + "integrity": "sha512-tJDOo3p4q4wmhyuwapNjYeON7cd5OSPYr3qDfMgPPg9m6pYM/FdQJ1PKMNb1NJUckpDgQ67Dows2jAdqkNRZSw==" + }, + "unimodules-task-manager-interface": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/unimodules-task-manager-interface/-/unimodules-task-manager-interface-6.1.0.tgz", + "integrity": "sha512-wSsuX5fzd3oCCjHvrRFxysmCswhHZbJflVyAWzgSHtyMgxBOZobGN1C0UQ/plcu/JWY2+maTDPpE9OU6wzzzdg==" + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + } + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "url-parse": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", + "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, + "use-subscription": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/use-subscription/-/use-subscription-1.5.1.tgz", + "integrity": "sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==", + "requires": { + "object-assign": "^4.1.1" + } + }, + "utif": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", + "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", + "requires": { + "pako": "^1.0.5" + } + }, + "util": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.3.tgz", + "integrity": "sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog==", + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "vlq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", + "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==" + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "requires": { + "makeerror": "1.0.x" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "requires": { + "defaults": "^1.0.3" + } + }, + "whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "requires": { + "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-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "requires": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "which-typed-array": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", + "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==", + "requires": { + "available-typed-arrays": "^1.0.2", + "call-bind": "^1.0.0", + "es-abstract": "^1.18.0-next.1", + "foreach": "^2.0.5", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.1", + "is-typed-array": "^1.1.3" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xcode": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz", + "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==", + "requires": { + "simple-plist": "^1.1.0", + "uuid": "^7.0.3" + }, + "dependencies": { + "uuid": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", + "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==" + } + } + }, + "xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "requires": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "xml-js": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "requires": { + "sax": "^1.2.4" + } + }, + "xml-parse-from-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", + "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=" + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "dependencies": { + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + } + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + }, + "xmldoc": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.1.2.tgz", + "integrity": "sha512-ruPC/fyPNck2BD1dpz0AZZyrEwMOrWTO5lDdIXS91rs3wtm4j+T8Rp2o+zoOYkkAxJTZRPOSnOGei1egoRmKMQ==", + "requires": { + "sax": "^1.2.1" + } + }, + "xmldom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.5.0.tgz", + "integrity": "sha512-Foaj5FXVzgn7xFzsKeNIde9g6aFBxTPi37iwsno8QvApmtg7KYrr+OPyRHcJF7dud2a5nGRBXK3n0dL62Gf7PA==" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "requires": { + "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" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + } + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + } + } +} diff --git a/package.json b/package.json index ecf84c5f..7b0a79ac 100644 --- a/package.json +++ b/package.json @@ -1,74 +1,66 @@ -{ - "scripts": { - "start": "react-native start", - "android": "react-native run-android", - "ios": "react-native run-ios", - "web": "expo start --web", - "eject": "expo eject" - }, - "dependencies": { - "@react-native-async-storage/async-storage": "^1.13.0", - "@react-native-community/masked-view": "0.1.10", - "@react-native-community/netinfo": "6.0.0", - "@react-native-community/slider": "3.0.3", - "@react-navigation/material-bottom-tabs": "^5.3.10", - "@react-navigation/native": "^5.8.10", - "@react-navigation/stack": "^5.12.8", - "expo": "^41.0.1", - "expo-document-picker": "^9.1.2", - "expo-file-system": "~11.0.2", - "expo-font": "~9.1.0", - "expo-haptics": "~10.0.0", - "expo-linear-gradient": "~9.1.0", - "expo-linking": "~2.2.3", - "expo-notifications": "~0.11.6", - "expo-splash-screen": "^0.11.2", - "expo-sqlite": "~9.1.0", - "expo-updates": "~0.5.4", - "expo-web-browser": "~9.1.0", - "moment": "^2.29.1", - "qs": "^6.10.1", - "react": "16.13.1", - "react-dom": "16.13.1", - "react-native": "^0.64.2", - "react-native-background-actions": "^2.6.1", - "react-native-cheerio": "^1.0.0-rc.4", - "react-native-device-info": "^8.1.3", - "react-native-easing-gradient": "^0.1.2", - "react-native-fast-image": "^8.3.4", - "react-native-gesture-handler": "~1.10.2", - "react-native-navigation-bar-color": "^2.0.1", - "react-native-pager-view": "^5.1.10", - "react-native-paper": "^4.5.0", - "react-native-reanimated": "^2.1.0", - "react-native-safe-area-context": "3.2.0", - "react-native-screens": "~3.0.0", - "react-native-swipe-gestures": "^1.0.5", - "react-native-tab-view": "^3.0.1", - "react-native-tts": "^4.1.0", - "react-native-unimodules": "~0.13.3", - "react-native-vector-icons": "^7.1.0", - "react-native-web": "^0.16.5", - "react-native-webview": "^11.6.2", - "react-redux": "^7.2.2", - "redux": "^4.0.5", - "redux-persist": "^6.0.0", - "redux-thunk": "^2.3.0", - "rn-sliding-up-panel": "^2.4.4" - }, - "devDependencies": { - "@babel/core": "~7.9.0" - }, - "prettier": { - "tabWidth": 4, - "semi": true, - "singleQuote": false, - "quoteProps": "as-needed", - "trailingComma": "es5", - "bracketSpacing": true, - "arrowParens": "always" - }, - "private": true, - "name": "lnreader", - "version": "1.0.0" -} +{ + "scripts": { + "android": "react-native run-android", + "ios": "react-native run-ios", + "start": "react-native start", + "lint": "eslint ." + }, + "dependencies": { + "@react-native-async-storage/async-storage": "^1.13.0", + "@react-native-community/masked-view": "0.1.10", + "@react-native-community/netinfo": "6.0.0", + "@react-native-community/slider": "3.0.3", + "@react-navigation/material-bottom-tabs": "^5.3.10", + "@react-navigation/native": "^5.8.10", + "@react-navigation/stack": "^5.12.8", + "expo": "^41.0.1", + "expo-document-picker": "^9.1.2", + "expo-file-system": "~11.0.2", + "expo-font": "~9.1.0", + "expo-haptics": "~10.0.0", + "expo-linear-gradient": "~9.1.0", + "expo-linking": "~2.2.3", + "expo-notifications": "~0.11.6", + "expo-splash-screen": "^0.11.2", + "expo-sqlite": "~9.1.0", + "expo-updates": "~0.5.4", + "expo-web-browser": "~9.1.0", + "moment": "^2.29.1", + "qs": "^6.10.1", + "react": "16.13.1", + "react-dom": "16.13.1", + "react-native": "^0.64.2", + "react-native-background-actions": "^2.6.1", + "react-native-cheerio": "^1.0.0-rc.4", + "react-native-device-info": "^8.1.3", + "react-native-easing-gradient": "^0.1.2", + "react-native-fast-image": "^8.3.4", + "react-native-gesture-handler": "~1.10.2", + "react-native-navigation-bar-color": "^2.0.1", + "react-native-pager-view": "^5.1.10", + "react-native-paper": "^4.5.0", + "react-native-reanimated": "^2.1.0", + "react-native-safe-area-context": "3.2.0", + "react-native-screens": "~3.0.0", + "react-native-swipe-gestures": "^1.0.5", + "react-native-tab-view": "^3.0.1", + "react-native-tts": "^4.1.0", + "react-native-unimodules": "~0.13.3", + "react-native-vector-icons": "^7.1.0", + "react-native-web": "^0.16.5", + "react-native-webview": "^11.6.2", + "react-redux": "^7.2.2", + "redux": "^4.0.5", + "redux-persist": "^6.0.0", + "redux-thunk": "^2.3.0", + "rn-sliding-up-panel": "^2.4.4" + }, + "devDependencies": { + "@babel/core": "~7.9.0", + "@react-native-community/eslint-config": "^3.0.1", + "eslint": "^7.32.0" + }, + "private": true, + "name": "lnreader", + "version": "1.1.5" +} diff --git a/src/components/Actionbar/Actionbar.js b/src/components/Actionbar/Actionbar.js index 69f84415..43286bb0 100644 --- a/src/components/Actionbar/Actionbar.js +++ b/src/components/Actionbar/Actionbar.js @@ -1,47 +1,47 @@ -import React from "react"; -import { Dimensions, StyleSheet, View } from "react-native"; +import React from 'react'; +import {Dimensions, StyleSheet, View} from 'react-native'; -import { IconButton } from "react-native-paper"; +import {IconButton} from 'react-native-paper'; -export const Actionbar = ({ active, actions, theme, style }) => { - if (active) { - return ( - - {actions.map( - (action, index) => - action.icon && ( - - ) - )} - - ); - } else { - return null; - } +export const Actionbar = ({active, actions, theme, style}) => { + if (active) { + return ( + + {actions.map( + (action, index) => + action.icon && ( + + ), + )} + + ); + } else { + return null; + } }; const styles = StyleSheet.create({ - actionbarContainer: { - position: "absolute", - width: Dimensions.get("window").width - 32, - bottom: 0, - margin: 16, - borderRadius: 6, - flexDirection: "row", - justifyContent: "space-between", - paddingHorizontal: 8, - paddingVertical: 4, - elevation: 2, - }, + actionbarContainer: { + position: 'absolute', + width: Dimensions.get('window').width - 32, + bottom: 0, + margin: 16, + borderRadius: 6, + flexDirection: 'row', + justifyContent: 'space-between', + paddingHorizontal: 8, + paddingVertical: 4, + elevation: 2, + }, }); diff --git a/src/components/Appbar.js b/src/components/Appbar.js index 1e29baf7..7b825877 100644 --- a/src/components/Appbar.js +++ b/src/components/Appbar.js @@ -1,24 +1,22 @@ -import React from "react"; +import React from 'react'; -import { Appbar as MaterialAppbar } from "react-native-paper"; +import {Appbar as MaterialAppbar} from 'react-native-paper'; -import { useTheme } from "../hooks/reduxHooks"; +import {useTheme} from '../hooks/reduxHooks'; -export const Appbar = ({ title, onBackAction, style, children }) => { - const theme = useTheme(); +export const Appbar = ({title, onBackAction, style, children}) => { + const theme = useTheme(); - return ( - - {onBackAction && ( - - )} - - {children} - - ); + return ( + + {onBackAction && } + + {children} + + ); }; diff --git a/src/components/BottomSheetHandle.js b/src/components/BottomSheetHandle.js index 33728757..c0fb4434 100644 --- a/src/components/BottomSheetHandle.js +++ b/src/components/BottomSheetHandle.js @@ -1,17 +1,17 @@ -import React from "react"; -import { View } from "react-native"; +import React from 'react'; +import {View} from 'react-native'; -const BottomSheetHandle = ({ theme }) => ( - +const BottomSheetHandle = ({theme}) => ( + ); export default BottomSheetHandle; diff --git a/src/components/Checkbox/Checkbox.js b/src/components/Checkbox/Checkbox.js index 0302c26a..a77ade49 100644 --- a/src/components/Checkbox/Checkbox.js +++ b/src/components/Checkbox/Checkbox.js @@ -1,85 +1,85 @@ -import React from "react"; -import { Pressable, StyleSheet, Text, View } from "react-native"; +import React from 'react'; +import {Pressable, StyleSheet, Text, View} from 'react-native'; -import MaterialCommunityIcons from "react-native-vector-icons/MaterialCommunityIcons"; +import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons'; -export const Checkbox = ({ label, status, onPress, theme }) => ( - ( + + - - - {label} - - {status && ( - - )} - - + + {label} + + {status && ( + + )} + + ); -export const SortItem = ({ label, status, onPress, theme }) => ( - ( + + - - - {label} - - {status && ( - - )} - - + + {label} + + {status && ( + + )} + + ); const styles = StyleSheet.create({ - checkboxContainer: { - borderRadius: 8, - overflow: "hidden", - marginVertical: 4, - }, - pressable: { - paddingHorizontal: 16, - paddingVertical: 12, - flexDirection: "row", - justifyContent: "space-between", - }, - icon: { - position: "absolute", - right: 16, - alignSelf: "center", - }, + checkboxContainer: { + borderRadius: 8, + overflow: 'hidden', + marginVertical: 4, + }, + pressable: { + paddingHorizontal: 16, + paddingVertical: 12, + flexDirection: 'row', + justifyContent: 'space-between', + }, + icon: { + position: 'absolute', + right: 16, + alignSelf: 'center', + }, }); diff --git a/src/components/ColorPickerModal.js b/src/components/ColorPickerModal.js index f7c9b727..35f241be 100644 --- a/src/components/ColorPickerModal.js +++ b/src/components/ColorPickerModal.js @@ -1,153 +1,148 @@ -import React, { useState } from "react"; -import { FlatList, Pressable, StyleSheet, Text, View } from "react-native"; +import React, {useState} from 'react'; +import {FlatList, Pressable, StyleSheet, Text, View} from 'react-native'; -import { Modal, Portal, TextInput } from "react-native-paper"; +import {Modal, Portal, TextInput} from 'react-native-paper'; const ColorPickerModal = ({ - theme, - color, - title, - onSubmit, - hideModal, - modalVisible, - showAccentColors, + theme, + color, + title, + onSubmit, + hideModal, + modalVisible, + showAccentColors, }) => { - const [text, setText] = useState(color); - const [error, setError] = useState(); + const [text, setText] = useState(color); + const [error, setError] = useState(); - const onDismiss = () => { - hideModal(); - setText(); - setError(); - }; + const onDismiss = () => { + hideModal(); + setText(); + setError(); + }; - const onChangeText = (text) => setText(text); + const onChangeText = text => setText(text); - const onSubmitEditing = () => { - const re = /^#([0-9a-f]{6}|[0-9a-f]{3})$/i; + const onSubmitEditing = () => { + const re = /^#([0-9a-f]{6}|[0-9a-f]{3})$/i; - if (text.match(re)) { - onSubmit(text); - hideModal(); - } else { - setError("Enter a valid hex color code"); - } - }; + if (text.match(re)) { + onSubmit(text); + hideModal(); + } else { + setError('Enter a valid hex color code'); + } + }; - const textInputTheme = { - colors: { - primary: color, - placeholder: theme.textColorHint, - text: theme.textColorPrimary, - background: "transparent", - }, - }; + const textInputTheme = { + colors: { + primary: color, + placeholder: theme.textColorHint, + text: theme.textColorPrimary, + background: 'transparent', + }, + }; - const accentColors = [ - "#EF5350", - "#EC407A", - "#AB47BC", - "#7E57C2", - "#5C6BC0", - "#42A5F5", - "#29B6FC", - "#26C6DA", - "#26A69A", - "#66BB6A", - "#9CCC65", - "#D4E157", - "#FFEE58", - "#FFCA28", - "#FFA726", - "#FF7043", - "#8D6E63", - "#BDBDBD", - "#78909C", - "#000000", - ]; + const accentColors = [ + '#EF5350', + '#EC407A', + '#AB47BC', + '#7E57C2', + '#5C6BC0', + '#42A5F5', + '#29B6FC', + '#26C6DA', + '#26A69A', + '#66BB6A', + '#9CCC65', + '#D4E157', + '#FFEE58', + '#FFCA28', + '#FFA726', + '#FF7043', + '#8D6E63', + '#BDBDBD', + '#78909C', + '#000000', + ]; - return ( - - - - {title} - - {showAccentColors && ( - item} - renderItem={({ item }) => ( - - { - onSubmit(item); - hideModal(); - }} - /> - - )} - /> - )} - + + + {title} + + {showAccentColors && ( + item} + renderItem={({item}) => ( + + { + onSubmit(item); + hideModal(); + }} /> - {error} - - - ); + + )} + /> + )} + + {error} + + + ); }; export default ColorPickerModal; const styles = StyleSheet.create({ - modalContainer: { - margin: 30, - padding: 20, - borderRadius: 8, - }, - modalTitle: { - fontSize: 18, - marginBottom: 16, - }, - errorText: { - color: "#FF0033", - paddingTop: 8, - }, + modalContainer: { + margin: 30, + padding: 20, + borderRadius: 8, + }, + modalTitle: { + fontSize: 18, + marginBottom: 16, + }, + errorText: { + color: '#FF0033', + paddingTop: 8, + }, }); diff --git a/src/components/Common.js b/src/components/Common.js index 6dc1fd4e..78a81378 100644 --- a/src/components/Common.js +++ b/src/components/Common.js @@ -1,27 +1,27 @@ -import React from "react"; -import { View, StyleSheet } from "react-native"; +import React from 'react'; +import {View, StyleSheet} from 'react-native'; -const ScreenContainer = ({ children, theme }) => ( - - {children} - +const ScreenContainer = ({children, theme}) => ( + + {children} + ); -const Row = ({ children, style }) => ( - {children} +const Row = ({children, style}) => ( + {children} ); -export { ScreenContainer, Row }; +export {ScreenContainer, Row}; const styles = StyleSheet.create({ - row: { - flexDirection: "row", - alignItems: "center", - }, + row: { + flexDirection: 'row', + alignItems: 'center', + }, }); diff --git a/src/components/Common/CrossFadeView.js b/src/components/Common/CrossFadeView.js index ddbf5b5d..b4c48687 100644 --- a/src/components/Common/CrossFadeView.js +++ b/src/components/Common/CrossFadeView.js @@ -1,110 +1,108 @@ -import PropTypes from "prop-types"; -import React, { PureComponent, Children } from "react"; -import { View, Animated, StyleSheet } from "react-native"; +import PropTypes from 'prop-types'; +import React, {PureComponent, Children} from 'react'; +import {View, Animated, StyleSheet} from 'react-native'; export default class FadeView extends PureComponent { - static defaultProps = { - animationDuration: 225, + static defaultProps = { + animationDuration: 225, - active: false, - removeHiddenSubviews: true, + active: false, + removeHiddenSubviews: true, + }; + + static propTypes = { + animationDuration: PropTypes.number, + + active: PropTypes.bool, + removeHiddenSubviews: PropTypes.bool, + + children: PropTypes.oneOfType([ + PropTypes.arrayOf(PropTypes.node), + PropTypes.node, + ]), + }; + + constructor(props) { + super(props); + + this.renderChild = this.renderChild.bind(this); + this.mounted = false; + + let {active} = this.props; + + this.state = { + progress: new Animated.Value(Number(active)), + animating: false, }; + } - static propTypes = { - animationDuration: PropTypes.number, + componentDidMount() { + this.mounted = true; + } - active: PropTypes.bool, - removeHiddenSubviews: PropTypes.bool, + componentWillUnmount() { + this.mounted = false; + } - children: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.node), - PropTypes.node, - ]), - }; + UNSAFE_componentWillReceiveProps({active, animationDuration}) { + let {progress} = this.state; - constructor(props) { - super(props); + if (active ^ this.props.active) { + this.setState({animating: true}); - this.renderChild = this.renderChild.bind(this); - this.mounted = false; - - let { active } = this.props; - - this.state = { - progress: new Animated.Value(Number(active)), - animating: false, - }; - } - - componentDidMount() { - this.mounted = true; - } - - componentWillUnmount() { - this.mounted = false; - } - - UNSAFE_componentWillReceiveProps({ active, animationDuration }) { - let { progress } = this.state; - - if (active ^ this.props.active) { - this.setState({ animating: true }); - - Animated.timing(progress, { - toValue: Number(active), - duration: animationDuration, - useNativeDriver: true, - }).start(() => { - if (this.mounted) { - this.setState({ animating: false }); - } - }); + Animated.timing(progress, { + toValue: Number(active), + duration: animationDuration, + useNativeDriver: true, + }).start(() => { + if (this.mounted) { + this.setState({animating: false}); } + }); + } + } + + renderChild(child, index) { + let {active, removeHiddenSubviews} = this.props; + let {animating, progress} = this.state; + + let opacity = progress.interpolate({ + inputRange: [0, 1], + outputRange: index ? [0, 1] : [1, 0], + }); + + let hidden = active ^ !!index; + + if (removeHiddenSubviews) { + if (!animating && hidden) { + return null; + } } - renderChild(child, index) { - let { active, removeHiddenSubviews } = this.props; - let { animating, progress } = this.state; + let pointerEvents = hidden ? 'none' : 'box-none'; - let opacity = progress.interpolate({ - inputRange: [0, 1], - outputRange: index ? [0, 1] : [1, 0], - }); + return ( + + {child} + + ); + } - let hidden = active ^ !!index; + render() { + let {children, ...props} = this.props; - if (removeHiddenSubviews) { - if (!animating && hidden) { - return null; - } - } - - let pointerEvents = hidden ? "none" : "box-none"; - - return ( - - {child} - - ); - } - - render() { - let { children, ...props } = this.props; - - return ( - {Children.map(children, this.renderChild)} - ); - } + return {Children.map(children, this.renderChild)}; + } } const styles = StyleSheet.create({ - container: { - // ...StyleSheet.absoluteFillObject, - flexDirection: "row", - justifyContent: "center", - alignItems: "center", - }, + container: { + // ...StyleSheet.absoluteFillObject, + flexDirection: 'row', + justifyContent: 'center', + alignItems: 'center', + }, }); diff --git a/src/components/Common/ToggleButton.js b/src/components/Common/ToggleButton.js index e966938d..1997ec42 100644 --- a/src/components/Common/ToggleButton.js +++ b/src/components/Common/ToggleButton.js @@ -1,72 +1,64 @@ -import React from "react"; -import { Pressable, View } from "react-native"; -import MaterialCommunityIcons from "react-native-vector-icons/MaterialCommunityIcons"; +import React from 'react'; +import {Pressable, View} from 'react-native'; +import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons'; -export const ToggleButton = ({ icon, selected, theme, color, onPress }) => ( - ( + + - - - - + + + ); export const ToggleColorButton = ({ - selected, - backgroundColor, - textColor, - onPress, + selected, + backgroundColor, + textColor, + onPress, }) => ( - + - - {selected && ( - - )} - - + {selected && ( + + )} + + ); diff --git a/src/components/EmptyView.js b/src/components/EmptyView.js index 2a660405..2dbee39e 100644 --- a/src/components/EmptyView.js +++ b/src/components/EmptyView.js @@ -1,51 +1,45 @@ -import React from "react"; -import { StyleSheet, Text, View } from "react-native"; -import { useSelector } from "react-redux"; +import React from 'react'; +import {StyleSheet, Text, View} from 'react-native'; +import {useSelector} from 'react-redux'; -const EmptyView = ({ icon, description, style, children, iconStyle }) => { - const theme = useSelector((state) => state.settingsReducer.theme); +const EmptyView = ({icon, description, style, children, iconStyle}) => { + const theme = useSelector(state => state.settingsReducer.theme); - return ( - - - {icon} - - - {description} - - {children} - - ); + return ( + + + {icon} + + + {description} + + {children} + + ); }; export default EmptyView; const styles = StyleSheet.create({ - emptyViewContainer: { - flex: 1, - justifyContent: "center", - alignItems: "center", - }, - emptyViewIcon: { - fontSize: 45, - }, - emptyViewText: { - fontWeight: "bold", - marginTop: 10, - textAlign: "center", - paddingHorizontal: 30, - }, + emptyViewContainer: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + }, + emptyViewIcon: { + fontSize: 45, + }, + emptyViewText: { + fontWeight: 'bold', + marginTop: 10, + textAlign: 'center', + paddingHorizontal: 30, + }, }); diff --git a/src/components/ErrorView.js b/src/components/ErrorView.js index 70cc1dce..e3984c98 100644 --- a/src/components/ErrorView.js +++ b/src/components/ErrorView.js @@ -1,28 +1,28 @@ -import React from "react"; -import { Text, View } from "react-native"; +import React from 'react'; +import {Text, View} from 'react-native'; -import { IconButton } from "react-native-paper"; -import { Row } from "./Common"; +import {IconButton} from 'react-native-paper'; +import {Row} from './Common'; -import EmptyView from "./EmptyView"; +import EmptyView from './EmptyView'; -const ErrorView = ({ theme, onRetry, error, openWebView }) => ( - - - - Retry - - +const ErrorView = ({theme, onRetry, error, openWebView}) => ( + + + + Retry + + ); export default ErrorView; diff --git a/src/components/ErrorView/ErrorView.js b/src/components/ErrorView/ErrorView.js index d405ce3d..73908e3d 100644 --- a/src/components/ErrorView/ErrorView.js +++ b/src/components/ErrorView/ErrorView.js @@ -1,75 +1,75 @@ -import React from "react"; -import { Pressable, StyleSheet, Text, View } from "react-native"; -import { IconButton } from "react-native-paper"; +import React from 'react'; +import {Pressable, StyleSheet, Text, View} from 'react-native'; +import {IconButton} from 'react-native-paper'; -const icons = ["(・o・;)", "Σ(ಠ_ಠ)", "ಥ_ಥ", "(˘・_・˘)", "(; ̄Д ̄)", "(・Д・。"]; +const icons = ['(・o・;)', 'Σ(ಠ_ಠ)', 'ಥ_ಥ', '(˘・_・˘)', '(; ̄Д ̄)', '(・Д・。']; -export const ErrorView = ({ errorName, actions, theme }) => ( - - - {/* {icons[Math.floor(Math.random() * 5)]} */} - ಥ_ಥ - - - {errorName} - - - {actions.map((action) => ( - - - - - {action.name} - - - - ))} +export const ErrorView = ({errorName, actions, theme}) => ( + + + {/* {icons[Math.floor(Math.random() * 5)]} */} + ಥ_ಥ + + + {errorName} + + + {actions.map(action => ( + + + + + {action.name} + + + ))} + ); const styles = StyleSheet.create({ - emptyViewContainer: { - flex: 1, - justifyContent: "center", - alignItems: "center", - }, - emptyViewIcon: { - fontSize: 45, - }, - emptyViewText: { - fontWeight: "bold", - marginTop: 10, - textAlign: "center", - paddingHorizontal: 30, - }, + emptyViewContainer: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + }, + emptyViewIcon: { + fontSize: 45, + }, + emptyViewText: { + fontWeight: 'bold', + marginTop: 10, + textAlign: 'center', + paddingHorizontal: 30, + }, }); diff --git a/src/components/Fullscreen.js b/src/components/Fullscreen.js index 050c6904..d96dbbd3 100644 --- a/src/components/Fullscreen.js +++ b/src/components/Fullscreen.js @@ -1,2 +1,2 @@ -import { NativeModules } from "react-native"; +import {NativeModules} from 'react-native'; module.exports = NativeModules.FullScreen; diff --git a/src/components/List.js b/src/components/List.js index fe485f5d..d09bc965 100644 --- a/src/components/List.js +++ b/src/components/List.js @@ -1,143 +1,135 @@ -import React from "react"; -import { Pressable, StyleSheet, Text, View } from "react-native"; +import React from 'react'; +import {Pressable, StyleSheet, Text, View} from 'react-native'; -import { List as PaperList, Divider as PaperDivider } from "react-native-paper"; -import MaterialCommunityIcons from "react-native-vector-icons/MaterialCommunityIcons"; +import {List as PaperList, Divider as PaperDivider} from 'react-native-paper'; +import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons'; -const ListSection = ({ children }) => ( - {children} +const ListSection = ({children}) => ( + {children} ); -const ListSubHeader = ({ children, theme }) => ( - - {children} - +const ListSubHeader = ({children, theme}) => ( + + {children} + ); const ListItem = ({ - title, - description, - icon, - onPress, - theme, - right, - iconColor, - titleStyle, - style, + title, + description, + icon, + onPress, + theme, + right, + iconColor, + titleStyle, + style, }) => ( - ( - - {icon && ( - - )} - - )} - right={() => - right && ( - - ) - } - onPress={onPress} - rippleColor={theme.rippleColor} - /> -); - -const Divider = ({ theme }) => ( - -); - -const InfoItem = ({ title, icon, theme }) => ( - - icon && ( - - ) - } - /> -); - -const ColorItem = ({ title, description, theme, onPress }) => ( - - - - {title} - - - {description} - - - ( + + {icon && ( + + )} + + )} + right={() => + right && ( + - + ) + } + onPress={onPress} + rippleColor={theme.rippleColor} + /> ); -const Icon = ({ icon, theme }) => ( - ( + +); + +const InfoItem = ({title, icon, theme}) => ( + + icon && ( + + ) + } + /> +); + +const ColorItem = ({title, description, theme, onPress}) => ( + + + {title} + {description} + + + +); + +const Icon = ({icon, theme}) => ( + ); export const List = { - Section: ListSection, - SubHeader: ListSubHeader, - Item: ListItem, - Divider, - InfoItem, - ColorItem, - Icon, + Section: ListSection, + SubHeader: ListSubHeader, + Item: ListItem, + Divider, + InfoItem, + ColorItem, + Icon, }; const styles = StyleSheet.create({ - listSection: { - flex: 1, - marginVertical: 0, - }, - listSubHeader: { - paddingBottom: 5, - }, + listSection: { + flex: 1, + marginVertical: 0, + }, + listSubHeader: { + paddingBottom: 5, + }, }); diff --git a/src/components/ListView.js b/src/components/ListView.js index 00b57e1a..6758ef21 100644 --- a/src/components/ListView.js +++ b/src/components/ListView.js @@ -1,80 +1,77 @@ -import React from "react"; -import { StyleSheet, View, Text, Pressable } from "react-native"; +import React from 'react'; +import {StyleSheet, View, Text, Pressable} from 'react-native'; -import FastImage from "react-native-fast-image"; +import FastImage from 'react-native-fast-image'; const ListView = ({ - item, - downloadBadge, - unreadBadge, - inLibraryBadge, - theme, - onPress, - isSelected, - onLongPress, + item, + downloadBadge, + unreadBadge, + inLibraryBadge, + theme, + onPress, + isSelected, + onLongPress, }) => { - return ( - - - - {item.novelName} - - - {downloadBadge} - {unreadBadge} - {inLibraryBadge} - - - ); + return ( + + + + {item.novelName} + + + {downloadBadge} + {unreadBadge} + {inLibraryBadge} + + + ); }; export default ListView; const styles = StyleSheet.create({ - listView: { - flex: 1, - flexDirection: "row", - alignItems: "center", - paddingVertical: 8, - paddingHorizontal: 12, - }, - extensionIcon: { - width: 40, - height: 40, - borderRadius: 4, - }, - novelName: { - flex: 1, - marginLeft: 16, - fontSize: 15, - paddingRight: 8, - flexWrap: "wrap", - }, - badgeContainer: { - flexDirection: "row", - justifyContent: "flex-end", - alignItems: "flex-end", - }, + listView: { + flex: 1, + flexDirection: 'row', + alignItems: 'center', + paddingVertical: 8, + paddingHorizontal: 12, + }, + extensionIcon: { + width: 40, + height: 40, + borderRadius: 4, + }, + novelName: { + flex: 1, + marginLeft: 16, + fontSize: 15, + paddingRight: 8, + flexWrap: 'wrap', + }, + badgeContainer: { + flexDirection: 'row', + justifyContent: 'flex-end', + alignItems: 'flex-end', + }, }); diff --git a/src/components/LoadingScreen/LoadingScreen.js b/src/components/LoadingScreen/LoadingScreen.js index f828686f..3dbcf007 100644 --- a/src/components/LoadingScreen/LoadingScreen.js +++ b/src/components/LoadingScreen/LoadingScreen.js @@ -1,8 +1,8 @@ -import React from "react"; -import { ActivityIndicator, View } from "react-native"; +import React from 'react'; +import {ActivityIndicator, View} from 'react-native'; -export const LoadingScreen = ({ theme }) => ( - - - +export const LoadingScreen = ({theme}) => ( + + + ); diff --git a/src/components/NewUpdateDialog.js b/src/components/NewUpdateDialog.js index edd2c30f..04cb945c 100644 --- a/src/components/NewUpdateDialog.js +++ b/src/components/NewUpdateDialog.js @@ -1,80 +1,75 @@ -import React, { useState } from "react"; -import { StyleSheet, View, Text } from "react-native"; -import { Portal, Modal, Button } from "react-native-paper"; -import * as Linking from "expo-linking"; -import { useTheme } from "../hooks/reduxHooks"; +import React, {useState} from 'react'; +import {StyleSheet, View, Text} from 'react-native'; +import {Portal, Modal, Button} from 'react-native-paper'; +import * as Linking from 'expo-linking'; +import {useTheme} from '../hooks/reduxHooks'; -const NewUpdateDialog = ({ newVersion }) => { - const [newUpdateDialog, showNewUpdateDialog] = useState(true); +const NewUpdateDialog = ({newVersion}) => { + const [newUpdateDialog, showNewUpdateDialog] = useState(true); - const theme = useTheme(); + const theme = useTheme(); - return ( - - showNewUpdateDialog(false)} - contentContainerStyle={[ - styles.containerStyle, - { backgroundColor: theme.colorPrimaryDark }, - ]} - > - - {`New update available ${newVersion.tag_name}`} - - - {newVersion.body} - - - - - - - - ); + return ( + + showNewUpdateDialog(false)} + contentContainerStyle={[ + styles.containerStyle, + {backgroundColor: theme.colorPrimaryDark}, + ]} + > + + {`New update available ${newVersion.tag_name}`} + + + {newVersion.body} + + + + + + + + ); }; export default NewUpdateDialog; const styles = StyleSheet.create({ - containerStyle: { - padding: 20, - margin: 20, - borderRadius: 6, - }, - modalHeader: { - fontSize: 20, - marginBottom: 10, - }, + containerStyle: { + padding: 20, + margin: 20, + borderRadius: 6, + }, + modalHeader: { + fontSize: 20, + marginBottom: 10, + }, }); diff --git a/src/components/NovelCover.js b/src/components/NovelCover.js index ad2b4ab3..1efca1eb 100644 --- a/src/components/NovelCover.js +++ b/src/components/NovelCover.js @@ -1,322 +1,312 @@ -import React, { useCallback } from "react"; +import React, {useCallback} from 'react'; import { - StyleSheet, - View, - Text, - useWindowDimensions, - Pressable, -} from "react-native"; + StyleSheet, + View, + Text, + useWindowDimensions, + Pressable, +} from 'react-native'; -import { LinearGradient } from "expo-linear-gradient"; -import FastImage from "react-native-fast-image"; +import {LinearGradient} from 'expo-linear-gradient'; +import FastImage from 'react-native-fast-image'; -import ListView from "./ListView"; +import ListView from './ListView'; -import { getDeviceOrientation } from "../services/utils/helpers"; -import { useSettings } from "../hooks/reduxHooks"; +import {getDeviceOrientation} from '../services/utils/helpers'; +import {useSettings} from '../hooks/reduxHooks'; const NovelCover = ({ - item, - onPress, - libraryStatus, - theme, - isSelected, - onLongPress, - selectedNovels, + item, + onPress, + libraryStatus, + theme, + isSelected, + onLongPress, + selectedNovels, }) => { - const { displayMode, novelsPerRow, showDownloadBadges, showUnreadBadges } = - useSettings(); + const {displayMode, novelsPerRow, showDownloadBadges, showUnreadBadges} = + useSettings(); - const window = useWindowDimensions(); + const window = useWindowDimensions(); - const orientation = getDeviceOrientation(); + const orientation = getDeviceOrientation(); - const getNovelsPerRow = () => - orientation === "landscape" ? 6 : novelsPerRow; + const getNovelsPerRow = () => + orientation === 'landscape' ? 6 : novelsPerRow; - const getHeight = useCallback( - () => (window.width / getNovelsPerRow()) * (4 / 3), - [] - ); + const getHeight = useCallback( + () => (window.width / getNovelsPerRow()) * (4 / 3), + [], + ); - const selectNovel = () => onLongPress && onLongPress(item.novelId); + const selectNovel = () => onLongPress && onLongPress(item.novelId); - return displayMode !== 2 ? ( - + 0 ? selectNovel : onPress + } + onLongPress={selectNovel} + > + <> + + {libraryStatus && } + {showDownloadBadges && item.chaptersDownloaded && ( + + )} + {showUnreadBadges && item.chaptersUnread && ( + + )} + + - 0 - ? selectNovel - : onPress - } - onLongPress={selectNovel} - > - <> - - {libraryStatus && } - {showDownloadBadges && item.chaptersDownloaded && ( - - )} - {showUnreadBadges && item.chaptersUnread && ( - - )} - - - - {displayMode === 0 && ( - - )} - - {displayMode === 1 && ( - - )} - - - - ) : ( - - ) - } - unreadBadge={ - showUnreadBadges && - item.chaptersUnread && ( - - ) - } - inLibraryBadge={libraryStatus && } + /> + + {displayMode === 0 && } + + {displayMode === 1 && ( + + )} + + + + ) : ( + + ) + } + unreadBadge={ + showUnreadBadges && + item.chaptersUnread && ( + 0 - ? selectNovel - : onPress - } - onLongPress={selectNovel} - isSelected={isSelected} - /> - ); + chaptersDownloaded={item.chaptersDownloaded} + chaptersUnread={item.chaptersUnread} + showDownloadBadges={showDownloadBadges} + /> + ) + } + inLibraryBadge={libraryStatus && } + theme={theme} + onPress={ + selectedNovels && selectedNovels.length > 0 ? selectNovel : onPress + } + onLongPress={selectNovel} + isSelected={isSelected} + /> + ); }; export default NovelCover; -const ComfortableTitle = ({ theme, novelName }) => ( - ( + + {novelName} + +); + +const CompactTitle = ({novelName}) => ( + + + + > {novelName} - + + + ); -const CompactTitle = ({ novelName }) => ( - - - - {novelName} - - - -); - -const InLibraryBadge = ({ theme }) => ( - - In library - +const InLibraryBadge = ({theme}) => ( + + In library + ); const UnreadBadge = ({ - chaptersDownloaded, - chaptersUnread, - showDownloadBadges, - theme, + chaptersDownloaded, + chaptersUnread, + showDownloadBadges, + theme, }) => ( - - {chaptersUnread} - + + {chaptersUnread} + ); const DownloadBadge = ({ - chaptersDownloaded, - showUnreadBadges, - chaptersUnread, + chaptersDownloaded, + showUnreadBadges, + chaptersUnread, }) => ( - - {chaptersDownloaded} - + + {chaptersDownloaded} + ); const styles = StyleSheet.create({ - titleContainer: { - flex: 1, - borderRadius: 4, - }, - title: { - fontFamily: "pt-sans-bold", - fontSize: 14, - padding: 8, - }, - linearGradient: { - borderRadius: 4, - }, - opac: { - padding: 4.8, - borderRadius: 4, - flex: 1, - }, - extensionIcon: { - width: 42, - height: 42, - borderRadius: 4, - }, - listView: { - flex: 1, - paddingVertical: 8, - paddingHorizontal: 12, - flexDirection: "row", - alignItems: "center", - borderRadius: 4, - }, + titleContainer: { + flex: 1, + borderRadius: 4, + }, + title: { + fontFamily: 'pt-sans-bold', + fontSize: 14, + padding: 8, + }, + linearGradient: { + borderRadius: 4, + }, + opac: { + padding: 4.8, + borderRadius: 4, + flex: 1, + }, + extensionIcon: { + width: 42, + height: 42, + borderRadius: 4, + }, + listView: { + flex: 1, + paddingVertical: 8, + paddingHorizontal: 12, + flexDirection: 'row', + alignItems: 'center', + borderRadius: 4, + }, - downloadBadge: { - backgroundColor: "#2979FF", - color: "#FFFFFF", - borderTopLeftRadius: 4, - borderBottomLeftRadius: 4, - paddingTop: 2, - paddingHorizontal: 4, - fontSize: 12, - }, - unreadBadge: { - color: "#FFFFFF", - borderTopRightRadius: 4, - borderBottomRightRadius: 4, - paddingTop: 2, - paddingHorizontal: 4, - fontSize: 12, - }, - inLibraryBadge: { - paddingVertical: 2, - paddingHorizontal: 4, - fontSize: 12, - }, - compactTitleContainer: { - position: "absolute", - bottom: 4, - left: 4, - right: 4, - }, - badgeContainer: { - position: "absolute", - zIndex: 1, - top: 8, - left: 8, - flexDirection: "row", - }, + downloadBadge: { + backgroundColor: '#2979FF', + color: '#FFFFFF', + borderTopLeftRadius: 4, + borderBottomLeftRadius: 4, + paddingTop: 2, + paddingHorizontal: 4, + fontSize: 12, + }, + unreadBadge: { + color: '#FFFFFF', + borderTopRightRadius: 4, + borderBottomRightRadius: 4, + paddingTop: 2, + paddingHorizontal: 4, + fontSize: 12, + }, + inLibraryBadge: { + paddingVertical: 2, + paddingHorizontal: 4, + fontSize: 12, + }, + compactTitleContainer: { + position: 'absolute', + bottom: 4, + left: 4, + right: 4, + }, + badgeContainer: { + position: 'absolute', + zIndex: 1, + top: 8, + left: 8, + flexDirection: 'row', + }, }); diff --git a/src/components/NovelList.js b/src/components/NovelList.js index 18f6cb37..0e9e0ff7 100644 --- a/src/components/NovelList.js +++ b/src/components/NovelList.js @@ -1,61 +1,61 @@ -import React, { useCallback } from "react"; -import { StyleSheet, FlatList } from "react-native"; +import React, {useCallback} from 'react'; +import {StyleSheet, FlatList} from 'react-native'; -import { useSettings } from "../hooks/reduxHooks"; -import { getDeviceOrientation } from "../services/utils/helpers"; +import {useSettings} from '../hooks/reduxHooks'; +import {getDeviceOrientation} from '../services/utils/helpers'; const NovelList = ({ - data, - onScroll, - onEndReached, - renderItem, - refreshControl, - ListEmptyComponent, - ListFooterComponent, + data, + onScroll, + onEndReached, + renderItem, + refreshControl, + ListEmptyComponent, + ListFooterComponent, }) => { - const { displayMode, novelsPerRow } = useSettings(); + const {displayMode, novelsPerRow} = useSettings(); - const orientation = getDeviceOrientation(); + const orientation = getDeviceOrientation(); - const getNovelsPerRow = () => { - if (displayMode === 2) { - return 1; - } + const getNovelsPerRow = () => { + if (displayMode === 2) { + return 1; + } - if (orientation === "landscape") { - return 6; - } else { - return novelsPerRow; - } - }; + if (orientation === 'landscape') { + return 6; + } else { + return novelsPerRow; + } + }; - const keyExtractor = useCallback((item) => item.novelUrl, []); + const keyExtractor = useCallback(item => item.novelUrl, []); - return ( - - ); + return ( + + ); }; export default NovelList; const styles = StyleSheet.create({ - flatListCont: { - flexGrow: 1, - paddingVertical: 8, - }, + flatListCont: { + flexGrow: 1, + paddingBottom: 56, + }, }); diff --git a/src/components/RadioButton.js b/src/components/RadioButton.js index 05575f84..64715893 100644 --- a/src/components/RadioButton.js +++ b/src/components/RadioButton.js @@ -1,40 +1,40 @@ -import React from "react"; -import { StyleSheet, View, Text } from "react-native"; -import { RadioButton as MaterialRadioButton } from "react-native-paper"; +import React from 'react'; +import {StyleSheet, View, Text} from 'react-native'; +import {RadioButton as MaterialRadioButton} from 'react-native-paper'; -export const RadioButtonGroup = ({ children, value, onValueChange }) => ( - - {children} - +export const RadioButtonGroup = ({children, value, onValueChange}) => ( + + {children} + ); -export const RadioButton = ({ value, label, theme, labelStyle }) => ( - - - - {label} - - +export const RadioButton = ({value, label, theme, labelStyle}) => ( + + + + {label} + + ); const styles = StyleSheet.create({ - radioButtonContainer: { - flexDirection: "row", - alignItems: "center", - paddingVertical: 8, - }, - radioButtonLabel: { - marginLeft: 16, - fontSize: 16, - }, + radioButtonContainer: { + flexDirection: 'row', + alignItems: 'center', + paddingVertical: 8, + }, + radioButtonLabel: { + marginLeft: 16, + fontSize: 16, + }, }); diff --git a/src/components/Searchbar/Searchbar.js b/src/components/Searchbar/Searchbar.js index 42aedabf..01b041c9 100644 --- a/src/components/Searchbar/Searchbar.js +++ b/src/components/Searchbar/Searchbar.js @@ -1,97 +1,96 @@ -import React, { useRef } from "react"; -import { StyleSheet, View, TextInput, Text, StatusBar } from "react-native"; +import React, {useRef} from 'react'; +import {StyleSheet, View, TextInput, Text, StatusBar} from 'react-native'; -import { TouchableRipple, IconButton } from "react-native-paper"; -import { Row } from "../Common"; +import {TouchableRipple, IconButton} from 'react-native-paper'; +import {Row} from '../Common'; export const Searchbar = ({ - theme, - placeholder, - searchText, - backAction, - onBackAction, - clearSearchbar, - onChangeText, - onSubmitEditing, - actions, + theme, + placeholder, + searchText, + backAction, + onBackAction, + clearSearchbar, + onChangeText, + onSubmitEditing, + actions, }) => { - const searchRef = useRef(null); + const searchRef = useRef(null); - return ( - searchRef.current.focus()} - style={[ - styles.searchbarContainer, - { backgroundColor: theme.searchBarColor }, - ]} - rippleColor={theme.rippleColor} - > - - - {backAction && ( - - )} - - - {searchText !== "" && ( - - )} - {actions && - actions.map((action, index) => ( - - ))} - - - ); + return ( + searchRef.current.focus()} + style={[ + styles.searchbarContainer, + {backgroundColor: theme.searchBarColor}, + ]} + rippleColor={theme.rippleColor} + > + + + {backAction && ( + + )} + + + {searchText !== '' && ( + + )} + {actions && + actions.map((action, index) => ( + + ))} + + + ); }; const styles = StyleSheet.create({ - searchbarContainer: { - marginTop: StatusBar.currentHeight + 8, - height: 46, - flexDirection: "row", - alignItems: "center", - paddingHorizontal: 12, - marginBottom: 6, - borderRadius: 8, - marginHorizontal: 12, - elevation: 2, - }, - container: { - flex: 1, - flexDirection: "row", - justifyContent: "space-between", - alignItems: "center", - }, + searchbarContainer: { + marginTop: StatusBar.currentHeight + 8, + flexDirection: 'row', + alignItems: 'center', + paddingHorizontal: 12, + marginBottom: 8, + borderRadius: 50, + marginHorizontal: 16, + elevation: 1, + }, + container: { + flex: 1, + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + }, }); diff --git a/src/components/Switch/Switch.js b/src/components/Switch/Switch.js index 7758349f..1059c3c7 100644 --- a/src/components/Switch/Switch.js +++ b/src/components/Switch/Switch.js @@ -1,56 +1,50 @@ -import React from "react"; -import { Pressable, StyleSheet, View, Text } from "react-native"; +import React from 'react'; +import {Pressable, StyleSheet, View, Text} from 'react-native'; -import { Switch, List } from "react-native-paper"; +import {Switch, List} from 'react-native-paper'; -const SwitchSetting = ({ label, description, onPress, theme, icon, value }) => ( - - - {icon && ( - - )} - - - {label} - - {description && ( - - {description} - - )} - - - - +const SwitchSetting = ({label, description, onPress, theme, icon, value}) => ( + + + {icon && ( + + )} + + + {label} + + {description && ( + {description} + )} + + + + ); export default SwitchSetting; const styles = StyleSheet.create({ - container: { - paddingHorizontal: 16, - paddingVertical: 12, - flexDirection: "row", - justifyContent: "space-between", - }, + container: { + paddingHorizontal: 16, + paddingVertical: 12, + flexDirection: 'row', + justifyContent: 'space-between', + }, }); diff --git a/src/components/ThemePicker/ThemePicker.js b/src/components/ThemePicker/ThemePicker.js index a9a697d9..89357bc6 100644 --- a/src/components/ThemePicker/ThemePicker.js +++ b/src/components/ThemePicker/ThemePicker.js @@ -1,172 +1,172 @@ -import React from "react"; -import { View, Text, StyleSheet, Pressable } from "react-native"; -import MaterialCommunityIcons from "react-native-vector-icons/MaterialCommunityIcons"; +import React from 'react'; +import {View, Text, StyleSheet, Pressable} from 'react-native'; +import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons'; -export const ThemePicker = ({ theme, currentTheme, onPress }) => ( +export const ThemePicker = ({theme, currentTheme, onPress}) => ( + + + {currentTheme.id == theme.id && ( + + )} - - {currentTheme.id == theme.id && ( - - )} - - - - - - - - - - - - - - - - - - - - - - + - + + + + + + + + + + + - {theme.name} - + + + + + + + + + {theme.name} + + ); const styles = StyleSheet.create({}); diff --git a/src/database/DBHelper.js b/src/database/DBHelper.js index fc27b286..85c58983 100644 --- a/src/database/DBHelper.js +++ b/src/database/DBHelper.js @@ -1,55 +1,55 @@ -import * as SQLite from "expo-sqlite"; +import * as SQLite from 'expo-sqlite'; import { - createNovelTableQuery, - createUrlIndexQuery, - createLibraryIndexQuery, -} from "./tables/NovelTable"; + createNovelTableQuery, + createUrlIndexQuery, + createLibraryIndexQuery, +} from './tables/NovelTable'; import { - createChapterTableQuery, - createNovelIdIndexQuery, - createUnreadChaptersIndexQuery, -} from "./tables/ChapterTable"; + createChapterTableQuery, + createNovelIdIndexQuery, + createUnreadChaptersIndexQuery, +} from './tables/ChapterTable'; import { - createHistoryTableQuery, - createChapterIdIndexQuery, -} from "./tables/HistoryTable"; -import { createDownloadTableQuery } from "./tables/DownloadTable"; + createHistoryTableQuery, + createChapterIdIndexQuery, +} from './tables/HistoryTable'; +import {createDownloadTableQuery} from './tables/DownloadTable'; import { - createUpdatesTableQuery, - updatesSeedDataQuery, -} from "./tables/UpdateTable"; + createUpdatesTableQuery, + updatesSeedDataQuery, +} from './tables/UpdateTable'; /** * Database Version = 2 */ -const dbName = "lnreader.db"; +const dbName = 'lnreader.db'; const db = SQLite.openDatabase(dbName); export const createDB = () => { - db.transaction((tx) => { - tx.executeSql(createNovelTableQuery); - tx.executeSql(createChapterTableQuery); - tx.executeSql(createHistoryTableQuery); - tx.executeSql(createDownloadTableQuery); - tx.executeSql(createUpdatesTableQuery); + db.transaction(tx => { + tx.executeSql(createNovelTableQuery); + tx.executeSql(createChapterTableQuery); + tx.executeSql(createHistoryTableQuery); + tx.executeSql(createDownloadTableQuery); + tx.executeSql(createUpdatesTableQuery); - //Db indexes - tx.executeSql(createUrlIndexQuery); - tx.executeSql(createLibraryIndexQuery); - tx.executeSql(createNovelIdIndexQuery); - tx.executeSql(createUnreadChaptersIndexQuery); - tx.executeSql(createChapterIdIndexQuery); - }); + //Db indexes + tx.executeSql(createUrlIndexQuery); + tx.executeSql(createLibraryIndexQuery); + tx.executeSql(createNovelIdIndexQuery); + tx.executeSql(createUnreadChaptersIndexQuery); + tx.executeSql(createChapterIdIndexQuery); + }); }; export const deleteDb = () => { - db.transaction((tx) => { - tx.executeSql("DROP TABLE novels"); - tx.executeSql("DROP TABLE chapters"); - tx.executeSql("DROP TABLE history"); - tx.executeSql("DROP TABLE downloads"); - tx.executeSql("DROP TABLE updates"); - }); + db.transaction(tx => { + tx.executeSql('DROP TABLE novels'); + tx.executeSql('DROP TABLE chapters'); + tx.executeSql('DROP TABLE history'); + tx.executeSql('DROP TABLE downloads'); + tx.executeSql('DROP TABLE updates'); + }); }; diff --git a/src/database/queries/ChapterQueries.js b/src/database/queries/ChapterQueries.js index 1288c679..95b81290 100644 --- a/src/database/queries/ChapterQueries.js +++ b/src/database/queries/ChapterQueries.js @@ -1,224 +1,223 @@ -import * as SQLite from "expo-sqlite"; -import { getSource } from "../../sources/sources"; -const db = SQLite.openDatabase("lnreader.db"); +import * as SQLite from 'expo-sqlite'; +import {getSource} from '../../sources/sources'; +const db = SQLite.openDatabase('lnreader.db'); const insertChaptersQuery = `INSERT INTO chapters (chapterUrl, chapterName, releaseDate, novelId) values (?, ?, ?, ?)`; export const insertChapters = async (novelId, chapters) => { - db.transaction((tx) => { - chapters.map( - (chapter) => - tx.executeSql( - insertChaptersQuery, - [ - chapter.chapterUrl, - chapter.chapterName, - chapter.releaseDate, - novelId, - ], - (txObj, res) => {}, - (txObj, error) => {} - // console.log( - // "Error ", - // error, - // " Chapter URL: ", - // chapter.chapterUrl, - // " Novel ID ", - // novelId - // ) - ), - (txObj, res) => { - console.log("Success"); - }, - (txObj, error) => console.log("Error ", error) - ); - }); + db.transaction(tx => { + chapters.map( + chapter => + tx.executeSql( + insertChaptersQuery, + [ + chapter.chapterUrl, + chapter.chapterName, + chapter.releaseDate, + novelId, + ], + (txObj, res) => {}, + (txObj, error) => {}, + // console.log( + // "Error ", + // error, + // " Chapter URL: ", + // chapter.chapterUrl, + // " Novel ID ", + // novelId + // ) + ), + (txObj, res) => { + console.log('Success'); + }, + (txObj, error) => console.log('Error ', error), + ); + }); }; -const getChaptersQuery = (sort = "ORDER BY chapterId ASC", filter = "") => - `SELECT * FROM chapters WHERE novelId = ? ${filter} ${sort}`; +const getChaptersQuery = (sort = 'ORDER BY chapterId ASC', filter = '') => + `SELECT * FROM chapters WHERE novelId = ? ${filter} ${sort}`; export const getChapters = (novelId, sort, filter) => { - return new Promise((resolve, reject) => - db.transaction((tx) => { - tx.executeSql( - getChaptersQuery(sort, filter), - [novelId], - (txObj, { rows: { _array } }) => { - resolve(_array); - }, - (txObj, error) => console.log("Error ", error) - ); - }) - ); + return new Promise((resolve, reject) => + db.transaction(tx => { + tx.executeSql( + getChaptersQuery(sort, filter), + [novelId], + (txObj, {rows: {_array}}) => { + resolve(_array); + }, + (txObj, error) => console.log('Error ', error), + ); + }), + ); }; const getChapterQuery = `SELECT * FROM downloads WHERE downloadChapterId = ?`; -export const getChapterFromDB = async (chapterId) => { - return new Promise((resolve, reject) => - db.transaction((tx) => { - tx.executeSql( - getChapterQuery, - [chapterId], - (tx, results) => { - resolve(results.rows.item(0)); - }, - (txObj, error) => console.log("Error ", error) - ); - }) - ); +export const getChapterFromDB = async chapterId => { + return new Promise((resolve, reject) => + db.transaction(tx => { + tx.executeSql( + getChapterQuery, + [chapterId], + (tx, results) => { + resolve(results.rows.item(0)); + }, + (txObj, error) => console.log('Error ', error), + ); + }), + ); }; export const getNextChapterFromDB = async (novelId, chapterId) => { - return new Promise((resolve, reject) => - db.transaction((tx) => { - tx.executeSql( - `SELECT * FROM chapters WHERE novelId = ? AND chapterId > ?`, - [novelId, chapterId], - (tx, results) => { - resolve(results.rows.item(0)); - }, - (txObj, error) => console.log("Error ", error) - ); - }) - ); + return new Promise((resolve, reject) => + db.transaction(tx => { + tx.executeSql( + `SELECT * FROM chapters WHERE novelId = ? AND chapterId > ?`, + [novelId, chapterId], + (tx, results) => { + resolve(results.rows.item(0)); + }, + (txObj, error) => console.log('Error ', error), + ); + }), + ); }; export const getPrevChapterFromDB = async (novelId, chapterId) => { - return new Promise((resolve, reject) => - db.transaction((tx) => { - tx.executeSql( - `SELECT * FROM chapters WHERE novelId = ? AND chapterId < ?`, - [novelId, chapterId], - (tx, results) => { - resolve(results.rows.item(results.rows.length - 1)); - }, - (txObj, error) => console.log("Error ", error) - ); - }) - ); + return new Promise((resolve, reject) => + db.transaction(tx => { + tx.executeSql( + `SELECT * FROM chapters WHERE novelId = ? AND chapterId < ?`, + [novelId, chapterId], + (tx, results) => { + resolve(results.rows.item(results.rows.length - 1)); + }, + (txObj, error) => console.log('Error ', error), + ); + }), + ); }; const markChapterReadQuery = `UPDATE chapters SET \`read\` = 1 WHERE chapterId = ?`; -export const markChapterRead = async (chapterId) => { - db.transaction((tx) => { - tx.executeSql( - markChapterReadQuery, - [chapterId], - (tx, res) => {}, - (tx, error) => console.log(error) - ); - }); +export const markChapterRead = async chapterId => { + db.transaction(tx => { + tx.executeSql( + markChapterReadQuery, + [chapterId], + (tx, res) => {}, + (tx, error) => console.log(error), + ); + }); }; const markChapterUnreadQuery = `UPDATE chapters SET \`read\` = 0 WHERE chapterId = ?`; -export const markChapterUnread = async (chapterId) => { - db.transaction((tx) => { - tx.executeSql( - markChapterUnreadQuery, - [chapterId], - (tx, res) => {}, - (tx, error) => console.log(error) - ); - }); +export const markChapterUnread = async chapterId => { + db.transaction(tx => { + tx.executeSql( + markChapterUnreadQuery, + [chapterId], + (tx, res) => {}, + (tx, error) => console.log(error), + ); + }); }; const markAllChaptersReadQuery = `UPDATE chapters SET \`read\` = 1 WHERE novelId = ?`; -export const markAllChaptersRead = async (novelId) => { - db.transaction((tx) => { - tx.executeSql( - markAllChaptersReadQuery, - [novelId], - (tx, res) => {}, - (tx, error) => console.log(error) - ); - }); +export const markAllChaptersRead = async novelId => { + db.transaction(tx => { + tx.executeSql( + markAllChaptersReadQuery, + [novelId], + (tx, res) => {}, + (tx, error) => console.log(error), + ); + }); }; const markAllChaptersUnreadQuery = `UPDATE chapters SET \`read\` = 0 WHERE novelId = ?`; -export const markAllChaptersUnread = async (novelId) => { - db.transaction((tx) => { - tx.executeSql( - markAllChaptersUnreadQuery, - [novelId], - (tx, res) => {}, - (tx, error) => console.log(error) - ); - }); +export const markAllChaptersUnread = async novelId => { + db.transaction(tx => { + tx.executeSql( + markAllChaptersUnreadQuery, + [novelId], + (tx, res) => {}, + (tx, error) => console.log(error), + ); + }); }; const isChapterDownloadedQuery = `SELECT * FROM downloads WHERE downloadChapterId=?`; -export const isChapterDownloaded = async (chapterId) => { - return new Promise((resolve, reject) => - db.transaction((tx) => { - tx.executeSql( - isChapterDownloadedQuery, - [chapterId], - (txObj, res) => { - if (res.rows.length !== 0) { - resolve(true); - } else { - resolve(false); - } - }, - (txObj, error) => console.log("Error ", error) - ); - }) - ); +export const isChapterDownloaded = async chapterId => { + return new Promise((resolve, reject) => + db.transaction(tx => { + tx.executeSql( + isChapterDownloadedQuery, + [chapterId], + (txObj, res) => { + if (res.rows.length !== 0) { + resolve(true); + } else { + resolve(false); + } + }, + (txObj, error) => console.log('Error ', error), + ); + }), + ); }; const downloadChapterQuery = `INSERT INTO downloads (downloadChapterId, chapterName, chapterText) VALUES (?, ?, ?)`; export const downloadChapter = async ( - sourceId, - novelUrl, - chapterUrl, - chapterId + sourceId, + novelUrl, + chapterUrl, + chapterId, ) => { - const source = getSource(sourceId); + const source = getSource(sourceId); - const chapter = await source.parseChapter(novelUrl, chapterUrl); + const chapter = await source.parseChapter(novelUrl, chapterUrl); - db.transaction((tx) => { - tx.executeSql( - `UPDATE chapters SET downloaded = 1 WHERE chapterId = ?`, - [chapterId] - ); - tx.executeSql( - downloadChapterQuery, - [chapterId, chapter.chapterName, chapter.chapterText], - (tx, res) => { - // console.log(`Downloaded Chapter ${chapter.chapterUrl}`); - }, - (txObj, error) => console.log("Error ", error) - ); - }); + db.transaction(tx => { + tx.executeSql(`UPDATE chapters SET downloaded = 1 WHERE chapterId = ?`, [ + chapterId, + ]); + tx.executeSql( + downloadChapterQuery, + [chapterId, chapter.chapterName, chapter.chapterText], + (tx, res) => { + // console.log(`Downloaded Chapter ${chapter.chapterUrl}`); + }, + (txObj, error) => console.log('Error ', error), + ); + }); }; -export const deleteChapter = async (chapterId) => { - const updateIsDownloadedQuery = `UPDATE chapters SET downloaded = 0 WHERE chapterId=?`; - const deleteChapterQuery = `DELETE FROM downloads WHERE downloadChapterId=?`; +export const deleteChapter = async chapterId => { + const updateIsDownloadedQuery = `UPDATE chapters SET downloaded = 0 WHERE chapterId=?`; + const deleteChapterQuery = `DELETE FROM downloads WHERE downloadChapterId=?`; - db.transaction((tx) => { - tx.executeSql( - updateIsDownloadedQuery, - [chapterId], - (tx, res) => {}, - (txObj, error) => console.log("Error ", error) - ); - tx.executeSql( - deleteChapterQuery, - [chapterId], - (tx, res) => console.log(`Chapter deleted`), - (txObj, error) => console.log("Error ", error) - ); - }); + db.transaction(tx => { + tx.executeSql( + updateIsDownloadedQuery, + [chapterId], + (tx, res) => {}, + (txObj, error) => console.log('Error ', error), + ); + tx.executeSql( + deleteChapterQuery, + [chapterId], + (tx, res) => console.log(`Chapter deleted`), + (txObj, error) => console.log('Error ', error), + ); + }); }; const getLastReadChapterQuery = ` @@ -229,56 +228,56 @@ const getLastReadChapterQuery = ` WHERE history.historyNovelId = ? `; -export const getLastReadChapter = async (novelId) => { - return new Promise((resolve, reject) => { - db.transaction((tx) => { - tx.executeSql( - getLastReadChapterQuery, - [novelId], - (tx, { rows }) => resolve(rows.item(0)), - (txObj, error) => console.log("Error ", error) - ); - }); +export const getLastReadChapter = async novelId => { + return new Promise((resolve, reject) => { + db.transaction(tx => { + tx.executeSql( + getLastReadChapterQuery, + [novelId], + (tx, {rows}) => resolve(rows.item(0)), + (txObj, error) => console.log('Error ', error), + ); }); + }); }; const bookmarkChapterQuery = `UPDATE chapters SET bookmark = ? WHERE chapterId = ?`; export const bookmarkChapter = async (bookmark, chapterId) => { - db.transaction((tx) => { - tx.executeSql( - bookmarkChapterQuery, - [!bookmark, chapterId], - (tx, res) => {}, - (txObj, error) => console.log("Error ", error) - ); - }); + db.transaction(tx => { + tx.executeSql( + bookmarkChapterQuery, + [!bookmark, chapterId], + (tx, res) => {}, + (txObj, error) => console.log('Error ', error), + ); + }); }; const markPreviuschaptersReadQuery = `UPDATE chapters SET \`read\` = 1 WHERE chapterId < ? AND novelId = ?`; export const markPreviuschaptersRead = async (chapterId, novelId) => { - db.transaction((tx) => { - tx.executeSql( - markPreviuschaptersReadQuery, - [chapterId, novelId], - (tx, res) => {}, - (tx, error) => console.log(error) - ); - }); + db.transaction(tx => { + tx.executeSql( + markPreviuschaptersReadQuery, + [chapterId, novelId], + (tx, res) => {}, + (tx, error) => console.log(error), + ); + }); }; const markPreviousChaptersUnreadQuery = `UPDATE chapters SET \`read\` = 0 WHERE chapterId < ? AND novelId = ?`; export const markPreviousChaptersUnread = async (chapterId, novelId) => { - db.transaction((tx) => { - tx.executeSql( - markPreviousChaptersUnreadQuery, - [chapterId, novelId], - (tx, res) => {}, - (tx, error) => console.log(error) - ); - }); + db.transaction(tx => { + tx.executeSql( + markPreviousChaptersUnreadQuery, + [chapterId, novelId], + (tx, res) => {}, + (tx, error) => console.log(error), + ); + }); }; const getDownloadedChaptersQuery = ` @@ -289,23 +288,23 @@ const getDownloadedChaptersQuery = ` WHERE chapters.downloaded = 1`; export const getDownloadedChapters = () => { - return new Promise((resolve, reject) => - db.transaction((tx) => { - tx.executeSql( - getDownloadedChaptersQuery, - null, - (txObj, { rows: { _array } }) => { - resolve(_array); - }, - (txObj, error) => console.log("Error ", error) - ); - }) - ); + return new Promise((resolve, reject) => + db.transaction(tx => { + tx.executeSql( + getDownloadedChaptersQuery, + null, + (txObj, {rows: {_array}}) => { + resolve(_array); + }, + (txObj, error) => console.log('Error ', error), + ); + }), + ); }; export const deleteDownloads = async () => { - db.transaction((tx) => { - tx.executeSql(`UPDATE chapters SET downloaded = 0`); - tx.executeSql("DELETE FROM downloads; VACCUM;"); - }); + db.transaction(tx => { + tx.executeSql(`UPDATE chapters SET downloaded = 0`); + tx.executeSql('DELETE FROM downloads; VACCUM;'); + }); }; diff --git a/src/database/queries/HistoryQueries.js b/src/database/queries/HistoryQueries.js index 0013ee73..7c37a99f 100644 --- a/src/database/queries/HistoryQueries.js +++ b/src/database/queries/HistoryQueries.js @@ -1,5 +1,5 @@ -import * as SQLite from "expo-sqlite"; -const db = SQLite.openDatabase("lnreader.db"); +import * as SQLite from 'expo-sqlite'; +const db = SQLite.openDatabase('lnreader.db'); const getHistoryQuery = ` SELECT history.*, chapters.*, novels.* @@ -14,49 +14,47 @@ const getHistoryQuery = ` `; export const getHistoryFromDb = async () => { - return new Promise((resolve, reject) => { - db.transaction((tx) => { - tx.executeSql( - getHistoryQuery, - null, - (txObj, { rows: { _array } }) => { - resolve(_array); - }, - (txObj, error) => console.log("Error ", error) - ); - }); + return new Promise((resolve, reject) => { + db.transaction(tx => { + tx.executeSql( + getHistoryQuery, + null, + (txObj, {rows: {_array}}) => { + resolve(_array); + }, + (txObj, error) => console.log('Error ', error), + ); }); + }); }; // const insertHistoryQuery = export const insertHistory = async (novelId, chapterId) => { - db.transaction((tx) => { - tx.executeSql( - "INSERT OR REPLACE INTO history (historyNovelId, historyChapterId, historyTimeRead) VALUES (?, ?, (datetime('now','localtime')))", - [novelId, chapterId], - (txObj, res) => {}, - (txObj, error) => console.log("Error ", error) - ); - tx.executeSql("UPDATE novels SET unread = 0 WHERE novelId = ?", [ - novelId, - ]); - }); + db.transaction(tx => { + tx.executeSql( + "INSERT OR REPLACE INTO history (historyNovelId, historyChapterId, historyTimeRead) VALUES (?, ?, (datetime('now','localtime')))", + [novelId, chapterId], + (txObj, res) => {}, + (txObj, error) => console.log('Error ', error), + ); + tx.executeSql('UPDATE novels SET unread = 0 WHERE novelId = ?', [novelId]); + }); }; -export const deleteHistory = async (historyId) => { - db.transaction((tx) => { - tx.executeSql( - "DELETE FROM history WHERE historyId = ?", - [historyId], - (txObj, res) => {}, - (txObj, error) => console.log("Error ", error) - ); - }); +export const deleteHistory = async historyId => { + db.transaction(tx => { + tx.executeSql( + 'DELETE FROM history WHERE historyId = ?', + [historyId], + (txObj, res) => {}, + (txObj, error) => console.log('Error ', error), + ); + }); }; export const deleteAllHistory = async () => { - db.transaction((tx) => { - tx.executeSql("DELETE FROM history; VACCUM;"); - }); + db.transaction(tx => { + tx.executeSql('DELETE FROM history; VACCUM;'); + }); }; diff --git a/src/database/queries/LibraryQueries.js b/src/database/queries/LibraryQueries.js index a03df79a..344b5554 100644 --- a/src/database/queries/LibraryQueries.js +++ b/src/database/queries/LibraryQueries.js @@ -1,5 +1,5 @@ -import * as SQLite from "expo-sqlite"; -const db = SQLite.openDatabase("lnreader.db"); +import * as SQLite from 'expo-sqlite'; +const db = SQLite.openDatabase('lnreader.db'); const getLibraryQuery = (sort, filter) => ` SELECT novels.*, C.chaptersUnread, D.chaptersDownloaded @@ -18,28 +18,28 @@ const getLibraryQuery = (sort, filter) => ` GROUP BY chapters.novelId ) AS D ON novels.novelId = D.novelId - WHERE novels.followed = 1 ${filter ? "AND " + filter : ""} - ${sort ? "ORDER BY " + sort : ""} + WHERE novels.followed = 1 ${filter ? 'AND ' + filter : ''} + ${sort ? 'ORDER BY ' + sort : ''} `; export const getLibrary = (sort, filter) => { - return new Promise((resolve, reject) => - db.transaction((tx) => { - tx.executeSql( - getLibraryQuery(sort, filter), - null, - (txObj, { rows: { _array } }) => { - // console.log(_array); - resolve(_array); - }, - (txObj, error) => console.log("Error ", error) - ); - }) - ); + return new Promise((resolve, reject) => + db.transaction(tx => { + tx.executeSql( + getLibraryQuery(sort, filter), + null, + (txObj, {rows: {_array}}) => { + // console.log(_array); + resolve(_array); + }, + (txObj, error) => console.log('Error ', error), + ); + }), + ); }; const searchLibraryQuery = (searchText, sort, filter) => - ` + ` SELECT novels.*, C.chaptersUnread, D.chaptersDownloaded FROM novels LEFT JOIN ( @@ -57,19 +57,19 @@ const searchLibraryQuery = (searchText, sort, filter) => ) AS D ON novels.novelId = D.novelId WHERE novels.followed = 1 AND novelName LIKE '%${searchText}%' ${ - filter ? "AND " + filter : "" - } - ${sort ? "ORDER BY " + sort : ""} `; + filter ? 'AND ' + filter : '' + } + ${sort ? 'ORDER BY ' + sort : ''} `; export const searchLibrary = (searchText, sort, filter) => { - return new Promise((resolve, reject) => { - db.transaction((tx) => { - tx.executeSql( - searchLibraryQuery(searchText, sort, filter), - null, - (txObj, { rows: { _array } }) => resolve(_array), - (txObj, error) => console.log("Error ", error) - ); - }); + return new Promise((resolve, reject) => { + db.transaction(tx => { + tx.executeSql( + searchLibraryQuery(searchText, sort, filter), + null, + (txObj, {rows: {_array}}) => resolve(_array), + (txObj, error) => console.log('Error ', error), + ); }); + }); }; diff --git a/src/database/queries/NovelQueries.js b/src/database/queries/NovelQueries.js index 57781e80..e9afb5f4 100644 --- a/src/database/queries/NovelQueries.js +++ b/src/database/queries/NovelQueries.js @@ -1,241 +1,238 @@ -import * as SQLite from "expo-sqlite"; -const db = SQLite.openDatabase("lnreader.db"); +import * as SQLite from 'expo-sqlite'; +const db = SQLite.openDatabase('lnreader.db'); -import BackgroundService from "react-native-background-actions"; -import * as DocumentPicker from "expo-document-picker"; +import BackgroundService from 'react-native-background-actions'; +import * as DocumentPicker from 'expo-document-picker'; -import { fetchChapters, fetchNovel } from "../../services/Source/source"; -import { insertChapters } from "./ChapterQueries"; +import {fetchChapters, fetchNovel} from '../../services/Source/source'; +import {insertChapters} from './ChapterQueries'; -import { showToast } from "../../hooks/showToast"; +import {showToast} from '../../hooks/showToast'; const insertNovelQuery = `INSERT INTO novels (novelUrl, sourceUrl, sourceId, source, novelName, novelCover, novelSummary, author, artist, status, genre) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`; -export const insertNovel = async (novel) => { - return new Promise((resolve, reject) => - db.transaction((tx) => - tx.executeSql( - insertNovelQuery, - [ - novel.novelUrl, - novel.sourceUrl, - novel.sourceId, - novel.source, - novel.novelName, - novel.novelCover, - novel.novelSummary, - novel.author, - novel.artist, - novel.status, - novel.genre, - ], - (txObj, { insertId }) => resolve(insertId), - (txObj, error) => console.log("Error ", error) - ) - ) - ); +export const insertNovel = async novel => { + return new Promise((resolve, reject) => + db.transaction(tx => + tx.executeSql( + insertNovelQuery, + [ + novel.novelUrl, + novel.sourceUrl, + novel.sourceId, + novel.source, + novel.novelName, + novel.novelCover, + novel.novelSummary, + novel.author, + novel.artist, + novel.status, + novel.genre, + ], + (txObj, {insertId}) => resolve(insertId), + (txObj, error) => console.log('Error ', error), + ), + ), + ); }; export const followNovel = async (followed, novelId) => { - db.transaction((tx) => { - tx.executeSql( - "UPDATE novels SET followed = ? WHERE novelId = ?", - [!followed, novelId], - (tx, res) => {}, - (txObj, error) => console.log("Error ", error) - ); - }); + db.transaction(tx => { + tx.executeSql( + 'UPDATE novels SET followed = ? WHERE novelId = ?', + [!followed, novelId], + (tx, res) => {}, + (txObj, error) => console.log('Error ', error), + ); + }); }; -export const unfollowNovel = async (novelId) => { - db.transaction((tx) => { - tx.executeSql( - "UPDATE novels SET followed = 0 WHERE novelId = ?", - [novelId], - (tx, res) => {}, - (txObj, error) => console.log("Error ", error) - ); - }); +export const unfollowNovel = async novelId => { + db.transaction(tx => { + tx.executeSql( + 'UPDATE novels SET followed = 0 WHERE novelId = ?', + [novelId], + (tx, res) => {}, + (txObj, error) => console.log('Error ', error), + ); + }); }; const checkNovelInCacheQuery = `SELECT * FROM novels WHERE novelUrl=? LIMIT 1`; -export const checkNovelInCache = (novelUrl) => { - return new Promise((resolve, reject) => - db.transaction((tx) => { - tx.executeSql( - checkNovelInCacheQuery, - [novelUrl], - (txObj, res) => { - if (res.rows.length !== 0) { - resolve(true); - } else { - resolve(false); - } - }, - (txObj, error) => console.log("Error ", error) - ); - }) - ); +export const checkNovelInCache = novelUrl => { + return new Promise((resolve, reject) => + db.transaction(tx => { + tx.executeSql( + checkNovelInCacheQuery, + [novelUrl], + (txObj, res) => { + if (res.rows.length !== 0) { + resolve(true); + } else { + resolve(false); + } + }, + (txObj, error) => console.log('Error ', error), + ); + }), + ); }; export const getNovel = async (sourceId, novelUrl) => { - return new Promise((resolve, reject) => - db.transaction((tx) => { - tx.executeSql( - `SELECT * FROM novels WHERE novelUrl = ? AND sourceId = ?`, - [novelUrl, sourceId], - (txObj, { rows }) => resolve(rows.item(0)), - (txObj, error) => console.log("Error ", error) - ); - }) - ); + return new Promise((resolve, reject) => + db.transaction(tx => { + tx.executeSql( + `SELECT * FROM novels WHERE novelUrl = ? AND sourceId = ?`, + [novelUrl, sourceId], + (txObj, {rows}) => resolve(rows.item(0)), + (txObj, error) => console.log('Error ', error), + ); + }), + ); }; export const deleteNovelCache = () => { - db.transaction((tx) => { - tx.executeSql( - "DELETE FROM novels WHERE followed = 0", - null, - (txObj, res) => showToast("Entries deleted"), - (txObj, error) => console.log("Error ", error) - ); - }); + db.transaction(tx => { + tx.executeSql( + 'DELETE FROM novels WHERE followed = 0', + null, + (txObj, res) => showToast('Entries deleted'), + (txObj, error) => console.log('Error ', error), + ); + }); }; const restoreFromBackupQuery = `INSERT INTO novels (novelUrl, sourceUrl, sourceId, source, novelName, novelCover, novelSummary, author, artist, status, genre, followed, unread) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`; -export const restoreLibrary = async (novel) => { - return new Promise((resolve, reject) => - db.transaction((tx) => - tx.executeSql( - restoreFromBackupQuery, - [ - novel.novelUrl, - novel.sourceUrl, - novel.sourceId, - novel.source, - novel.novelName, - novel.novelCover, - novel.novelSummary, - novel.author, - novel.artist, - novel.status, - novel.genre, - novel.followed, - novel.unread, - ], - async (txObj, { insertId }) => { - const chapters = await fetchChapters( - novel.sourceId, - novel.novelUrl - ); - await insertChapters(insertId, chapters); - }, - (txObj, error) => console.log("Error ", error) - ) - ) - ); +export const restoreLibrary = async novel => { + return new Promise((resolve, reject) => + db.transaction(tx => + tx.executeSql( + restoreFromBackupQuery, + [ + novel.novelUrl, + novel.sourceUrl, + novel.sourceId, + novel.source, + novel.novelName, + novel.novelCover, + novel.novelSummary, + novel.author, + novel.artist, + novel.status, + novel.genre, + novel.followed, + novel.unread, + ], + async (txObj, {insertId}) => { + const chapters = await fetchChapters(novel.sourceId, novel.novelUrl); + await insertChapters(insertId, chapters); + }, + (txObj, error) => console.log('Error ', error), + ), + ), + ); }; const migrateNovelQuery = `INSERT INTO novels (novelUrl, sourceUrl, sourceId, source, novelName, novelCover, novelSummary, author, artist, status, genre, followed) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`; export const migrateNovel = async (sourceId, novelUrl) => { - try { - const novel = await fetchNovel(sourceId, novelUrl); + try { + const novel = await fetchNovel(sourceId, novelUrl); - const options = { - taskName: "Migration", - taskTitle: `Migrating ${novel.novelName} to new source`, - taskDesc: novel.source, - taskIcon: { - name: "notification_icon", - type: "drawable", - }, - color: "#00adb5", - parameters: { - delay: 1000, - }, - progressBar: { - max: 1, - value: 0, - indeterminate: true, - }, - }; + const options = { + taskName: 'Migration', + taskTitle: `Migrating ${novel.novelName} to new source`, + taskDesc: novel.source, + taskIcon: { + name: 'notification_icon', + type: 'drawable', + }, + color: '#00adb5', + parameters: { + delay: 1000, + }, + progressBar: { + max: 1, + value: 0, + indeterminate: true, + }, + }; - const veryIntensiveTask = async () => { - await new Promise(async (resolve) => { - db.transaction((tx) => - tx.executeSql( - migrateNovelQuery, - [ - novel.novelUrl, - novel.sourceUrl, - novel.sourceId, - novel.source, - novel.novelName, - novel.novelCover, - novel.novelSummary, - novel.author, - novel.artist, - novel.status, - novel.genre, - 1, - ], - async (txObj, { insertId }) => { - const chapters = await fetchChapters( - novel.sourceId, - novel.novelUrl - ); - await insertChapters(insertId, chapters); - resolve(); - }, - (txObj, error) => console.log("Error ", error) - ) - ); - }); - }; + const veryIntensiveTask = async () => { + await new Promise(async resolve => { + db.transaction(tx => + tx.executeSql( + migrateNovelQuery, + [ + novel.novelUrl, + novel.sourceUrl, + novel.sourceId, + novel.source, + novel.novelName, + novel.novelCover, + novel.novelSummary, + novel.author, + novel.artist, + novel.status, + novel.genre, + 1, + ], + async (txObj, {insertId}) => { + const chapters = await fetchChapters( + novel.sourceId, + novel.novelUrl, + ); + await insertChapters(insertId, chapters); + resolve(); + }, + (txObj, error) => console.log('Error ', error), + ), + ); + }); + }; - await BackgroundService.start(veryIntensiveTask, options); - await BackgroundService.updateNotification({ - progressBar: { value: 1, indeterminate: false }, - }); - } catch (error) { - showToast(error.message); - } + await BackgroundService.start(veryIntensiveTask, options); + await BackgroundService.updateNotification({ + progressBar: {value: 1, indeterminate: false}, + }); + } catch (error) { + showToast(error.message); + } }; export const updateNovelInfo = async (info, novelId) => { - db.transaction((tx) => { - tx.executeSql( - "UPDATE novels SET novelName = ?, novelSummary = ?, author = ?, genre = ?, status = ? WHERE novelId = ?", - [ - info.novelName, - info.novelSummary, - info.author, - info.genre, - info.status, - novelId, - ], - (txObj, res) => {}, - (txObj, error) => console.log("Error ", error) - ); + db.transaction(tx => { + tx.executeSql( + 'UPDATE novels SET novelName = ?, novelSummary = ?, author = ?, genre = ?, status = ? WHERE novelId = ?', + [ + info.novelName, + info.novelSummary, + info.author, + info.genre, + info.status, + novelId, + ], + (txObj, res) => {}, + (txObj, error) => console.log('Error ', error), + ); + }); +}; + +export const pickCustomNovelCover = async novelId => { + const image = await DocumentPicker.getDocumentAsync({type: 'image/*'}); + + if (image.type === 'success' && image.uri) { + db.transaction(tx => { + tx.executeSql( + 'UPDATE novels SET novelCover = ? WHERE novelId = ?', + [image.uri, novelId], + (txObj, res) => {}, + (txObj, error) => console.log('Error ', error), + ); }); -}; - -export const pickCustomNovelCover = async (novelId) => { - const image = await DocumentPicker.getDocumentAsync({ type: "image/*" }); - - if (image.type === "success" && image.uri) { - db.transaction((tx) => { - tx.executeSql( - "UPDATE novels SET novelCover = ? WHERE novelId = ?", - [image.uri, novelId], - (txObj, res) => {}, - (txObj, error) => console.log("Error ", error) - ); - }); - - return image.uri; - } + + return image.uri; + } }; diff --git a/src/database/queries/UpdateQueries.js b/src/database/queries/UpdateQueries.js index a438a89f..296d239d 100644 --- a/src/database/queries/UpdateQueries.js +++ b/src/database/queries/UpdateQueries.js @@ -1,5 +1,5 @@ -import * as SQLite from "expo-sqlite"; -const db = SQLite.openDatabase("lnreader.db"); +import * as SQLite from 'expo-sqlite'; +const db = SQLite.openDatabase('lnreader.db'); const getUpdatesQuery = ` SELECT chapters.chapterId, chapters.read, chapters.downloaded, chapters.chapterUrl, chapters.chapterName, novels.novelUrl, novels.novelId, novels.novelCover, novels.novelName, novels.sourceId, updates.updateTime, updates.updateId @@ -13,30 +13,30 @@ const getUpdatesQuery = ` `; export const getUpdates = async () => { - return new Promise((resolve, reject) => { - db.transaction((tx) => { - tx.executeSql( - getUpdatesQuery, - null, - (txObj, { rows: { _array } }) => { - resolve(_array); - }, - (txObj, error) => console.log("Error ", error) - ); - }); + return new Promise((resolve, reject) => { + db.transaction(tx => { + tx.executeSql( + getUpdatesQuery, + null, + (txObj, {rows: {_array}}) => { + resolve(_array); + }, + (txObj, error) => console.log('Error ', error), + ); }); + }); }; -export const deleteNovelUpdates = (novelId) => { - db.transaction((tx) => { - tx.executeSql( - "DELETE FROM updates WHERE novelId = ?", - [novelId], - (txObj, res) => {}, - (txObj, error) => console.log("Error ", error) - ); - }); +export const deleteNovelUpdates = novelId => { + db.transaction(tx => { + tx.executeSql( + 'DELETE FROM updates WHERE novelId = ?', + [novelId], + (txObj, res) => {}, + (txObj, error) => console.log('Error ', error), + ); + }); }; export const clearUpdates = () => - db.transaction((tx) => tx.executeSql("DELETE FROM updates; VACCUM;")); + db.transaction(tx => tx.executeSql('DELETE FROM updates; VACCUM;')); diff --git a/src/hooks/githubUpdateChecker.js b/src/hooks/githubUpdateChecker.js index 52737c0b..4c285935 100644 --- a/src/hooks/githubUpdateChecker.js +++ b/src/hooks/githubUpdateChecker.js @@ -1,46 +1,46 @@ -import { useState, useEffect } from "react"; +import {useState, useEffect} from 'react'; export const githubUpdateChecker = () => { - const latestReleaseUrl = - "https://api.github.com/repos/rajarsheechatterjee/lnreader/releases/latest"; + const latestReleaseUrl = + 'https://api.github.com/repos/rajarsheechatterjee/lnreader/releases/latest'; - const [checking, setChecking] = useState(true); - const [latestRelease, setLatestRelease] = useState(); + const [checking, setChecking] = useState(true); + const [latestRelease, setLatestRelease] = useState(); - const checkForRelease = async () => { - let res = await fetch(latestReleaseUrl); - res = await res.json(); + const checkForRelease = async () => { + let res = await fetch(latestReleaseUrl); + res = await res.json(); - const release = { - tag_name: res.tag_name, - body: res.body, - downloadUrl: res.assets[0].browser_download_url, - }; - - setLatestRelease(release); - setChecking(false); + const release = { + tag_name: res.tag_name, + body: res.body, + downloadUrl: res.assets[0].browser_download_url, }; - const isNewVersion = (versionTag) => { - let currentVersion = "v1.1.5"; - const regex = /[^\\d.]/; + setLatestRelease(release); + setChecking(false); + }; - let newVersion = versionTag.replace(regex, ""); - currentVersion = currentVersion.replace(regex, ""); + const isNewVersion = versionTag => { + let currentVersion = 'v1.1.5'; + const regex = /[^\\d.]/; - return newVersion !== currentVersion; + let newVersion = versionTag.replace(regex, ''); + currentVersion = currentVersion.replace(regex, ''); + + return newVersion !== currentVersion; + }; + + useEffect(() => { + checkForRelease(); + }, []); + + if (!checking) { + const data = { + latestRelease, + isNewVersion: isNewVersion(latestRelease.tag_name), }; - useEffect(() => { - checkForRelease(); - }, []); - - if (!checking) { - const data = { - latestRelease, - isNewVersion: isNewVersion(latestRelease.tag_name), - }; - - return data; - } + return data; + } }; diff --git a/src/hooks/reduxHooks.js b/src/hooks/reduxHooks.js index 1a26b17e..96aa2af4 100644 --- a/src/hooks/reduxHooks.js +++ b/src/hooks/reduxHooks.js @@ -1,131 +1,129 @@ -import { useSelector } from "react-redux"; -import { darkTheme } from "../theme/theme"; +import {useSelector} from 'react-redux'; +import {darkTheme} from '../theme/theme'; const useTheme = () => { - const theme = useSelector((state) => state.settingsReducer.theme); + const theme = useSelector(state => state.settingsReducer.theme); - return theme || darkTheme; + return theme || darkTheme; }; const useReaderSettings = () => { - const readerSettings = useSelector((state) => state.settingsReducer.reader); + const readerSettings = useSelector(state => state.settingsReducer.reader); - return readerSettings; + return readerSettings; }; const useSettings = () => { - const settings = useSelector((state) => state.settingsReducer); + const settings = useSelector(state => state.settingsReducer); - return settings; + return settings; }; const useLibrary = () => { - const library = useSelector((state) => state.libraryReducer.novels); + const library = useSelector(state => state.libraryReducer.novels); - return library; + return library; }; const useNovel = () => { - const novel = useSelector((state) => state.novelReducer); + const novel = useSelector(state => state.novelReducer); - return novel; + return novel; }; const useChapter = () => { - const chapter = useSelector((state) => state.chapterReducer); + const chapter = useSelector(state => state.chapterReducer); - return chapter; + return chapter; }; -const findNovel = (novelId) => { - let novel = useSelector((state) => state.preferenceReducer.novelSettings); - novel = novel[novelId]; +const findNovel = novelId => { + let novel = useSelector(state => state.preferenceReducer.novelSettings); + novel = novel[novelId]; - return novel; + return novel; }; -const usePreferences = (novelId) => { - let sort, filter, position, showChapterTitles; +const usePreferences = novelId => { + let sort, filter, position, showChapterTitles; - const novel = findNovel(novelId); + const novel = findNovel(novelId); - if (novel) { - sort = novel.sort; - filter = novel.filter; - position = novel.position; - showChapterTitles = novel.showChapterTitles; - } + if (novel) { + sort = novel.sort; + filter = novel.filter; + position = novel.position; + showChapterTitles = novel.showChapterTitles; + } - return { sort, filter, position, showChapterTitles }; + return {sort, filter, position, showChapterTitles}; }; const useSavedSettings = () => { - const settings = useSelector( - (state) => state.preferenceReducer.novelSettings - ); + const settings = useSelector(state => state.preferenceReducer.novelSettings); - return settings; + return settings; }; const useContinueReading = (chapters, novelId) => { - let lastReadChapter, chapterId, novel, position; + let lastReadChapter, chapterId, novel, position; - novel = findNovel(novelId); - if (novel) { - chapterId = novel.lastRead; - position = novel.position; - } + novel = findNovel(novelId); + if (novel) { + chapterId = novel.lastRead; + position = novel.position; + } - if (chapterId) { - lastReadChapter = chapters.find( - (obj) => obj.chapterId === chapterId && obj.read === 0 - ); - } + if (chapterId) { + lastReadChapter = chapters.find( + obj => obj.chapterId === chapterId && obj.read === 0, + ); + } - if (!lastReadChapter) { - lastReadChapter = chapters.find((obj) => obj.read === 0); - } + if (!lastReadChapter) { + lastReadChapter = chapters.find(obj => obj.read === 0); + } - return { lastReadChapter, position }; + return {lastReadChapter, position}; }; const usePosition = (novelId, chapterId) => { - let novel, position; + let novel, position; - novel = findNovel(novelId); + novel = findNovel(novelId); - if (novel) { - if (novel.position) { - position = novel.position[chapterId] || null; - } + if (novel) { + if (novel.position) { + position = novel.position[chapterId] || null; } + } - return position; + return position; }; const useTrackingStatus = () => { - const tracker = useSelector((state) => state.trackerReducer); + const tracker = useSelector(state => state.trackerReducer); - return tracker; + return tracker; }; const useLibraryFilters = () => { - const filters = useSelector((state) => state.libraryReducer.filters); + const filters = useSelector(state => state.libraryReducer.filters); - return filters; + return filters; }; export { - useTheme, - useReaderSettings, - useLibrary, - useSettings, - usePreferences, - useContinueReading, - useTrackingStatus, - useNovel, - useChapter, - useSavedSettings, - useLibraryFilters, - usePosition, + useTheme, + useReaderSettings, + useLibrary, + useSettings, + usePreferences, + useContinueReading, + useTrackingStatus, + useNovel, + useChapter, + useSavedSettings, + useLibraryFilters, + usePosition, }; diff --git a/src/hooks/showToast.js b/src/hooks/showToast.js index ee4bc534..90eab442 100644 --- a/src/hooks/showToast.js +++ b/src/hooks/showToast.js @@ -1,5 +1,5 @@ -import { ToastAndroid } from "react-native"; +import {ToastAndroid} from 'react-native'; -export const showToast = (message) => { - ToastAndroid.show(message, ToastAndroid.SHORT); +export const showToast = message => { + ToastAndroid.show(message, ToastAndroid.SHORT); }; diff --git a/src/navigators/BottomNavigator.js b/src/navigators/BottomNavigator.js index 069533c4..1c9b9eb6 100644 --- a/src/navigators/BottomNavigator.js +++ b/src/navigators/BottomNavigator.js @@ -1,109 +1,105 @@ -import React from "react"; +import React from 'react'; -import { createMaterialBottomTabNavigator } from "@react-navigation/material-bottom-tabs"; -import MaterialCommunityIcons from "react-native-vector-icons/MaterialCommunityIcons"; -import { useSafeAreaInsets } from "react-native-safe-area-context"; +import {createMaterialBottomTabNavigator} from '@react-navigation/material-bottom-tabs'; +import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons'; +import {useSafeAreaInsets} from 'react-native-safe-area-context'; -import Library from "../screens/Library/Library"; -import Updates from "../screens/Updates/Updates"; -import History from "../screens/History/History"; -import Browse from "../screens/Browse/Browse"; -import More from "../screens/More/More"; +import Library from '../screens/Library/Library'; +import Updates from '../screens/Updates/Updates'; +import History from '../screens/History/History'; +import Browse from '../screens/Browse/Browse'; +import More from '../screens/More/More'; -import { useSettings, useTheme } from "../hooks/reduxHooks"; +import {useSettings, useTheme} from '../hooks/reduxHooks'; const Tab = createMaterialBottomTabNavigator(); const BottomNavigator = () => { - const theme = useTheme(); - const insets = useSafeAreaInsets(); + const theme = useTheme(); + const insets = useSafeAreaInsets(); - const { - showHistoryTab = true, - showUpdatesTab = true, - showLabelsInNav = false, - } = useSettings(); + const { + showHistoryTab = true, + showUpdatesTab = true, + showLabelsInNav = false, + } = useSettings(); - return ( - - ( - - ), - }} + return ( + + ( + - {showUpdatesTab && ( - ( - - ), - }} - /> - )} - {showHistoryTab && ( - ( - - ), - }} - /> - )} - ( - - ), - }} + ), + }} + /> + {showUpdatesTab && ( + ( + + ), + }} + /> + )} + {showHistoryTab && ( + ( + + ), + }} + /> + )} + ( + - ( - - ), - }} + ), + }} + /> + ( + - - ); + ), + }} + /> + + ); }; export default BottomNavigator; diff --git a/src/navigators/Main.js b/src/navigators/Main.js index 850df9dc..3dbc451d 100644 --- a/src/navigators/Main.js +++ b/src/navigators/Main.js @@ -1,81 +1,64 @@ -import React, { useEffect } from "react"; -import { View } from "react-native"; +import React, {useEffect} from 'react'; +import {View} from 'react-native'; -import { NavigationContainer } from "@react-navigation/native"; -import { createStackNavigator } from "@react-navigation/stack"; +import {NavigationContainer} from '@react-navigation/native'; +import {createStackNavigator} from '@react-navigation/stack'; -import { setBarColor } from "../theme/utils/setBarColor"; -import { useTheme } from "../hooks/reduxHooks"; -import { githubUpdateChecker } from "../hooks/githubUpdateChecker"; -import * as SplashScreen from "expo-splash-screen"; +import {setBarColor} from '../theme/utils/setBarColor'; +import {useTheme} from '../hooks/reduxHooks'; +import {githubUpdateChecker} from '../hooks/githubUpdateChecker'; +import * as SplashScreen from 'expo-splash-screen'; // Navigators -import BottomNavigator from "./BottomNavigator"; +import BottomNavigator from './BottomNavigator'; // Screens -import Novel from "../screens/Novel/Novel"; -import Chapter from "../screens/Chapter/Chapter"; -import Extension from "../screens/Extension/Extension"; -import GlobalSearch from "../screens/Browse/globalsearch/GlobalSearch"; -import Migration from "../screens/Browse/migration/Migration"; -import SourceNovels from "../screens/Browse/SourceNovels"; -import MigrateNovel from "../screens/Browse/migration/MigrationNovels"; -import MoreStack from "./More"; -import MalTopNovels from "../screens/Browse/discover/MalTopNovels"; -import NewUpdateDialog from "../components/NewUpdateDialog"; -import BrowseSettings from "../screens/Browse/BrowseSettings"; +import Novel from '../screens/Novel/Novel'; +import Chapter from '../screens/Chapter/Chapter'; +import Extension from '../screens/Extension/Extension'; +import GlobalSearch from '../screens/Browse/globalsearch/GlobalSearch'; +import Migration from '../screens/Browse/migration/Migration'; +import SourceNovels from '../screens/Browse/SourceNovels'; +import MigrateNovel from '../screens/Browse/migration/MigrationNovels'; +import MoreStack from './More'; +import MalTopNovels from '../screens/Browse/discover/MalTopNovels'; +import NewUpdateDialog from '../components/NewUpdateDialog'; +import BrowseSettings from '../screens/Browse/BrowseSettings'; const Stack = createStackNavigator(); const MainNavigator = () => { - const theme = useTheme(); + const theme = useTheme(); - useEffect(() => { - setTimeout(async () => { - await SplashScreen.hideAsync(); - setBarColor(theme); - }, 500); - }, [theme]); + useEffect(() => { + setTimeout(async () => { + await SplashScreen.hideAsync(); + setBarColor(theme); + }, 500); + }, [theme]); - const { isNewVersion, latestRelease } = githubUpdateChecker() || {}; + const {isNewVersion, latestRelease} = githubUpdateChecker() || {}; - return ( - - - {isNewVersion && } - - - - - - - - - - - - - - - - ); + return ( + + + {isNewVersion && } + + + + + + + + + + + + + + + + ); }; export default MainNavigator; diff --git a/src/navigators/More.js b/src/navigators/More.js index 551fa079..c9cc0437 100644 --- a/src/navigators/More.js +++ b/src/navigators/More.js @@ -1,45 +1,42 @@ -import React from "react"; +import React from 'react'; -import { createStackNavigator } from "@react-navigation/stack"; +import {createStackNavigator} from '@react-navigation/stack'; // Screens -import About from "../screens/More/About"; -import Settings from "../screens/More/Settings"; -import TrackerSettings from "../screens/More/TrackerSettings"; -import ReaderSettings from "../screens/More/ReaderSettings"; -import BackupSettings from "../screens/More/BackupSettings"; -import AdvancedSettings from "../screens/More/AdvancedSettings"; -import GeneralSettings from "../screens/More/GeneralSettings"; -import DownloadQueue from "../screens/More/DownloadQueue"; -import Downloads from "../screens/More/Downloads"; -import AppearanceSettings from "../screens/More/AppearanceSettings"; +import About from '../screens/More/About'; +import Settings from '../screens/More/Settings'; +import TrackerSettings from '../screens/More/TrackerSettings'; +import ReaderSettings from '../screens/More/ReaderSettings'; +import BackupSettings from '../screens/More/BackupSettings'; +import AdvancedSettings from '../screens/More/AdvancedSettings'; +import GeneralSettings from '../screens/More/GeneralSettings'; +import DownloadQueue from '../screens/More/DownloadQueue'; +import Downloads from '../screens/More/Downloads'; +import AppearanceSettings from '../screens/More/AppearanceSettings'; const Stack = createStackNavigator(); -const stackNavigatorConfig = { headerShown: false }; +const stackNavigatorConfig = {headerShown: false}; const SettingsStack = () => ( - - - - - - - - - + + + + + + + + + ); const MoreStack = () => ( - - - - - - + + + + + + ); export default MoreStack; diff --git a/src/redux/downloads/donwloads.types.js b/src/redux/downloads/donwloads.types.js index d3715d91..abbe9a2f 100644 --- a/src/redux/downloads/donwloads.types.js +++ b/src/redux/downloads/donwloads.types.js @@ -1,4 +1,4 @@ -export const SET_DOWNLOAD_QUEUE = "SET_DOWNLOAD_QUEUE"; -export const CANCEL_DOWNLOAD = "CANCEL_DOWNLOAD"; -export const PAUSE_DOWNLOADS = "PAUSE_DOWNLOADS"; -export const RESUME_DOWNLOADS = "RESUME_DOWNLOADS"; +export const SET_DOWNLOAD_QUEUE = 'SET_DOWNLOAD_QUEUE'; +export const CANCEL_DOWNLOAD = 'CANCEL_DOWNLOAD'; +export const PAUSE_DOWNLOADS = 'PAUSE_DOWNLOADS'; +export const RESUME_DOWNLOADS = 'RESUME_DOWNLOADS'; diff --git a/src/redux/downloads/downloads.actions.js b/src/redux/downloads/downloads.actions.js index d655fb9b..37707eb6 100644 --- a/src/redux/downloads/downloads.actions.js +++ b/src/redux/downloads/downloads.actions.js @@ -1,102 +1,102 @@ import { - SET_DOWNLOAD_QUEUE, - CANCEL_DOWNLOAD, - PAUSE_DOWNLOADS, -} from "./donwloads.types"; -import BackgroundService from "react-native-background-actions"; -import { downloadChapter } from "../../database/queries/ChapterQueries"; -import { CHAPTER_DOWNLOADED } from "../novel/novel.types"; -import { showToast } from "../../hooks/showToast"; + SET_DOWNLOAD_QUEUE, + CANCEL_DOWNLOAD, + PAUSE_DOWNLOADS, +} from './donwloads.types'; +import BackgroundService from 'react-native-background-actions'; +import {downloadChapter} from '../../database/queries/ChapterQueries'; +import {CHAPTER_DOWNLOADED} from '../novel/novel.types'; +import {showToast} from '../../hooks/showToast'; -export const pauseDownloads = () => async (dispatch) => { - showToast("Download paused"); +export const pauseDownloads = () => async dispatch => { + showToast('Download paused'); - await BackgroundService.stop(); + await BackgroundService.stop(); - dispatch({ type: PAUSE_DOWNLOADS }); + dispatch({type: PAUSE_DOWNLOADS}); }; -export const resumeDownloads = (chapters) => async (dispatch) => { - showToast("Download resumed"); +export const resumeDownloads = chapters => async dispatch => { + showToast('Download resumed'); - const options = { - taskName: "Library Update", - taskTitle: chapters[0].chapterName, - taskDesc: "0/" + chapters.length, - taskIcon: { - name: "notification_icon", - type: "drawable", - }, - color: "#00adb5", - parameters: { - delay: 1000, - }, - linkingURI: "lnreader://downloads", - progressBar: { - max: chapters.length, - value: 0, - }, - }; + const options = { + taskName: 'Library Update', + taskTitle: chapters[0].chapterName, + taskDesc: '0/' + chapters.length, + taskIcon: { + name: 'notification_icon', + type: 'drawable', + }, + color: '#00adb5', + parameters: { + delay: 1000, + }, + linkingURI: 'lnreader://downloads', + progressBar: { + max: chapters.length, + value: 0, + }, + }; - const sleep = (time) => - new Promise((resolve) => setTimeout(() => resolve(), time)); + const sleep = time => + new Promise(resolve => setTimeout(() => resolve(), time)); - const veryIntensiveTask = async (taskData) => { - await new Promise(async (resolve) => { - for ( - let i = 0; - BackgroundService.isRunning() && i < chapters.length; - i++ - ) { - if (BackgroundService.isRunning()) { - if (!chapters[i].downloaded) { - await downloadChapter( - chapters[i].sourceId, - chapters[i].novelUrl, - chapters[i].chapterUrl, - chapters[i].chapterId - ); - } + const veryIntensiveTask = async taskData => { + await new Promise(async resolve => { + for ( + let i = 0; + BackgroundService.isRunning() && i < chapters.length; + i++ + ) { + if (BackgroundService.isRunning()) { + if (!chapters[i].downloaded) { + await downloadChapter( + chapters[i].sourceId, + chapters[i].novelUrl, + chapters[i].chapterUrl, + chapters[i].chapterId, + ); + } - dispatch({ - type: CHAPTER_DOWNLOADED, - payload: chapters[i].chapterId, - }); + dispatch({ + type: CHAPTER_DOWNLOADED, + payload: chapters[i].chapterId, + }); - await BackgroundService.updateNotification({ - taskTitle: chapters[i].chapterName, - taskDesc: i + 1 + "/" + chapters.length, - progressBar: { - max: chapters.length, - value: i + 1, - }, - }); + await BackgroundService.updateNotification({ + taskTitle: chapters[i].chapterName, + taskDesc: i + 1 + '/' + chapters.length, + progressBar: { + max: chapters.length, + value: i + 1, + }, + }); - if (i + 1 === chapters.length) { - resolve(); - await BackgroundService.stop(); + if (i + 1 === chapters.length) { + resolve(); + await BackgroundService.stop(); - Notifications.scheduleNotificationAsync({ - content: { - title: "Downloader", - body: "Download completed", - }, - trigger: null, - }); - } - await sleep(taskData.delay); - } - } - }); - }; + Notifications.scheduleNotificationAsync({ + content: { + title: 'Downloader', + body: 'Download completed', + }, + trigger: null, + }); + } + await sleep(taskData.delay); + } + } + }); + }; - await BackgroundService.start(veryIntensiveTask, options); + await BackgroundService.start(veryIntensiveTask, options); - dispatch({ type: PAUSE_DOWNLOADS }); + dispatch({type: PAUSE_DOWNLOADS}); }; -export const cancelDownload = () => async (dispatch) => { - await BackgroundService.stop(); +export const cancelDownload = () => async dispatch => { + await BackgroundService.stop(); - dispatch({ type: CANCEL_DOWNLOAD }); + dispatch({type: CANCEL_DOWNLOAD}); }; diff --git a/src/redux/downloads/downloads.reducer.js b/src/redux/downloads/downloads.reducer.js index 1000a328..92d7534d 100644 --- a/src/redux/downloads/downloads.reducer.js +++ b/src/redux/downloads/downloads.reducer.js @@ -1,35 +1,35 @@ -import { CHAPTER_DOWNLOADED } from "../novel/novel.types"; -import { CANCEL_DOWNLOAD, SET_DOWNLOAD_QUEUE } from "./donwloads.types"; +import {CHAPTER_DOWNLOADED} from '../novel/novel.types'; +import {CANCEL_DOWNLOAD, SET_DOWNLOAD_QUEUE} from './donwloads.types'; const initialState = { - downloadQueue: [], + downloadQueue: [], }; const downloadsReducer = (state = initialState, action) => { - const { type, payload } = action; + const {type, payload} = action; - switch (type) { - case SET_DOWNLOAD_QUEUE: - return { - ...state, - downloadQueue: [...state.downloadQueue, ...payload], - }; + switch (type) { + case SET_DOWNLOAD_QUEUE: + return { + ...state, + downloadQueue: [...state.downloadQueue, ...payload], + }; - case CHAPTER_DOWNLOADED: - return { - ...state, - downloadQueue: state.downloadQueue.filter( - (chapter) => chapter.chapterId !== payload - ), - }; - case CANCEL_DOWNLOAD: - return { - ...state, - downloadQueue: [], - }; - default: - return state; - } + case CHAPTER_DOWNLOADED: + return { + ...state, + downloadQueue: state.downloadQueue.filter( + chapter => chapter.chapterId !== payload, + ), + }; + case CANCEL_DOWNLOAD: + return { + ...state, + downloadQueue: [], + }; + default: + return state; + } }; export default downloadsReducer; diff --git a/src/redux/library/library.actions.js b/src/redux/library/library.actions.js index c26a86e3..52f9f385 100644 --- a/src/redux/library/library.actions.js +++ b/src/redux/library/library.actions.js @@ -1,62 +1,59 @@ import { - GET_LIBRARY_NOVELS, - GET_LIBRARY_SEARCH_RESULTS, - SET_LIBRARY_LOADING, - SORT_FILTER_LIBRARY, -} from "./library.types"; -import { - getLibrary, - searchLibrary, -} from "../../database/queries/LibraryQueries"; -import { restoreBackup } from "../../services/backup"; + GET_LIBRARY_NOVELS, + GET_LIBRARY_SEARCH_RESULTS, + SET_LIBRARY_LOADING, + SORT_FILTER_LIBRARY, +} from './library.types'; +import {getLibrary, searchLibrary} from '../../database/queries/LibraryQueries'; +import {restoreBackup} from '../../services/backup'; export const getLibraryAction = - (sort, filter) => async (dispatch, getState) => { - const { downloadedOnlyMode = false } = getState().settingsReducer; + (sort, filter) => async (dispatch, getState) => { + const {downloadedOnlyMode = false} = getState().settingsReducer; - const res = await getLibrary( - sort, - downloadedOnlyMode ? "chaptersDownloaded > 0" : filter - ); - - dispatch({ - type: GET_LIBRARY_NOVELS, - payload: res, - }); - }; - -export const searchLibraryAction = - (searchText, sort, filter) => async (dispatch) => { - const res = await searchLibrary(searchText, sort, filter); - - dispatch({ - type: GET_LIBRARY_SEARCH_RESULTS, - payload: res, - }); - }; - -export const filterLibrary = (sort, filter) => async (dispatch) => { - dispatch({ type: SORT_FILTER_LIBRARY, payload: { sort, filter } }); - - const res = await getLibrary(sort, filter); + const res = await getLibrary( + sort, + downloadedOnlyMode ? 'chaptersDownloaded > 0' : filter, + ); dispatch({ - type: GET_LIBRARY_NOVELS, - payload: res, + type: GET_LIBRARY_NOVELS, + payload: res, }); + }; + +export const searchLibraryAction = + (searchText, sort, filter) => async dispatch => { + const res = await searchLibrary(searchText, sort, filter); + + dispatch({ + type: GET_LIBRARY_SEARCH_RESULTS, + payload: res, + }); + }; + +export const filterLibrary = (sort, filter) => async dispatch => { + dispatch({type: SORT_FILTER_LIBRARY, payload: {sort, filter}}); + + const res = await getLibrary(sort, filter); + + dispatch({ + type: GET_LIBRARY_NOVELS, + payload: res, + }); }; -export const restoreLibraryAction = () => async (dispatch) => { - dispatch({ type: SET_LIBRARY_LOADING }); +export const restoreLibraryAction = () => async dispatch => { + dispatch({type: SET_LIBRARY_LOADING}); - const res = await restoreBackup(); + const res = await restoreBackup(); - if (res) { - const novels = await getLibrary(); + if (res) { + const novels = await getLibrary(); - dispatch({ - type: GET_LIBRARY_NOVELS, - payload: novels, - }); - } + dispatch({ + type: GET_LIBRARY_NOVELS, + payload: novels, + }); + } }; diff --git a/src/redux/library/library.reducer.js b/src/redux/library/library.reducer.js index be41ab50..1fac0236 100644 --- a/src/redux/library/library.reducer.js +++ b/src/redux/library/library.reducer.js @@ -1,36 +1,36 @@ import { - GET_LIBRARY_NOVELS, - GET_LIBRARY_SEARCH_RESULTS, - SET_LIBRARY_LOADING, - SORT_FILTER_LIBRARY, -} from "./library.types"; + GET_LIBRARY_NOVELS, + GET_LIBRARY_SEARCH_RESULTS, + SET_LIBRARY_LOADING, + SORT_FILTER_LIBRARY, +} from './library.types'; const initialState = { - novels: [], - searchResults: [], - filters: { sort: "novels.novelId ASC", filter: "" }, - loading: true, + novels: [], + searchResults: [], + filters: {sort: 'novels.novelId ASC', filter: ''}, + loading: true, }; const libraryReducer = (state = initialState, action) => { - const { type, payload } = action; + const {type, payload} = action; - switch (type) { - case SET_LIBRARY_LOADING: - return { ...state, loading: true }; - case GET_LIBRARY_NOVELS: - return { ...state, novels: payload, loading: false }; - case GET_LIBRARY_SEARCH_RESULTS: - return { ...state, novels: payload, loading: false }; - case SORT_FILTER_LIBRARY: - // console.log("2.", payload.sort, payload.filter); - return { - ...state, - filters: { sort: payload.sort, filter: payload.filter }, - }; - default: - return state; - } + switch (type) { + case SET_LIBRARY_LOADING: + return {...state, loading: true}; + case GET_LIBRARY_NOVELS: + return {...state, novels: payload, loading: false}; + case GET_LIBRARY_SEARCH_RESULTS: + return {...state, novels: payload, loading: false}; + case SORT_FILTER_LIBRARY: + // console.log("2.", payload.sort, payload.filter); + return { + ...state, + filters: {sort: payload.sort, filter: payload.filter}, + }; + default: + return state; + } }; export default libraryReducer; diff --git a/src/redux/library/library.types.js b/src/redux/library/library.types.js index 8819717f..9a7d9668 100644 --- a/src/redux/library/library.types.js +++ b/src/redux/library/library.types.js @@ -1,5 +1,5 @@ -export const GET_LIBRARY_NOVELS = "GET_LIBRARY_NOVELS"; -export const GET_LIBRARY_SEARCH_RESULTS = "GET_LIBRARY_SEARCH_RESULTS"; -export const SET_LIBRARY_LOADING = "SET_LIBRARY_LOADING"; +export const GET_LIBRARY_NOVELS = 'GET_LIBRARY_NOVELS'; +export const GET_LIBRARY_SEARCH_RESULTS = 'GET_LIBRARY_SEARCH_RESULTS'; +export const SET_LIBRARY_LOADING = 'SET_LIBRARY_LOADING'; -export const SORT_FILTER_LIBRARY = "SORT_FILTER_LIBRARY"; +export const SORT_FILTER_LIBRARY = 'SORT_FILTER_LIBRARY'; diff --git a/src/redux/novel/novel.actions.js b/src/redux/novel/novel.actions.js index 26764fbb..37e1e60e 100644 --- a/src/redux/novel/novel.actions.js +++ b/src/redux/novel/novel.actions.js @@ -1,442 +1,435 @@ -import { ToastAndroid } from "react-native"; +import {ToastAndroid} from 'react-native'; import { - LOADING_NOVEL, - GET_NOVEL, - GET_CHAPTERS, - NOVEL_ERROR, - FETCHING_NOVEL, - SET_NOVEL, - UPDATE_IN_LIBRARY, - CHAPTER_READ, - CHAPTER_DOWNLOADING, - CHAPTER_DOWNLOADED, - CHAPTER_DELETED, - UPDATE_NOVEL, - SET_NOVEL_SETTINGS, - CHAPTER_UNREAD, - BOOKMARK_CHAPTER, - MARK_PREVIOUS_CHAPTERS_READ, - MARK_PREVIOUS_CHAPTERS_UNREAD, -} from "./novel.types"; + LOADING_NOVEL, + GET_NOVEL, + GET_CHAPTERS, + NOVEL_ERROR, + FETCHING_NOVEL, + SET_NOVEL, + UPDATE_IN_LIBRARY, + CHAPTER_READ, + CHAPTER_DOWNLOADING, + CHAPTER_DOWNLOADED, + CHAPTER_DELETED, + UPDATE_NOVEL, + SET_NOVEL_SETTINGS, + CHAPTER_UNREAD, + BOOKMARK_CHAPTER, + MARK_PREVIOUS_CHAPTERS_READ, + MARK_PREVIOUS_CHAPTERS_UNREAD, +} from './novel.types'; -import { updateNovel } from "../../services/updates"; -import { fetchNovel } from "../../services/Source/source"; +import {updateNovel} from '../../services/updates'; +import {fetchNovel} from '../../services/Source/source'; import { - followNovel, - insertNovel, - getNovel, -} from "../../database/queries/NovelQueries"; + followNovel, + insertNovel, + getNovel, +} from '../../database/queries/NovelQueries'; import { - getChapters, - insertChapters, - markChapterRead, - downloadChapter, - deleteChapter, - markChapterUnread, - bookmarkChapter, - markPreviuschaptersRead, - markPreviousChaptersUnread, - getNextChapterFromDB, -} from "../../database/queries/ChapterQueries"; -import { deleteNovelUpdates } from "../../database/queries/UpdateQueries"; + getChapters, + insertChapters, + markChapterRead, + downloadChapter, + deleteChapter, + markChapterUnread, + bookmarkChapter, + markPreviuschaptersRead, + markPreviousChaptersUnread, + getNextChapterFromDB, +} from '../../database/queries/ChapterQueries'; +import {deleteNovelUpdates} from '../../database/queries/UpdateQueries'; import { - SAVE_SCROLL_POSITION, - SET_CHAPTER_LIST_PREF, - SET_LAST_READ, -} from "../preferences/preference.types"; -import { GET_LIBRARY_NOVELS } from "../library/library.types"; -import { getLibrary } from "../../database/queries/LibraryQueries"; -import { showToast } from "../../hooks/showToast"; -import { store } from "../store"; + SAVE_SCROLL_POSITION, + SET_CHAPTER_LIST_PREF, + SET_LAST_READ, +} from '../preferences/preference.types'; +import {GET_LIBRARY_NOVELS} from '../library/library.types'; +import {getLibrary} from '../../database/queries/LibraryQueries'; +import {showToast} from '../../hooks/showToast'; +import {store} from '../store'; -import * as Notifications from "expo-notifications"; +import * as Notifications from 'expo-notifications'; Notifications.setNotificationHandler({ - handleNotification: async () => { - return { - shouldShowAlert: true, - shouldPlaySound: true, - shouldSetBadge: true, - }; - }, + handleNotification: async () => { + return { + shouldShowAlert: true, + shouldPlaySound: true, + shouldSetBadge: true, + }; + }, }); -import BackgroundService from "react-native-background-actions"; -import { setDownloadQueue } from "../downloads/downloads.actions"; -import { SET_DOWNLOAD_QUEUE } from "../downloads/donwloads.types"; +import BackgroundService from 'react-native-background-actions'; +import {setDownloadQueue} from '../downloads/downloads.actions'; +import {SET_DOWNLOAD_QUEUE} from '../downloads/donwloads.types'; -export const setNovel = (novel) => async (dispatch) => { - dispatch({ type: SET_NOVEL, payload: novel }); +export const setNovel = novel => async dispatch => { + dispatch({type: SET_NOVEL, payload: novel}); }; export const getNovelAction = - (followed, sourceId, novelUrl, novelId, sort, filter) => - async (dispatch) => { - try { - dispatch({ type: LOADING_NOVEL }); - - if (followed === 1) { - /** - * If novel is followed directly get the chapters from db. - */ - const chapters = await getChapters(novelId, sort, filter); - - dispatch({ - type: GET_CHAPTERS, - payload: chapters, - }); - } else { - dispatch({ type: FETCHING_NOVEL }); - - /** - * Check if novel is cached. - */ - const novel = await getNovel(sourceId, novelUrl); - - if (novel) { - /** - * Get chapters from db. - */ - novel.chapters = await getChapters( - novel.novelId, - sort, - filter - ); - dispatch({ - type: GET_NOVEL, - payload: novel, - }); - } else { - /** - * Fetch novel from source. - */ - const fetchedNovel = await fetchNovel(sourceId, novelUrl); - - /** - * Insert novel in db. - */ - const fetchedNovelId = await insertNovel(fetchedNovel); - await insertChapters(fetchedNovelId, fetchedNovel.chapters); - - /** - * Get novel from db. - */ - const novel = await getNovel(sourceId, novelUrl); - novel.chapters = await getChapters(novel.novelId); - - dispatch({ - type: GET_NOVEL, - payload: novel, - }); - } - } - } catch (error) { - showToast(error.message); - // dispatch({ type: NOVEL_ERROR }); - } - }; - -export const sortAndFilterChapters = - (novelId, sort, filter) => async (dispatch) => { - dispatch({ type: FETCHING_NOVEL }); + (followed, sourceId, novelUrl, novelId, sort, filter) => async dispatch => { + try { + dispatch({type: LOADING_NOVEL}); + if (followed === 1) { + /** + * If novel is followed directly get the chapters from db. + */ const chapters = await getChapters(novelId, sort, filter); dispatch({ - type: GET_CHAPTERS, - payload: chapters, - }); - - dispatch({ - type: SET_CHAPTER_LIST_PREF, - payload: { novelId, sort, filter }, - }); - }; - -export const showChapterTitlesAction = (novelId, value) => async (dispatch) => { - dispatch({ - type: SET_NOVEL_SETTINGS, - payload: { novelId, value: value }, - }); -}; - -export const followNovelAction = (novel) => async (dispatch) => { - await followNovel(novel.followed, novel.novelId); - - if (!novel.followNovel) { - deleteNovelUpdates(novel.novelId); - } - - dispatch({ - type: UPDATE_IN_LIBRARY, - payload: { novelUrl: novel.novelUrl, followed: !novel.followed }, - }); - - const res = await getLibrary(); - - dispatch({ - type: GET_LIBRARY_NOVELS, - payload: res, - }); - - showToast(!novel.followed ? "Added to library" : "Removed from library"); -}; - -export const bookmarkChapterAction = (chapters) => async (dispatch) => { - chapters.map((chapter) => { - bookmarkChapter(chapter.bookmark, chapter.chapterId); - - dispatch({ - type: BOOKMARK_CHAPTER, - payload: { - bookmark: chapter.bookmark, - chapterId: chapter.chapterId, - }, - }); - }); -}; - -export const markChapterReadAction = - (chapterId, novelId) => async (dispatch) => { - await markChapterRead(chapterId); - - dispatch({ - type: CHAPTER_READ, - payload: { chapterId }, - }); - - const nextChapter = await getNextChapterFromDB(novelId, chapterId); - - dispatch({ - type: SET_LAST_READ, - payload: { novelId, chapterId: nextChapter.chapterId }, + type: GET_CHAPTERS, + payload: chapters, }); + } else { + dispatch({type: FETCHING_NOVEL}); /** - * Reset progress on marked read + * Check if novel is cached. */ - dispatch({ - type: SAVE_SCROLL_POSITION, - payload: { - position: 0, - percentage: 0, - chapterId, - novelId, - }, - }); - }; + const novel = await getNovel(sourceId, novelUrl); -export const markPreviousChaptersReadAction = - (chapterId, novelId) => async (dispatch) => { - await markPreviuschaptersRead(chapterId, novelId); + if (novel) { + /** + * Get chapters from db. + */ + novel.chapters = await getChapters(novel.novelId, sort, filter); + dispatch({ + type: GET_NOVEL, + payload: novel, + }); + } else { + /** + * Fetch novel from source. + */ + const fetchedNovel = await fetchNovel(sourceId, novelUrl); - dispatch({ - type: MARK_PREVIOUS_CHAPTERS_READ, - payload: chapterId, - }); + /** + * Insert novel in db. + */ + const fetchedNovelId = await insertNovel(fetchedNovel); + await insertChapters(fetchedNovelId, fetchedNovel.chapters); - showToast("Marked previous chapters read"); - }; + /** + * Get novel from db. + */ + const novel = await getNovel(sourceId, novelUrl); + novel.chapters = await getChapters(novel.novelId); -export const markChaptersRead = - (chapters, novelId, sort, filter) => async (dispatch) => { - try { - chapters.map((chapter) => markChapterRead(chapter.chapterId)); - - const chaps = await getChapters(novelId, sort, filter); - - dispatch({ - type: GET_CHAPTERS, - payload: chaps, - }); - } catch (error) { - showToast(error.message); + dispatch({ + type: GET_NOVEL, + payload: novel, + }); } - }; + } + } catch (error) { + showToast(error.message); + // dispatch({ type: NOVEL_ERROR }); + } + }; -export const markPreviousChaptersUnreadAction = - (chapterId, novelId) => async (dispatch) => { - await markPreviousChaptersUnread(chapterId, novelId); +export const sortAndFilterChapters = + (novelId, sort, filter) => async dispatch => { + dispatch({type: FETCHING_NOVEL}); - dispatch({ - type: MARK_PREVIOUS_CHAPTERS_UNREAD, - payload: chapterId, - }); - }; + const chapters = await getChapters(novelId, sort, filter); -export const markChapterUnreadAction = - (chapters, novelId) => async (dispatch, getState) => { - const { sort = "ORDER BY chapterId ASC", filter = "" } = - getState().preferenceReducer.novelSettings[novelId]; - - chapters.map((chapter) => markChapterUnread(chapter.chapterId)); - - const chaps = await getChapters(novelId, sort, filter); - - dispatch({ - type: GET_CHAPTERS, - payload: chaps, - }); - }; - -export const downloadChapterAction = - (sourceId, novelUrl, chapterUrl, chapterName, chapterId) => - async (dispatch) => { - // dispatch({ - // type: CHAPTER_DOWNLOADING, - // payload: chapterId, - // }); - dispatch({ - type: SET_DOWNLOAD_QUEUE, - payload: [{ chapterId, chapterName }], - }); - - await downloadChapter(sourceId, novelUrl, chapterUrl, chapterId); - - dispatch({ - type: CHAPTER_DOWNLOADED, - payload: chapterId, - }); - - ToastAndroid.show(`Downloaded ${chapterName}`, ToastAndroid.SHORT); - }; - -export const downloadAllChaptersAction = - (sourceId, novelUrl, chaps) => async (dispatch) => { - try { - /** - * Filter downloaded chapters - */ - let chapters = chaps.filter((chapter) => chapter.downloaded === 0); - - chapters = chapters.map((chapter) => ({ - ...chapter, - sourceId, - novelUrl, - })); - - if (chapters.length > 0) { - dispatch({ type: SET_DOWNLOAD_QUEUE, payload: chapters }); - const options = { - taskName: "Library Update", - taskTitle: chapters[0].chapterName, - taskDesc: "0/" + chapters.length, - taskIcon: { - name: "notification_icon", - type: "drawable", - }, - color: "#00adb5", - linkingURI: "lnreader://downloads/redirect", - parameters: { - delay: 1000, - }, - progressBar: { - max: chapters.length, - value: 0, - }, - }; - - const sleep = (time) => - new Promise((resolve) => setTimeout(() => resolve(), time)); - - const veryIntensiveTask = async (taskData) => { - await new Promise(async (resolve) => { - for ( - let i = 0; - BackgroundService.isRunning() && - i < chapters.length; - i++ - ) { - if (BackgroundService.isRunning()) { - // dispatch({ - // type: CHAPTER_DOWNLOADING, - // payload: chapters[i].chapterId, - // }); - - if (!chapters[i].downloaded) { - await downloadChapter( - sourceId, - novelUrl, - chapters[i].chapterUrl, - chapters[i].chapterId - ); - } - - dispatch({ - type: CHAPTER_DOWNLOADED, - payload: chapters[i].chapterId, - }); - - await BackgroundService.updateNotification({ - taskTitle: chapters[i].chapterName, - taskDesc: i + 1 + "/" + chapters.length, - progressBar: { - max: chapters.length, - value: i + 1, - }, - }); - - if (i + 1 === chapters.length) { - resolve(); - - Notifications.scheduleNotificationAsync({ - content: { - title: "Downloader", - body: "Download completed", - }, - trigger: null, - }); - } - await sleep(taskData.delay); - } - } - }); - }; - - await BackgroundService.start(veryIntensiveTask, options); - } - } catch (error) { - showToast(error.message); - } - }; - -export const deleteChapterAction = - (chapterId, chapterName) => async (dispatch) => { - await deleteChapter(chapterId); - - dispatch({ - type: CHAPTER_DELETED, - payload: chapterId, - }); - - showToast(`Deleted ${chapterName}`); - }; - -export const deleteAllChaptersAction = (chapters) => async (dispatch) => { - await chapters.map((chapter) => { - deleteChapter(chapter.chapterId); - - dispatch({ - type: CHAPTER_DELETED, - payload: chapter.chapterId, - }); + dispatch({ + type: GET_CHAPTERS, + payload: chapters, }); - showToast("Chapters deleted"); + dispatch({ + type: SET_CHAPTER_LIST_PREF, + payload: {novelId, sort, filter}, + }); + }; + +export const showChapterTitlesAction = (novelId, value) => async dispatch => { + dispatch({ + type: SET_NOVEL_SETTINGS, + payload: {novelId, value: value}, + }); +}; + +export const followNovelAction = novel => async dispatch => { + await followNovel(novel.followed, novel.novelId); + + if (!novel.followNovel) { + deleteNovelUpdates(novel.novelId); + } + + dispatch({ + type: UPDATE_IN_LIBRARY, + payload: {novelUrl: novel.novelUrl, followed: !novel.followed}, + }); + + const res = await getLibrary(); + + dispatch({ + type: GET_LIBRARY_NOVELS, + payload: res, + }); + + showToast(!novel.followed ? 'Added to library' : 'Removed from library'); +}; + +export const bookmarkChapterAction = chapters => async dispatch => { + chapters.map(chapter => { + bookmarkChapter(chapter.bookmark, chapter.chapterId); + + dispatch({ + type: BOOKMARK_CHAPTER, + payload: { + bookmark: chapter.bookmark, + chapterId: chapter.chapterId, + }, + }); + }); +}; + +export const markChapterReadAction = (chapterId, novelId) => async dispatch => { + await markChapterRead(chapterId); + + dispatch({ + type: CHAPTER_READ, + payload: {chapterId}, + }); + + const nextChapter = await getNextChapterFromDB(novelId, chapterId); + + dispatch({ + type: SET_LAST_READ, + payload: {novelId, chapterId: nextChapter.chapterId}, + }); + + /** + * Reset progress on marked read + */ + dispatch({ + type: SAVE_SCROLL_POSITION, + payload: { + position: 0, + percentage: 0, + chapterId, + novelId, + }, + }); +}; + +export const markPreviousChaptersReadAction = + (chapterId, novelId) => async dispatch => { + await markPreviuschaptersRead(chapterId, novelId); + + dispatch({ + type: MARK_PREVIOUS_CHAPTERS_READ, + payload: chapterId, + }); + + showToast('Marked previous chapters read'); + }; + +export const markChaptersRead = + (chapters, novelId, sort, filter) => async dispatch => { + try { + chapters.map(chapter => markChapterRead(chapter.chapterId)); + + const chaps = await getChapters(novelId, sort, filter); + + dispatch({ + type: GET_CHAPTERS, + payload: chaps, + }); + } catch (error) { + showToast(error.message); + } + }; + +export const markPreviousChaptersUnreadAction = + (chapterId, novelId) => async dispatch => { + await markPreviousChaptersUnread(chapterId, novelId); + + dispatch({ + type: MARK_PREVIOUS_CHAPTERS_UNREAD, + payload: chapterId, + }); + }; + +export const markChapterUnreadAction = + (chapters, novelId) => async (dispatch, getState) => { + const {sort = 'ORDER BY chapterId ASC', filter = ''} = + getState().preferenceReducer.novelSettings[novelId]; + + chapters.map(chapter => markChapterUnread(chapter.chapterId)); + + const chaps = await getChapters(novelId, sort, filter); + + dispatch({ + type: GET_CHAPTERS, + payload: chaps, + }); + }; + +export const downloadChapterAction = + (sourceId, novelUrl, chapterUrl, chapterName, chapterId) => + async dispatch => { + // dispatch({ + // type: CHAPTER_DOWNLOADING, + // payload: chapterId, + // }); + dispatch({ + type: SET_DOWNLOAD_QUEUE, + payload: [{chapterId, chapterName}], + }); + + await downloadChapter(sourceId, novelUrl, chapterUrl, chapterId); + + dispatch({ + type: CHAPTER_DOWNLOADED, + payload: chapterId, + }); + + ToastAndroid.show(`Downloaded ${chapterName}`, ToastAndroid.SHORT); + }; + +export const downloadAllChaptersAction = + (sourceId, novelUrl, chaps) => async dispatch => { + try { + /** + * Filter downloaded chapters + */ + let chapters = chaps.filter(chapter => chapter.downloaded === 0); + + chapters = chapters.map(chapter => ({ + ...chapter, + sourceId, + novelUrl, + })); + + if (chapters.length > 0) { + dispatch({type: SET_DOWNLOAD_QUEUE, payload: chapters}); + const options = { + taskName: 'Library Update', + taskTitle: chapters[0].chapterName, + taskDesc: '0/' + chapters.length, + taskIcon: { + name: 'notification_icon', + type: 'drawable', + }, + color: '#00adb5', + linkingURI: 'lnreader://downloads/redirect', + parameters: { + delay: 1000, + }, + progressBar: { + max: chapters.length, + value: 0, + }, + }; + + const sleep = time => + new Promise(resolve => setTimeout(() => resolve(), time)); + + const veryIntensiveTask = async taskData => { + await new Promise(async resolve => { + for ( + let i = 0; + BackgroundService.isRunning() && i < chapters.length; + i++ + ) { + if (BackgroundService.isRunning()) { + // dispatch({ + // type: CHAPTER_DOWNLOADING, + // payload: chapters[i].chapterId, + // }); + + if (!chapters[i].downloaded) { + await downloadChapter( + sourceId, + novelUrl, + chapters[i].chapterUrl, + chapters[i].chapterId, + ); + } + + dispatch({ + type: CHAPTER_DOWNLOADED, + payload: chapters[i].chapterId, + }); + + await BackgroundService.updateNotification({ + taskTitle: chapters[i].chapterName, + taskDesc: i + 1 + '/' + chapters.length, + progressBar: { + max: chapters.length, + value: i + 1, + }, + }); + + if (i + 1 === chapters.length) { + resolve(); + + Notifications.scheduleNotificationAsync({ + content: { + title: 'Downloader', + body: 'Download completed', + }, + trigger: null, + }); + } + await sleep(taskData.delay); + } + } + }); + }; + + await BackgroundService.start(veryIntensiveTask, options); + } + } catch (error) { + showToast(error.message); + } + }; + +export const deleteChapterAction = + (chapterId, chapterName) => async dispatch => { + await deleteChapter(chapterId); + + dispatch({ + type: CHAPTER_DELETED, + payload: chapterId, + }); + + showToast(`Deleted ${chapterName}`); + }; + +export const deleteAllChaptersAction = chapters => async dispatch => { + await chapters.map(chapter => { + deleteChapter(chapter.chapterId); + + dispatch({ + type: CHAPTER_DELETED, + payload: chapter.chapterId, + }); + }); + + showToast('Chapters deleted'); }; export const updateNovelAction = - (sourceId, novelUrl, novelId, sort, filter) => async (dispatch) => { - dispatch({ type: FETCHING_NOVEL }); + (sourceId, novelUrl, novelId, sort, filter) => async dispatch => { + dispatch({type: FETCHING_NOVEL}); - await updateNovel(sourceId, novelUrl, novelId); + await updateNovel(sourceId, novelUrl, novelId); - let novel = await getNovel(sourceId, novelUrl); - let chapters = await getChapters(novel.novelId, sort, filter); + let novel = await getNovel(sourceId, novelUrl); + let chapters = await getChapters(novel.novelId, sort, filter); - dispatch({ - type: UPDATE_NOVEL, - payload: { novel, chapters }, - }); - }; + dispatch({ + type: UPDATE_NOVEL, + payload: {novel, chapters}, + }); + }; diff --git a/src/redux/novel/novel.reducer.js b/src/redux/novel/novel.reducer.js index e1ecf131..44073e28 100644 --- a/src/redux/novel/novel.reducer.js +++ b/src/redux/novel/novel.reducer.js @@ -1,157 +1,149 @@ import { - CHAPTER_DOWNLOADING, - CHAPTER_DOWNLOADED, - CHAPTER_DELETED, - GET_CHAPTERS, - LOADING_NOVEL, - GET_NOVEL, - FETCHING_NOVEL, - SET_NOVEL, - UPDATE_IN_LIBRARY, - NOVEL_ERROR, - CHAPTER_READ, - UPDATE_NOVEL, - UPDATE_LAST_READ, - CHAPTER_UNREAD, - BOOKMARK_CHAPTER, - MARK_PREVIOUS_CHAPTERS_READ, - MARK_PREVIOUS_CHAPTERS_UNREAD, -} from "./novel.types"; + CHAPTER_DOWNLOADING, + CHAPTER_DOWNLOADED, + CHAPTER_DELETED, + GET_CHAPTERS, + LOADING_NOVEL, + GET_NOVEL, + FETCHING_NOVEL, + SET_NOVEL, + UPDATE_IN_LIBRARY, + NOVEL_ERROR, + CHAPTER_READ, + UPDATE_NOVEL, + UPDATE_LAST_READ, + CHAPTER_UNREAD, + BOOKMARK_CHAPTER, + MARK_PREVIOUS_CHAPTERS_READ, + MARK_PREVIOUS_CHAPTERS_UNREAD, +} from './novel.types'; const initialState = { - novel: {}, - chapters: [], - loading: true, - updating: false, - downloading: [], + novel: {}, + chapters: [], + loading: true, + updating: false, + downloading: [], }; const novelReducer = (state = initialState, action) => { - const { type, payload } = action; + const {type, payload} = action; - switch (type) { - case LOADING_NOVEL: - return { ...state, loading: true }; - case FETCHING_NOVEL: - return { ...state, updating: true }; - case SET_NOVEL: - return { ...state, novel: payload }; - case GET_NOVEL: - return { - ...state, - novel: payload, - chapters: payload.chapters, - loading: false, - updating: false, - }; - case GET_CHAPTERS: - return { - ...state, - chapters: payload, - loading: false, - updating: false, - }; - case UPDATE_IN_LIBRARY: - return { - ...state, - novel: { ...state.novel, followed: payload.followed }, - }; - case UPDATE_NOVEL: - return { - ...state, - novel: payload.novel, - chapters: payload.chapters, - loading: false, - updating: false, - }; - case CHAPTER_READ: - return { - ...state, - chapters: state.chapters.map((chapter) => - chapter.chapterId === payload.chapterId - ? { ...chapter, read: 1 } - : chapter - ), - }; - case CHAPTER_UNREAD: - return { - ...state, - chapters: state.chapters.map((chapter) => - chapter.chapterId === payload.chapterId - ? { ...chapter, read: 0 } - : chapter - ), - }; - case BOOKMARK_CHAPTER: - return { - ...state, - chapters: state.chapters.map((chapter) => - chapter.chapterId === payload.chapterId - ? { ...chapter, bookmark: !payload.bookmark } - : chapter - ), - }; - case CHAPTER_DOWNLOADING: - return { - ...state, - downloading: [...state.downloading, payload], - }; - case CHAPTER_DOWNLOADED: - return { - ...state, - chapters: state.chapters.map((chapter) => - chapter.chapterId === payload - ? { ...chapter, downloaded: 1 } - : chapter - ), - downloading: state.downloading.filter( - (chapterId) => chapterId !== payload - ), - }; - case CHAPTER_DELETED: - return { - ...state, - chapters: state.chapters.map((chapter) => - chapter.chapterId === payload - ? { ...chapter, downloaded: 0 } - : chapter - ), - }; - case UPDATE_LAST_READ: - return { - ...state, - novel: { ...state.novel, lastRead: payload }, - }; + switch (type) { + case LOADING_NOVEL: + return {...state, loading: true}; + case FETCHING_NOVEL: + return {...state, updating: true}; + case SET_NOVEL: + return {...state, novel: payload}; + case GET_NOVEL: + return { + ...state, + novel: payload, + chapters: payload.chapters, + loading: false, + updating: false, + }; + case GET_CHAPTERS: + return { + ...state, + chapters: payload, + loading: false, + updating: false, + }; + case UPDATE_IN_LIBRARY: + return { + ...state, + novel: {...state.novel, followed: payload.followed}, + }; + case UPDATE_NOVEL: + return { + ...state, + novel: payload.novel, + chapters: payload.chapters, + loading: false, + updating: false, + }; + case CHAPTER_READ: + return { + ...state, + chapters: state.chapters.map(chapter => + chapter.chapterId === payload.chapterId + ? {...chapter, read: 1} + : chapter, + ), + }; + case CHAPTER_UNREAD: + return { + ...state, + chapters: state.chapters.map(chapter => + chapter.chapterId === payload.chapterId + ? {...chapter, read: 0} + : chapter, + ), + }; + case BOOKMARK_CHAPTER: + return { + ...state, + chapters: state.chapters.map(chapter => + chapter.chapterId === payload.chapterId + ? {...chapter, bookmark: !payload.bookmark} + : chapter, + ), + }; + case CHAPTER_DOWNLOADING: + return { + ...state, + downloading: [...state.downloading, payload], + }; + case CHAPTER_DOWNLOADED: + return { + ...state, + chapters: state.chapters.map(chapter => + chapter.chapterId === payload ? {...chapter, downloaded: 1} : chapter, + ), + downloading: state.downloading.filter( + chapterId => chapterId !== payload, + ), + }; + case CHAPTER_DELETED: + return { + ...state, + chapters: state.chapters.map(chapter => + chapter.chapterId === payload ? {...chapter, downloaded: 0} : chapter, + ), + }; + case UPDATE_LAST_READ: + return { + ...state, + novel: {...state.novel, lastRead: payload}, + }; - case MARK_PREVIOUS_CHAPTERS_READ: - return { - ...state, - chapters: state.chapters.map((chapter) => - chapter.chapterId < payload - ? { ...chapter, read: 1 } - : chapter - ), - }; - case MARK_PREVIOUS_CHAPTERS_UNREAD: - return { - ...state, - chapters: state.chapters.map((chapter) => - chapter.chapterId < payload - ? { ...chapter, read: 0 } - : chapter - ), - }; - case NOVEL_ERROR: - return { - ...state, - novel: {}, - chapters: [], - loading: false, - updating: false, - }; - default: - return state; - } + case MARK_PREVIOUS_CHAPTERS_READ: + return { + ...state, + chapters: state.chapters.map(chapter => + chapter.chapterId < payload ? {...chapter, read: 1} : chapter, + ), + }; + case MARK_PREVIOUS_CHAPTERS_UNREAD: + return { + ...state, + chapters: state.chapters.map(chapter => + chapter.chapterId < payload ? {...chapter, read: 0} : chapter, + ), + }; + case NOVEL_ERROR: + return { + ...state, + novel: {}, + chapters: [], + loading: false, + updating: false, + }; + default: + return state; + } }; export default novelReducer; diff --git a/src/redux/novel/novel.types.js b/src/redux/novel/novel.types.js index 528da89d..db901f62 100644 --- a/src/redux/novel/novel.types.js +++ b/src/redux/novel/novel.types.js @@ -1,23 +1,23 @@ -export const LOADING_NOVEL = "LOADING_NOVEL"; -export const FETCHING_NOVEL = "FETCHING_NOVEL"; -export const LOADING_CHAPTERS = "LOADING_CHAPTERS"; -export const GET_NOVEL = "GET_NOVEL"; -export const SET_NOVEL = "SET_NOVEL"; -export const UPDATE_NOVEL = "UPDATE_NOVEL"; -export const UPDATE_IN_LIBRARY = "UPDATE_IN_LIBRARY"; -export const GET_CHAPTERS = "GET_CHAPTERS"; -export const UPDATE_LAST_READ = "UPDATE_LAST_READ"; +export const LOADING_NOVEL = 'LOADING_NOVEL'; +export const FETCHING_NOVEL = 'FETCHING_NOVEL'; +export const LOADING_CHAPTERS = 'LOADING_CHAPTERS'; +export const GET_NOVEL = 'GET_NOVEL'; +export const SET_NOVEL = 'SET_NOVEL'; +export const UPDATE_NOVEL = 'UPDATE_NOVEL'; +export const UPDATE_IN_LIBRARY = 'UPDATE_IN_LIBRARY'; +export const GET_CHAPTERS = 'GET_CHAPTERS'; +export const UPDATE_LAST_READ = 'UPDATE_LAST_READ'; -export const CHAPTER_DOWNLOADED = "CHAPTER_DOWNLOADED"; -export const CHAPTER_DELETED = "CHAPTER_DELETED"; -export const CHAPTER_DOWNLOADING = "CHAPTER_DOWNLOADING"; -export const CHAPTER_READ = "CHAPTER_READ"; -export const CHAPTER_UNREAD = "CHAPTER_UNREAD"; -export const GET_CHAPTER = "GET_CHAPTER"; -export const NOVEL_ERROR = "NOVEL_ERROR"; -export const BOOKMARK_CHAPTER = "BOOKMARK_CHAPTER"; +export const CHAPTER_DOWNLOADED = 'CHAPTER_DOWNLOADED'; +export const CHAPTER_DELETED = 'CHAPTER_DELETED'; +export const CHAPTER_DOWNLOADING = 'CHAPTER_DOWNLOADING'; +export const CHAPTER_READ = 'CHAPTER_READ'; +export const CHAPTER_UNREAD = 'CHAPTER_UNREAD'; +export const GET_CHAPTER = 'GET_CHAPTER'; +export const NOVEL_ERROR = 'NOVEL_ERROR'; +export const BOOKMARK_CHAPTER = 'BOOKMARK_CHAPTER'; -export const SET_NOVEL_SETTINGS = "SET_NOVEL_SETTINGS"; +export const SET_NOVEL_SETTINGS = 'SET_NOVEL_SETTINGS'; -export const MARK_PREVIOUS_CHAPTERS_READ = "MARK_PREVIOUS_CHAPTERS_READ"; -export const MARK_PREVIOUS_CHAPTERS_UNREAD = "MARK_PREVIOUS_CHAPTERS_UNREAD"; +export const MARK_PREVIOUS_CHAPTERS_READ = 'MARK_PREVIOUS_CHAPTERS_READ'; +export const MARK_PREVIOUS_CHAPTERS_UNREAD = 'MARK_PREVIOUS_CHAPTERS_UNREAD'; diff --git a/src/redux/preferences/preference.actions.js b/src/redux/preferences/preference.actions.js index 7ac2eed9..0a351f60 100644 --- a/src/redux/preferences/preference.actions.js +++ b/src/redux/preferences/preference.actions.js @@ -1,14 +1,14 @@ -import { SAVE_SCROLL_POSITION } from "../preferences/preference.types"; +import {SAVE_SCROLL_POSITION} from '../preferences/preference.types'; export const saveScrollPosition = - (position, percentage, chapterId, novelId) => async (dispatch) => { - dispatch({ - type: SAVE_SCROLL_POSITION, - payload: { - position, - percentage, - chapterId, - novelId, - }, - }); - }; + (position, percentage, chapterId, novelId) => async dispatch => { + dispatch({ + type: SAVE_SCROLL_POSITION, + payload: { + position, + percentage, + chapterId, + novelId, + }, + }); + }; diff --git a/src/redux/preferences/preference.reducer.js b/src/redux/preferences/preference.reducer.js index a0c4d965..dc1acf5a 100644 --- a/src/redux/preferences/preference.reducer.js +++ b/src/redux/preferences/preference.reducer.js @@ -1,72 +1,72 @@ -import { SET_NOVEL_SETTINGS } from "../novel/novel.types"; +import {SET_NOVEL_SETTINGS} from '../novel/novel.types'; import { - SAVE_SCROLL_POSITION, - SET_CHAPTER_LIST_PREF, - SET_LAST_READ, -} from "./preference.types"; + SAVE_SCROLL_POSITION, + SET_CHAPTER_LIST_PREF, + SET_LAST_READ, +} from './preference.types'; const initialState = { - novelSettings: {}, + novelSettings: {}, }; const novelReducer = (state = initialState, action) => { - const { type, payload } = action; + const {type, payload} = action; - switch (type) { - case SET_LAST_READ: - return { - ...state, - novelSettings: { - ...state.novelSettings, - [payload.novelId]: { - ...state.novelSettings[payload.novelId], - lastRead: payload.chapterId, - }, - }, - }; - case SET_CHAPTER_LIST_PREF: - return { - ...state, - novelSettings: { - ...state.novelSettings, - [payload.novelId]: { - ...state.novelSettings[payload.novelId], - sort: payload.sort, - filter: payload.filter, - }, - }, - }; - case SET_NOVEL_SETTINGS: - return { - ...state, - novelSettings: { - ...state.novelSettings, - [payload.novelId]: { - ...state.novelSettings[payload.novelId], - showChapterTitles: payload.value, - }, - }, - }; - case SAVE_SCROLL_POSITION: - return { - ...state, - novelSettings: { - ...state.novelSettings, - [payload.novelId]: { - ...state.novelSettings[payload.novelId], - position: { - ...state.novelSettings[payload.novelId].position, - [payload.chapterId]: { - position: payload.position, - percentage: payload.percentage, - }, - }, - }, - }, - }; - default: - return state; - } + switch (type) { + case SET_LAST_READ: + return { + ...state, + novelSettings: { + ...state.novelSettings, + [payload.novelId]: { + ...state.novelSettings[payload.novelId], + lastRead: payload.chapterId, + }, + }, + }; + case SET_CHAPTER_LIST_PREF: + return { + ...state, + novelSettings: { + ...state.novelSettings, + [payload.novelId]: { + ...state.novelSettings[payload.novelId], + sort: payload.sort, + filter: payload.filter, + }, + }, + }; + case SET_NOVEL_SETTINGS: + return { + ...state, + novelSettings: { + ...state.novelSettings, + [payload.novelId]: { + ...state.novelSettings[payload.novelId], + showChapterTitles: payload.value, + }, + }, + }; + case SAVE_SCROLL_POSITION: + return { + ...state, + novelSettings: { + ...state.novelSettings, + [payload.novelId]: { + ...state.novelSettings[payload.novelId], + position: { + ...state.novelSettings[payload.novelId].position, + [payload.chapterId]: { + position: payload.position, + percentage: payload.percentage, + }, + }, + }, + }, + }; + default: + return state; + } }; export default novelReducer; diff --git a/src/redux/preferences/preference.types.js b/src/redux/preferences/preference.types.js index d41f9a41..6fb47d5e 100644 --- a/src/redux/preferences/preference.types.js +++ b/src/redux/preferences/preference.types.js @@ -1,3 +1,3 @@ -export const SET_CHAPTER_LIST_PREF = "SET_CHAPTER_LIST_PREF"; -export const SET_LAST_READ = "SET_LAST_READ"; -export const SAVE_SCROLL_POSITION = "SAVE_SCROLL_POSITION"; +export const SET_CHAPTER_LIST_PREF = 'SET_CHAPTER_LIST_PREF'; +export const SET_LAST_READ = 'SET_LAST_READ'; +export const SAVE_SCROLL_POSITION = 'SAVE_SCROLL_POSITION'; diff --git a/src/redux/settings/settings.actions.js b/src/redux/settings/settings.actions.js index 1166e3f6..71131999 100644 --- a/src/redux/settings/settings.actions.js +++ b/src/redux/settings/settings.actions.js @@ -1,58 +1,58 @@ import { - SET_APP_THEME, - SET_NOVELS_PER_ROW, - SET_READER_SETTINGS, - SET_APP_SETTINGS, - SET_ACCENT_COLOR, - SET_RIPPLE_COLOR, - SET_AMOLED_MODE, -} from "./settings.types"; + SET_APP_THEME, + SET_NOVELS_PER_ROW, + SET_READER_SETTINGS, + SET_APP_SETTINGS, + SET_ACCENT_COLOR, + SET_RIPPLE_COLOR, + SET_AMOLED_MODE, +} from './settings.types'; -export const setAppTheme = (val) => (dispatch) => { - dispatch({ - type: SET_APP_THEME, - payload: val, - }); +export const setAppTheme = val => dispatch => { + dispatch({ + type: SET_APP_THEME, + payload: val, + }); }; -export const setNovelsPerRow = (val) => (dispatch) => { - dispatch({ - type: SET_NOVELS_PER_ROW, - payload: val, - }); +export const setNovelsPerRow = val => dispatch => { + dispatch({ + type: SET_NOVELS_PER_ROW, + payload: val, + }); }; -export const setAppSettings = (key, val) => (dispatch) => { - dispatch({ - type: SET_APP_SETTINGS, - payload: { key, val }, - }); +export const setAppSettings = (key, val) => dispatch => { + dispatch({ + type: SET_APP_SETTINGS, + payload: {key, val}, + }); }; -export const setReaderSettings = (key, val) => (dispatch) => { - dispatch({ - type: SET_READER_SETTINGS, - payload: { key, val }, - }); +export const setReaderSettings = (key, val) => dispatch => { + dispatch({ + type: SET_READER_SETTINGS, + payload: {key, val}, + }); }; -export const setAccentColor = (val) => (dispatch) => { - dispatch({ - type: SET_ACCENT_COLOR, - payload: val, - }); +export const setAccentColor = val => dispatch => { + dispatch({ + type: SET_ACCENT_COLOR, + payload: val, + }); }; -export const setRippleColor = (val) => (dispatch) => { - dispatch({ - type: SET_RIPPLE_COLOR, - payload: val, - }); +export const setRippleColor = val => dispatch => { + dispatch({ + type: SET_RIPPLE_COLOR, + payload: val, + }); }; -export const setAmoledMode = (id, val) => (dispatch) => { - dispatch({ - type: SET_AMOLED_MODE, - payload: { id, val }, - }); +export const setAmoledMode = (id, val) => dispatch => { + dispatch({ + type: SET_AMOLED_MODE, + payload: {id, val}, + }); }; diff --git a/src/redux/settings/settings.reducer.js b/src/redux/settings/settings.reducer.js index 47d72ffe..33aae69d 100644 --- a/src/redux/settings/settings.reducer.js +++ b/src/redux/settings/settings.reducer.js @@ -1,43 +1,43 @@ import { - SET_APP_THEME, - SET_NOVELS_PER_ROW, - SET_READER_SETTINGS, - SET_APP_SETTINGS, - SET_ACCENT_COLOR, - SET_RIPPLE_COLOR, - SET_AMOLED_MODE, -} from "./settings.types"; + SET_APP_THEME, + SET_NOVELS_PER_ROW, + SET_READER_SETTINGS, + SET_APP_SETTINGS, + SET_ACCENT_COLOR, + SET_RIPPLE_COLOR, + SET_AMOLED_MODE, +} from './settings.types'; import { - lightTheme, - darkTheme, - midnightDuskTheme, - greenAppleTheme, - irisBlueTheme, - strawberryDaiquiri, - takoTheme, - yinYangTheme, - springBlossomTheme, - colorsAmoled, - oceanicTheme, - yangTheme, - yotsubaTheme, - takoLightTheme, -} from "../../theme/theme"; + lightTheme, + darkTheme, + midnightDuskTheme, + greenAppleTheme, + irisBlueTheme, + strawberryDaiquiri, + takoTheme, + yinYangTheme, + springBlossomTheme, + colorsAmoled, + oceanicTheme, + yangTheme, + yotsubaTheme, + takoLightTheme, +} from '../../theme/theme'; const themes = { - 1: lightTheme, - 2: darkTheme, - 3: midnightDuskTheme, - 4: greenAppleTheme, - 5: irisBlueTheme, - 6: oceanicTheme, - 7: strawberryDaiquiri, - 8: takoTheme, - 9: yinYangTheme, - 10: springBlossomTheme, - 11: yangTheme, - 12: yotsubaTheme, - 13: takoLightTheme, + 1: lightTheme, + 2: darkTheme, + 3: midnightDuskTheme, + 4: greenAppleTheme, + 5: irisBlueTheme, + 6: oceanicTheme, + 7: strawberryDaiquiri, + 8: takoTheme, + 9: yinYangTheme, + 10: springBlossomTheme, + 11: yangTheme, + 12: yotsubaTheme, + 13: takoLightTheme, }; /** @@ -50,136 +50,136 @@ const themes = { */ const initialState = { - /** - * General settings - */ + /** + * General settings + */ - incognitoMode: false, + incognitoMode: false, - /** - * Appearence settings - */ + /** + * Appearence settings + */ - theme: darkTheme, - displayMode: 0, - novelsPerRow: 3, - showHistoryTab: true, - showUpdatesTab: true, - showLabelsInNav: false, - useFabForContinueReading: false, + theme: darkTheme, + displayMode: 0, + novelsPerRow: 3, + showHistoryTab: true, + showUpdatesTab: true, + showLabelsInNav: false, + useFabForContinueReading: false, - /** - * Library settings - */ + /** + * Library settings + */ - showDownloadBadges: true, - showUnreadBadges: true, - showNumberOfNovels: false, - downloadedOnlyMode: false, + showDownloadBadges: true, + showUnreadBadges: true, + showNumberOfNovels: false, + downloadedOnlyMode: false, - /** - * Browse settings - */ + /** + * Browse settings + */ - searchAllSources: false, + searchAllSources: false, - /** - * Update settings - */ + /** + * Update settings + */ - onlyUpdateOngoingNovels: false, - updateLibraryOnLaunch: false, - downloadNewChapters: false, + onlyUpdateOngoingNovels: false, + updateLibraryOnLaunch: false, + downloadNewChapters: false, - /** - * Novel settings - */ + /** + * Novel settings + */ - hideBackdrop: false, + hideBackdrop: false, - /** - * Reader settings - */ + /** + * Reader settings + */ - fullScreenMode: true, - swipeGestures: true, - showScrollPercentage: true, - useWebViewForChapter: false, - showBatteryAndTime: false, - autoScroll: false, - autoScrollInterval: 10, - textSelectable: false, + fullScreenMode: true, + swipeGestures: true, + showScrollPercentage: true, + useWebViewForChapter: false, + showBatteryAndTime: false, + autoScroll: false, + autoScrollInterval: 10, + textSelectable: false, - reader: { - theme: 1, - textColor: "rgba(255,255,255,0.7)", - textSize: 16, - textAlign: "left", - padding: 5, - fontFamily: "", - lineHeight: 1.5, - customCSS: null, - }, + reader: { + theme: 1, + textColor: 'rgba(255,255,255,0.7)', + textSize: 16, + textAlign: 'left', + padding: 5, + fontFamily: '', + lineHeight: 1.5, + customCSS: null, + }, }; const settingsReducer = (state = initialState, action) => { - const { type, payload } = action; + const {type, payload} = action; - switch (type) { - case SET_APP_THEME: - return { ...state, theme: themes[payload] }; - case SET_NOVELS_PER_ROW: - return { - ...state, - novelsPerRow: state.displayMode !== 2 ? payload : 1, - }; - case SET_ACCENT_COLOR: - return { - ...state, - theme: { - ...state.theme, - colorAccent: payload, - }, - }; - case SET_RIPPLE_COLOR: - return { - ...state, - theme: { - ...state.theme, - rippleColor: payload, - }, - }; - case SET_AMOLED_MODE: - return { - ...state, - theme: payload.val - ? { - ...colorsAmoled, - colorAccent: state.theme.colorAccent, - rippleColor: state.theme.rippleColor, - colorButtonText: state.theme.colorButtonText, - id: state.theme.id, - name: state.theme.name, - } - : themes[payload.id], - }; + switch (type) { + case SET_APP_THEME: + return {...state, theme: themes[payload]}; + case SET_NOVELS_PER_ROW: + return { + ...state, + novelsPerRow: state.displayMode !== 2 ? payload : 1, + }; + case SET_ACCENT_COLOR: + return { + ...state, + theme: { + ...state.theme, + colorAccent: payload, + }, + }; + case SET_RIPPLE_COLOR: + return { + ...state, + theme: { + ...state.theme, + rippleColor: payload, + }, + }; + case SET_AMOLED_MODE: + return { + ...state, + theme: payload.val + ? { + ...colorsAmoled, + colorAccent: state.theme.colorAccent, + rippleColor: state.theme.rippleColor, + colorButtonText: state.theme.colorButtonText, + id: state.theme.id, + name: state.theme.name, + } + : themes[payload.id], + }; - case SET_APP_SETTINGS: - return { - ...state, - [payload.key]: payload.val, - }; - case SET_READER_SETTINGS: - return { - ...state, - reader: { - ...state.reader, - [payload.key]: payload.val, - }, - }; - default: - return state; - } + case SET_APP_SETTINGS: + return { + ...state, + [payload.key]: payload.val, + }; + case SET_READER_SETTINGS: + return { + ...state, + reader: { + ...state.reader, + [payload.key]: payload.val, + }, + }; + default: + return state; + } }; export default settingsReducer; diff --git a/src/redux/settings/settings.types.js b/src/redux/settings/settings.types.js index c4253ff4..f91b751e 100644 --- a/src/redux/settings/settings.types.js +++ b/src/redux/settings/settings.types.js @@ -1,7 +1,7 @@ -export const SET_APP_SETTINGS = "SET_APP_SETTINGS"; -export const SET_APP_THEME = "SET_APP_THEME"; -export const SET_NOVELS_PER_ROW = "SET_NOVELS_PER_ROW"; -export const SET_READER_SETTINGS = "SET_READER_SETTINGS"; -export const SET_ACCENT_COLOR = "SET_ACCENT_COLOR"; -export const SET_RIPPLE_COLOR = "SET_RIPPLE_COLOR"; -export const SET_AMOLED_MODE = "SET_AMOLED_MODE"; +export const SET_APP_SETTINGS = 'SET_APP_SETTINGS'; +export const SET_APP_THEME = 'SET_APP_THEME'; +export const SET_NOVELS_PER_ROW = 'SET_NOVELS_PER_ROW'; +export const SET_READER_SETTINGS = 'SET_READER_SETTINGS'; +export const SET_ACCENT_COLOR = 'SET_ACCENT_COLOR'; +export const SET_RIPPLE_COLOR = 'SET_RIPPLE_COLOR'; +export const SET_AMOLED_MODE = 'SET_AMOLED_MODE'; diff --git a/src/redux/source/source.actions.js b/src/redux/source/source.actions.js index 4cb3398d..bfb39eac 100644 --- a/src/redux/source/source.actions.js +++ b/src/redux/source/source.actions.js @@ -1,57 +1,57 @@ import { - ENABLE_DISCOVER, - FILTER_LANGUAGE, - GET_SOURCES, - PIN_SOURCES, - SEARCH_SOURCES, -} from "./source.types"; -import { showToast } from "../../hooks/showToast"; -import sources from "../../sources/sources.json"; + ENABLE_DISCOVER, + FILTER_LANGUAGE, + GET_SOURCES, + PIN_SOURCES, + SEARCH_SOURCES, +} from './source.types'; +import {showToast} from '../../hooks/showToast'; +import sources from '../../sources/sources.json'; -export const getSourcesAction = () => async (dispatch) => { - try { - /** - * Sort sources aplhabetically - */ - let sortedSources = sources.sort((a, b) => - a.sourceName.localeCompare(b.sourceName) - ); - - dispatch({ - type: GET_SOURCES, - payload: sortedSources, - }); - } catch (error) { - showToast(error.message); - } -}; - -export const searchSourcesAction = (searchText) => async (dispatch) => { - const res = searchText.toLowerCase(); +export const getSourcesAction = () => async dispatch => { + try { + /** + * Sort sources aplhabetically + */ + let sortedSources = sources.sort((a, b) => + a.sourceName.localeCompare(b.sourceName), + ); dispatch({ - type: SEARCH_SOURCES, - payload: res, + type: GET_SOURCES, + payload: sortedSources, }); + } catch (error) { + showToast(error.message); + } }; -export const pinSourceAction = (sourceId) => async (dispatch) => { - dispatch({ - type: PIN_SOURCES, - payload: sourceId, - }); +export const searchSourcesAction = searchText => async dispatch => { + const res = searchText.toLowerCase(); + + dispatch({ + type: SEARCH_SOURCES, + payload: res, + }); }; -export const filterLanguage = (language) => async (dispatch) => { - dispatch({ - type: FILTER_LANGUAGE, - payload: language, - }); +export const pinSourceAction = sourceId => async dispatch => { + dispatch({ + type: PIN_SOURCES, + payload: sourceId, + }); }; -export const enableDiscover = (key) => async (dispatch) => { - dispatch({ - type: ENABLE_DISCOVER, - payload: key, - }); +export const filterLanguage = language => async dispatch => { + dispatch({ + type: FILTER_LANGUAGE, + payload: language, + }); +}; + +export const enableDiscover = key => async dispatch => { + dispatch({ + type: ENABLE_DISCOVER, + payload: key, + }); }; diff --git a/src/redux/source/source.reducers.js b/src/redux/source/source.reducers.js index ffbfd777..ad499230 100644 --- a/src/redux/source/source.reducers.js +++ b/src/redux/source/source.reducers.js @@ -1,65 +1,63 @@ import { - GET_SOURCES, - SEARCH_SOURCES, - PIN_SOURCES, - FILTER_LANGUAGE, - ENABLE_DISCOVER, -} from "./source.types"; + GET_SOURCES, + SEARCH_SOURCES, + PIN_SOURCES, + FILTER_LANGUAGE, + ENABLE_DISCOVER, +} from './source.types'; const initialState = { - sources: [], - pinnedSources: [], - search: [], - pinned: [], - filters: [], - showMyAnimeList: true, - loading: true, + sources: [], + pinnedSources: [], + search: [], + pinned: [], + filters: [], + showMyAnimeList: true, + loading: true, }; const sourceReducer = (state = initialState, action) => { - const { type, payload } = action; + const {type, payload} = action; - switch (type) { - case GET_SOURCES: - return { ...state, sources: payload, loading: false }; - case PIN_SOURCES: - return { - ...state, - pinned: - state.pinned.indexOf(payload) === -1 - ? [...state.pinned, payload] - : state.pinned.filter((source) => source !== payload), - loading: false, - }; - case SEARCH_SOURCES: - return { - ...state, - search: state.sources.filter((source) => - source.sourceName.toLowerCase().includes(payload) - ), - }; + switch (type) { + case GET_SOURCES: + return {...state, sources: payload, loading: false}; + case PIN_SOURCES: + return { + ...state, + pinned: + state.pinned.indexOf(payload) === -1 + ? [...state.pinned, payload] + : state.pinned.filter(source => source !== payload), + loading: false, + }; + case SEARCH_SOURCES: + return { + ...state, + search: state.sources.filter(source => + source.sourceName.toLowerCase().includes(payload), + ), + }; - case FILTER_LANGUAGE: - if (!state.filters) { - state.filters = []; - } - return { - ...state, - filters: - state.filters.indexOf(payload) === -1 - ? [...state.filters, payload] - : state.filters.filter( - (language) => language !== payload - ), - }; - case ENABLE_DISCOVER: - return { - ...state, - [payload]: !state[payload], - }; - default: - return state; - } + case FILTER_LANGUAGE: + if (!state.filters) { + state.filters = []; + } + return { + ...state, + filters: + state.filters.indexOf(payload) === -1 + ? [...state.filters, payload] + : state.filters.filter(language => language !== payload), + }; + case ENABLE_DISCOVER: + return { + ...state, + [payload]: !state[payload], + }; + default: + return state; + } }; export default sourceReducer; diff --git a/src/redux/source/source.types.js b/src/redux/source/source.types.js index ebaf7aca..52ba4e87 100644 --- a/src/redux/source/source.types.js +++ b/src/redux/source/source.types.js @@ -1,5 +1,5 @@ -export const GET_SOURCES = "GET_SOURCES"; -export const SEARCH_SOURCES = "SEARCH_SOURCES"; -export const PIN_SOURCES = "PIN_SOURCES"; -export const FILTER_LANGUAGE = "FILTER_LANGUAGE"; -export const ENABLE_DISCOVER = "ENABLE_DISCOVER"; +export const GET_SOURCES = 'GET_SOURCES'; +export const SEARCH_SOURCES = 'SEARCH_SOURCES'; +export const PIN_SOURCES = 'PIN_SOURCES'; +export const FILTER_LANGUAGE = 'FILTER_LANGUAGE'; +export const ENABLE_DISCOVER = 'ENABLE_DISCOVER'; diff --git a/src/redux/store.js b/src/redux/store.js index 25bb6b6f..8c3220bc 100644 --- a/src/redux/store.js +++ b/src/redux/store.js @@ -1,35 +1,35 @@ -import { createStore, applyMiddleware, combineReducers } from "redux"; -import { persistStore, persistReducer } from "redux-persist"; -import AsyncStorage from "@react-native-async-storage/async-storage"; -import thunk from "redux-thunk"; +import {createStore, applyMiddleware, combineReducers} from 'redux'; +import {persistStore, persistReducer} from 'redux-persist'; +import AsyncStorage from '@react-native-async-storage/async-storage'; +import thunk from 'redux-thunk'; -import settingsReducer from "./settings/settings.reducer"; -import libraryReducer from "./library/library.reducer"; -import sourceReducer from "./source/source.reducers"; -import novelReducer from "./novel/novel.reducer"; -import updatesReducer from "./updates/updates.reducer"; -import trackerReducer from "./tracker/tracker.reducer"; -import preferenceReducer from "./preferences/preference.reducer"; -import downloadsReducer from "./downloads/downloads.reducer"; +import settingsReducer from './settings/settings.reducer'; +import libraryReducer from './library/library.reducer'; +import sourceReducer from './source/source.reducers'; +import novelReducer from './novel/novel.reducer'; +import updatesReducer from './updates/updates.reducer'; +import trackerReducer from './tracker/tracker.reducer'; +import preferenceReducer from './preferences/preference.reducer'; +import downloadsReducer from './downloads/downloads.reducer'; const persistConfig = { - key: "root", - storage: AsyncStorage, - blacklist: ["novelReducer"], + key: 'root', + storage: AsyncStorage, + blacklist: ['novelReducer'], }; const persistedReducer = persistReducer( - persistConfig, - combineReducers({ - settingsReducer, - libraryReducer, - sourceReducer, - novelReducer, - updatesReducer, - trackerReducer, - preferenceReducer, - downloadsReducer, - }) + persistConfig, + combineReducers({ + settingsReducer, + libraryReducer, + sourceReducer, + novelReducer, + updatesReducer, + trackerReducer, + preferenceReducer, + downloadsReducer, + }), ); export const store = createStore(persistedReducer, applyMiddleware(thunk)); diff --git a/src/redux/tracker/tracker.actions.js b/src/redux/tracker/tracker.actions.js index d043e683..81d8e287 100644 --- a/src/redux/tracker/tracker.actions.js +++ b/src/redux/tracker/tracker.actions.js @@ -1,56 +1,56 @@ -import { findListItem, updateItem } from "../../services/Trackers/myAnimeList"; +import {findListItem, updateItem} from '../../services/Trackers/myAnimeList'; import { - REMOVE_TRACKER, - SET_TRACKER, - TRACK_NOVEL, - UNTRACK_NOVEL, - UPDATE_TRACKER, - UPDATE_CHAPTERS_READ, -} from "./tracker.types"; + REMOVE_TRACKER, + SET_TRACKER, + TRACK_NOVEL, + UNTRACK_NOVEL, + UPDATE_TRACKER, + UPDATE_CHAPTERS_READ, +} from './tracker.types'; -import { updateMalChaptersRead } from "../../services/Trackers/myAnimeList"; +import {updateMalChaptersRead} from '../../services/Trackers/myAnimeList'; -export const setTracker = (res) => async (dispatch) => { - dispatch({ - type: SET_TRACKER, - payload: res, - }); +export const setTracker = res => async dispatch => { + dispatch({ + type: SET_TRACKER, + payload: res, + }); }; -export const removeTracker = () => async (dispatch) => { - dispatch({ type: REMOVE_TRACKER }); +export const removeTracker = () => async dispatch => { + dispatch({type: REMOVE_TRACKER}); }; -export const trackNovel = (trackObj, accessToken) => async (dispatch) => { - let res = await findListItem(trackObj.id, accessToken); - trackObj.num_chapters = res.num_chapters; - trackObj.my_list_status = { - num_chapters_read: res.my_list_status.num_chapters_read, - score: res.my_list_status.score, - status: res.my_list_status.status, - }; +export const trackNovel = (trackObj, accessToken) => async dispatch => { + let res = await findListItem(trackObj.id, accessToken); + trackObj.num_chapters = res.num_chapters; + trackObj.my_list_status = { + num_chapters_read: res.my_list_status.num_chapters_read, + score: res.my_list_status.score, + status: res.my_list_status.status, + }; - dispatch({ type: TRACK_NOVEL, payload: trackObj }); + dispatch({type: TRACK_NOVEL, payload: trackObj}); }; -export const updateTracker = (malId, accessToken, body) => async (dispatch) => { - let res = await updateItem(malId, accessToken, body); +export const updateTracker = (malId, accessToken, body) => async dispatch => { + let res = await updateItem(malId, accessToken, body); - dispatch({ type: UPDATE_TRACKER, payload: { malId, ...res } }); + dispatch({type: UPDATE_TRACKER, payload: {malId, ...res}}); }; -export const untrackNovel = (id) => async (dispatch) => { - dispatch({ type: UNTRACK_NOVEL, payload: id }); +export const untrackNovel = id => async dispatch => { + dispatch({type: UNTRACK_NOVEL, payload: id}); }; export const updateChaptersRead = - (malId, accessToken, chaptersRead) => async (dispatch) => { - let res = await updateMalChaptersRead(malId, accessToken, { - num_chapters_read: chaptersRead, - }); + (malId, accessToken, chaptersRead) => async dispatch => { + let res = await updateMalChaptersRead(malId, accessToken, { + num_chapters_read: chaptersRead, + }); - dispatch({ - type: UPDATE_CHAPTERS_READ, - payload: { malId, chaptersRead: res }, - }); - }; + dispatch({ + type: UPDATE_CHAPTERS_READ, + payload: {malId, chaptersRead: res}, + }); + }; diff --git a/src/redux/tracker/tracker.reducer.js b/src/redux/tracker/tracker.reducer.js index 045444e8..8ddb9793 100644 --- a/src/redux/tracker/tracker.reducer.js +++ b/src/redux/tracker/tracker.reducer.js @@ -1,81 +1,79 @@ import { - REMOVE_TRACKER, - SET_TRACKER, - TRACK_NOVEL, - UNTRACK_NOVEL, - UPDATE_CHAPTERS_READ, - UPDATE_TRACKER, -} from "./tracker.types"; + REMOVE_TRACKER, + SET_TRACKER, + TRACK_NOVEL, + UNTRACK_NOVEL, + UPDATE_CHAPTERS_READ, + UPDATE_TRACKER, +} from './tracker.types'; const initialState = { - tracker: null, - trackedNovels: [], + tracker: null, + trackedNovels: [], }; const trackerReducer = (state = initialState, action) => { - const { type, payload } = action; + const {type, payload} = action; - switch (type) { - case SET_TRACKER: - return { - ...state, - tracker: { ...payload, name: "MyAnimeList" }, - }; - case REMOVE_TRACKER: - return { - ...state, - tracker: null, - }; - case TRACK_NOVEL: - return { - ...state, - trackedNovels: state.trackedNovels.some( - (obj) => obj.novelId === payload.novelId - ) - ? state.trackedNovels - : [...state.trackedNovels, payload], - }; - case UPDATE_TRACKER: - return { - ...state, - trackedNovels: state.trackedNovels.map((novel) => - novel.id === payload.malId - ? { - ...novel, - my_list_status: { - num_chapters_read: payload.num_chapters_read, - status: payload.status, - score: payload.score, - }, - } - : novel - ), - }; - case UNTRACK_NOVEL: - return { - ...state, - trackedNovels: state.trackedNovels.filter( - (id) => id === payload - ), - }; - case UPDATE_CHAPTERS_READ: - return { - ...state, - trackedNovels: state.trackedNovels.map((novel) => - novel.id === payload.malId - ? { - ...novel, - my_list_status: { - ...novel.my_list_status, - num_chapters_read: payload.chaptersRead, - }, - } - : novel - ), - }; - default: - return state; - } + switch (type) { + case SET_TRACKER: + return { + ...state, + tracker: {...payload, name: 'MyAnimeList'}, + }; + case REMOVE_TRACKER: + return { + ...state, + tracker: null, + }; + case TRACK_NOVEL: + return { + ...state, + trackedNovels: state.trackedNovels.some( + obj => obj.novelId === payload.novelId, + ) + ? state.trackedNovels + : [...state.trackedNovels, payload], + }; + case UPDATE_TRACKER: + return { + ...state, + trackedNovels: state.trackedNovels.map(novel => + novel.id === payload.malId + ? { + ...novel, + my_list_status: { + num_chapters_read: payload.num_chapters_read, + status: payload.status, + score: payload.score, + }, + } + : novel, + ), + }; + case UNTRACK_NOVEL: + return { + ...state, + trackedNovels: state.trackedNovels.filter(id => id === payload), + }; + case UPDATE_CHAPTERS_READ: + return { + ...state, + trackedNovels: state.trackedNovels.map(novel => + novel.id === payload.malId + ? { + ...novel, + my_list_status: { + ...novel.my_list_status, + num_chapters_read: payload.chaptersRead, + }, + } + : novel, + ), + }; + default: + return state; + } }; export default trackerReducer; diff --git a/src/redux/tracker/tracker.types.js b/src/redux/tracker/tracker.types.js index b08f1262..40d7421e 100644 --- a/src/redux/tracker/tracker.types.js +++ b/src/redux/tracker/tracker.types.js @@ -1,9 +1,9 @@ -export const SET_TRACKER = "SET_TRACKER"; -export const REMOVE_TRACKER = "REMOVE_TRACKER"; +export const SET_TRACKER = 'SET_TRACKER'; +export const REMOVE_TRACKER = 'REMOVE_TRACKER'; -export const TRACK_NOVEL = "TRACK_NOVEL"; -export const UNTRACK_NOVEL = "UNTRACK_NOVEL"; +export const TRACK_NOVEL = 'TRACK_NOVEL'; +export const UNTRACK_NOVEL = 'UNTRACK_NOVEL'; -export const UPDATE_TRACKER = "UPDATE_TRACKER"; +export const UPDATE_TRACKER = 'UPDATE_TRACKER'; -export const UPDATE_CHAPTERS_READ = "UPDATE_CHAPTERS_READ"; +export const UPDATE_CHAPTERS_READ = 'UPDATE_CHAPTERS_READ'; diff --git a/src/redux/updates/updates.actions.js b/src/redux/updates/updates.actions.js index b1d576c4..f17b995f 100644 --- a/src/redux/updates/updates.actions.js +++ b/src/redux/updates/updates.actions.js @@ -1,47 +1,47 @@ -import { GET_UPDATES, SET_LAST_UPDATE_TIME } from "./updates.types"; +import {GET_UPDATES, SET_LAST_UPDATE_TIME} from './updates.types'; -import { getUpdates } from "../../database/queries/UpdateQueries"; -import { updateAllNovels } from "../../services/updates"; +import {getUpdates} from '../../database/queries/UpdateQueries'; +import {updateAllNovels} from '../../services/updates'; -import { showToast } from "../../hooks/showToast"; +import {showToast} from '../../hooks/showToast'; -export const getUpdatesAction = () => async (dispatch) => { - const updates = await getUpdates(); +export const getUpdatesAction = () => async dispatch => { + const updates = await getUpdates(); - const groups = updates.reduce((groups, update) => { - var dateParts = update.updateTime.split("-"); - var jsDate = new Date( - dateParts[0], - dateParts[1] - 1, - dateParts[2].substr(0, 2) - ); - const date = jsDate.toISOString(); - if (!groups[date]) { - groups[date] = []; - } - groups[date].push(update); - return groups; - }, {}); + const groups = updates.reduce((groups, update) => { + var dateParts = update.updateTime.split('-'); + var jsDate = new Date( + dateParts[0], + dateParts[1] - 1, + dateParts[2].substr(0, 2), + ); + const date = jsDate.toISOString(); + if (!groups[date]) { + groups[date] = []; + } + groups[date].push(update); + return groups; + }, {}); - const groupedUpdates = Object.keys(groups).map((date) => { - return { - date, - chapters: groups[date], - }; - }); + const groupedUpdates = Object.keys(groups).map(date => { + return { + date, + chapters: groups[date], + }; + }); - dispatch({ type: GET_UPDATES, payload: groupedUpdates }); + dispatch({type: GET_UPDATES, payload: groupedUpdates}); }; export const updateLibraryAction = () => async (dispatch, getState) => { - showToast("Updating library"); + showToast('Updating library'); - dispatch({ type: SET_LAST_UPDATE_TIME, payload: Date.now() }); + dispatch({type: SET_LAST_UPDATE_TIME, payload: Date.now()}); - const { downloadNewChapters = false, onlyUpdateOngoingNovels = false } = - getState().settingsReducer; + const {downloadNewChapters = false, onlyUpdateOngoingNovels = false} = + getState().settingsReducer; - await updateAllNovels({ downloadNewChapters, onlyUpdateOngoingNovels }); + await updateAllNovels({downloadNewChapters, onlyUpdateOngoingNovels}); - dispatch(getUpdatesAction()); + dispatch(getUpdatesAction()); }; diff --git a/src/redux/updates/updates.reducer.js b/src/redux/updates/updates.reducer.js index f4c5dd52..181d6fe0 100644 --- a/src/redux/updates/updates.reducer.js +++ b/src/redux/updates/updates.reducer.js @@ -1,38 +1,38 @@ import { - LOAD_UPDATES, - GET_UPDATES, - SET_LAST_UPDATE_TIME, - SHOW_LAST_UPDATE_TIME, -} from "./updates.types"; + LOAD_UPDATES, + GET_UPDATES, + SET_LAST_UPDATE_TIME, + SHOW_LAST_UPDATE_TIME, +} from './updates.types'; const initialState = { - updates: [], - lastUpdateTime: null, - showLastUpdateTime: true, - loading: true, + updates: [], + lastUpdateTime: null, + showLastUpdateTime: true, + loading: true, }; const updateReducer = (state = initialState, action) => { - const { type, payload } = action; + const {type, payload} = action; - switch (type) { - case LOAD_UPDATES: - return { ...state, loading: true }; - case GET_UPDATES: - return { ...state, updates: payload, loading: false }; - case SET_LAST_UPDATE_TIME: - return { - ...state, - lastUpdateTime: payload, - }; - case SHOW_LAST_UPDATE_TIME: - return { - ...state, - showLastUpdateTime: payload, - }; - default: - return state; - } + switch (type) { + case LOAD_UPDATES: + return {...state, loading: true}; + case GET_UPDATES: + return {...state, updates: payload, loading: false}; + case SET_LAST_UPDATE_TIME: + return { + ...state, + lastUpdateTime: payload, + }; + case SHOW_LAST_UPDATE_TIME: + return { + ...state, + showLastUpdateTime: payload, + }; + default: + return state; + } }; export default updateReducer; diff --git a/src/redux/updates/updates.types.js b/src/redux/updates/updates.types.js index 1a1a87ff..97625121 100644 --- a/src/redux/updates/updates.types.js +++ b/src/redux/updates/updates.types.js @@ -1,4 +1,4 @@ -export const GET_UPDATES = "GET_UPDATES"; -export const LOAD_UPDATES = "LOAD_UPDATES"; -export const SET_LAST_UPDATE_TIME = "SET_LAST_UPDATE_TIME"; -export const SHOW_LAST_UPDATE_TIME = "SHOW_LAST_UPDATE_TIME"; +export const GET_UPDATES = 'GET_UPDATES'; +export const LOAD_UPDATES = 'LOAD_UPDATES'; +export const SET_LAST_UPDATE_TIME = 'SET_LAST_UPDATE_TIME'; +export const SHOW_LAST_UPDATE_TIME = 'SHOW_LAST_UPDATE_TIME'; diff --git a/src/screens/Browse/Browse.js b/src/screens/Browse/Browse.js index 46e0af63..c02f8f63 100644 --- a/src/screens/Browse/Browse.js +++ b/src/screens/Browse/Browse.js @@ -1,195 +1,181 @@ -import React, { useEffect, useState } from "react"; +import React, {useEffect, useState} from 'react'; import { - StyleSheet, - View, - Text, - FlatList, - ActivityIndicator, - RefreshControl, -} from "react-native"; + StyleSheet, + View, + Text, + FlatList, + ActivityIndicator, + RefreshControl, +} from 'react-native'; -import { useDispatch, useSelector } from "react-redux"; +import {useDispatch, useSelector} from 'react-redux'; import { - getSourcesAction, - searchSourcesAction, -} from "../../redux/source/source.actions"; -import { useTheme } from "../../hooks/reduxHooks"; -import { showToast } from "../../hooks/showToast"; + getSourcesAction, + searchSourcesAction, +} from '../../redux/source/source.actions'; +import {useTheme} from '../../hooks/reduxHooks'; +import {showToast} from '../../hooks/showToast'; -import { Searchbar } from "../../components/Searchbar/Searchbar"; -import SourceCard from "./components/SourceCard"; -import EmptyView from "../../components/EmptyView"; -import DiscoverCard from "./discover/DiscoverCard"; +import {Searchbar} from '../../components/Searchbar/Searchbar'; +import SourceCard from './components/SourceCard'; +import EmptyView from '../../components/EmptyView'; +import DiscoverCard from './discover/DiscoverCard'; -const Browse = ({ navigation }) => { - const [refreshing, setRefreshing] = useState(false); - const [searchText, setSearchText] = useState(""); +const Browse = ({navigation}) => { + const [refreshing, setRefreshing] = useState(false); + const [searchText, setSearchText] = useState(''); - let { - sources, - search, - loading, - pinned, - filters = [], - showMyAnimeList = true, - } = useSelector((state) => state.sourceReducer); - const theme = useTheme(); - const dispatch = useDispatch(); + let { + sources, + search, + loading, + pinned, + filters = [], + showMyAnimeList = true, + } = useSelector(state => state.sourceReducer); + const theme = useTheme(); + const dispatch = useDispatch(); - const isPinned = (sourceId) => - pinned.indexOf(sourceId) === -1 ? false : true; + const isPinned = sourceId => (pinned.indexOf(sourceId) === -1 ? false : true); - sources = sources.filter((source) => filters.indexOf(source.lang) === -1); - search = search.filter((source) => filters.indexOf(source.lang) === -1); + sources = sources.filter(source => filters.indexOf(source.lang) === -1); + search = search.filter(source => filters.indexOf(source.lang) === -1); - let pinnedSources = sources.filter((source) => isPinned(source.sourceId)); + let pinnedSources = sources.filter(source => isPinned(source.sourceId)); - useEffect(() => { - dispatch(getSourcesAction()); - }, [getSourcesAction]); + useEffect(() => { + dispatch(getSourcesAction()); + }, [getSourcesAction]); - const onRefresh = () => { - showToast("Updating extension list"); - setRefreshing(true); - getSourcesAction(); - setRefreshing(false); - }; + const onRefresh = () => { + showToast('Updating extension list'); + setRefreshing(true); + getSourcesAction(); + setRefreshing(false); + }; - const clearSearchbar = () => { - setSearchText(""); - }; + const clearSearchbar = () => { + setSearchText(''); + }; - const onChangeText = (text) => { - setSearchText(text); - dispatch(searchSourcesAction(text)); - }; + const onChangeText = text => { + setSearchText(text); + dispatch(searchSourcesAction(text)); + }; - const renderItem = ({ item }) => ( - - ); + const renderItem = ({item}) => ( + + ); - const SourceHeader = ({ title }) => ( - - {title} - - ); + const SourceHeader = ({title}) => ( + + {title} + + ); - return ( - - navigation.navigate("GlobalSearch"), - }, - { - icon: "swap-vertical-variant", - onPress: () => navigation.navigate("Migration"), - }, - { - icon: "cog-outline", - onPress: () => navigation.navigate("BrowseSettings"), - }, - ]} - /> + return ( + + navigation.navigate('GlobalSearch'), + }, + { + icon: 'swap-vertical-variant', + onPress: () => navigation.navigate('Migration'), + }, + { + icon: 'cog-outline', + onPress: () => navigation.navigate('BrowseSettings'), + }, + ]} + /> - item.sourceId.toString()} + item.sourceId.toString()} + renderItem={renderItem} + extraData={pinnedSources} + ListHeaderComponent={ + + {showMyAnimeList && ( + <> + + {showMyAnimeList && ( + navigation.navigate('BrowseMal')} + icon={require('../../../assets/mal.png')} + theme={theme} + /> + )} + + )} + {pinnedSources.length > 0 && ( + item.sourceId.toString()} renderItem={renderItem} extraData={pinnedSources} - ListHeaderComponent={ - - {showMyAnimeList && ( - <> - - {showMyAnimeList && ( - - navigation.navigate("BrowseMal") - } - icon={require("../../../assets/mal.png")} - theme={theme} - /> - )} - - )} - {pinnedSources.length > 0 && ( - - item.sourceId.toString() - } - renderItem={renderItem} - extraData={pinnedSources} - ListHeaderComponent={ - - } - /> - )} - {sources.length > 0 && } - - } - ListEmptyComponent={ - loading ? ( - - ) : ( - sources.length === 0 && ( - - ) - ) - } - refreshControl={ - - } + ListHeaderComponent={} + /> + )} + {sources.length > 0 && } + + } + ListEmptyComponent={ + loading ? ( + - - ); + ) : ( + sources.length === 0 && ( + + ) + ) + } + refreshControl={ + + } + /> + + ); }; export default Browse; const styles = StyleSheet.create({ - container: { - flex: 1, - }, - sourcesHeader: { - paddingHorizontal: 16, - paddingVertical: 8, - }, + container: { + flex: 1, + }, + sourcesHeader: { + paddingHorizontal: 16, + paddingVertical: 8, + }, }); diff --git a/src/screens/Browse/BrowseSettings.js b/src/screens/Browse/BrowseSettings.js index 6b480105..79938e93 100644 --- a/src/screens/Browse/BrowseSettings.js +++ b/src/screens/Browse/BrowseSettings.js @@ -1,142 +1,128 @@ -import React from "react"; -import { FlatList, Pressable, Text, View } from "react-native"; +import React from 'react'; +import {FlatList, Pressable, Text, View} from 'react-native'; -import { Switch } from "react-native-paper"; -import { useDispatch, useSelector } from "react-redux"; +import {Switch} from 'react-native-paper'; +import {useDispatch, useSelector} from 'react-redux'; -import { Appbar } from "../../components/Appbar"; -import { ScreenContainer } from "../../components/Common"; -import { List } from "../../components/List"; +import {Appbar} from '../../components/Appbar'; +import {ScreenContainer} from '../../components/Common'; +import {List} from '../../components/List'; -import { useSettings, useTheme } from "../../hooks/reduxHooks"; -import { setAppSettings } from "../../redux/settings/settings.actions"; +import {useSettings, useTheme} from '../../hooks/reduxHooks'; +import {setAppSettings} from '../../redux/settings/settings.actions'; import { - enableDiscover, - filterLanguage, -} from "../../redux/source/source.actions"; + enableDiscover, + filterLanguage, +} from '../../redux/source/source.actions'; -const BrowseSettings = ({ navigation }) => { - const theme = useTheme(); - const dispatch = useDispatch(); +const BrowseSettings = ({navigation}) => { + const theme = useTheme(); + const dispatch = useDispatch(); - const { filters = [], showMyAnimeList = true } = useSelector( - (state) => state.sourceReducer - ); - const languages = [ - "English", - "Spanish", - "Japanese", - "Chinese", - "Arabic", - "Indonesian", - "Russian", - "Turkish", - "French", - "Portuguese (Brazil)", - ].sort(); + const {filters = [], showMyAnimeList = true} = useSelector( + state => state.sourceReducer, + ); + const languages = [ + 'English', + 'Spanish', + 'Japanese', + 'Chinese', + 'Arabic', + 'Indonesian', + 'Russian', + 'Turkish', + 'French', + 'Portuguese (Brazil)', + ].sort(); - const { searchAllSources = false } = useSettings(); - - const renderItem = ({ item }) => { - return ( - dispatch(filterLanguage(item))} - > - {item} - dispatch(filterLanguage(item))} - /> - - ); - }; + const {searchAllSources = false} = useSettings(); + const renderItem = ({item}) => { return ( - - - item} - renderItem={renderItem} - ListHeaderComponent={ - - - Global Search - - - dispatch( - setAppSettings( - "searchAllSources", - !searchAllSources - ) - ) - } - > - - Search all sources - - - dispatch( - setAppSettings( - "searchAllSources", - !searchAllSources - ) - ) - } - /> - - - Discover - - dispatch(enableDiscover("showMyAnimeList")) - } - > - - MyAnimeList - - - dispatch(enableDiscover("showMyAnimeList")) - } - /> - - - Languages - - } - /> - + dispatch(filterLanguage(item))} + > + {item} + dispatch(filterLanguage(item))} + /> + ); + }; + + return ( + + + item} + renderItem={renderItem} + ListHeaderComponent={ + + Global Search + + dispatch(setAppSettings('searchAllSources', !searchAllSources)) + } + > + + Search all sources + + + dispatch( + setAppSettings('searchAllSources', !searchAllSources), + ) + } + /> + + + Discover + dispatch(enableDiscover('showMyAnimeList'))} + > + MyAnimeList + + dispatch(enableDiscover('showMyAnimeList')) + } + /> + + + Languages + + } + /> + + ); }; export default BrowseSettings; diff --git a/src/screens/Browse/SourceNovels.js b/src/screens/Browse/SourceNovels.js index 1deffce0..90a0946e 100644 --- a/src/screens/Browse/SourceNovels.js +++ b/src/screens/Browse/SourceNovels.js @@ -1,64 +1,56 @@ -import React from "react"; -import { StyleSheet, View, FlatList, Text } from "react-native"; -import { useLibrary, useTheme } from "../../hooks/reduxHooks"; +import React from 'react'; +import {StyleSheet, View, FlatList, Text} from 'react-native'; +import {useLibrary, useTheme} from '../../hooks/reduxHooks'; -import EmptyView from "../../components/EmptyView"; -import { Appbar } from "../../components/Appbar"; -import ListView from "../../components/ListView"; +import EmptyView from '../../components/EmptyView'; +import {Appbar} from '../../components/Appbar'; +import ListView from '../../components/ListView'; -const SourceNovels = ({ navigation, route }) => { - const sourceId = route.params; - const theme = useTheme(); - const library = useLibrary(); +const SourceNovels = ({navigation, route}) => { + const sourceId = route.params; + const theme = useTheme(); + const library = useLibrary(); - const sourceNovels = library.filter((novel) => novel.sourceId === sourceId); + const sourceNovels = library.filter(novel => novel.sourceId === sourceId); - const renderItem = ({ item }) => ( - - navigation.navigate("MigrateNovel", { - sourceId: item.sourceId, - novelName: item.novelName, - }) - } - /> - ); + const renderItem = ({item}) => ( + + navigation.navigate('MigrateNovel', { + sourceId: item.sourceId, + novelName: item.novelName, + }) + } + /> + ); - return ( - - navigation.goBack()} - /> - item.novelId.toString()} - renderItem={renderItem} - ListEmptyComponent={ - - Your library does not have any novels from this source - - } - /> - - ); + return ( + + navigation.goBack()} /> + item.novelId.toString()} + renderItem={renderItem} + ListEmptyComponent={ + + Your library does not have any novels from this source + + } + /> + + ); }; export default SourceNovels; const styles = StyleSheet.create({ - container: { flex: 1 }, + container: {flex: 1}, }); diff --git a/src/screens/Browse/components/SourceCard.js b/src/screens/Browse/components/SourceCard.js index 5275637b..bc215144 100644 --- a/src/screens/Browse/components/SourceCard.js +++ b/src/screens/Browse/components/SourceCard.js @@ -1,98 +1,94 @@ -import React from "react"; -import { View, Text, Image, StyleSheet, Pressable } from "react-native"; +import React from 'react'; +import {View, Text, Image, StyleSheet, Pressable} from 'react-native'; -import { Button, IconButton } from "react-native-paper"; +import {Button, IconButton} from 'react-native-paper'; -import { pinSourceAction } from "../../../redux/source/source.actions"; +import {pinSourceAction} from '../../../redux/source/source.actions'; -const ExtensionCard = ({ item, theme, isPinned, dispatch, navigation }) => { - const { sourceId, sourceName, icon, lang } = item; +const ExtensionCard = ({item, theme, isPinned, dispatch, navigation}) => { + const {sourceId, sourceName, icon, lang} = item; - const navigateToExtension = () => - navigation.navigate("Extension", { - sourceId: item.sourceId, - sourceName: item.sourceName, - url: item.url, - }); + const navigateToExtension = () => + navigation.navigate('Extension', { + sourceId: item.sourceId, + sourceName: item.sourceName, + url: item.url, + }); - return ( - + + + + + {sourceName} + + + {lang} + + + + - dispatch(pinSourceAction(sourceId))} - color={ - isPinned - ? theme.colorAccent - : theme.textColorSecondary - } - style={{ margin: 2 }} - /> - - - - ); + > + Browse + + dispatch(pinSourceAction(sourceId))} + color={isPinned ? theme.colorAccent : theme.textColorSecondary} + style={{margin: 2}} + /> + + + + ); }; export default ExtensionCard; const styles = StyleSheet.create({ - extensionCard: { - flexDirection: "row", - alignItems: "center", - marginVertical: 4, - paddingVertical: 8, - paddingHorizontal: 20, - }, - extensionIcon: { - width: 40, - height: 40, - borderRadius: 4, - }, - extensionDetails: { - flex: 1, - flexDirection: "row", - justifyContent: "space-between", - alignItems: "center", - marginLeft: 16, - }, - sourceStatus: { - color: "#C14033", - fontSize: 12, - marginLeft: 5, - }, + extensionCard: { + flexDirection: 'row', + alignItems: 'center', + marginVertical: 4, + paddingVertical: 8, + paddingHorizontal: 20, + }, + extensionIcon: { + width: 40, + height: 40, + borderRadius: 4, + }, + extensionDetails: { + flex: 1, + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + marginLeft: 16, + }, + sourceStatus: { + color: '#C14033', + fontSize: 12, + marginLeft: 5, + }, }); diff --git a/src/screens/Browse/discover/BrowseMalCard.js b/src/screens/Browse/discover/BrowseMalCard.js index 60e7eee5..851a58ab 100644 --- a/src/screens/Browse/discover/BrowseMalCard.js +++ b/src/screens/Browse/discover/BrowseMalCard.js @@ -1,142 +1,134 @@ -import React from "react"; -import { StyleSheet, Pressable, Text, View, FlatList } from "react-native"; -import FastImage from "react-native-fast-image"; -import { Row } from "../../../components/Common"; +import React from 'react'; +import {StyleSheet, Pressable, Text, View, FlatList} from 'react-native'; +import FastImage from 'react-native-fast-image'; +import {Row} from '../../../components/Common'; -const GenreChip = ({ children, theme }) => ( - - - - {`${"Score "}`} - - {children} - - +const GenreChip = ({children, theme}) => ( + + + + {`${'Score '}`} + + {children} + + ); -const BrowseMalCard = ({ novel, theme, onPress }) => { - return ( +const BrowseMalCard = ({novel, theme, onPress}) => { + return ( + + + - - - + {novel.novelName} + + {novel.score} + {novel.info && ( + <> + + - - {novel.novelName} - - {novel.score} - {novel.info && ( - <> - - - - {`${"Type "}`} - - {novel.info[1]} - - - - - - {`${"Published "}`} - - {novel.info[2]} - - - - )} - - + + {`${'Type '}`} + + {novel.info[1]} + + + + + + {`${'Published '}`} + + {novel.info[2]} + + + + )} - ); + + + ); }; export default BrowseMalCard; const styles = StyleSheet.create({ - novelUpdatesCard: { - flex: 1, - flexDirection: "row", - }, - contentContainer: { - flex: 1, - }, - genreChip: { - marginTop: 4, - fontSize: 13, - // fontStyle: "italic", - }, + novelUpdatesCard: { + flex: 1, + flexDirection: 'row', + }, + contentContainer: { + flex: 1, + }, + genreChip: { + marginTop: 4, + fontSize: 13, + // fontStyle: "italic", + }, }); diff --git a/src/screens/Browse/discover/DiscoverCard.js b/src/screens/Browse/discover/DiscoverCard.js index 55959a7d..8bed295e 100644 --- a/src/screens/Browse/discover/DiscoverCard.js +++ b/src/screens/Browse/discover/DiscoverCard.js @@ -1,58 +1,58 @@ -import React from "react"; -import { View, Text, Image, StyleSheet, Pressable } from "react-native"; +import React from 'react'; +import {View, Text, Image, StyleSheet, Pressable} from 'react-native'; -import { Button } from "react-native-paper"; +import {Button} from 'react-native-paper'; -const DiscoverCard = ({ icon, label, onPress, theme }) => { - return ( - { + return ( + + + + - - - - {label} - - - - - ); + {label} + + + + + ); }; export default DiscoverCard; const styles = StyleSheet.create({ - discoverCard: { - flexDirection: "row", - alignItems: "center", - marginVertical: 4, - paddingVertical: 8, - paddingHorizontal: 20, - }, - discoverIcon: { - width: 40, - height: 40, - borderRadius: 4, - }, - label: { - flex: 1, - flexDirection: "row", - justifyContent: "space-between", - alignItems: "center", - marginLeft: 16, - }, + discoverCard: { + flexDirection: 'row', + alignItems: 'center', + marginVertical: 4, + paddingVertical: 8, + paddingHorizontal: 20, + }, + discoverIcon: { + width: 40, + height: 40, + borderRadius: 4, + }, + label: { + flex: 1, + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + marginLeft: 16, + }, }); diff --git a/src/screens/Browse/discover/MalTopNovels.js b/src/screens/Browse/discover/MalTopNovels.js index ae14d0af..270f7857 100644 --- a/src/screens/Browse/discover/MalTopNovels.js +++ b/src/screens/Browse/discover/MalTopNovels.js @@ -1,192 +1,183 @@ -import React, { useEffect, useState } from "react"; -import { StyleSheet, View, ActivityIndicator, FlatList } from "react-native"; +import React, {useEffect, useState} from 'react'; +import {StyleSheet, View, ActivityIndicator, FlatList} from 'react-native'; -import * as WebBrowser from "expo-web-browser"; +import * as WebBrowser from 'expo-web-browser'; -import { Searchbar } from "../../../components/Searchbar/Searchbar"; -import { ErrorView } from "../../../components/ErrorView/ErrorView"; +import {Searchbar} from '../../../components/Searchbar/Searchbar'; +import {ErrorView} from '../../../components/ErrorView/ErrorView'; -import { useTheme, useSettings } from "../../../hooks/reduxHooks"; -import { showToast } from "../../../hooks/showToast"; -import { getDeviceOrientation } from "../../../services/utils/helpers"; -import { scrapeSearchResults, scrapeTopNovels } from "./MyAnimeListScraper"; -import BrowseMalCard from "./BrowseMalCard"; +import {useTheme, useSettings} from '../../../hooks/reduxHooks'; +import {showToast} from '../../../hooks/showToast'; +import {getDeviceOrientation} from '../../../services/utils/helpers'; +import {scrapeSearchResults, scrapeTopNovels} from './MyAnimeListScraper'; +import BrowseMalCard from './BrowseMalCard'; -const BrowseMalScreen = ({ navigation, route }) => { - const theme = useTheme(); +const BrowseMalScreen = ({navigation, route}) => { + const theme = useTheme(); - const [loading, setLoading] = useState(true); - const [novels, setNovels] = useState([]); - const [error, setError] = useState(); - const [limit, setLimit] = useState(0); + const [loading, setLoading] = useState(true); + const [novels, setNovels] = useState([]); + const [error, setError] = useState(); + const [limit, setLimit] = useState(0); - const [searchText, setSearchText] = useState(""); + const [searchText, setSearchText] = useState(''); - const malUrl = "https://myanimelist.net/topmanga.php?type=lightnovels"; + const malUrl = 'https://myanimelist.net/topmanga.php?type=lightnovels'; - const getNovels = async (limit) => { - try { - const data = await scrapeTopNovels(limit); + const getNovels = async limit => { + try { + const data = await scrapeTopNovels(limit); - setNovels((novels) => novels.concat(data)); - setLoading(false); - } catch (error) { - setError(error.message); - setNovels([]); - setLoading(false); - showToast(error.message); - } - }; + setNovels(novels => novels.concat(data)); + setLoading(false); + } catch (error) { + setError(error.message); + setNovels([]); + setLoading(false); + showToast(error.message); + } + }; - const clearSearchbar = () => { - getNovels(); - setLoading(true); - setSearchText(""); - }; + const clearSearchbar = () => { + getNovels(); + setLoading(true); + setSearchText(''); + }; - const getSearchResults = async () => { - try { - setLoading(true); + const getSearchResults = async () => { + try { + setLoading(true); - const data = await scrapeSearchResults(searchText); + const data = await scrapeSearchResults(searchText); - setNovels(data); - setLoading(false); - } catch (error) { - setError(error.message); - setNovels([]); - setLoading(false); - showToast(error.message); - } - }; + setNovels(data); + setLoading(false); + } catch (error) { + setError(error.message); + setNovels([]); + setLoading(false); + showToast(error.message); + } + }; - useEffect(() => { - getNovels(); - }, []); + useEffect(() => { + getNovels(); + }, []); - const renderItem = ({ item }) => ( - - navigation.navigate("GlobalSearch", { - novelName: item.novelName, - }) - } - /> - ); + const renderItem = ({item}) => ( + + navigation.navigate('GlobalSearch', { + novelName: item.novelName, + }) + } + /> + ); - const { displayMode, novelsPerRow } = useSettings(); + const {displayMode, novelsPerRow} = useSettings(); - const orientation = getDeviceOrientation(); + const orientation = getDeviceOrientation(); - const getNovelsPerRow = () => { - if (displayMode === 2) { - return 1; - } + const getNovelsPerRow = () => { + if (displayMode === 2) { + return 1; + } - if (orientation === "landscape") { - return 6; - } else { - return novelsPerRow; - } - }; - - const isCloseToBottom = ({ - layoutMeasurement, - contentOffset, - contentSize, - }) => { - const paddingToBottom = 20; - return ( - layoutMeasurement.height + contentOffset.y >= - contentSize.height - paddingToBottom - ); - }; - - const ListEmptyComponent = () => ( - { - getNovels(); - setLoading(true); - setError(); - }, - icon: "reload", - }, - ]} - theme={theme} - /> - ); + if (orientation === 'landscape') { + return 6; + } else { + return novelsPerRow; + } + }; + const isCloseToBottom = ({layoutMeasurement, contentOffset, contentSize}) => { + const paddingToBottom = 20; return ( - - navigation.goBack()} - searchText={searchText} - onChangeText={(text) => setSearchText(text)} - onSubmitEditing={getSearchResults} - clearSearchbar={clearSearchbar} - actions={[ - { - icon: "earth", - onPress: () => WebBrowser.openBrowserAsync(malUrl), - }, - ]} - /> - {loading ? ( - - - - ) : ( - item.novelName} - renderItem={renderItem} - ListEmptyComponent={ListEmptyComponent} - onScroll={({ nativeEvent }) => { - if (!searchText && isCloseToBottom(nativeEvent)) { - getNovels(limit + 50); - setLimit((limit) => limit + 50); - } - }} - ListFooterComponent={ - !searchText && ( - - - - ) - } - /> - )} - + layoutMeasurement.height + contentOffset.y >= + contentSize.height - paddingToBottom ); + }; + + const ListEmptyComponent = () => ( + { + getNovels(); + setLoading(true); + setError(); + }, + icon: 'reload', + }, + ]} + theme={theme} + /> + ); + + return ( + + navigation.goBack()} + searchText={searchText} + onChangeText={text => setSearchText(text)} + onSubmitEditing={getSearchResults} + clearSearchbar={clearSearchbar} + actions={[ + { + icon: 'earth', + onPress: () => WebBrowser.openBrowserAsync(malUrl), + }, + ]} + /> + {loading ? ( + + + + ) : ( + item.novelName} + renderItem={renderItem} + ListEmptyComponent={ListEmptyComponent} + onScroll={({nativeEvent}) => { + if (!searchText && isCloseToBottom(nativeEvent)) { + getNovels(limit + 50); + setLimit(limit => limit + 50); + } + }} + ListFooterComponent={ + !searchText && ( + + + + ) + } + /> + )} + + ); }; export default BrowseMalScreen; const styles = StyleSheet.create({ - container: { - flex: 1, - }, - contentContainer: { - flex: 1, - }, - novelsContainer: { - flexGrow: 1, - paddingBottom: 8, - paddingHorizontal: 4, - }, + container: { + flex: 1, + }, + contentContainer: { + flex: 1, + }, + novelsContainer: { + flexGrow: 1, + paddingBottom: 8, + paddingHorizontal: 4, + }, }); diff --git a/src/screens/Browse/discover/MyAnimeListScraper.js b/src/screens/Browse/discover/MyAnimeListScraper.js index 28af6770..2068e4cb 100644 --- a/src/screens/Browse/discover/MyAnimeListScraper.js +++ b/src/screens/Browse/discover/MyAnimeListScraper.js @@ -1,77 +1,75 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -const scrapeTopNovels = async (pageNo) => { - const url = - "https://myanimelist.net/topmanga.php?type=lightnovels&limit=" + pageNo; +const scrapeTopNovels = async pageNo => { + const url = + 'https://myanimelist.net/topmanga.php?type=lightnovels&limit=' + pageNo; - const res = await fetch(url); - const body = await res.text(); + const res = await fetch(url); + const body = await res.text(); - const $ = cheerio.load(body); + const $ = cheerio.load(body); - const novels = []; + const novels = []; - $("tr.ranking-list").each(function (res) { - const novelId = $(this).find("img").attr("data-src").split("/"); + $('tr.ranking-list').each(function (res) { + const novelId = $(this).find('img').attr('data-src').split('/'); + + const novelCover = + 'https://cdn.myanimelist.net/images/manga/' + + novelId[7] + + '/' + + novelId[8].split('.')[0] + + '.jpg'; + const novelName = $(this).find('h3').text(); + + const score = $(this) + .find('.js-top-ranking-score-col > span.score-label') + .text(); + + const info = $(this).find('div.information').text().split(/\s\s+/); + const novel = {novelName, novelCover, score, info}; + + novels.push(novel); + }); + + return novels; +}; + +const scrapeSearchResults = async searchTerm => { + const url = + 'https://myanimelist.net/manga.php?q=' + searchTerm + '&cat=manga&type=2'; + + const res = await fetch(url); + const body = await res.text(); + + const $ = cheerio.load(body); + + const novels = []; + + $('.list') + .find('tr') + .each(function (res) { + const novelName = $(this).find('a > strong').text(); + + if (novelName) { + const novelId = $(this).find('img').attr('data-src').split('/'); const novelCover = - "https://cdn.myanimelist.net/images/manga/" + - novelId[7] + - "/" + - novelId[8].split(".")[0] + - ".jpg"; - const novelName = $(this).find("h3").text(); + 'https://cdn.myanimelist.net/images/manga/' + + novelId[7] + + '/' + + novelId[8].split('.')[0] + + '.jpg'; - const score = $(this) - .find(".js-top-ranking-score-col > span.score-label") - .text(); + const score = $(this).find('td:nth-child(5)').text().trim(); - const info = $(this).find("div.information").text().split(/\s\s+/); - const novel = { novelName, novelCover, score, info }; + const novel = {novelName, novelCover, score}; novels.push(novel); + } }); - return novels; + return novels; }; -const scrapeSearchResults = async (searchTerm) => { - const url = - "https://myanimelist.net/manga.php?q=" + - searchTerm + - "&cat=manga&type=2"; - - const res = await fetch(url); - const body = await res.text(); - - const $ = cheerio.load(body); - - const novels = []; - - $(".list") - .find("tr") - .each(function (res) { - const novelName = $(this).find("a > strong").text(); - - if (novelName) { - const novelId = $(this).find("img").attr("data-src").split("/"); - - const novelCover = - "https://cdn.myanimelist.net/images/manga/" + - novelId[7] + - "/" + - novelId[8].split(".")[0] + - ".jpg"; - - const score = $(this).find("td:nth-child(5)").text().trim(); - - const novel = { novelName, novelCover, score }; - - novels.push(novel); - } - }); - - return novels; -}; - -export { scrapeTopNovels, scrapeSearchResults }; +export {scrapeTopNovels, scrapeSearchResults}; diff --git a/src/screens/Browse/globalsearch/GlobalSearch.js b/src/screens/Browse/globalsearch/GlobalSearch.js index 2e536c96..62c63079 100644 --- a/src/screens/Browse/globalsearch/GlobalSearch.js +++ b/src/screens/Browse/globalsearch/GlobalSearch.js @@ -1,168 +1,161 @@ -import React, { useEffect, useState } from "react"; -import { StyleSheet, View, FlatList, ActivityIndicator } from "react-native"; +import React, {useEffect, useState} from 'react'; +import {StyleSheet, View, FlatList, ActivityIndicator} from 'react-native'; -import { ProgressBar } from "react-native-paper"; -import { useSelector } from "react-redux"; +import {ProgressBar} from 'react-native-paper'; +import {useSelector} from 'react-redux'; -import { Searchbar } from "../../../components/Searchbar/Searchbar"; -import EmptyView from "../../../components/EmptyView"; +import {Searchbar} from '../../../components/Searchbar/Searchbar'; +import EmptyView from '../../../components/EmptyView'; -import { ScreenContainer } from "../../../components/Common"; -import GlobalSearchSourceItem from "./GlobalSearchSourceItem"; +import {ScreenContainer} from '../../../components/Common'; +import GlobalSearchSourceItem from './GlobalSearchSourceItem'; -import { showToast } from "../../../hooks/showToast"; -import { useLibrary, useSettings, useTheme } from "../../../hooks/reduxHooks"; -import { getSource } from "../../../sources/sources"; +import {showToast} from '../../../hooks/showToast'; +import {useLibrary, useSettings, useTheme} from '../../../hooks/reduxHooks'; +import {getSource} from '../../../sources/sources'; -const GlobalSearch = ({ route, navigation }) => { - const theme = useTheme(); +const GlobalSearch = ({route, navigation}) => { + const theme = useTheme(); - let novelName = ""; - if (route.params) { - novelName = route.params.novelName; + let novelName = ''; + if (route.params) { + novelName = route.params.novelName; + } + + let { + sources, + pinned, + filters = [], + } = useSelector(state => state.sourceReducer); + sources = sources.filter(source => filters.indexOf(source.lang) === -1); + + const pinnedSources = sources.filter( + source => pinned.indexOf(source.sourceId) !== -1, + ); + const {searchAllSources = false} = useSettings(); + + const [loading, setLoading] = useState(false); + const [searchText, setSearchText] = useState(novelName); + const [searchResults, setSearchResults] = useState([]); + const [progress, setProgress] = useState(0); + + const library = useLibrary(); + + useEffect(() => { + let mounted = true; + novelName && onSubmitEditing(); + + return () => (mounted = false); + }, []); + + const clearSearchbar = () => setSearchText(''); + const onChangeText = text => setSearchText(text); + + const onSubmitEditing = async () => { + setSearchResults([]); + setProgress(0); + + let globalSearchSources = searchAllSources ? sources : pinnedSources; + + for (let i = 0; i < globalSearchSources.length; i++) { + try { + setLoading(true); + + const source = getSource(globalSearchSources[i].sourceId); + const data = await source.searchNovels(encodeURI(searchText)); + + setSearchResults(searchResults => [ + ...searchResults, + { + sourceId: globalSearchSources[i].sourceId, + sourceName: globalSearchSources[i].sourceName, + lang: globalSearchSources[i].lang, + novels: data, + }, + ]); + setLoading(false); + } catch (error) { + showToast(globalSearchSources[i].sourceName + ': ' + error.message); + setSearchResults(searchResults => [ + ...searchResults, + { + sourceId: globalSearchSources[i].sourceId, + sourceName: globalSearchSources[i].sourceName, + lang: globalSearchSources[i].lang, + novels: [], + }, + ]); + setLoading(false); + } + setProgress(progress => progress + 1 / globalSearchSources.length); } + }; - let { - sources, - pinned, - filters = [], - } = useSelector((state) => state.sourceReducer); - sources = sources.filter((source) => filters.indexOf(source.lang) === -1); + const renderItem = ({item}) => ( + + ); - const pinnedSources = sources.filter( - (source) => pinned.indexOf(source.sourceId) !== -1 - ); - const { searchAllSources = false } = useSettings(); - - const [loading, setLoading] = useState(false); - const [searchText, setSearchText] = useState(novelName); - const [searchResults, setSearchResults] = useState([]); - const [progress, setProgress] = useState(0); - - const library = useLibrary(); - - useEffect(() => { - let mounted = true; - novelName && onSubmitEditing(); - - return () => (mounted = false); - }, []); - - const clearSearchbar = () => setSearchText(""); - const onChangeText = (text) => setSearchText(text); - - const onSubmitEditing = async () => { - setSearchResults([]); - setProgress(0); - - let globalSearchSources = searchAllSources ? sources : pinnedSources; - - for (let i = 0; i < globalSearchSources.length; i++) { - try { - setLoading(true); - - const source = getSource(globalSearchSources[i].sourceId); - const data = await source.searchNovels(encodeURI(searchText)); - - setSearchResults((searchResults) => [ - ...searchResults, - { - sourceId: globalSearchSources[i].sourceId, - sourceName: globalSearchSources[i].sourceName, - lang: globalSearchSources[i].lang, - novels: data, - }, - ]); - setLoading(false); - } catch (error) { - showToast( - globalSearchSources[i].sourceName + ": " + error.message - ); - setSearchResults((searchResults) => [ - ...searchResults, - { - sourceId: globalSearchSources[i].sourceId, - sourceName: globalSearchSources[i].sourceName, - lang: globalSearchSources[i].lang, - novels: [], - }, - ]); - setLoading(false); - } - setProgress( - (progress) => progress + 1 / globalSearchSources.length - ); - } - }; - - const renderItem = ({ item }) => ( - - ); - - return ( - - - {progress > 0 && ( - + return ( + + + {progress > 0 && ( + + )} + item.sourceId.toString()} + renderItem={renderItem} + extraData={pinned} + ListEmptyComponent={ + <> + {!loading && ( + )} - item.sourceId.toString()} - renderItem={renderItem} - extraData={pinned} - ListEmptyComponent={ - <> - {!loading && ( - - )} - - } - ListFooterComponent={ - loading && ( - - - - ) - } - /> - - ); + + } + ListFooterComponent={ + loading && ( + + + + ) + } + /> + + ); }; export default GlobalSearch; diff --git a/src/screens/Browse/globalsearch/GlobalSearchNovelCover.js b/src/screens/Browse/globalsearch/GlobalSearchNovelCover.js index 2d1baca2..5920bf41 100644 --- a/src/screens/Browse/globalsearch/GlobalSearchNovelCover.js +++ b/src/screens/Browse/globalsearch/GlobalSearchNovelCover.js @@ -1,70 +1,64 @@ -import React from "react"; -import { StyleSheet, View, Text, Image, Pressable } from "react-native"; +import React from 'react'; +import {StyleSheet, View, Text, Image, Pressable} from 'react-native'; const GlobalSearchNovelCover = ({ - novel, - theme, - onPress, - inLibrary, - onLongPress, + novel, + theme, + onPress, + inLibrary, + onLongPress, }) => { - const { novelName, novelCover } = novel; + const {novelName, novelCover} = novel; - return ( - - - <> - - - {novelName} - - - - - ); + return ( + + + <> + + + {novelName} + + + + + ); }; export default GlobalSearchNovelCover; const styles = StyleSheet.create({ - novelContainer: { - paddingHorizontal: 5, - paddingVertical: 4, - borderRadius: 4, - }, - novelCover: { - height: 150, - width: 115, - borderRadius: 4, - }, - title: { - fontFamily: "pt-sans-bold", - fontSize: 14, - padding: 4, - flexWrap: "wrap", - width: 115, - }, + novelContainer: { + paddingHorizontal: 5, + paddingVertical: 4, + borderRadius: 4, + }, + novelCover: { + height: 150, + width: 115, + borderRadius: 4, + }, + title: { + fontFamily: 'pt-sans-bold', + fontSize: 14, + padding: 4, + flexWrap: 'wrap', + width: 115, + }, }); diff --git a/src/screens/Browse/globalsearch/GlobalSearchNovelList.js b/src/screens/Browse/globalsearch/GlobalSearchNovelList.js index a99ab6a4..4b8e6bcf 100644 --- a/src/screens/Browse/globalsearch/GlobalSearchNovelList.js +++ b/src/screens/Browse/globalsearch/GlobalSearchNovelList.js @@ -1,53 +1,51 @@ -import React from "react"; -import { StyleSheet, FlatList, Text } from "react-native"; +import React from 'react'; +import {StyleSheet, FlatList, Text} from 'react-native'; -import GlobalSearchNovelCover from "./GlobalSearchNovelCover"; +import GlobalSearchNovelCover from './GlobalSearchNovelCover'; -const GlobalSearchNovelList = ({ data, theme, library, navigation }) => { - const inLibrary = (sourceId, novelUrl) => - library.some( - (obj) => obj.novelUrl === novelUrl && obj.sourceId === sourceId - ); +const GlobalSearchNovelList = ({data, theme, library, navigation}) => { + const inLibrary = (sourceId, novelUrl) => + library.some(obj => obj.novelUrl === novelUrl && obj.sourceId === sourceId); - const navigateToNovel = (item) => navigation.push("Novel", item); + const navigateToNovel = item => navigation.push('Novel', item); - const renderItem = ({ item }) => ( - navigateToNovel(item)} - inLibrary={inLibrary(item.sourceId, item.novelUrl)} - /> - ); + const renderItem = ({item}) => ( + navigateToNovel(item)} + inLibrary={inLibrary(item.sourceId, item.novelUrl)} + /> + ); - const ListEmptyComponent = ( - - No results found - - ); + const ListEmptyComponent = ( + + No results found + + ); - return ( - item.novelUrl} - renderItem={renderItem} - ListEmptyComponent={ListEmptyComponent} - /> - ); + return ( + item.novelUrl} + renderItem={renderItem} + ListEmptyComponent={ListEmptyComponent} + /> + ); }; export default GlobalSearchNovelList; const styles = StyleSheet.create({ - listContainer: { - flexGrow: 1, - paddingVertical: 8, - paddingHorizontal: 4, - }, - emptyList: { - padding: 8, - paddingVertical: 4, - }, + listContainer: { + flexGrow: 1, + paddingVertical: 8, + paddingHorizontal: 4, + }, + emptyList: { + padding: 8, + paddingVertical: 4, + }, }); diff --git a/src/screens/Browse/globalsearch/GlobalSearchSourceItem.js b/src/screens/Browse/globalsearch/GlobalSearchSourceItem.js index 93f3bc6c..e53c7660 100644 --- a/src/screens/Browse/globalsearch/GlobalSearchSourceItem.js +++ b/src/screens/Browse/globalsearch/GlobalSearchSourceItem.js @@ -1,36 +1,34 @@ -import React from "react"; -import { StyleSheet, View, Text } from "react-native"; +import React from 'react'; +import {StyleSheet, View, Text} from 'react-native'; -import GlobalSearchNovelList from "./GlobalSearchNovelList"; +import GlobalSearchNovelList from './GlobalSearchNovelList'; -const GlobalSearchSourceItem = ({ source, library, theme, navigation }) => { - const { sourceName, lang, novels } = source; +const GlobalSearchSourceItem = ({source, library, theme, navigation}) => { + const {sourceName, lang, novels} = source; - return ( - <> - - - {sourceName} - - - {lang} - - - - - ); + return ( + <> + + {sourceName} + + {lang} + + + + + ); }; export default GlobalSearchSourceItem; const styles = StyleSheet.create({ - sourceContainer: { - padding: 8, - paddingVertical: 16, - }, + sourceContainer: { + padding: 8, + paddingVertical: 16, + }, }); diff --git a/src/screens/Browse/migration/Migration.js b/src/screens/Browse/migration/Migration.js index 48c4f340..2fdfb99e 100644 --- a/src/screens/Browse/migration/Migration.js +++ b/src/screens/Browse/migration/Migration.js @@ -1,75 +1,70 @@ -import React from "react"; -import { StyleSheet, View, FlatList, Text } from "react-native"; +import React from 'react'; +import {StyleSheet, View, FlatList, Text} from 'react-native'; -import { useSelector } from "react-redux"; +import {useSelector} from 'react-redux'; -import { Appbar } from "../../../components/Appbar"; -import MigrationSourceCard from "./MigrationSourceCard"; +import {Appbar} from '../../../components/Appbar'; +import MigrationSourceCard from './MigrationSourceCard'; -import { useLibrary, useTheme } from "../../../hooks/reduxHooks"; +import {useLibrary, useTheme} from '../../../hooks/reduxHooks'; -const GlobalSearch = ({ navigation }) => { - const theme = useTheme(); +const GlobalSearch = ({navigation}) => { + const theme = useTheme(); - const library = useLibrary(); - let { sources } = useSelector((state) => state.sourceReducer); + const library = useLibrary(); + let {sources} = useSelector(state => state.sourceReducer); - const novelsPerSource = (sourceId) => - library.filter((novel) => novel.sourceId === sourceId).length; + const novelsPerSource = sourceId => + library.filter(novel => novel.sourceId === sourceId).length; - sources = sources.filter( - (source) => - library.filter((novel) => novel.sourceId === source.sourceId).length - ); + sources = sources.filter( + source => + library.filter(novel => novel.sourceId === source.sourceId).length, + ); - const renderItem = ({ item }) => ( - navigation.navigate("SourceNovels", item.sourceId)} - /> - ); + const renderItem = ({item}) => ( + navigation.navigate('SourceNovels', item.sourceId)} + /> + ); - const ListHeaderComponent = ( - - Select a Source To Migrate From - - ); + const ListHeaderComponent = ( + + Select a Source To Migrate From + + ); - return ( - - - item.sourceId.toString()} - renderItem={renderItem} - ListHeaderComponent={ListHeaderComponent} - /> - - ); + return ( + + + item.sourceId.toString()} + renderItem={renderItem} + ListHeaderComponent={ListHeaderComponent} + /> + + ); }; export default GlobalSearch; const styles = StyleSheet.create({ - container: { - flex: 1, - }, - containerStyle: { - padding: 20, - margin: 20, - borderRadius: 6, - }, - listHeader: { - padding: 20, - paddingBottom: 10, - textTransform: "uppercase", - }, + container: { + flex: 1, + }, + containerStyle: { + padding: 20, + margin: 20, + borderRadius: 6, + }, + listHeader: { + padding: 20, + paddingBottom: 10, + textTransform: 'uppercase', + }, }); diff --git a/src/screens/Browse/migration/MigrationNovelList.js b/src/screens/Browse/migration/MigrationNovelList.js index f0ed62bd..3c984f80 100644 --- a/src/screens/Browse/migration/MigrationNovelList.js +++ b/src/screens/Browse/migration/MigrationNovelList.js @@ -1,142 +1,138 @@ -import React, { useState } from "react"; -import { StyleSheet, FlatList, Text, View } from "react-native"; +import React, {useState} from 'react'; +import {StyleSheet, FlatList, Text, View} from 'react-native'; -import { Portal, Modal, Button } from "react-native-paper"; +import {Portal, Modal, Button} from 'react-native-paper'; -import GlobalSearchNovelCover from "../globalsearch/GlobalSearchNovelCover"; +import GlobalSearchNovelCover from '../globalsearch/GlobalSearchNovelCover'; -import { migrateNovel } from "../../../database/queries/NovelQueries"; -import { showToast } from "../../../hooks/showToast"; +import {migrateNovel} from '../../../database/queries/NovelQueries'; +import {showToast} from '../../../hooks/showToast'; -const MigrationNovelList = ({ data, theme, library, navigation }) => { - const [selectedNovel, setSelectedNovel] = useState(false); +const MigrationNovelList = ({data, theme, library, navigation}) => { + const [selectedNovel, setSelectedNovel] = useState(false); - const [migrateNovelDialog, setMigrateNovelDialog] = useState(false); - const showMigrateNovelDialog = () => setMigrateNovelDialog(true); - const hideMigrateNovelDialog = () => setMigrateNovelDialog(false); + const [migrateNovelDialog, setMigrateNovelDialog] = useState(false); + const showMigrateNovelDialog = () => setMigrateNovelDialog(true); + const hideMigrateNovelDialog = () => setMigrateNovelDialog(false); - const inLibrary = (sourceId, novelUrl) => { - return library.some( - (obj) => obj.novelUrl === novelUrl && obj.sourceId === sourceId - ); - }; - - const renderItem = ({ item }) => ( - - showModal(item.sourceId, item.novelUrl, item.novelName) - } - onLongPress={() => - navigation.navigate("Novel", { - ...item, - sourceId: item.sourceId, - }) - } - inLibrary={inLibrary(item.sourceId, item.novelUrl)} - /> + const inLibrary = (sourceId, novelUrl) => { + return library.some( + obj => obj.novelUrl === novelUrl && obj.sourceId === sourceId, ); + }; - const showModal = (sourceId, novelUrl, novelName) => { - if (inLibrary(sourceId, novelUrl)) { - showToast("Novel already in library"); - } else { - setSelectedNovel({ sourceId, novelUrl, novelName }); - showMigrateNovelDialog(); + const renderItem = ({item}) => ( + showModal(item.sourceId, item.novelUrl, item.novelName)} + onLongPress={() => + navigation.navigate('Novel', { + ...item, + sourceId: item.sourceId, + }) + } + inLibrary={inLibrary(item.sourceId, item.novelUrl)} + /> + ); + + const showModal = (sourceId, novelUrl, novelName) => { + if (inLibrary(sourceId, novelUrl)) { + showToast('Novel already in library'); + } else { + setSelectedNovel({sourceId, novelUrl, novelName}); + showMigrateNovelDialog(); + } + }; + + return ( + <> + item.novelUrl} + renderItem={renderItem} + ListEmptyComponent={ + + No results found + } - }; - - return ( - <> - item.novelUrl} - renderItem={renderItem} - ListEmptyComponent={ - - No results found - - } - /> - - - - {`Migrate ${selectedNovel.novelName}?`} - - - - - - - - - ); + /> + + + + {`Migrate ${selectedNovel.novelName}?`} + + + + + + + + + ); }; export default MigrationNovelList; const styles = StyleSheet.create({ - flatListCont: { - flexGrow: 1, - paddingVertical: 8, - paddingHorizontal: 4, - }, + flatListCont: { + flexGrow: 1, + paddingVertical: 8, + paddingHorizontal: 4, + }, }); diff --git a/src/screens/Browse/migration/MigrationNovels.js b/src/screens/Browse/migration/MigrationNovels.js index f30d5a8e..b145b1a5 100644 --- a/src/screens/Browse/migration/MigrationNovels.js +++ b/src/screens/Browse/migration/MigrationNovels.js @@ -1,158 +1,147 @@ -import React, { useEffect, useState } from "react"; +import React, {useEffect, useState} from 'react'; import { - StyleSheet, - View, - Text, - FlatList, - ActivityIndicator, -} from "react-native"; -import { ProgressBar } from "react-native-paper"; -import { useLibrary, useSettings, useTheme } from "../../../hooks/reduxHooks"; -import { useSelector } from "react-redux"; + StyleSheet, + View, + Text, + FlatList, + ActivityIndicator, +} from 'react-native'; +import {ProgressBar} from 'react-native-paper'; +import {useLibrary, useSettings, useTheme} from '../../../hooks/reduxHooks'; +import {useSelector} from 'react-redux'; -import EmptyView from "../../../components/EmptyView"; -import MigrationNovelList from "./MigrationNovelList"; -import { Appbar } from "../../../components/Appbar"; +import EmptyView from '../../../components/EmptyView'; +import MigrationNovelList from './MigrationNovelList'; +import {Appbar} from '../../../components/Appbar'; -import { showToast } from "../../../hooks/showToast"; -import { migrateNovel } from "../../../database/queries/NovelQueries"; -import { ScreenContainer } from "../../../components/Common"; -import { getSource } from "../../../sources/sources"; +import {showToast} from '../../../hooks/showToast'; +import {migrateNovel} from '../../../database/queries/NovelQueries'; +import {ScreenContainer} from '../../../components/Common'; +import {getSource} from '../../../sources/sources'; -const MigrationNovels = ({ navigation, route }) => { - const { sourceId, novelName } = route.params; - const theme = useTheme(); +const MigrationNovels = ({navigation, route}) => { + const {sourceId, novelName} = route.params; + const theme = useTheme(); - const [progress, setProgress] = useState(0); - const [loading, setLoading] = useState(false); - const [searchResults, setSearchResults] = useState(""); - const { searchAllSources = false } = useSettings(); - let { - sources, - pinned, - filters = [], - } = useSelector((state) => state.sourceReducer); - sources = sources.filter((source) => filters.indexOf(source.lang) === -1); + const [progress, setProgress] = useState(0); + const [loading, setLoading] = useState(false); + const [searchResults, setSearchResults] = useState(''); + const {searchAllSources = false} = useSettings(); + let { + sources, + pinned, + filters = [], + } = useSelector(state => state.sourceReducer); + sources = sources.filter(source => filters.indexOf(source.lang) === -1); - const library = useLibrary(); + const library = useLibrary(); - const pinnedSources = sources.filter( - (source) => - pinned.indexOf(source.sourceId) !== -1 && - source.sourceId !== sourceId - ); + const pinnedSources = sources.filter( + source => + pinned.indexOf(source.sourceId) !== -1 && source.sourceId !== sourceId, + ); - const getSearchResults = async () => { - let migrationSources = searchAllSources ? sources : pinnedSources; - for (let i = 0; i < migrationSources.length; i++) { - try { - setLoading(true); + const getSearchResults = async () => { + let migrationSources = searchAllSources ? sources : pinnedSources; + for (let i = 0; i < migrationSources.length; i++) { + try { + setLoading(true); - const source = getSource(migrationSources[i].sourceId); - const data = await source.searchNovels(novelName); + const source = getSource(migrationSources[i].sourceId); + const data = await source.searchNovels(novelName); - setSearchResults((searchResults) => [ - ...searchResults, - { - sourceId: migrationSources[i].sourceId, - sourceName: migrationSources[i].sourceName, - sourceLanguage: migrationSources[i].lang, - novels: data, - }, - ]); - setLoading(false); - } catch (error) { - showToast(error.message); + setSearchResults(searchResults => [ + ...searchResults, + { + sourceId: migrationSources[i].sourceId, + sourceName: migrationSources[i].sourceName, + sourceLanguage: migrationSources[i].lang, + novels: data, + }, + ]); + setLoading(false); + } catch (error) { + showToast(error.message); - setSearchResults((searchResults) => [ - ...searchResults, - { - sourceId: migrationSources[i].sourceId, - sourceName: migrationSources[i].sourceName, - sourceLanguage: migrationSources[i].lang, - novels: [], - }, - ]); - setLoading(false); - } - setProgress((progress) => progress + 1 / migrationSources.length); - } - }; + setSearchResults(searchResults => [ + ...searchResults, + { + sourceId: migrationSources[i].sourceId, + sourceName: migrationSources[i].sourceName, + sourceLanguage: migrationSources[i].lang, + novels: [], + }, + ]); + setLoading(false); + } + setProgress(progress => progress + 1 / migrationSources.length); + } + }; - useEffect(() => { - getSearchResults(); - }, []); + useEffect(() => { + getSearchResults(); + }, []); - const renderItem = ({ item }) => ( - <> - - - {item.sourceName} - - - {item.sourceLanguage} - - - - - ); + const renderItem = ({item}) => ( + <> + + {item.sourceName} + + {item.sourceLanguage} + + + + + ); - return ( - - navigation.goBack()} - /> - {progress > 0 && ( - + return ( + + navigation.goBack()} /> + {progress > 0 && ( + + )} + item.sourceId.toString()} + renderItem={renderItem} + extraData={pinned} + ListEmptyComponent={ + <> + {!loading && ( + )} - item.sourceId.toString()} - renderItem={renderItem} - extraData={pinned} - ListEmptyComponent={ - <> - {!loading && ( - - )} - - } - ListFooterComponent={ - loading && ( - - - - ) - } - /> - - ); + + } + ListFooterComponent={ + loading && ( + + + + ) + } + /> + + ); }; export default MigrationNovels; diff --git a/src/screens/Browse/migration/MigrationSourceCard.js b/src/screens/Browse/migration/MigrationSourceCard.js index d9c72519..4e8c4dfe 100644 --- a/src/screens/Browse/migration/MigrationSourceCard.js +++ b/src/screens/Browse/migration/MigrationSourceCard.js @@ -1,66 +1,66 @@ -import React from "react"; -import { View, Text, Image, StyleSheet } from "react-native"; -import { TouchableRipple } from "react-native-paper"; +import React from 'react'; +import {View, Text, Image, StyleSheet} from 'react-native'; +import {TouchableRipple} from 'react-native-paper'; -const MigrationSourceCard = ({ item, theme, noOfNovels, onPress }) => { - const { sourceName, icon, sourceLanguage } = item; +const MigrationSourceCard = ({item, theme, noOfNovels, onPress}) => { + const {sourceName, icon, sourceLanguage} = item; - return ( - - <> - - - - {sourceName} {` (${noOfNovels || 0})`} - - - {sourceLanguage} - - - - - ); + return ( + + <> + + + + {sourceName} {` (${noOfNovels || 0})`} + + + {sourceLanguage} + + + + + ); }; export default MigrationSourceCard; const styles = StyleSheet.create({ - cardContainer: { - flexDirection: "row", - alignItems: "center", - marginVertical: 4, - paddingVertical: 8, - paddingHorizontal: 20, - }, - sourceIcon: { - width: 40, - height: 40, - borderRadius: 4, - }, - sourceDetailsContainer: { - flex: 1, - flexDirection: "row", - justifyContent: "space-between", - alignItems: "center", - marginLeft: 16, - }, - sourceStatus: { - color: "#C14033", - fontSize: 12, - marginLeft: 5, - }, + cardContainer: { + flexDirection: 'row', + alignItems: 'center', + marginVertical: 4, + paddingVertical: 8, + paddingHorizontal: 20, + }, + sourceIcon: { + width: 40, + height: 40, + borderRadius: 4, + }, + sourceDetailsContainer: { + flex: 1, + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + marginLeft: 16, + }, + sourceStatus: { + color: '#C14033', + fontSize: 12, + marginLeft: 5, + }, }); diff --git a/src/screens/Chapter/Chapter.js b/src/screens/Chapter/Chapter.js index 56c858a6..625addce 100644 --- a/src/screens/Chapter/Chapter.js +++ b/src/screens/Chapter/Chapter.js @@ -1,555 +1,529 @@ -import React, { useState, useEffect, useRef, useCallback } from "react"; +import React, {useState, useEffect, useRef, useCallback} from 'react'; import { - StyleSheet, - View, - Text, - StatusBar, - ScrollView, - TouchableWithoutFeedback, - Dimensions, - Pressable, -} from "react-native"; + StyleSheet, + View, + Text, + StatusBar, + ScrollView, + TouchableWithoutFeedback, + Dimensions, + Pressable, +} from 'react-native'; -import { useDispatch } from "react-redux"; -import { IconButton, Portal } from "react-native-paper"; -import Tts from "react-native-tts"; +import {useDispatch} from 'react-redux'; +import {IconButton, Portal} from 'react-native-paper'; +import Tts from 'react-native-tts'; import changeNavigationBarColor, { - hideNavigationBar, - showNavigationBar, -} from "react-native-navigation-bar-color"; -import WebView from "react-native-webview"; + hideNavigationBar, + showNavigationBar, +} from 'react-native-navigation-bar-color'; +import WebView from 'react-native-webview'; import { - getChapterFromDB, - getNextChapterFromDB, - getPrevChapterFromDB, -} from "../../database/queries/ChapterQueries"; -import { fetchChapter } from "../../services/Source/source"; -import { showToast } from "../../hooks/showToast"; + getChapterFromDB, + getNextChapterFromDB, + getPrevChapterFromDB, +} from '../../database/queries/ChapterQueries'; +import {fetchChapter} from '../../services/Source/source'; +import {showToast} from '../../hooks/showToast'; import { - usePosition, - useReaderSettings, - useSettings, - useTheme, - useTrackingStatus, -} from "../../hooks/reduxHooks"; -import { updateChaptersRead } from "../../redux/tracker/tracker.actions"; + usePosition, + useReaderSettings, + useSettings, + useTheme, + useTrackingStatus, +} from '../../hooks/reduxHooks'; +import {updateChaptersRead} from '../../redux/tracker/tracker.actions'; import { - readerBackground, - readerLineHeight, - readerTextColor, -} from "./readerStyleController"; -import { markChapterReadAction } from "../../redux/novel/novel.actions"; -import { saveScrollPosition } from "../../redux/preferences/preference.actions"; -import { parseChapterNumber } from "../../services/updates"; + readerBackground, + readerLineHeight, + readerTextColor, +} from './readerStyleController'; +import {markChapterReadAction} from '../../redux/novel/novel.actions'; +import {saveScrollPosition} from '../../redux/preferences/preference.actions'; +import {parseChapterNumber} from '../../services/updates'; -import ChapterAppbar from "./components/ChapterAppbar"; -import ReaderSheet from "./components/ReaderSheet"; -import EmptyView from "../../components/EmptyView"; +import ChapterAppbar from './components/ChapterAppbar'; +import ReaderSheet from './components/ReaderSheet'; +import EmptyView from '../../components/EmptyView'; -import ChapterFooter from "./components/ChapterFooter"; -import VerticalScrollbar from "./components/VerticalScrollbar"; -import GestureRecognizer from "react-native-swipe-gestures"; -import { LoadingScreen } from "../../components/LoadingScreen/LoadingScreen"; -import { insertHistory } from "../../database/queries/HistoryQueries"; -import { SET_LAST_READ } from "../../redux/preferences/preference.types"; -import { htmlToText } from "../../sources/helpers/htmlToText"; -import { setAppSettings } from "../../redux/settings/settings.actions"; -import { cleanHtml } from "../../sources/helpers/cleanHtml"; -import { useBatteryLevel } from "react-native-device-info"; -import moment from "moment"; -import { useSafeAreaInsets } from "react-native-safe-area-context"; +import ChapterFooter from './components/ChapterFooter'; +import VerticalScrollbar from './components/VerticalScrollbar'; +import GestureRecognizer from 'react-native-swipe-gestures'; +import {LoadingScreen} from '../../components/LoadingScreen/LoadingScreen'; +import {insertHistory} from '../../database/queries/HistoryQueries'; +import {SET_LAST_READ} from '../../redux/preferences/preference.types'; +import {htmlToText} from '../../sources/helpers/htmlToText'; +import {setAppSettings} from '../../redux/settings/settings.actions'; +import {cleanHtml} from '../../sources/helpers/cleanHtml'; +import {useBatteryLevel} from 'react-native-device-info'; +import moment from 'moment'; +import {useSafeAreaInsets} from 'react-native-safe-area-context'; -const Chapter = ({ route, navigation }) => { - const { - sourceId, - chapterId, - chapterUrl, - novelId, - novelUrl, - novelName, - chapterName, - bookmark, - } = route.params; +const Chapter = ({route, navigation}) => { + const { + sourceId, + chapterId, + chapterUrl, + novelId, + novelUrl, + novelName, + chapterName, + bookmark, + } = route.params; - let scrollViewRef = useRef(null); - let readerSheetRef = useRef(null); + let scrollViewRef = useRef(null); + let readerSheetRef = useRef(null); - const theme = useTheme(); - const dispatch = useDispatch(); - const reader = useReaderSettings(); - const insets = useSafeAreaInsets(); + const theme = useTheme(); + const dispatch = useDispatch(); + const reader = useReaderSettings(); + const insets = useSafeAreaInsets(); - const { - showScrollPercentage = true, - fullScreenMode = true, - swipeGestures = true, - incognitoMode = false, - textSelectable = false, - useWebViewForChapter = false, - showBatteryAndTime = false, - autoScroll = false, - autoScrollInterval = 10, - } = useSettings(); + const { + showScrollPercentage = true, + fullScreenMode = true, + swipeGestures = true, + incognitoMode = false, + textSelectable = false, + useWebViewForChapter = false, + showBatteryAndTime = false, + autoScroll = false, + autoScrollInterval = 10, + } = useSettings(); - const batteryLevel = useBatteryLevel(); + const batteryLevel = useBatteryLevel(); - const [hidden, setHidden] = useState(true); + const [hidden, setHidden] = useState(true); - const { tracker, trackedNovels } = useTrackingStatus(); - const position = usePosition(novelId, chapterId); + const {tracker, trackedNovels} = useTrackingStatus(); + const position = usePosition(novelId, chapterId); - const isTracked = trackedNovels.find((obj) => obj.novelId === novelId); + const isTracked = trackedNovels.find(obj => obj.novelId === novelId); - const [chapter, setChapter] = useState({}); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(); + const [chapter, setChapter] = useState({}); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(); - const [scrollPercentage, setScrollPercentage] = useState(0); - const [firstLayout, setFirstLayout] = useState(true); + const [scrollPercentage, setScrollPercentage] = useState(0); + const [firstLayout, setFirstLayout] = useState(true); - const [contentSize, setContentSize] = useState(0); + const [contentSize, setContentSize] = useState(0); - const [textToSpeech, setTextToSpeech] = useState(); - const [textToSpeechPosition, setTextToSpeechPosition] = useState({ - end: 0, + const [textToSpeech, setTextToSpeech] = useState(); + const [textToSpeechPosition, setTextToSpeechPosition] = useState({ + end: 0, + }); + + useEffect(() => { + Tts.addEventListener('tts-start', () => setTextToSpeech('start')); + Tts.addEventListener('tts-progress', event => { + setTextToSpeech('progress'); + setTextToSpeechPosition(event); }); + Tts.addEventListener('tts-finish', () => setTextToSpeech('finish')); + Tts.addEventListener('tts-cancel', () => setTextToSpeech('paused')); - useEffect(() => { - Tts.addEventListener("tts-start", () => setTextToSpeech("start")); - Tts.addEventListener("tts-progress", (event) => { - setTextToSpeech("progress"); - setTextToSpeechPosition(event); + return () => Tts.stop(); + }, []); + + const tts = () => { + if (!loading) { + if (textToSpeech === 'progress') { + setTextToSpeechPosition({end: 0}); + setTextToSpeech('finish'); + Tts.stop(); + return; + } + + const text = htmlToText(chapter.chapterText); + + if (text.length >= 3999) { + const splitNChars = (txt, num) => { + let result = []; + for (let i = 0; i < txt.length; i += num) { + result.push(txt.substr(i, num)); + } + return result; + }; + + let splitMe = splitNChars(text, 3999); + + splitMe.forEach((value, key) => { + Tts.speak(value, { + androidParams: { + KEY_PARAM_STREAM: 'STREAM_MUSIC', + }, + }); }); - Tts.addEventListener("tts-finish", () => setTextToSpeech("finish")); - Tts.addEventListener("tts-cancel", () => setTextToSpeech("paused")); + } else { + Tts.stop(); + Tts.speak(text, { + androidParams: { + KEY_PARAM_STREAM: 'STREAM_MUSIC', + }, + }); + } + } + }; - return () => Tts.stop(); - }, []); + const pauseTts = () => { + if (!loading) { + if (textToSpeech === 'progress') { + setTextToSpeech('paused'); + Tts.stop(); + return; + } else { + let text = htmlToText(chapter.chapterText); + text = text.slice(textToSpeechPosition.end); - const tts = () => { - if (!loading) { - if (textToSpeech === "progress") { - setTextToSpeechPosition({ end: 0 }); - setTextToSpeech("finish"); - Tts.stop(); - return; + if (text.length >= 3999) { + const splitNChars = (txt, num) => { + let result = []; + for (let i = 0; i < txt.length; i += num) { + result.push(txt.substr(i, num)); } + return result; + }; - const text = htmlToText(chapter.chapterText); + let splitMe = splitNChars(text, 3999); - if (text.length >= 3999) { - const splitNChars = (txt, num) => { - let result = []; - for (let i = 0; i < txt.length; i += num) { - result.push(txt.substr(i, num)); - } - return result; - }; - - let splitMe = splitNChars(text, 3999); - - splitMe.forEach((value, key) => { - Tts.speak(value, { - androidParams: { - KEY_PARAM_STREAM: "STREAM_MUSIC", - }, - }); - }); - } else { - Tts.stop(); - Tts.speak(text, { - androidParams: { - KEY_PARAM_STREAM: "STREAM_MUSIC", - }, - }); - } - } - }; - - const pauseTts = () => { - if (!loading) { - if (textToSpeech === "progress") { - setTextToSpeech("paused"); - Tts.stop(); - return; - } else { - let text = htmlToText(chapter.chapterText); - text = text.slice(textToSpeechPosition.end); - - if (text.length >= 3999) { - const splitNChars = (txt, num) => { - let result = []; - for (let i = 0; i < txt.length; i += num) { - result.push(txt.substr(i, num)); - } - return result; - }; - - let splitMe = splitNChars(text, 3999); - - splitMe.forEach((value, key) => { - Tts.speak(value, { - androidParams: { - KEY_PARAM_STREAM: "STREAM_MUSIC", - }, - }); - }); - } else { - Tts.stop(); - Tts.speak(text, { - androidParams: { - KEY_PARAM_STREAM: "STREAM_MUSIC", - }, - }); - } - } - } - }; - - const getChapter = async (chapterId) => { - try { - if (chapterId) { - const chapterDownloaded = await getChapterFromDB(chapterId); - - if (chapterDownloaded) { - setChapter(chapterDownloaded); - } else { - const res = await fetchChapter( - sourceId, - novelUrl, - chapterUrl - ); - setChapter(res); - } - } else { - const res = await fetchChapter(sourceId, novelUrl, chapterUrl); - - setChapter(res); - } - - setLoading(false); - } catch (error) { - setError(error.message); - setLoading(false); - showToast(error.message); - } - }; - - const [nextChapter, setNextChapter] = useState({}); - const [prevChapter, setPrevChapter] = useState({}); - - const setPrevAndNextChap = async () => { - const nextChap = await getNextChapterFromDB(novelId, chapterId); - const prevChap = await getPrevChapterFromDB(novelId, chapterId); - - setNextChapter(nextChap); - setPrevChapter(prevChap); - }; - - useEffect(() => { - setImmersiveMode(); - getChapter(chapterId); - - if (!incognitoMode) { - insertHistory(novelId, chapterId); - dispatch({ - type: SET_LAST_READ, - payload: { novelId, chapterId }, + splitMe.forEach((value, key) => { + Tts.speak(value, { + androidParams: { + KEY_PARAM_STREAM: 'STREAM_MUSIC', + }, }); + }); + } else { + Tts.stop(); + Tts.speak(text, { + androidParams: { + KEY_PARAM_STREAM: 'STREAM_MUSIC', + }, + }); } - }, []); + } + } + }; - useEffect(() => { - navigation.addListener("beforeRemove", (e) => { - StatusBar.setHidden(false); - showNavigationBar(); + const getChapter = async chapterId => { + try { + if (chapterId) { + const chapterDownloaded = await getChapterFromDB(chapterId); + + if (chapterDownloaded) { + setChapter(chapterDownloaded); + } else { + const res = await fetchChapter(sourceId, novelUrl, chapterUrl); + setChapter(res); + } + } else { + const res = await fetchChapter(sourceId, novelUrl, chapterUrl); + + setChapter(res); + } + + setLoading(false); + } catch (error) { + setError(error.message); + setLoading(false); + showToast(error.message); + } + }; + + const [nextChapter, setNextChapter] = useState({}); + const [prevChapter, setPrevChapter] = useState({}); + + const setPrevAndNextChap = async () => { + const nextChap = await getNextChapterFromDB(novelId, chapterId); + const prevChap = await getPrevChapterFromDB(novelId, chapterId); + + setNextChapter(nextChap); + setPrevChapter(prevChap); + }; + + useEffect(() => { + setImmersiveMode(); + getChapter(chapterId); + + if (!incognitoMode) { + insertHistory(novelId, chapterId); + dispatch({ + type: SET_LAST_READ, + payload: {novelId, chapterId}, + }); + } + }, []); + + useEffect(() => { + navigation.addListener('beforeRemove', e => { + StatusBar.setHidden(false); + showNavigationBar(); + }); + }, []); + + useEffect(() => { + setPrevAndNextChap(); + }, [chapter]); + + const [currentTime, setCurrentTime] = useState(); + + useEffect(() => { + setInterval(() => { + setCurrentTime(new Date().toISOString()); + }, 60000); + }, []); + + const [currentOffset, setCurrentOffset] = useState(position?.position || 0); + + let scrollTimeout; + + useEffect(() => { + if (!useWebViewForChapter && scrollPercentage !== 100 && autoScroll) { + scrollTimeout = setTimeout(() => { + scrollViewRef.current.scrollTo({ + x: 0, + y: currentOffset + Dimensions.get('window').height, + animated: true, }); - }, []); + setCurrentOffset( + prevState => prevState + Dimensions.get('window').height, + ); + }, autoScrollInterval * 1000); + } - useEffect(() => { - setPrevAndNextChap(); - }, [chapter]); + return () => clearTimeout(scrollTimeout); + }, [autoScroll, currentOffset]); - const [currentTime, setCurrentTime] = useState(); + const isCloseToBottom = useCallback( + ({layoutMeasurement, contentOffset, contentSize}) => { + const paddingToBottom = 40; + return ( + layoutMeasurement.height + contentOffset.y >= + contentSize.height - paddingToBottom + ); + }, + [], + ); - useEffect(() => { - setInterval(() => { - setCurrentTime(new Date().toISOString()); - }, 60000); - }, []); + const updateTracker = () => { + const chapterNumber = parseChapterNumber(chapterName); - const [currentOffset, setCurrentOffset] = useState(position?.position || 0); + isTracked && + chapterNumber && + Number.isInteger(chapterNumber) && + chapterNumber > isTracked.my_list_status.num_chapters_read && + dispatch( + updateChaptersRead(isTracked.id, tracker.access_token, chapterNumber), + ); + }; - let scrollTimeout; + const onScroll = useCallback(({nativeEvent}) => { + const offsetY = nativeEvent.contentOffset.y; + const position = + nativeEvent.contentOffset.y + nativeEvent.layoutMeasurement.height; - useEffect(() => { - if (!useWebViewForChapter && scrollPercentage !== 100 && autoScroll) { - scrollTimeout = setTimeout(() => { - scrollViewRef.current.scrollTo({ - x: 0, - y: currentOffset + Dimensions.get("window").height, - animated: true, - }); - setCurrentOffset( - (prevState) => prevState + Dimensions.get("window").height - ); - }, autoScrollInterval * 1000); - } - - return () => clearTimeout(scrollTimeout); - }, [autoScroll, currentOffset]); - - const isCloseToBottom = useCallback( - ({ layoutMeasurement, contentOffset, contentSize }) => { - const paddingToBottom = 40; - return ( - layoutMeasurement.height + contentOffset.y >= - contentSize.height - paddingToBottom - ); - }, - [] + const percentage = Math.round( + (position / nativeEvent.contentSize.height) * 100, ); + setScrollPercentage(percentage); - const updateTracker = () => { - const chapterNumber = parseChapterNumber(chapterName); + if (!incognitoMode) { + dispatch(saveScrollPosition(offsetY, percentage, chapterId, novelId)); + } - isTracked && - chapterNumber && - Number.isInteger(chapterNumber) && - chapterNumber > isTracked.my_list_status.num_chapters_read && - dispatch( - updateChaptersRead( - isTracked.id, - tracker.access_token, - chapterNumber - ) - ); - }; + if (!incognitoMode && isCloseToBottom(nativeEvent)) { + dispatch(markChapterReadAction(chapterId, novelId)); + updateTracker(); + } + }, []); - const onScroll = useCallback(({ nativeEvent }) => { - const offsetY = nativeEvent.contentOffset.y; - const position = - nativeEvent.contentOffset.y + nativeEvent.layoutMeasurement.height; + const setImmersiveMode = () => { + if (fullScreenMode) { + StatusBar.setHidden(true); + hideNavigationBar(); + } else { + StatusBar.setBackgroundColor(readerBackground(reader.theme)); + changeNavigationBarColor(readerBackground(reader.theme)); + } + }; - const percentage = Math.round( - (position / nativeEvent.contentSize.height) * 100 - ); - setScrollPercentage(percentage); + const scrollToSavedProgress = useCallback(event => { + if (position && firstLayout) { + position.percentage < 100 && + scrollViewRef.current.scrollTo({ + x: 0, + y: position.position, + animated: false, + }); + setFirstLayout(false); + } + }, []); - if (!incognitoMode) { - dispatch( - saveScrollPosition(offsetY, percentage, chapterId, novelId) - ); - } + const hideHeader = () => { + if (!hidden) { + setImmersiveMode(); + } else { + if (fullScreenMode) { + StatusBar.setHidden(false); + showNavigationBar(); + } + } + setHidden(!hidden); + }; - if (!incognitoMode && isCloseToBottom(nativeEvent)) { - dispatch(markChapterReadAction(chapterId, novelId)); - updateTracker(); - } - }, []); + const readerStyles = [ + { + fontSize: reader.textSize, + color: reader.textColor || readerTextColor(reader.theme), + lineHeight: readerLineHeight(reader.textSize, reader.lineHeight), + textAlign: reader.textAlign, + }, + reader.fontFamily && { + fontFamily: reader.fontFamily, + }, + ]; - const setImmersiveMode = () => { - if (fullScreenMode) { - StatusBar.setHidden(true); - hideNavigationBar(); - } else { - StatusBar.setBackgroundColor(readerBackground(reader.theme)); - changeNavigationBarColor(readerBackground(reader.theme)); - } - }; + const config = { + velocityThreshold: 0.3, + directionalOffsetThreshold: 80, + }; - const scrollToSavedProgress = useCallback((event) => { - if (position && firstLayout) { - position.percentage < 100 && - scrollViewRef.current.scrollTo({ - x: 0, - y: position.position, - animated: false, - }); - setFirstLayout(false); - } - }, []); + const navigateToPrevChapter = () => + prevChapter + ? navigation.replace('Chapter', { + chapterUrl: prevChapter.chapterUrl, + chapterId: prevChapter.chapterId, + sourceId, + novelUrl, + novelId, + chapterName: prevChapter.chapterName, + novelName, + bookmark: prevChapter.bookmark, + }) + : showToast("There's no previous chapter"); - const hideHeader = () => { - if (!hidden) { - setImmersiveMode(); - } else { - if (fullScreenMode) { - StatusBar.setHidden(false); - showNavigationBar(); - } - } - setHidden(!hidden); - }; + const navigateToNextChapter = () => + nextChapter + ? navigation.replace('Chapter', { + chapterUrl: nextChapter.chapterUrl, + sourceId, + novelUrl, + novelId, + chapterId: nextChapter.chapterId, + chapterName: nextChapter.chapterName, + novelName, + bookmark: nextChapter.bookmark, + }) + : showToast("There's no next chapter"); - const readerStyles = [ - { - fontSize: reader.textSize, - color: reader.textColor || readerTextColor(reader.theme), - lineHeight: readerLineHeight(reader.textSize, reader.lineHeight), - textAlign: reader.textAlign, - }, - reader.fontFamily && { - fontFamily: reader.fontFamily, - }, - ]; + const enableSwipeGestures = () => { + dispatch(setAppSettings('swipeGestures', !swipeGestures)); + showToast( + swipeGestures ? 'Swipe gestures disabled' : 'Swipe gestured enabled', + ); + }; - const config = { - velocityThreshold: 0.3, - directionalOffsetThreshold: 80, - }; + const enableAutoScroll = () => + dispatch(setAppSettings('autoScroll', !autoScroll)); - const navigateToPrevChapter = () => - prevChapter - ? navigation.replace("Chapter", { - chapterUrl: prevChapter.chapterUrl, - chapterId: prevChapter.chapterId, - sourceId, - novelUrl, - novelId, - chapterName: prevChapter.chapterName, - novelName, - bookmark: prevChapter.bookmark, - }) - : showToast("There's no previous chapter"); + const enableWebView = () => + dispatch(setAppSettings('useWebViewForChapter', !useWebViewForChapter)); - const navigateToNextChapter = () => - nextChapter - ? navigation.replace("Chapter", { - chapterUrl: nextChapter.chapterUrl, - sourceId, - novelUrl, - novelId, - chapterId: nextChapter.chapterId, - chapterName: nextChapter.chapterName, - novelName, - bookmark: nextChapter.bookmark, - }) - : showToast("There's no next chapter"); - - const enableSwipeGestures = () => { - dispatch(setAppSettings("swipeGestures", !swipeGestures)); - showToast( - swipeGestures ? "Swipe gestures disabled" : "Swipe gestured enabled" - ); - }; - - const enableAutoScroll = () => - dispatch(setAppSettings("autoScroll", !autoScroll)); - - const enableWebView = () => - dispatch(setAppSettings("useWebViewForChapter", !useWebViewForChapter)); - - return ( - <> - <> - - + <> + + + (scrollViewRef.current = ref)} + contentContainerStyle={[ + styles.screenContainer, + {backgroundColor: readerBackground(reader.theme)}, + ]} + onScroll={onScroll} + onContentSizeChange={(x, y) => setContentSize(y)} + showsVerticalScrollIndicator={false} + > + {error ? ( + + - (scrollViewRef.current = ref)} - contentContainerStyle={[ - styles.screenContainer, - { backgroundColor: readerBackground(reader.theme) }, - ]} - onScroll={onScroll} - onContentSizeChange={(x, y) => setContentSize(y)} - showsVerticalScrollIndicator={false} - > - {error ? ( - - - { - getChapter(chapterId); - setLoading(true); - setError(); - }} - /> - - Retry - - - - ) : loading ? ( - - ) : ( - - {useWebViewForChapter ? ( - { - if ( - (sourceId === 50 || - sourceId == 62) && - url !== "about:blank" - ) { - setLoading(true); - const res = await fetchChapter( - sourceId, - novelUrl, - url - ); - setChapter(res); - setLoading(false); - } - }} - source={{ - html: ` + { + getChapter(chapterId); + setLoading(true); + setError(); + }} + /> + + Retry + + + + ) : loading ? ( + + ) : ( + + {useWebViewForChapter ? ( + { + if ( + (sourceId === 50 || sourceId == 62) && + url !== 'about:blank' + ) { + setLoading(true); + const res = await fetchChapter(sourceId, novelUrl, url); + setChapter(res); + setLoading(false); + } + }} + source={{ + html: ` @@ -589,7 +563,7 @@ const Chapter = ({ route, navigation }) => { @font-face { font-family: ${reader.fontFamily}; src: url("file:///android_asset/fonts/${ - reader.fontFamily + reader.fontFamily }.ttf"); } @@ -600,193 +574,184 @@ const Chapter = ({ route, navigation }) => { `, - }} - onScroll={onScroll} - /> - ) : ( - - - {htmlToText(chapter.chapterText)} - + }} + onScroll={onScroll} + /> + ) : ( + + + {htmlToText(chapter.chapterText)} + - - - Finished: {chapterName} - - {nextChapter ? ( - - - - Next:{" "} - { - nextChapter.chapterName - } - - - - ) : ( - - There's no next chapter - - )} - - - )} - - )} - - - - - - - {!useWebViewForChapter && ( - - )} - - {(showScrollPercentage || showBatteryAndTime) && ( - {showBatteryAndTime && ( - - {Math.ceil(batteryLevel * 100) + "%"} - - )} - {showScrollPercentage && ( + + Finished: {chapterName} + + {nextChapter ? ( + + - {scrollPercentage + "%"} + Next: {nextChapter.chapterName} - )} - {showBatteryAndTime && ( - - {moment(currentTime).format("h:mm")} - - )} + + + ) : ( + + There's no next chapter + + )} + )} - - - ); + + )} + + + + + + + {!useWebViewForChapter && ( + + )} + + {(showScrollPercentage || showBatteryAndTime) && ( + + {showBatteryAndTime && ( + + {Math.ceil(batteryLevel * 100) + '%'} + + )} + {showScrollPercentage && ( + + {scrollPercentage + '%'} + + )} + {showBatteryAndTime && ( + + {moment(currentTime).format('h:mm')} + + )} + + )} + + + ); }; export default Chapter; const styles = StyleSheet.create({ - screenContainer: { flexGrow: 1 }, - scrollPercentageContainer: { - width: "100%", - position: "absolute", - paddingVertical: 4, - left: 0, - right: 0, - bottom: 0, - zIndex: 1, - flexDirection: "row", - paddingHorizontal: 32, - alignItems: "center", - justifyContent: "space-between", - }, + screenContainer: {flexGrow: 1}, + scrollPercentageContainer: { + width: '100%', + position: 'absolute', + paddingVertical: 4, + left: 0, + right: 0, + bottom: 0, + zIndex: 1, + flexDirection: 'row', + paddingHorizontal: 32, + alignItems: 'center', + justifyContent: 'space-between', + }, }); diff --git a/src/screens/Chapter/ReaderSeekbar.js b/src/screens/Chapter/ReaderSeekbar.js index 7522d15c..c48ed647 100644 --- a/src/screens/Chapter/ReaderSeekbar.js +++ b/src/screens/Chapter/ReaderSeekbar.js @@ -1,129 +1,129 @@ -import React from "react"; -import { Dimensions, View, Text, StyleSheet } from "react-native"; +import React from 'react'; +import {Dimensions, View, Text, StyleSheet} from 'react-native'; -import Slider from "@react-native-community/slider"; -import { getDeviceOrientation } from "../../../services/utils/helpers"; +import Slider from '@react-native-community/slider'; +import {getDeviceOrientation} from '../../../services/utils/helpers'; const ReaderSeekbar = ({ - theme, - hide, - contentSize, - scrollPercentage, - setLoading, - scrollViewRef, + theme, + hide, + contentSize, + scrollPercentage, + setLoading, + scrollViewRef, }) => { - const onSlidingComplete = (value) => { - setLoading(true); - scrollViewRef.current.scrollTo({ - x: 0, - y: Math.round((value * contentSize) / 100), - animated: false, - }); - setLoading(false); - }; + const onSlidingComplete = value => { + setLoading(true); + scrollViewRef.current.scrollTo({ + x: 0, + y: Math.round((value * contentSize) / 100), + animated: false, + }); + setLoading(false); + }; - if (hide) { - return null; - } else if (getDeviceOrientation() === "potrait") { - return ( - - - {scrollPercentage} - - - - 100 - - - ); - } else { - return ( - - - {scrollPercentage} - - - - 100 - - - ); - } + if (hide) { + return null; + } else if (getDeviceOrientation() === 'potrait') { + return ( + + + {scrollPercentage} + + + + 100 + + + ); + } else { + return ( + + + {scrollPercentage} + + + + 100 + + + ); + } }; export default ReaderSeekbar; const styles = StyleSheet.create({ - verticalSliderContainer: { - position: "absolute", - zIndex: 2, - right: -(Dimensions.get("window").width / 2) + 40, - bottom: 300, - backgroundColor: "rgba(0,0,0,0.7)", - flexDirection: "row", - justifyContent: "flex-end", - alignItems: "center", - borderRadius: 50, - marginHorizontal: 8, - transform: [{ rotate: "90deg" }], - }, - horizontalSliderContainer: { - position: "absolute", - zIndex: 2, - bottom: 100, - backgroundColor: "rgba(0,0,0,0.7)", - flexDirection: "row", - justifyContent: "flex-end", - alignItems: "center", - borderRadius: 50, - marginHorizontal: 8, - }, + verticalSliderContainer: { + position: 'absolute', + zIndex: 2, + right: -(Dimensions.get('window').width / 2) + 40, + bottom: 300, + backgroundColor: 'rgba(0,0,0,0.7)', + flexDirection: 'row', + justifyContent: 'flex-end', + alignItems: 'center', + borderRadius: 50, + marginHorizontal: 8, + transform: [{rotate: '90deg'}], + }, + horizontalSliderContainer: { + position: 'absolute', + zIndex: 2, + bottom: 100, + backgroundColor: 'rgba(0,0,0,0.7)', + flexDirection: 'row', + justifyContent: 'flex-end', + alignItems: 'center', + borderRadius: 50, + marginHorizontal: 8, + }, }); diff --git a/src/screens/Chapter/components/ChapterAppbar.js b/src/screens/Chapter/components/ChapterAppbar.js index 2d4ef9f1..f5548c63 100644 --- a/src/screens/Chapter/components/ChapterAppbar.js +++ b/src/screens/Chapter/components/ChapterAppbar.js @@ -1,91 +1,85 @@ -import React, { useState } from "react"; -import { View } from "react-native"; +import React, {useState} from 'react'; +import {View} from 'react-native'; -import { Appbar } from "react-native-paper"; -import FadeView from "../../../components/Common/CrossFadeView"; -import { bookmarkChapterAction } from "../../../redux/novel/novel.actions"; +import {Appbar} from 'react-native-paper'; +import FadeView from '../../../components/Common/CrossFadeView'; +import {bookmarkChapterAction} from '../../../redux/novel/novel.actions'; const ChapterAppbar = ({ - navigation, - bookmark, - novelName, - chapterId, - chapterName, - hide, - dispatch, - tts, - textToSpeech, - theme, - textToSpeechPosition, - pauseTts, + navigation, + bookmark, + novelName, + chapterId, + chapterName, + hide, + dispatch, + tts, + textToSpeech, + theme, + textToSpeechPosition, + pauseTts, }) => { - const [bookmarked, setBookmarked] = useState(bookmark); + const [bookmarked, setBookmarked] = useState(bookmark); - return ( - + + + + + + + {textToSpeechPosition.end > 0 && ( + + )} + + { + dispatch(bookmarkChapterAction([{bookmark, chapterId}])); + setBookmarked(!bookmarked); }} - active={hide} - animationDuration={150} - > - - - - - - - {textToSpeechPosition.end > 0 && ( - - )} - - { - dispatch( - bookmarkChapterAction([{ bookmark, chapterId }]) - ); - setBookmarked(!bookmarked); - }} - color={theme.textColorPrimary} - /> - - - - ); + color={theme.textColorPrimary} + /> + + + + ); }; export default ChapterAppbar; diff --git a/src/screens/Chapter/components/ChapterFooter.js b/src/screens/Chapter/components/ChapterFooter.js index 937fedac..d7445471 100644 --- a/src/screens/Chapter/components/ChapterFooter.js +++ b/src/screens/Chapter/components/ChapterFooter.js @@ -1,103 +1,103 @@ -import React from "react"; -import { Pressable, StyleSheet, View } from "react-native"; -import { IconButton } from "react-native-paper"; -import { useSafeAreaInsets } from "react-native-safe-area-context"; -import FadeView from "../../../components/Common/CrossFadeView"; +import React from 'react'; +import {Pressable, StyleSheet, View} from 'react-native'; +import {IconButton} from 'react-native-paper'; +import {useSafeAreaInsets} from 'react-native-safe-area-context'; +import FadeView from '../../../components/Common/CrossFadeView'; const ChapterFooter = ({ - hide, - theme, - swipeGestures, - readerSheetRef, - scrollViewRef, - navigateToNextChapter, - navigateToPrevChapter, - nextChapter, - prevChapter, - useWebViewForChapter, - enableSwipeGestures, - autoScroll, - enableWebView, - enableAutoScroll, + hide, + theme, + swipeGestures, + readerSheetRef, + scrollViewRef, + navigateToNextChapter, + navigateToPrevChapter, + nextChapter, + prevChapter, + useWebViewForChapter, + enableSwipeGestures, + autoScroll, + enableWebView, + enableAutoScroll, }) => { - const rippleConfig = { - color: theme.rippleColor, - borderless: true, - radius: 50, - }; + const rippleConfig = { + color: theme.rippleColor, + borderless: true, + radius: 50, + }; - const insets = useSafeAreaInsets(); + const insets = useSafeAreaInsets(); - return ( - + + - + + + + + {!useWebViewForChapter && ( + <> + - - - - - - - {!useWebViewForChapter && ( - <> - - - - scrollViewRef.current.scrollTo({})} - > - - - - )} - {/* + + scrollViewRef.current.scrollTo({})} + > + + + + )} + {/* */} - readerSheetRef.current.show()} - > - - - - - - - - ); + readerSheetRef.current.show()} + > + + + + + + + + ); }; export default ChapterFooter; const styles = StyleSheet.create({ - buttonStyles: { - flex: 1, - justifyContent: "center", - alignItems: "center", - paddingVertical: 8, - paddingBottom: 4, - }, + buttonStyles: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + paddingVertical: 8, + paddingBottom: 4, + }, }); diff --git a/src/screens/Chapter/components/ReaderSheet.js b/src/screens/Chapter/components/ReaderSheet.js index 9bcedc97..1356fc9b 100644 --- a/src/screens/Chapter/components/ReaderSheet.js +++ b/src/screens/Chapter/components/ReaderSheet.js @@ -1,616 +1,510 @@ -import React, { memo, useCallback, useState } from "react"; +import React, {memo, useCallback, useState} from 'react'; import { - StyleSheet, - View, - Text, - Dimensions, - Pressable, - ScrollView, - useWindowDimensions, - Animated, -} from "react-native"; + StyleSheet, + View, + Text, + Dimensions, + Pressable, + ScrollView, + useWindowDimensions, + Animated, +} from 'react-native'; -import { TabView, SceneMap, TabBar } from "react-native-tab-view"; -import Slider from "@react-native-community/slider"; -import { IconButton, Menu, Switch } from "react-native-paper"; -import Bottomsheet from "rn-sliding-up-panel"; +import {TabView, SceneMap, TabBar} from 'react-native-tab-view'; +import Slider from '@react-native-community/slider'; +import {IconButton, Menu, Switch} from 'react-native-paper'; +import Bottomsheet from 'rn-sliding-up-panel'; -import BottomSheetHandle from "../../../components/BottomSheetHandle"; -import { Row } from "../../../components/Common"; +import BottomSheetHandle from '../../../components/BottomSheetHandle'; +import {Row} from '../../../components/Common'; -import { fonts } from "../../../services/utils/constants"; +import {fonts} from '../../../services/utils/constants'; import { - setAppSettings, - setReaderSettings, -} from "../../../redux/settings/settings.actions"; + setAppSettings, + setReaderSettings, +} from '../../../redux/settings/settings.actions'; import { - ToggleButton, - ToggleColorButton, -} from "../../../components/Common/ToggleButton"; + ToggleButton, + ToggleColorButton, +} from '../../../components/Common/ToggleButton'; -const ReaderSettingTitle = ({ title }) => ( - {title} +const ReaderSettingTitle = ({title}) => ( + {title} ); const ReaderSheet = ({ - theme, - reader, - dispatch, - navigation, - bottomSheetRef, - showBatteryAndTime, - selectText, - autoScroll, - useWebViewForChapter, - showScrollPercentage, - swipeGestures, - enableSwipeGestures, - fullScreenMode, + theme, + reader, + dispatch, + navigation, + bottomSheetRef, + showBatteryAndTime, + selectText, + autoScroll, + useWebViewForChapter, + showScrollPercentage, + swipeGestures, + enableSwipeGestures, + fullScreenMode, }) => { - const [animatedValue] = useState(new Animated.Value(0)); + const [animatedValue] = useState(new Animated.Value(0)); - const presetThemes = [ - { value: 2, backgroundColor: "#f5f5fa", textColor: "#111111" }, - { value: 3, backgroundColor: "#F7DFC6", textColor: "#593100" }, - { value: 6, backgroundColor: "#dce5e2", textColor: "#000000" }, - { value: 4, backgroundColor: "#292832", textColor: "#CCCCCC" }, - { - value: 1, - backgroundColor: "#000000", - textColor: "rgba(255,255,255,0.7)", - }, - ]; + const presetThemes = [ + {value: 2, backgroundColor: '#f5f5fa', textColor: '#111111'}, + {value: 3, backgroundColor: '#F7DFC6', textColor: '#593100'}, + {value: 6, backgroundColor: '#dce5e2', textColor: '#000000'}, + {value: 4, backgroundColor: '#292832', textColor: '#CCCCCC'}, + { + value: 1, + backgroundColor: '#000000', + textColor: 'rgba(255,255,255,0.7)', + }, + ]; - const textAlignments = [ - { value: "left", icon: "format-align-left" }, - { value: "center", icon: "format-align-center" }, - { value: "justify", icon: "format-align-justify" }, - { value: "right", icon: "format-align-right" }, - ]; + const textAlignments = [ + {value: 'left', icon: 'format-align-left'}, + {value: 'center', icon: 'format-align-center'}, + {value: 'justify', icon: 'format-align-justify'}, + {value: 'right', icon: 'format-align-right'}, + ]; - return ( - - + + + + + - - - - - Text size - - - dispatch(setReaderSettings("textSize", value)) - } - /> - + Text size + + + dispatch(setReaderSettings('textSize', value)) + } + /> + - - - - Color - - - - {presetThemes.map((item, index) => ( - { - dispatch( - setReaderSettings( - "theme", - item.value - ) - ); - dispatch( - setReaderSettings( - "textColor", - item.textColor - ) - ); - }} - /> - ))} - - - - - - Text align - - - {textAlignments.map((item) => ( - - dispatch( - setReaderSettings( - "textAlign", - item.value - ) - ) - } - /> - ))} - - - - - Padding - - - - dispatch( - setReaderSettings( - "padding", - reader.padding - 1 - ) - ) - } - style={{ marginVertical: 0 }} - /> - - {`${reader.padding}%`} - - = 10 ? true : false - } - onPress={() => - dispatch( - setReaderSettings( - "padding", - reader.padding + 1 - ) - ) - } - style={{ marginVertical: 0 }} - /> - - - - - Line height - - - - dispatch( - setReaderSettings( - "lineHeight", - reader.lineHeight - 0.1 - ) - ) - } - style={{ marginVertical: 0 }} - /> - - {`${ - Math.round(reader.lineHeight * 10) / 10 - }%`} - - = 2 ? true : false - } - onPress={() => - dispatch( - setReaderSettings( - "lineHeight", - reader.lineHeight + 0.1 - ) - ) - } - style={{ marginVertical: 0 }} - /> - - - - - Font style - - - {fonts.map((font) => ( - - - dispatch( - setReaderSettings( - "fontFamily", - font.fontFamily - ) - ) - } - android_ripple={{ - color: theme.rippleColor, - }} - > - - {font.name} - - - - ))} - - - + + + Color + + + {presetThemes.map((item, index) => ( + { + dispatch(setReaderSettings('theme', item.value)); + dispatch( + setReaderSettings('textColor', item.textColor), + ); + }} + /> + ))} + + + + + Text align + + {textAlignments.map(item => ( + + dispatch(setReaderSettings('textAlign', item.value)) + } + /> + ))} + + + + Padding + + + dispatch(setReaderSettings('padding', reader.padding - 1)) + } + style={{marginVertical: 0}} + /> + + {`${reader.padding}%`} + + = 10 ? true : false} + onPress={() => + dispatch(setReaderSettings('padding', reader.padding + 1)) + } + style={{marginVertical: 0}} + /> + + + + Line height + + + dispatch( + setReaderSettings('lineHeight', reader.lineHeight - 0.1), + ) + } + style={{marginVertical: 0}} + /> + + {`${Math.round(reader.lineHeight * 10) / 10}%`} + + = 2 ? true : false} + onPress={() => + dispatch( + setReaderSettings('lineHeight', reader.lineHeight + 0.1), + ) + } + style={{marginVertical: 0}} + /> + + + + + Font style + + + {fonts.map(font => ( + - dispatch( - setAppSettings( - "useWebViewForChapter", - !useWebViewForChapter - ) - ) - } + style={{ + borderRadius: 8, + paddingHorizontal: 10, + paddingVertical: 4, + }} + onPress={() => + dispatch( + setReaderSettings('fontFamily', font.fontFamily), + ) + } + android_ripple={{ + color: theme.rippleColor, + }} > - - Use WebView - - - dispatch( - setAppSettings( - "useWebViewForChapter", - !useWebViewForChapter - ) - ) - } - color={theme.colorAccent} - /> + + {font.name} + - - dispatch( - setAppSettings( - "fullScreenMode", - !fullScreenMode - ) - ) - } - > - - Fullscreen - - - dispatch( - setAppSettings( - "fullScreenMode", - !fullScreenMode - ) - ) - } - color={theme.colorAccent} - /> - - {!useWebViewForChapter && ( - - dispatch( - setAppSettings("autoScroll", !autoScroll) - ) - } - > - - AutoScroll - - - dispatch( - setAppSettings( - "autoScroll", - !autoScroll - ) - ) - } - color={theme.colorAccent} - /> - - )} - - dispatch( - setAppSettings( - "showBatteryAndTime", - !showBatteryAndTime - ) - ) - } - > - - Show battery and time - - - dispatch( - setAppSettings( - "showBatteryAndTime", - !showBatteryAndTime - ) - ) - } - color={theme.colorAccent} - /> - - - dispatch( - setAppSettings( - "showScrollPercentage", - !showScrollPercentage - ) - ) - } - > - - Show progress percentage - - - dispatch( - setAppSettings( - "showScrollPercentage", - !showScrollPercentage - ) - ) - } - color={theme.colorAccent} - /> - - - - Swipe gestures - - - - {!useWebViewForChapter && ( - - dispatch( - setAppSettings( - "textSelectable", - !selectText - ) - ) - } - > - - Select text - - - dispatch( - setAppSettings( - "textSelectable", - !selectText - ) - ) - } - color={theme.colorAccent} - /> - - )} - - - - ); + + ))} + + + + + dispatch( + setAppSettings('useWebViewForChapter', !useWebViewForChapter), + ) + } + > + + Use WebView + + + dispatch( + setAppSettings('useWebViewForChapter', !useWebViewForChapter), + ) + } + color={theme.colorAccent} + /> + + + dispatch(setAppSettings('fullScreenMode', !fullScreenMode)) + } + > + + Fullscreen + + + dispatch(setAppSettings('fullScreenMode', !fullScreenMode)) + } + color={theme.colorAccent} + /> + + {!useWebViewForChapter && ( + + dispatch(setAppSettings('autoScroll', !autoScroll)) + } + > + + AutoScroll + + + dispatch(setAppSettings('autoScroll', !autoScroll)) + } + color={theme.colorAccent} + /> + + )} + + dispatch( + setAppSettings('showBatteryAndTime', !showBatteryAndTime), + ) + } + > + + Show battery and time + + + dispatch( + setAppSettings('showBatteryAndTime', !showBatteryAndTime), + ) + } + color={theme.colorAccent} + /> + + + dispatch( + setAppSettings('showScrollPercentage', !showScrollPercentage), + ) + } + > + + Show progress percentage + + + dispatch( + setAppSettings('showScrollPercentage', !showScrollPercentage), + ) + } + color={theme.colorAccent} + /> + + + + Swipe gestures + + + + {!useWebViewForChapter && ( + + dispatch(setAppSettings('textSelectable', !selectText)) + } + > + Select text + + dispatch(setAppSettings('textSelectable', !selectText)) + } + color={theme.colorAccent} + /> + + )} + + + + ); }; export default memo(ReaderSheet); const styles = StyleSheet.create({ - contentContainer: { - flex: 1, - borderTopLeftRadius: 8, - borderTopRightRadius: 8, - backgroundColor: "rgba(0,0,0,0.7)", - }, - readerSettingsContainer: { - flex: 1, - alignItems: "center", - paddingTop: 30, - }, - title: { - color: "#FFFFFF", - fontWeight: "bold", - }, - switchStyle: { - flexDirection: "row", - alignItems: "center", - justifyContent: "space-between", - width: "100%", - paddingHorizontal: 16, - paddingVertical: 12, - }, + contentContainer: { + flex: 1, + borderTopLeftRadius: 8, + borderTopRightRadius: 8, + backgroundColor: 'rgba(0,0,0,0.7)', + }, + readerSettingsContainer: { + flex: 1, + alignItems: 'center', + paddingTop: 30, + }, + title: { + color: '#FFFFFF', + fontWeight: 'bold', + }, + switchStyle: { + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'space-between', + width: '100%', + paddingHorizontal: 16, + paddingVertical: 12, + }, }); diff --git a/src/screens/Chapter/components/VerticalScrollbar.js b/src/screens/Chapter/components/VerticalScrollbar.js index a34fe3e9..81b39e29 100644 --- a/src/screens/Chapter/components/VerticalScrollbar.js +++ b/src/screens/Chapter/components/VerticalScrollbar.js @@ -1,135 +1,135 @@ -import React from "react"; -import { Dimensions, View, Text, StyleSheet } from "react-native"; +import React from 'react'; +import {Dimensions, View, Text, StyleSheet} from 'react-native'; -import Slider from "@react-native-community/slider"; -import { getDeviceOrientation } from "../../../services/utils/helpers"; -import FadeView from "../../../components/Common/CrossFadeView"; +import Slider from '@react-native-community/slider'; +import {getDeviceOrientation} from '../../../services/utils/helpers'; +import FadeView from '../../../components/Common/CrossFadeView'; const VerticalScrollbar = ({ - theme, - hide, - contentSize, - scrollPercentage, - setLoading, - scrollViewRef, + theme, + hide, + contentSize, + scrollPercentage, + setLoading, + scrollViewRef, }) => { - const onSlidingComplete = (value) => { - setLoading(true); - scrollViewRef.current.scrollTo({ - x: 0, - y: Math.round((value * contentSize) / 100), - animated: false, - }); - setLoading(false); - }; + const onSlidingComplete = value => { + setLoading(true); + scrollViewRef.current.scrollTo({ + x: 0, + y: Math.round((value * contentSize) / 100), + animated: false, + }); + setLoading(false); + }; - if (hide) { - return null; + if (hide) { + return null; + } else { + if (getDeviceOrientation() === 'potrait') { + return ( + + + {scrollPercentage} + + + + 100 + + + ); } else { - if (getDeviceOrientation() === "potrait") { - return ( - - - {scrollPercentage} - - - - 100 - - - ); - } else { - return ( - - - {scrollPercentage} - - - - 100 - - - ); - } + return ( + + + {scrollPercentage} + + + + 100 + + + ); } + } }; export default VerticalScrollbar; const styles = StyleSheet.create({ - verticalSliderContainer: { - flexDirection: "row", - justifyContent: "flex-end", - alignItems: "center", - borderRadius: 50, - marginHorizontal: 8, - transform: [{ rotate: "90deg" }], - position: "absolute", - zIndex: 2, - right: -(Dimensions.get("window").width / 2) + 40, - bottom: 300, - }, - horizontalSliderContainer: { - position: "absolute", - zIndex: 2, - bottom: 100, - flexDirection: "row", - justifyContent: "flex-end", - alignItems: "center", - borderRadius: 50, - marginHorizontal: 8, - }, + verticalSliderContainer: { + flexDirection: 'row', + justifyContent: 'flex-end', + alignItems: 'center', + borderRadius: 50, + marginHorizontal: 8, + transform: [{rotate: '90deg'}], + position: 'absolute', + zIndex: 2, + right: -(Dimensions.get('window').width / 2) + 40, + bottom: 300, + }, + horizontalSliderContainer: { + position: 'absolute', + zIndex: 2, + bottom: 100, + flexDirection: 'row', + justifyContent: 'flex-end', + alignItems: 'center', + borderRadius: 50, + marginHorizontal: 8, + }, }); diff --git a/src/screens/Chapter/components/WebViewReader.js b/src/screens/Chapter/components/WebViewReader.js index a7616101..704d7250 100644 --- a/src/screens/Chapter/components/WebViewReader.js +++ b/src/screens/Chapter/components/WebViewReader.js @@ -1,15 +1,15 @@ -import React from "react"; -import WebView from "react-native-webview"; +import React from 'react'; +import WebView from 'react-native-webview'; -export const WebViewReader = ({ style, css, text, onScroll }) => ( - ( + @@ -22,6 +22,6 @@ export const WebViewReader = ({ style, css, text, onScroll }) => ( `, - }} - /> + }} + /> ); diff --git a/src/screens/Chapter/readerStyleController.js b/src/screens/Chapter/readerStyleController.js index 2582b54c..8ee9f191 100644 --- a/src/screens/Chapter/readerStyleController.js +++ b/src/screens/Chapter/readerStyleController.js @@ -1,33 +1,33 @@ -export const readerBackground = (val) => { - const backgroundColor = { - 1: "#000000", - 2: "#FFFFFF", - 3: "#F7DFC6", - 4: "#292832", - 5: "#2B2C30", - 6: "#dce5e2", - }; +export const readerBackground = val => { + const backgroundColor = { + 1: '#000000', + 2: '#FFFFFF', + 3: '#F7DFC6', + 4: '#292832', + 5: '#2B2C30', + 6: '#dce5e2', + }; - return backgroundColor[val] || val; + return backgroundColor[val] || val; }; -export const readerTextColor = (val) => { - const textColor = { - 1: "rgba(255,255,255,0.7)", - 2: "#111111", - 3: "#593100", - 4: "#CCCCCC", - 5: "#CCCCCC", - 6: "#000000", - }; +export const readerTextColor = val => { + const textColor = { + 1: 'rgba(255,255,255,0.7)', + 2: '#111111', + 3: '#593100', + 4: '#CCCCCC', + 5: '#CCCCCC', + 6: '#000000', + }; - return textColor[val] || val; + return textColor[val] || val; }; export const readerLineHeight = (fontSize, lineHeightMultiplier) => { - let lineHeight = fontSize * lineHeightMultiplier; + let lineHeight = fontSize * lineHeightMultiplier; - lineHeight = Math.round(lineHeight); + lineHeight = Math.round(lineHeight); - return lineHeight; + return lineHeight; }; diff --git a/src/screens/Extension/Extension.js b/src/screens/Extension/Extension.js index d3e2e30b..87025068 100644 --- a/src/screens/Extension/Extension.js +++ b/src/screens/Extension/Extension.js @@ -1,233 +1,219 @@ -import React, { useCallback, useEffect, useState } from "react"; -import { StyleSheet, View, ActivityIndicator } from "react-native"; +import React, {useCallback, useEffect, useState} from 'react'; +import {StyleSheet, View, ActivityIndicator} from 'react-native'; -import * as WebBrowser from "expo-web-browser"; -import { useDispatch } from "react-redux"; +import * as WebBrowser from 'expo-web-browser'; +import {useDispatch} from 'react-redux'; -import { useTheme, useLibrary, useSettings } from "../../hooks/reduxHooks"; -import { setAppSettings } from "../../redux/settings/settings.actions"; -import { getSource } from "../../sources/sources"; -import { showToast } from "../../hooks/showToast"; +import {useTheme, useLibrary, useSettings} from '../../hooks/reduxHooks'; +import {setAppSettings} from '../../redux/settings/settings.actions'; +import {getSource} from '../../sources/sources'; +import {showToast} from '../../hooks/showToast'; -import { Searchbar } from "../../components/Searchbar/Searchbar"; -import { LoadingScreen } from "../../components/LoadingScreen/LoadingScreen"; -import NovelCover from "../../components/NovelCover"; -import NovelList from "../../components/NovelList"; -import { ErrorView } from "../../components/ErrorView/ErrorView"; +import {Searchbar} from '../../components/Searchbar/Searchbar'; +import {LoadingScreen} from '../../components/LoadingScreen/LoadingScreen'; +import NovelCover from '../../components/NovelCover'; +import NovelList from '../../components/NovelList'; +import {ErrorView} from '../../components/ErrorView/ErrorView'; -const Extension = ({ navigation, route }) => { - const { sourceId, sourceName, url } = route.params; +const Extension = ({navigation, route}) => { + const {sourceId, sourceName, url} = route.params; - const theme = useTheme(); - const library = useLibrary(); + const theme = useTheme(); + const library = useLibrary(); - const dispatch = useDispatch(); + const dispatch = useDispatch(); - const settings = useSettings(); - const { displayMode } = settings; + const settings = useSettings(); + const {displayMode} = settings; - const [loading, setLoading] = useState(true); - const [novels, setNovels] = useState([]); - const [page, setPage] = useState(1); - const [error, setError] = useState(); - const [totalPages, setTotalPages] = useState(1); + const [loading, setLoading] = useState(true); + const [novels, setNovels] = useState([]); + const [page, setPage] = useState(1); + const [error, setError] = useState(); + const [totalPages, setTotalPages] = useState(1); - const [searchText, setSearchText] = useState(""); + const [searchText, setSearchText] = useState(''); - const incrementPage = () => setPage((page) => page + 1); + const incrementPage = () => setPage(page => page + 1); - const clearSearchbar = () => { - setNovels([]); - setPage(1); - setLoading(true); - setSearchText(""); + const clearSearchbar = () => { + setNovels([]); + setPage(1); + setLoading(true); + setSearchText(''); + }; + + const getNovels = async () => { + try { + if (page <= totalPages) { + const source = getSource(sourceId); + const res = await source.popularNovels(page); + setNovels(novels => [...novels, ...res.novels]); + setTotalPages(res.totalPages); + setLoading(false); + } + } catch (error) { + setError(error.message); + showToast(error.message); + setNovels([]); + setLoading(false); + } + }; + + const getSearchResults = async () => { + try { + setLoading(true); + const source = getSource(sourceId); + const res = await source.searchNovels(searchText); + setNovels(res); + setLoading(false); + } catch (error) { + setError(error.message); + showToast(error.message); + setNovels([]); + setLoading(false); + } + }; + + const checkIFInLibrary = useCallback( + (sourceId, novelUrl) => + library.some( + obj => obj.novelUrl === novelUrl && obj.sourceId === sourceId, + ), + [], + ); + + useEffect(() => { + let mounted = true; + getNovels(); + + return () => { + mounted = false; }; + }, [page]); - const getNovels = async () => { - try { - if (page <= totalPages) { - const source = getSource(sourceId); - const res = await source.popularNovels(page); - setNovels((novels) => [...novels, ...res.novels]); - setTotalPages(res.totalPages); - setLoading(false); - } - } catch (error) { - setError(error.message); - showToast(error.message); - setNovels([]); - setLoading(false); - } - }; - - const getSearchResults = async () => { - try { - setLoading(true); - const source = getSource(sourceId); - const res = await source.searchNovels(searchText); - setNovels(res); - setLoading(false); - } catch (error) { - setError(error.message); - showToast(error.message); - setNovels([]); - setLoading(false); - } - }; - - const checkIFInLibrary = useCallback( - (sourceId, novelUrl) => - library.some( - (obj) => obj.novelUrl === novelUrl && obj.sourceId === sourceId - ), - [] - ); - - useEffect(() => { - let mounted = true; - getNovels(); - - return () => { - mounted = false; - }; - }, [page]); - - const isCloseToBottom = ({ - layoutMeasurement, - contentOffset, - contentSize, - }) => { - const paddingToBottom = 20; - return ( - layoutMeasurement.height + contentOffset.y >= - contentSize.height - paddingToBottom - ); - }; - - // const onScroll = ({ nativeEvent }) => { - // if (!searchText && isCloseToBottom(nativeEvent)) { - // incrementPage(); - // } - // }; - - const getNextPage = () => { - if (!searchText) { - incrementPage(); - } - }; - - const renderItem = ({ item }) => ( - - navigation.navigate("Novel", { - novelName: item.novelName, - novelCover: item.novelCover, - novelUrl: item.novelUrl, - sourceId, - }) - } - libraryStatus={checkIFInLibrary(item.sourceId, item.novelUrl)} - theme={theme} - /> - ); - - const listEmptyComponent = () => ( - { - getNovels(); - setLoading(true); - setError(); - }, - icon: "reload", - }, - ]} - theme={theme} - /> - ); - - const displayMenuIcon = () => { - const icons = { - 0: "view-module", - 1: "view-list", - 2: "view-module", - }; - - return icons[displayMode]; - }; - - const getNextDisplayMode = () => - displayMode === 0 ? 1 : displayMode === 1 ? 2 : displayMode === 2 && 0; - + const isCloseToBottom = ({layoutMeasurement, contentOffset, contentSize}) => { + const paddingToBottom = 20; return ( - - navigation.goBack()} - searchText={searchText} - onChangeText={(text) => setSearchText(text)} - onSubmitEditing={getSearchResults} - clearSearchbar={clearSearchbar} - actions={[ - { - icon: displayMenuIcon(), - onPress: () => - dispatch( - setAppSettings( - "displayMode", - getNextDisplayMode() - ) - ), - }, - { - icon: "earth", - onPress: () => WebBrowser.openBrowserAsync(url), - }, - ]} - /> - - {loading ? ( - - ) : ( - - - - ) - } - /> - )} - + layoutMeasurement.height + contentOffset.y >= + contentSize.height - paddingToBottom ); + }; + + // const onScroll = ({ nativeEvent }) => { + // if (!searchText && isCloseToBottom(nativeEvent)) { + // incrementPage(); + // } + // }; + + const getNextPage = () => { + if (!searchText) { + incrementPage(); + } + }; + + const renderItem = ({item}) => ( + + navigation.navigate('Novel', { + novelName: item.novelName, + novelCover: item.novelCover, + novelUrl: item.novelUrl, + sourceId, + }) + } + libraryStatus={checkIFInLibrary(item.sourceId, item.novelUrl)} + theme={theme} + /> + ); + + const listEmptyComponent = () => ( + { + getNovels(); + setLoading(true); + setError(); + }, + icon: 'reload', + }, + ]} + theme={theme} + /> + ); + + const displayMenuIcon = () => { + const icons = { + 0: 'view-module', + 1: 'view-list', + 2: 'view-module', + }; + + return icons[displayMode]; + }; + + const getNextDisplayMode = () => + displayMode === 0 ? 1 : displayMode === 1 ? 2 : displayMode === 2 && 0; + + return ( + + navigation.goBack()} + searchText={searchText} + onChangeText={text => setSearchText(text)} + onSubmitEditing={getSearchResults} + clearSearchbar={clearSearchbar} + actions={[ + { + icon: displayMenuIcon(), + onPress: () => + dispatch(setAppSettings('displayMode', getNextDisplayMode())), + }, + { + icon: 'earth', + onPress: () => WebBrowser.openBrowserAsync(url), + }, + ]} + /> + + {loading ? ( + + ) : ( + + + + ) + } + /> + )} + + ); }; export default Extension; const styles = StyleSheet.create({ - container: { - flex: 1, - }, - contentContainer: { - flex: 1, - }, + container: { + flex: 1, + }, + contentContainer: { + flex: 1, + }, }); diff --git a/src/screens/History/History.js b/src/screens/History/History.js index 5e4a3645..2f75a94b 100644 --- a/src/screens/History/History.js +++ b/src/screens/History/History.js @@ -1,187 +1,184 @@ -import React, { useState, useCallback } from "react"; +import React, {useState, useCallback} from 'react'; import { - StyleSheet, - FlatList, - ActivityIndicator, - Text, - View, -} from "react-native"; + StyleSheet, + FlatList, + ActivityIndicator, + Text, + View, +} from 'react-native'; -import moment from "moment"; -import { useFocusEffect } from "@react-navigation/native"; -import { useDispatch } from "react-redux"; +import moment from 'moment'; +import {useFocusEffect} from '@react-navigation/native'; +import {useDispatch} from 'react-redux'; -import EmptyView from "../../components/EmptyView"; -import HistoryItem from "./HistoryItem"; -import RemoveHistoryDialog from "./RemoveHistoryDialog"; -import { ScreenContainer } from "../../components/Common"; -import { Searchbar } from "../../components/Searchbar/Searchbar"; +import EmptyView from '../../components/EmptyView'; +import HistoryItem from './HistoryItem'; +import RemoveHistoryDialog from './RemoveHistoryDialog'; +import {ScreenContainer} from '../../components/Common'; +import {Searchbar} from '../../components/Searchbar/Searchbar'; -import { dateFormat } from "../../services/utils/constants"; -import { useTheme } from "../../hooks/reduxHooks"; +import {dateFormat} from '../../services/utils/constants'; +import {useTheme} from '../../hooks/reduxHooks'; import { - deleteHistory, - getHistoryFromDb, -} from "../../database/queries/HistoryQueries"; + deleteHistory, + getHistoryFromDb, +} from '../../database/queries/HistoryQueries'; -const History = ({ navigation }) => { - const theme = useTheme(); - const dispatch = useDispatch(); +const History = ({navigation}) => { + const theme = useTheme(); + const dispatch = useDispatch(); - const [searchText, setSearchText] = useState(""); - const [searchResults, setSearchResults] = useState([]); + const [searchText, setSearchText] = useState(''); + const [searchResults, setSearchResults] = useState([]); - const [history, setHistory] = useState([]); - const [loading, setLoading] = useState(true); + const [history, setHistory] = useState([]); + const [loading, setLoading] = useState(true); - const getHistory = async () => { - const history = await getHistoryFromDb(); + const getHistory = async () => { + const history = await getHistoryFromDb(); - const groups = history.reduce((groups, update) => { - var dateParts = update.historyTimeRead.split("-"); - var jsDate = new Date( - dateParts[0], - dateParts[1] - 1, - dateParts[2].substr(0, 2) - ); - const date = jsDate.toISOString(); - if (!groups[date]) { - groups[date] = []; + const groups = history.reduce((groups, update) => { + var dateParts = update.historyTimeRead.split('-'); + var jsDate = new Date( + dateParts[0], + dateParts[1] - 1, + dateParts[2].substr(0, 2), + ); + const date = jsDate.toISOString(); + if (!groups[date]) { + groups[date] = []; + } + groups[date].push(update); + return groups; + }, {}); + + const groupedHistory = Object.keys(groups).map(date => { + return { + date, + novels: groups[date], + }; + }); + + setHistory(groupedHistory); + setLoading(false); + }; + + /** + * Confirm Clear History Dialog + */ + const [visible, setVisible] = useState(false); + const showDialog = () => setVisible(true); + const hideDialog = () => setVisible(false); + + useFocusEffect( + useCallback(() => { + getHistory(); + }, [visible]), + ); + + const deleteChapterHistory = historyId => { + deleteHistory(historyId); + getHistory(); + }; + + const renderHistoryCard = ({item}) => ( + + ); + + const clearSearchbar = () => { + setSearchText(''); + setSearchResults([]); + }; + + const onChangeText = text => { + setSearchText(text); + let results = []; + + text !== '' && + history.map(item => { + const date = item.date; + const novels = item.novels.filter(novel => + novel.novelName.toLowerCase().includes(text.toLowerCase()), + ); + + if (novels.length > 0) { + results.push({ + date, + novels, + }); + } + }); + + setSearchResults(results); + }; + + return ( + + + item.date} + renderItem={({item}) => ( + item.novelId.toString()} + data={item.novels} + renderItem={renderHistoryCard} + ListHeaderComponent={ + + {moment(item.date).calendar(null, dateFormat)} + } - groups[date].push(update); - return groups; - }, {}); - - const groupedHistory = Object.keys(groups).map((date) => { - return { - date, - novels: groups[date], - }; - }); - - setHistory(groupedHistory); - setLoading(false); - }; - - /** - * Confirm Clear History Dialog - */ - const [visible, setVisible] = useState(false); - const showDialog = () => setVisible(true); - const hideDialog = () => setVisible(false); - - useFocusEffect( - useCallback(() => { - getHistory(); - }, [visible]) - ); - - const deleteChapterHistory = (historyId) => { - deleteHistory(historyId); - getHistory(); - }; - - const renderHistoryCard = ({ item }) => ( - - ); - - const clearSearchbar = () => { - setSearchText(""); - setSearchResults([]); - }; - - const onChangeText = (text) => { - setSearchText(text); - let results = []; - - text !== "" && - history.map((item) => { - const date = item.date; - const novels = item.novels.filter((novel) => - novel.novelName.toLowerCase().includes(text.toLowerCase()) - ); - - if (novels.length > 0) { - results.push({ - date, - novels, - }); - } - }); - - setSearchResults(results); - }; - - return ( - - + )} + ListFooterComponent={ + loading && ( + - item.date} - renderItem={({ item }) => ( - item.novelId.toString()} - data={item.novels} - renderItem={renderHistoryCard} - ListHeaderComponent={ - - {moment(item.date).calendar(null, dateFormat)} - - } - /> - )} - ListFooterComponent={ - loading && ( - - ) - } - ListEmptyComponent={ - !loading && ( - - ) - } - /> - - - ); + ) + } + ListEmptyComponent={ + !loading && ( + + ) + } + /> + + + ); }; export default History; diff --git a/src/screens/History/HistoryItem.js b/src/screens/History/HistoryItem.js index 848af325..6458e021 100644 --- a/src/screens/History/HistoryItem.js +++ b/src/screens/History/HistoryItem.js @@ -1,150 +1,141 @@ -import React from "react"; -import { Pressable, StyleSheet, View, Image, Text } from "react-native"; +import React from 'react'; +import {Pressable, StyleSheet, View, Image, Text} from 'react-native'; -import moment from "moment"; -import { IconButton } from "react-native-paper"; +import moment from 'moment'; +import {IconButton} from 'react-native-paper'; -import { parseChapterNumber } from "../../services/utils/helpers"; -import { setNovel } from "../../redux/novel/novel.actions"; +import {parseChapterNumber} from '../../services/utils/helpers'; +import {setNovel} from '../../redux/novel/novel.actions'; -const HistoryItem = ({ - history, - theme, - dispatch, - navigation, - deleteHistory, -}) => { - const { - historyId, - historyTimeRead, - historyChapterId, - sourceId, - novelId, - novelUrl, - novelName, - novelCover, - chapterName, - chapterUrl, - bookmark, - } = history; +const HistoryItem = ({history, theme, dispatch, navigation, deleteHistory}) => { + const { + historyId, + historyTimeRead, + historyChapterId, + sourceId, + novelId, + novelUrl, + novelName, + novelCover, + chapterName, + chapterUrl, + bookmark, + } = history; - const getChapterNumber = () => - `Chapter ${parseChapterNumber(chapterName)} • ${moment(historyTimeRead) - .format("h:mm a") - .toUpperCase()}`; + const getChapterNumber = () => + `Chapter ${parseChapterNumber(chapterName)} • ${moment(historyTimeRead) + .format('h:mm a') + .toUpperCase()}`; - const navigateToNovel = () => { - navigation.navigate("Novel", history); - dispatch(setNovel(history)); - }; + const navigateToNovel = () => { + navigation.navigate('Novel', history); + dispatch(setNovel(history)); + }; - const navigateToChapter = () => - navigation.navigate("Chapter", { - chapterId: historyChapterId, - chapterUrl, - sourceId, - novelUrl, - novelId, - chapterName, - novelName, - bookmark, - }); + const navigateToChapter = () => + navigation.navigate('Chapter', { + chapterId: historyChapterId, + chapterUrl, + sourceId, + novelUrl, + novelId, + chapterName, + novelName, + bookmark, + }); - return ( - + + - - - - - - - - {novelName} - - - {getChapterNumber()} - - - - - deleteHistory(historyId)} - /> - - - - - ); + + + + + + {novelName} + + + {getChapterNumber()} + + + + + deleteHistory(historyId)} + /> + + + + + ); }; export default HistoryItem; const styles = StyleSheet.create({ - historyItemContainer: { - paddingVertical: 8, - paddingHorizontal: 16, - flexDirection: "row", - justifyContent: "space-between", - }, - pressable: { - flex: 1, - }, - historyItemCover: { - height: 80, - width: 57, - borderRadius: 4, - }, - historyItemTitle: { - fontSize: 16, - flexWrap: "wrap", - }, - historyActionsContainer: { - flexDirection: "row", - justifyContent: "center", - alignItems: "center", - }, + historyItemContainer: { + paddingVertical: 8, + paddingHorizontal: 16, + flexDirection: 'row', + justifyContent: 'space-between', + }, + pressable: { + flex: 1, + }, + historyItemCover: { + height: 80, + width: 57, + borderRadius: 4, + }, + historyItemTitle: { + fontSize: 16, + flexWrap: 'wrap', + }, + historyActionsContainer: { + flexDirection: 'row', + justifyContent: 'center', + alignItems: 'center', + }, }); diff --git a/src/screens/History/RemoveHistoryDialog.js b/src/screens/History/RemoveHistoryDialog.js index 88a6e4a3..5d9f7277 100644 --- a/src/screens/History/RemoveHistoryDialog.js +++ b/src/screens/History/RemoveHistoryDialog.js @@ -1,56 +1,56 @@ -import React from "react"; +import React from 'react'; -import { Button, Dialog, Portal } from "react-native-paper"; -import { deleteAllHistory } from "../../database/queries/HistoryQueries"; -import { showToast } from "../../hooks/showToast"; +import {Button, Dialog, Portal} from 'react-native-paper'; +import {deleteAllHistory} from '../../database/queries/HistoryQueries'; +import {showToast} from '../../hooks/showToast'; -const RemoveHistoryDialog = ({ dialogVisible, hideDialog, theme }) => { - const onPress = () => { - deleteAllHistory(); - showToast("History deleted."); - hideDialog(); - }; +const RemoveHistoryDialog = ({dialogVisible, hideDialog, theme}) => { + const onPress = () => { + deleteAllHistory(); + showToast('History deleted.'); + hideDialog(); + }; - return ( - - - - Are you sure? All history will be lost. - - - - - - - - ); + return ( + + + + Are you sure? All history will be lost. + + + + + + + + ); }; export default RemoveHistoryDialog; diff --git a/src/screens/Library/Library.js b/src/screens/Library/Library.js index 8618d8f7..7980e5cb 100644 --- a/src/screens/Library/Library.js +++ b/src/screens/Library/Library.js @@ -1,322 +1,301 @@ -import React, { useState, useCallback, useRef, useEffect } from "react"; +import React, {useState, useCallback, useRef, useEffect} from 'react'; import { - StyleSheet, - Text, - View, - RefreshControl, - ActivityIndicator, - Pressable, -} from "react-native"; + StyleSheet, + Text, + View, + RefreshControl, + ActivityIndicator, + Pressable, +} from 'react-native'; -import MaterialCommunityIcons from "react-native-vector-icons/MaterialCommunityIcons"; -import { useFocusEffect } from "@react-navigation/native"; -import { useSelector, useDispatch } from "react-redux"; -import * as Haptics from "expo-haptics"; +import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons'; +import {useFocusEffect} from '@react-navigation/native'; +import {useSelector, useDispatch} from 'react-redux'; +import * as Haptics from 'expo-haptics'; -import { Searchbar } from "../../components/Searchbar/Searchbar"; -import NovelList from "../../components/NovelList"; -import NovelCover from "../../components/NovelCover"; -import EmptyView from "../../components/EmptyView"; +import {Searchbar} from '../../components/Searchbar/Searchbar'; +import NovelList from '../../components/NovelList'; +import NovelCover from '../../components/NovelCover'; +import EmptyView from '../../components/EmptyView'; import { - getLibraryAction, - searchLibraryAction, -} from "../../redux/library/library.actions"; -import { updateLibraryAction } from "../../redux/updates/updates.actions"; -import { useSettings, useTheme } from "../../hooks/reduxHooks"; -import { setNovel } from "../../redux/novel/novel.actions"; -import { Portal } from "react-native-paper"; -import LibraryFilterSheet from "./components/LibraryFilterSheet"; -import { Actionbar } from "../../components/Actionbar/Actionbar"; + getLibraryAction, + searchLibraryAction, +} from '../../redux/library/library.actions'; +import {updateLibraryAction} from '../../redux/updates/updates.actions'; +import {useSettings, useTheme} from '../../hooks/reduxHooks'; +import {setNovel} from '../../redux/novel/novel.actions'; +import {Portal} from 'react-native-paper'; +import LibraryFilterSheet from './components/LibraryFilterSheet'; +import {Actionbar} from '../../components/Actionbar/Actionbar'; import { - markAllChaptersRead, - markAllChaptersUnread, -} from "../../database/queries/ChapterQueries"; -import { unfollowNovel } from "../../database/queries/NovelQueries"; + markAllChaptersRead, + markAllChaptersUnread, +} from '../../database/queries/ChapterQueries'; +import {unfollowNovel} from '../../database/queries/NovelQueries'; -const LibraryScreen = ({ navigation }) => { - const theme = useTheme(); - const dispatch = useDispatch(); - const settings = useSettings(); - const { - showNumberOfNovels, - incognitoMode = false, - updateLibraryOnLaunch = false, - downloadedOnlyMode = false, - } = settings; +const LibraryScreen = ({navigation}) => { + const theme = useTheme(); + const dispatch = useDispatch(); + const settings = useSettings(); + const { + showNumberOfNovels, + incognitoMode = false, + updateLibraryOnLaunch = false, + downloadedOnlyMode = false, + } = settings; - const libraryFilterSheetRef = useRef(null); + const libraryFilterSheetRef = useRef(null); - const { - loading, - novels, - filters: { sort, filter }, - } = useSelector((state) => state.libraryReducer); + const { + loading, + novels, + filters: {sort, filter}, + } = useSelector(state => state.libraryReducer); - const [refreshing, setRefreshing] = useState(false); - const [searchText, setSearchText] = useState(""); + const [refreshing, setRefreshing] = useState(false); + const [searchText, setSearchText] = useState(''); - useFocusEffect( - useCallback(() => { - setSearchText(""); - dispatch(getLibraryAction(sort, filter)); - }, [getLibraryAction, sort, filter]) + useFocusEffect( + useCallback(() => { + setSearchText(''); + dispatch(getLibraryAction(sort, filter)); + }, [getLibraryAction, sort, filter]), + ); + + useEffect(() => { + updateLibraryOnLaunch && dispatch(updateLibraryAction()); + }, []); + + const onRefresh = () => { + setRefreshing(true); + dispatch(updateLibraryAction()); + setRefreshing(false); + }; + + const clearSearchbar = () => { + dispatch(getLibraryAction(sort, filter)); + setSearchText(''); + }; + + const onChangeText = text => { + setSearchText(text); + dispatch(searchLibraryAction(text, sort, filter)); + }; + + /** + * Selected Novels + */ + + const [selectedNovels, setSelectedNovels] = useState([]); + + const selectNovel = novelId => { + if (selectedNovels.indexOf(novelId) === -1) { + Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Medium); + setSelectedNovels(prevState => [...prevState, novelId]); + } else { + setSelectedNovels(prevState => prevState.filter(id => id !== novelId)); + } + }; + + const renderItem = ({item}) => ( + { + navigation.navigate('Novel', item); + dispatch(setNovel(item)); + }} + theme={theme} + onLongPress={selectNovel} + isSelected={selectedNovels.indexOf(item.novelId) === -1 ? false : true} + selectedNovels={selectedNovels} + /> + ); + + const refreshControl = () => ( + + ); + + const listEmptyComponent = () => + searchText === '' && ( + ); - useEffect(() => { - updateLibraryOnLaunch && dispatch(updateLibraryAction()); - }, []); - - const onRefresh = () => { - setRefreshing(true); - dispatch(updateLibraryAction()); - setRefreshing(false); - }; - - const clearSearchbar = () => { - dispatch(getLibraryAction(sort, filter)); - setSearchText(""); - }; - - const onChangeText = (text) => { - setSearchText(text); - dispatch(searchLibraryAction(text, sort, filter)); - }; - - /** - * Selected Novels - */ - - const [selectedNovels, setSelectedNovels] = useState([]); - - const selectNovel = (novelId) => { - if (selectedNovels.indexOf(novelId) === -1) { - Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Medium); - setSelectedNovels((prevState) => [...prevState, novelId]); - } else { - setSelectedNovels((prevState) => - prevState.filter((id) => id !== novelId) - ); - } - }; - - const renderItem = ({ item }) => ( - { - navigation.navigate("Novel", item); - dispatch(setNovel(item)); + return ( + <> + + 0 ? 'close' : 'magnify'} + onBackAction={() => + selectedNovels.length > 0 && setSelectedNovels([]) + } + actions={[ + { + icon: 'filter-variant', + onPress: () => libraryFilterSheetRef.current.show(), + color: + filter || downloadedOnlyMode + ? theme.filterColor + : theme.textColorPrimary, + }, + ]} + theme={theme} + /> + {incognitoMode && ( + - ); - - const refreshControl = () => ( - - ); - - const listEmptyComponent = () => - searchText === "" && ( - + - ); - - return ( - <> - - 0 ? "close" : "magnify"} - onBackAction={() => - selectedNovels.length > 0 && setSelectedNovels([]) - } - actions={[ - { - icon: "filter-variant", - onPress: () => libraryFilterSheetRef.current.show(), - color: - filter || downloadedOnlyMode - ? theme.filterColor - : theme.textColorPrimary, - }, - ]} - theme={theme} - /> - {incognitoMode && ( - - - - Incognito mode - - - )} - {downloadedOnlyMode && ( - - - - Downloaded only - - - )} - {loading ? ( - - ) : ( - <> - {searchText !== "" && ( - - navigation.navigate("GlobalSearch", { - novelName: searchText, - }) - } - android_ripple={{ color: theme.colorAccent }} - style={styles.emptySearch} - > - - {`Search for "${searchText}" globally`} - - - )} - - 0} - theme={theme} - actions={[ - { - icon: "check", - onPress: () => { - selectedNovels.map((id) => - markAllChaptersRead(id) - ), - setSelectedNovels([]); - dispatch( - getLibraryAction(sort, filter) - ); - }, - }, - { - icon: "check-outline", - onPress: () => { - selectedNovels.map((id) => - markAllChaptersUnread(id) - ); - setSelectedNovels([]); - dispatch( - getLibraryAction(sort, filter) - ); - }, - }, - { - icon: "delete-outline", - onPress: () => { - selectedNovels.map((id) => - unfollowNovel(id) - ); - setSelectedNovels([]); - dispatch( - getLibraryAction(sort, filter) - ); - }, - }, - ]} - /> - - - - - )} - - - ); + Incognito mode + + + )} + {downloadedOnlyMode && ( + + + + Downloaded only + + + )} + {loading ? ( + + ) : ( + <> + {searchText !== '' && ( + + navigation.navigate('GlobalSearch', { + novelName: searchText, + }) + } + android_ripple={{color: theme.colorAccent}} + style={styles.emptySearch} + > + + {`Search for "${searchText}" globally`} + + + )} + + 0} + theme={theme} + actions={[ + { + icon: 'check', + onPress: () => { + selectedNovels.map(id => markAllChaptersRead(id)), + setSelectedNovels([]); + dispatch(getLibraryAction(sort, filter)); + }, + }, + { + icon: 'check-outline', + onPress: () => { + selectedNovels.map(id => markAllChaptersUnread(id)); + setSelectedNovels([]); + dispatch(getLibraryAction(sort, filter)); + }, + }, + { + icon: 'delete-outline', + onPress: () => { + selectedNovels.map(id => unfollowNovel(id)); + setSelectedNovels([]); + dispatch(getLibraryAction(sort, filter)); + }, + }, + ]} + /> + + + + + )} + + + ); }; export default LibraryScreen; const styles = StyleSheet.create({ - container: { - flex: 1, - }, - emptySearch: { - alignItems: "center", - paddingVertical: 8, - borderRadius: 4, - }, + container: { + flex: 1, + }, + emptySearch: { + alignItems: 'center', + paddingVertical: 8, + borderRadius: 4, + }, }); diff --git a/src/screens/Library/components/LibraryFilterSheet.js b/src/screens/Library/components/LibraryFilterSheet.js index f703210b..e330cc42 100644 --- a/src/screens/Library/components/LibraryFilterSheet.js +++ b/src/screens/Library/components/LibraryFilterSheet.js @@ -1,278 +1,257 @@ -import React, { useState } from "react"; +import React, {useState} from 'react'; import { - StyleSheet, - View, - Text, - Animated, - useWindowDimensions, -} from "react-native"; + StyleSheet, + View, + Text, + Animated, + useWindowDimensions, +} from 'react-native'; -import { TabView, SceneMap, TabBar } from "react-native-tab-view"; +import {TabView, SceneMap, TabBar} from 'react-native-tab-view'; -import Bottomsheet from "rn-sliding-up-panel"; -import { filterLibrary } from "../../../redux/library/library.actions"; -import { useSettings } from "../../../hooks/reduxHooks"; -import { setAppSettings } from "../../../redux/settings/settings.actions"; -import { Checkbox, SortItem } from "../../../components/Checkbox/Checkbox"; +import Bottomsheet from 'rn-sliding-up-panel'; +import {filterLibrary} from '../../../redux/library/library.actions'; +import {useSettings} from '../../../hooks/reduxHooks'; +import {setAppSettings} from '../../../redux/settings/settings.actions'; +import {Checkbox, SortItem} from '../../../components/Checkbox/Checkbox'; const LibraryFilterSheet = ({ - bottomSheetRef, - dispatch, - sort, - filter, - downloadedOnlyMode, - theme, + bottomSheetRef, + dispatch, + sort, + filter, + downloadedOnlyMode, + theme, }) => { - const [animatedValue] = useState(new Animated.Value(0)); + const [animatedValue] = useState(new Animated.Value(0)); - const FirstRoute = () => ( - - 0" || - downloadedOnlyMode === true - } - onPress={() => { - if (!downloadedOnlyMode) { - filter === "chaptersDownloaded > 0" - ? dispatch(filterLibrary(sort, "")) - : dispatch( - filterLibrary(sort, "chaptersDownloaded > 0") - ); - } - }} - /> - - filter === "unread = 1" - ? dispatch(filterLibrary(sort, "")) - : dispatch(filterLibrary(sort, "unread = 1")) - } - /> - - filter === "chaptersUnread IS NULL" - ? dispatch(filterLibrary(sort, "")) - : dispatch( - filterLibrary(sort, "chaptersUnread IS NULL") - ) - } - /> - - ); + const FirstRoute = () => ( + + 0' || downloadedOnlyMode === true + } + onPress={() => { + if (!downloadedOnlyMode) { + filter === 'chaptersDownloaded > 0' + ? dispatch(filterLibrary(sort, '')) + : dispatch(filterLibrary(sort, 'chaptersDownloaded > 0')); + } + }} + /> + + filter === 'unread = 1' + ? dispatch(filterLibrary(sort, '')) + : dispatch(filterLibrary(sort, 'unread = 1')) + } + /> + + filter === 'chaptersUnread IS NULL' + ? dispatch(filterLibrary(sort, '')) + : dispatch(filterLibrary(sort, 'chaptersUnread IS NULL')) + } + /> + + ); - const sortOrders = [ - { - label: "Date Added", - ASC: "novels.novelId ASC", - DESC: "novels.novelId DESC", - }, - { - label: "Aplhabetically", - ASC: "novels.novelName ASC", - DESC: "novels.novelName DESC", - }, - { - label: "Unread", - ASC: "novels.unread ASC", - DESC: "novels.unread DESC", - }, - { - label: "Downloaded", - ASC: "chaptersDownloaded ASC", - DESC: "chaptersDownloaded DESC", - }, - { - label: "Total Chapters", - ASC: "chaptersUnread ASC", - DESC: "chaptersUnread DESC", - }, - ]; + const sortOrders = [ + { + label: 'Date Added', + ASC: 'novels.novelId ASC', + DESC: 'novels.novelId DESC', + }, + { + label: 'Aplhabetically', + ASC: 'novels.novelName ASC', + DESC: 'novels.novelName DESC', + }, + { + label: 'Unread', + ASC: 'novels.unread ASC', + DESC: 'novels.unread DESC', + }, + { + label: 'Downloaded', + ASC: 'chaptersDownloaded ASC', + DESC: 'chaptersDownloaded DESC', + }, + { + label: 'Total Chapters', + ASC: 'chaptersUnread ASC', + DESC: 'chaptersUnread DESC', + }, + ]; - const SecondRoute = () => ( - - {sortOrders.map((item, index) => ( - - sort === item.ASC - ? dispatch(filterLibrary(item.DESC, filter)) - : dispatch(filterLibrary(item.ASC, filter)) - } - /> - ))} - - ); - - const displayModes = [ - { displayMode: 0, label: "Compact Grid" }, - { displayMode: 1, label: "Comfortable Grid" }, - { displayMode: 3, label: "No Title Grid" }, - { displayMode: 2, label: "List" }, - ]; - - const { - displayMode, - showDownloadBadges, - showUnreadBadges, - showNumberOfNovels, - } = useSettings(); - - const renderCheckboxes = () => { - return displayModes.map((mode) => ( - - dispatch(setAppSettings("displayMode", mode.displayMode)) - } - theme={theme} - /> - )); - }; - - const ThirdRoute = () => ( - - - Display Mode - - {renderCheckboxes()} - - - Badges - - - dispatch( - setAppSettings( - "showDownloadBadges", - !showDownloadBadges - ) - ) - } - theme={theme} - /> - - dispatch( - setAppSettings("showUnreadBadges", !showUnreadBadges) - ) - } - theme={theme} - /> - - dispatch( - setAppSettings( - "showNumberOfNovels", - !showNumberOfNovels - ) - ) - } - theme={theme} - /> - - ); - - const renderScene = SceneMap({ - first: FirstRoute, - second: SecondRoute, - third: ThirdRoute, - }); - - const layout = useWindowDimensions(); - - const [index, setIndex] = useState(0); - const [routes] = useState([ - { key: "first", title: "Filter" }, - { key: "second", title: "Sort" }, - { key: "third", title: "Display" }, - ]); - - const renderTabBar = (props) => ( - ( - {route.title} - )} - inactiveColor={theme.textColorSecondary} - activeColor={theme.colorAccent} - pressColor={theme.rippleColor} + const SecondRoute = () => ( + + {sortOrders.map((item, index) => ( + + sort === item.ASC + ? dispatch(filterLibrary(item.DESC, filter)) + : dispatch(filterLibrary(item.ASC, filter)) + } /> - ); + ))} + + ); - return ( - - - - - - ); + const displayModes = [ + {displayMode: 0, label: 'Compact Grid'}, + {displayMode: 1, label: 'Comfortable Grid'}, + {displayMode: 3, label: 'No Title Grid'}, + {displayMode: 2, label: 'List'}, + ]; + + const { + displayMode, + showDownloadBadges, + showUnreadBadges, + showNumberOfNovels, + } = useSettings(); + + const renderCheckboxes = () => { + return displayModes.map(mode => ( + + dispatch(setAppSettings('displayMode', mode.displayMode)) + } + theme={theme} + /> + )); + }; + + const ThirdRoute = () => ( + + + Display Mode + + {renderCheckboxes()} + + + Badges + + + dispatch(setAppSettings('showDownloadBadges', !showDownloadBadges)) + } + theme={theme} + /> + + dispatch(setAppSettings('showUnreadBadges', !showUnreadBadges)) + } + theme={theme} + /> + + dispatch(setAppSettings('showNumberOfNovels', !showNumberOfNovels)) + } + theme={theme} + /> + + ); + + const renderScene = SceneMap({ + first: FirstRoute, + second: SecondRoute, + third: ThirdRoute, + }); + + const layout = useWindowDimensions(); + + const [index, setIndex] = useState(0); + const [routes] = useState([ + {key: 'first', title: 'Filter'}, + {key: 'second', title: 'Sort'}, + {key: 'third', title: 'Display'}, + ]); + + const renderTabBar = props => ( + ( + {route.title} + )} + inactiveColor={theme.textColorSecondary} + activeColor={theme.colorAccent} + pressColor={theme.rippleColor} + /> + ); + + return ( + + + + + + ); }; export default LibraryFilterSheet; const styles = StyleSheet.create({ - contentContainer: { - flex: 1, - borderTopRightRadius: 8, - borderTopLeftRadius: 8, - }, + contentContainer: { + flex: 1, + borderTopRightRadius: 8, + borderTopLeftRadius: 8, + }, }); diff --git a/src/screens/More/About.js b/src/screens/More/About.js index 303ae588..e8d7b4be 100644 --- a/src/screens/More/About.js +++ b/src/screens/More/About.js @@ -1,68 +1,64 @@ -import React from "react"; +import React from 'react'; -import * as Linking from "expo-linking"; -import { useSelector } from "react-redux"; +import * as Linking from 'expo-linking'; +import {useSelector} from 'react-redux'; -import { List } from "../../components/List"; -import { ScreenContainer } from "../../components/Common"; -import { MoreHeader } from "./components/MoreHeader"; +import {List} from '../../components/List'; +import {ScreenContainer} from '../../components/Common'; +import {MoreHeader} from './components/MoreHeader'; -const AboutScreen = ({ navigation }) => { - const theme = useSelector((state) => state.settingsReducer.theme); +const AboutScreen = ({navigation}) => { + const theme = useSelector(state => state.settingsReducer.theme); - return ( - - - - - - Linking.openURL( - "https://github.com/LNReader/lnreader/releases/tag/v1.1.5" - ) - } - theme={theme} - /> - - - Linking.openURL("https://discord.gg/QdcWN4MD63") - } - theme={theme} - /> - - Linking.openURL("https://github.com/LNReader/lnreader") - } - theme={theme} - /> - - Linking.openURL( - "https://github.com/LNReader/lnreader-sources" - ) - } - theme={theme} - /> - - - ); + return ( + + + + + + Linking.openURL( + 'https://github.com/LNReader/lnreader/releases/tag/v1.1.5', + ) + } + theme={theme} + /> + + Linking.openURL('https://discord.gg/QdcWN4MD63')} + theme={theme} + /> + + Linking.openURL('https://github.com/LNReader/lnreader') + } + theme={theme} + /> + + Linking.openURL('https://github.com/LNReader/lnreader-sources') + } + theme={theme} + /> + + + ); }; export default AboutScreen; diff --git a/src/screens/More/AdvancedSettings.js b/src/screens/More/AdvancedSettings.js index 559e9350..a587f78b 100644 --- a/src/screens/More/AdvancedSettings.js +++ b/src/screens/More/AdvancedSettings.js @@ -1,91 +1,91 @@ -import React, { useState } from "react"; +import React, {useState} from 'react'; -import { Button, Dialog, Portal } from "react-native-paper"; +import {Button, Dialog, Portal} from 'react-native-paper'; -import { Appbar } from "../../components/Appbar"; -import { ScreenContainer } from "../../components/Common"; -import { List } from "../../components/List"; +import {Appbar} from '../../components/Appbar'; +import {ScreenContainer} from '../../components/Common'; +import {List} from '../../components/List'; -import { useTheme } from "../../hooks/reduxHooks"; -import { showToast } from "../../hooks/showToast"; +import {useTheme} from '../../hooks/reduxHooks'; +import {showToast} from '../../hooks/showToast'; -import { deleteNovelCache } from "../../database/queries/NovelQueries"; -import { clearUpdates } from "../../database/queries/UpdateQueries"; +import {deleteNovelCache} from '../../database/queries/NovelQueries'; +import {clearUpdates} from '../../database/queries/UpdateQueries'; -const AdvancedSettings = ({ navigation }) => { - const theme = useTheme(); +const AdvancedSettings = ({navigation}) => { + const theme = useTheme(); - /** - * Confirm Clear Database Dialog - */ - const [clearDatabaseDialog, setClearDatabaseDialog] = useState(false); - const showClearDatabaseDialog = () => setClearDatabaseDialog(true); - const hideClearDatabaseDialog = () => setClearDatabaseDialog(false); + /** + * Confirm Clear Database Dialog + */ + const [clearDatabaseDialog, setClearDatabaseDialog] = useState(false); + const showClearDatabaseDialog = () => setClearDatabaseDialog(true); + const hideClearDatabaseDialog = () => setClearDatabaseDialog(false); - return ( - - navigation.goBack()} /> - - Data - - { - clearUpdates(); - showToast("Updates cleared."); - }} - theme={theme} - /> - - - - - Are you sure? Read chapters and progress of non-library - novels will be lost. - - - - - - - - - ); + return ( + + navigation.goBack()} /> + + Data + + { + clearUpdates(); + showToast('Updates cleared.'); + }} + theme={theme} + /> + + + + + Are you sure? Read chapters and progress of non-library novels will + be lost. + + + + + + + + + ); }; export default AdvancedSettings; diff --git a/src/screens/More/AppearanceSettings.js b/src/screens/More/AppearanceSettings.js index eef55d19..d8e1a777 100644 --- a/src/screens/More/AppearanceSettings.js +++ b/src/screens/More/AppearanceSettings.js @@ -1,262 +1,245 @@ -import React, { useState } from "react"; -import { ScrollView, Text } from "react-native"; +import React, {useState} from 'react'; +import {ScrollView, Text} from 'react-native'; -import { useDispatch } from "react-redux"; +import {useDispatch} from 'react-redux'; -import { Appbar } from "../../components/Appbar"; -import { ScreenContainer } from "../../components/Common"; -import { List } from "../../components/List"; -import { ThemePicker } from "../../components/ThemePicker/ThemePicker"; -import SwitchSetting from "../../components/Switch/Switch"; -import ColorPickerModal from "../../components/ColorPickerModal"; +import {Appbar} from '../../components/Appbar'; +import {ScreenContainer} from '../../components/Common'; +import {List} from '../../components/List'; +import {ThemePicker} from '../../components/ThemePicker/ThemePicker'; +import SwitchSetting from '../../components/Switch/Switch'; +import ColorPickerModal from '../../components/ColorPickerModal'; -import { useSettings, useTheme } from "../../hooks/reduxHooks"; +import {useSettings, useTheme} from '../../hooks/reduxHooks'; import { - setAccentColor, - setAmoledMode, - setAppSettings, - setAppTheme, - setRippleColor, -} from "../../redux/settings/settings.actions"; + setAccentColor, + setAmoledMode, + setAppSettings, + setAppTheme, + setRippleColor, +} from '../../redux/settings/settings.actions'; import { - darkTheme, - greenAppleTheme, - irisBlueTheme, - lightTheme, - midnightDuskTheme, - oceanicTheme, - springBlossomTheme, - strawberryDaiquiri, - takoLightTheme, - takoTheme, - yangTheme, - yinYangTheme, - yotsubaTheme, -} from "../../theme/theme"; + darkTheme, + greenAppleTheme, + irisBlueTheme, + lightTheme, + midnightDuskTheme, + oceanicTheme, + springBlossomTheme, + strawberryDaiquiri, + takoLightTheme, + takoTheme, + yangTheme, + yinYangTheme, + yotsubaTheme, +} from '../../theme/theme'; const lightThemes = [ - lightTheme, - springBlossomTheme, - takoLightTheme, - yangTheme, - yotsubaTheme, + lightTheme, + springBlossomTheme, + takoLightTheme, + yangTheme, + yotsubaTheme, ]; const darkThemes = [ - darkTheme, - midnightDuskTheme, - strawberryDaiquiri, - takoTheme, - greenAppleTheme, - yinYangTheme, - irisBlueTheme, - oceanicTheme, + darkTheme, + midnightDuskTheme, + strawberryDaiquiri, + takoTheme, + greenAppleTheme, + yinYangTheme, + irisBlueTheme, + oceanicTheme, ]; -const AppearanceSettings = ({ navigation }) => { - const theme = useTheme(); - const dispatch = useDispatch(); +const AppearanceSettings = ({navigation}) => { + const theme = useTheme(); + const dispatch = useDispatch(); - const { - showHistoryTab = true, - showUpdatesTab = true, - showLabelsInNav = false, - hideBackdrop = false, - useFabForContinueReading = false, - } = useSettings(); + const { + showHistoryTab = true, + showUpdatesTab = true, + showLabelsInNav = false, + hideBackdrop = false, + useFabForContinueReading = false, + } = useSettings(); - /** - * Accent Color Modal - */ - const [accentColorModal, setAccentColorModal] = useState(false); - const showAccentColorModal = () => setAccentColorModal(true); - const hideAccentColorModal = () => setAccentColorModal(false); + /** + * Accent Color Modal + */ + const [accentColorModal, setAccentColorModal] = useState(false); + const showAccentColorModal = () => setAccentColorModal(true); + const hideAccentColorModal = () => setAccentColorModal(false); - const hexToRgb = (hex) => { - var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); - return result - ? { - r: parseInt(result[1], 16), - g: parseInt(result[2], 16), - b: parseInt(result[3], 16), + const hexToRgb = hex => { + var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); + return result + ? { + r: parseInt(result[1], 16), + g: parseInt(result[2], 16), + b: parseInt(result[3], 16), + } + : null; + }; + + const onSubmit = val => { + dispatch(setAccentColor(val)); + const rgb = hexToRgb(val); + const rgbaColor = `rgba(${rgb.r},${rgb.g},${rgb.b},0.12)`; + dispatch(setRippleColor(rgbaColor)); + }; + + return ( + + + + + App theme + + Light Theme + + + {lightThemes.map(item => ( + dispatch(setAppTheme(item.id))} + /> + ))} + + + Dark Theme + + + {darkThemes.map(item => ( + dispatch(setAppTheme(item.id))} + /> + ))} + + {theme.statusBar === 'light-content' && ( + { - dispatch(setAccentColor(val)); - const rgb = hexToRgb(val); - const rgbaColor = `rgba(${rgb.r},${rgb.g},${rgb.b},0.12)`; - dispatch(setRippleColor(rgbaColor)); - }; - - return ( - - - - - App theme - - Light Theme - - - {lightThemes.map((item) => ( - dispatch(setAppTheme(item.id))} - /> - ))} - - - Dark Theme - - - {darkThemes.map((item) => ( - dispatch(setAppTheme(item.id))} - /> - ))} - - {theme.statusBar === "light-content" && ( - - dispatch( - setAmoledMode( - theme.id, - !( - theme.colorPrimary === "#000000" && - theme.colorPrimaryDark === "#000000" - ) - ) - ) - } - theme={theme} - /> - )} - - - Novel info - - dispatch( - setAppSettings("hideBackdrop", !hideBackdrop) - ) - } - theme={theme} - /> - - dispatch( - setAppSettings( - "useFabForContinueReading", - !useFabForContinueReading - ) - ) - } - theme={theme} - /> - - Navbar - - dispatch( - setAppSettings( - "showUpdatesTab", - !showUpdatesTab - ) - ) - } - theme={theme} - /> - - dispatch( - setAppSettings( - "showHistoryTab", - !showHistoryTab - ) - ) - } - theme={theme} - /> - - dispatch( - setAppSettings( - "showLabelsInNav", - !showLabelsInNav - ) - ) - } - theme={theme} - /> - - - - + dispatch( + setAmoledMode( + theme.id, + !( + theme.colorPrimary === '#000000' && + theme.colorPrimaryDark === '#000000' + ), + ), + ) + } + theme={theme} /> - - ); + )} + + + Novel info + + dispatch(setAppSettings('hideBackdrop', !hideBackdrop)) + } + theme={theme} + /> + + dispatch( + setAppSettings( + 'useFabForContinueReading', + !useFabForContinueReading, + ), + ) + } + theme={theme} + /> + + Navbar + + dispatch(setAppSettings('showUpdatesTab', !showUpdatesTab)) + } + theme={theme} + /> + + dispatch(setAppSettings('showHistoryTab', !showHistoryTab)) + } + theme={theme} + /> + + dispatch(setAppSettings('showLabelsInNav', !showLabelsInNav)) + } + theme={theme} + /> + + + + + + ); }; export default AppearanceSettings; diff --git a/src/screens/More/BackupSettings.js b/src/screens/More/BackupSettings.js index da408a8c..2bc80071 100644 --- a/src/screens/More/BackupSettings.js +++ b/src/screens/More/BackupSettings.js @@ -1,59 +1,56 @@ -import React from "react"; -import { useDispatch } from "react-redux"; +import React from 'react'; +import {useDispatch} from 'react-redux'; -import { Appbar } from "../../components/Appbar"; -import { List } from "../../components/List"; -import { ScreenContainer } from "../../components/Common"; +import {Appbar} from '../../components/Appbar'; +import {List} from '../../components/List'; +import {ScreenContainer} from '../../components/Common'; -import { useTheme } from "../../hooks/reduxHooks"; -import { restoreLibraryAction } from "../../redux/library/library.actions"; +import {useTheme} from '../../hooks/reduxHooks'; +import {restoreLibraryAction} from '../../redux/library/library.actions'; import { - createFullBackup, - restoreFullBackup, -} from "../../services/backup/backup"; + createFullBackup, + restoreFullBackup, +} from '../../services/backup/backup'; -const BackupSettings = ({ navigation }) => { - const theme = useTheme(); - const dispatch = useDispatch(); +const BackupSettings = ({navigation}) => { + const theme = useTheme(); + const dispatch = useDispatch(); - return ( - <> - - navigation.goBack()} - /> - - Backup - - - {/* + return ( + <> + + navigation.goBack()} /> + + Backup + + + {/* dispatch(restoreLibraryAction())} theme={theme} /> */} - - - - - ); + + + + + ); }; export default BackupSettings; diff --git a/src/screens/More/DownloadQueue.js b/src/screens/More/DownloadQueue.js index d8f46b80..57a72c60 100644 --- a/src/screens/More/DownloadQueue.js +++ b/src/screens/More/DownloadQueue.js @@ -1,118 +1,116 @@ -import React, { useState } from "react"; -import { FlatList, View, Text, StyleSheet } from "react-native"; +import React, {useState} from 'react'; +import {FlatList, View, Text, StyleSheet} from 'react-native'; import { - FAB, - ProgressBar, - Appbar as MaterialAppbar, - Menu, -} from "react-native-paper"; -import { useDispatch, useSelector } from "react-redux"; + FAB, + ProgressBar, + Appbar as MaterialAppbar, + Menu, +} from 'react-native-paper'; +import {useDispatch, useSelector} from 'react-redux'; -import { Appbar } from "../../components/Appbar"; -import { ScreenContainer } from "../../components/Common"; -import EmptyView from "../../components/EmptyView"; +import {Appbar} from '../../components/Appbar'; +import {ScreenContainer} from '../../components/Common'; +import EmptyView from '../../components/EmptyView'; -import { useTheme } from "../../hooks/reduxHooks"; +import {useTheme} from '../../hooks/reduxHooks'; import { - cancelDownload, - pauseDownloads, - resumeDownloads, -} from "../../redux/downloads/downloads.actions"; + cancelDownload, + pauseDownloads, + resumeDownloads, +} from '../../redux/downloads/downloads.actions'; -import BackgroundService from "react-native-background-actions"; -import { showToast } from "../../hooks/showToast"; +import BackgroundService from 'react-native-background-actions'; +import {showToast} from '../../hooks/showToast'; -const DownloadQueue = ({ navigation }) => { - const theme = useTheme(); - const { downloadQueue } = useSelector((state) => state.downloadsReducer); +const DownloadQueue = ({navigation}) => { + const theme = useTheme(); + const {downloadQueue} = useSelector(state => state.downloadsReducer); - const dispatch = useDispatch(); + const dispatch = useDispatch(); - const [visible, setVisible] = useState(false); - const openMenu = () => setVisible(true); - const closeMenu = () => setVisible(false); + const [visible, setVisible] = useState(false); + const openMenu = () => setVisible(true); + const closeMenu = () => setVisible(false); - const [fab, setFab] = useState(BackgroundService.isRunning()); + const [fab, setFab] = useState(BackgroundService.isRunning()); - return ( - - - - } - contentStyle={{ backgroundColor: theme.menuColor }} - > - { - if (downloadQueue.length > 0) { - dispatch(cancelDownload()); - showToast("Downloads cancelled."); - } - closeMenu(); - }} - title="Cancel downloads" - titleStyle={{ color: theme.textColorPrimary }} - /> - - - item.chapterId.toString()} - data={downloadQueue} - renderItem={({ item }) => ( - - - {item.chapterName} - - - - )} - ListEmptyComponent={ - - } + return ( + + + - {downloadQueue.length > 0 && ( - { - setFab((prevState) => !prevState); - BackgroundService.isRunning() - ? dispatch(pauseDownloads()) - : dispatch(resumeDownloads(downloadQueue)); - }} - /> - )} - - ); + } + contentStyle={{backgroundColor: theme.menuColor}} + > + { + if (downloadQueue.length > 0) { + dispatch(cancelDownload()); + showToast('Downloads cancelled.'); + } + closeMenu(); + }} + title="Cancel downloads" + titleStyle={{color: theme.textColorPrimary}} + /> + + + item.chapterId.toString()} + data={downloadQueue} + renderItem={({item}) => ( + + + {item.chapterName} + + + + )} + ListEmptyComponent={ + + } + /> + {downloadQueue.length > 0 && ( + { + setFab(prevState => !prevState); + BackgroundService.isRunning() + ? dispatch(pauseDownloads()) + : dispatch(resumeDownloads(downloadQueue)); + }} + /> + )} + + ); }; export default DownloadQueue; const styles = StyleSheet.create({ - fab: { - position: "absolute", - margin: 16, - right: 0, - bottom: 0, - }, + fab: { + position: 'absolute', + margin: 16, + right: 0, + bottom: 0, + }, }); diff --git a/src/screens/More/Downloads.js b/src/screens/More/Downloads.js index db90d031..72381949 100644 --- a/src/screens/More/Downloads.js +++ b/src/screens/More/Downloads.js @@ -1,159 +1,159 @@ -import React, { useCallback, useEffect, useState } from "react"; -import { FlatList, StyleSheet } from "react-native"; +import React, {useCallback, useEffect, useState} from 'react'; +import {FlatList, StyleSheet} from 'react-native'; -import { Appbar as MaterialAppbar } from "react-native-paper"; +import {Appbar as MaterialAppbar} from 'react-native-paper'; -import { useDispatch, useSelector } from "react-redux"; +import {useDispatch, useSelector} from 'react-redux'; -import { Appbar } from "../../components/Appbar"; -import { ScreenContainer } from "../../components/Common"; -import EmptyView from "../../components/EmptyView"; -import { LoadingScreen } from "../../components/LoadingScreen/LoadingScreen"; +import {Appbar} from '../../components/Appbar'; +import {ScreenContainer} from '../../components/Common'; +import EmptyView from '../../components/EmptyView'; +import {LoadingScreen} from '../../components/LoadingScreen/LoadingScreen'; import { - deleteDownloads, - getDownloadedChapters, -} from "../../database/queries/ChapterQueries"; + deleteDownloads, + getDownloadedChapters, +} from '../../database/queries/ChapterQueries'; -import { useTheme } from "../../hooks/reduxHooks"; +import {useTheme} from '../../hooks/reduxHooks'; import { - deleteChapterAction, - downloadChapterAction, -} from "../../redux/novel/novel.actions"; + deleteChapterAction, + downloadChapterAction, +} from '../../redux/novel/novel.actions'; -import UpdatesItem from "../Updates/components/UpdatesItem"; -import RemoveDownloadsDialog from "./components/RemoveDownloadsDialog"; +import UpdatesItem from '../Updates/components/UpdatesItem'; +import RemoveDownloadsDialog from './components/RemoveDownloadsDialog'; -const Downloads = ({ navigation }) => { - const theme = useTheme(); +const Downloads = ({navigation}) => { + const theme = useTheme(); - const dispatch = useDispatch(); + const dispatch = useDispatch(); - const { downloadQueue } = useSelector((state) => state.downloadsReducer); + const {downloadQueue} = useSelector(state => state.downloadsReducer); - const [loading, setLoading] = useState(true); - const [chapters, setChapters] = useState([]); + const [loading, setLoading] = useState(true); + const [chapters, setChapters] = useState([]); - /** - * Confirm Clear downloads Dialog - */ - const [visible, setVisible] = useState(false); - const showDialog = () => setVisible(true); - const hideDialog = () => setVisible(false); + /** + * Confirm Clear downloads Dialog + */ + const [visible, setVisible] = useState(false); + const showDialog = () => setVisible(true); + const hideDialog = () => setVisible(false); - const getChapters = async () => { - const res = await getDownloadedChapters(); - setChapters(res); - setLoading(false); - }; + const getChapters = async () => { + const res = await getDownloadedChapters(); + setChapters(res); + setLoading(false); + }; - const ListEmptyComponent = () => - !loading && ; + const ListEmptyComponent = () => + !loading && ; - useEffect(() => { - getChapters(); - }, []); + useEffect(() => { + getChapters(); + }, []); - const onPress = useCallback( - (item) => - navigation.navigate("Chapter", { - chapterId: item.chapterId, - chapterUrl: item.chapterUrl, - sourceId: item.sourceId, - novelUrl: item.novelUrl, - chapterName: item.chapterName, - novelId: item.novelId, - novelName: item.novelName, - bookmark: item.bookmark, - }), - [] - ); + const onPress = useCallback( + item => + navigation.navigate('Chapter', { + chapterId: item.chapterId, + chapterUrl: item.chapterUrl, + sourceId: item.sourceId, + novelUrl: item.novelUrl, + chapterName: item.chapterName, + novelId: item.novelId, + novelName: item.novelName, + bookmark: item.bookmark, + }), + [], + ); - const onPressCover = useCallback( - (item) => - navigation.navigate("Novel", { - sourceId: item.sourceId, - novelUrl: item.novelUrl, - novelName: item.novelName, - novelCover: item.novelCover, - }), - [] - ); + const onPressCover = useCallback( + item => + navigation.navigate('Novel', { + sourceId: item.sourceId, + novelUrl: item.novelUrl, + novelName: item.novelName, + novelCover: item.novelCover, + }), + [], + ); - const downloadChapter = ( + const downloadChapter = ( + sourceId, + novelUrl, + chapterUrl, + chapterName, + chapterId, + ) => + dispatch( + downloadChapterAction( sourceId, novelUrl, chapterUrl, chapterName, - chapterId - ) => - dispatch( - downloadChapterAction( - sourceId, - novelUrl, - chapterUrl, - chapterName, - chapterId - ) - ); + chapterId, + ), + ); - const deleteChapter = (chapterId, chapterName) => { - dispatch(deleteChapterAction(chapterId, chapterName)); - setChapters((chapters) => - chapters.filter((item) => item.chapterId !== chapterId) - ); - }; + const deleteChapter = (chapterId, chapterName) => { + dispatch(deleteChapterAction(chapterId, chapterName)); + setChapters(chapters => + chapters.filter(item => item.chapterId !== chapterId), + ); + }; - const renderItem = ({ item }) => ( - onPress(item)} - onPressCover={() => onPressCover(item)} - downloadQueue={downloadQueue} - deleteChapter={deleteChapter} - downloadChapter={downloadChapter} + const renderItem = ({item}) => ( + onPress(item)} + onPressCover={() => onPressCover(item)} + downloadQueue={downloadQueue} + deleteChapter={deleteChapter} + downloadChapter={downloadChapter} + /> + ); + + return ( + + + {chapters.length > 0 && ( + + )} + + {loading ? ( + + ) : ( + item.chapterId.toString()} + renderItem={renderItem} + ListEmptyComponent={} /> - ); - - return ( - - - {chapters.length > 0 && ( - - )} - - {loading ? ( - - ) : ( - item.chapterId.toString()} - renderItem={renderItem} - ListEmptyComponent={} - /> - )} - { - deleteDownloads(); - setChapters([]); - hideDialog(); - }} - theme={theme} - /> - - ); + )} + { + deleteDownloads(); + setChapters([]); + hideDialog(); + }} + theme={theme} + /> + + ); }; export default Downloads; const styles = StyleSheet.create({ - container: { flex: 1 }, - flatList: { flexGrow: 1, paddingVertical: 8 }, + container: {flex: 1}, + flatList: {flexGrow: 1, paddingVertical: 8}, }); diff --git a/src/screens/More/GeneralSettings.js b/src/screens/More/GeneralSettings.js index 6555d935..1636e109 100644 --- a/src/screens/More/GeneralSettings.js +++ b/src/screens/More/GeneralSettings.js @@ -1,155 +1,149 @@ -import React, { useState } from "react"; -import { ScrollView } from "react-native"; +import React, {useState} from 'react'; +import {ScrollView} from 'react-native'; -import { useDispatch, useSelector } from "react-redux"; +import {useDispatch, useSelector} from 'react-redux'; -import { Appbar } from "../../components/Appbar"; -import { List } from "../../components/List"; -import { ScreenContainer } from "../../components/Common"; -import SwitchSetting from "../../components/Switch/Switch"; -import DisplayModeModal from "./components/DisplayModeModal"; -import GridSizeModal from "./components/GridSizeModal"; +import {Appbar} from '../../components/Appbar'; +import {List} from '../../components/List'; +import {ScreenContainer} from '../../components/Common'; +import SwitchSetting from '../../components/Switch/Switch'; +import DisplayModeModal from './components/DisplayModeModal'; +import GridSizeModal from './components/GridSizeModal'; -import { useSettings, useTheme } from "../../hooks/reduxHooks"; -import { setAppSettings } from "../../redux/settings/settings.actions"; -import { SHOW_LAST_UPDATE_TIME } from "../../redux/updates/updates.types"; +import {useSettings, useTheme} from '../../hooks/reduxHooks'; +import {setAppSettings} from '../../redux/settings/settings.actions'; +import {SHOW_LAST_UPDATE_TIME} from '../../redux/updates/updates.types'; -const GenralSettings = ({ navigation }) => { - const theme = useTheme(); - const dispatch = useDispatch(); +const GenralSettings = ({navigation}) => { + const theme = useTheme(); + const dispatch = useDispatch(); - const { displayMode, novelsPerRow } = useSelector( - (state) => state.settingsReducer - ); + const {displayMode, novelsPerRow} = useSelector( + state => state.settingsReducer, + ); - const { - updateLibraryOnLaunch = false, - downloadNewChapters = false, - onlyUpdateOngoingNovels = false, - } = useSettings(); + const { + updateLibraryOnLaunch = false, + downloadNewChapters = false, + onlyUpdateOngoingNovels = false, + } = useSettings(); - const { showLastUpdateTime = true } = useSelector( - (state) => state.updatesReducer - ); + const {showLastUpdateTime = true} = useSelector( + state => state.updatesReducer, + ); - const displayModeLabel = (displayMode) => { - const label = { - 0: "Compact Grid", - 1: "Comfortable Grid", - 2: "List", - 3: "No Title Grid", - }; - - return label[displayMode] ?? "Compact Grid"; + const displayModeLabel = displayMode => { + const label = { + 0: 'Compact Grid', + 1: 'Comfortable Grid', + 2: 'List', + 3: 'No Title Grid', }; - /** - * Display Mode Modal - */ - const [displayModalVisible, setDisplayModalVisible] = useState(false); - const showDisplayModal = () => setDisplayModalVisible(true); - const hideDisplayModal = () => setDisplayModalVisible(false); + return label[displayMode] ?? 'Compact Grid'; + }; - /** - * Grid Size Modal - */ - const [gridSizeModalVisible, setGridSizeModalVisible] = useState(false); - const showGridSizeModal = () => setGridSizeModalVisible(true); - const hideGridSizeModal = () => setGridSizeModalVisible(false); + /** + * Display Mode Modal + */ + const [displayModalVisible, setDisplayModalVisible] = useState(false); + const showDisplayModal = () => setDisplayModalVisible(true); + const hideDisplayModal = () => setDisplayModalVisible(false); - return ( - - - - - - Display - - - - Library - - dispatch( - setAppSettings( - "updateLibraryOnLaunch", - !updateLibraryOnLaunch - ) - ) - } - theme={theme} - /> - - Global update - - dispatch( - setAppSettings( - "onlyUpdateOngoingNovels", - !onlyUpdateOngoingNovels - ) - ) - } - theme={theme} - /> - - dispatch({ - type: SHOW_LAST_UPDATE_TIME, - payload: !showLastUpdateTime, - }) - } - theme={theme} - /> - - Auto-download - - dispatch( - setAppSettings( - "downloadNewChapters", - !downloadNewChapters - ) - ) - } - theme={theme} - /> - - - - - - ); + /** + * Grid Size Modal + */ + const [gridSizeModalVisible, setGridSizeModalVisible] = useState(false); + const showGridSizeModal = () => setGridSizeModalVisible(true); + const hideGridSizeModal = () => setGridSizeModalVisible(false); + + return ( + + + + + + Display + + + + Library + + dispatch( + setAppSettings('updateLibraryOnLaunch', !updateLibraryOnLaunch), + ) + } + theme={theme} + /> + + Global update + + dispatch( + setAppSettings( + 'onlyUpdateOngoingNovels', + !onlyUpdateOngoingNovels, + ), + ) + } + theme={theme} + /> + + dispatch({ + type: SHOW_LAST_UPDATE_TIME, + payload: !showLastUpdateTime, + }) + } + theme={theme} + /> + + Auto-download + + dispatch( + setAppSettings('downloadNewChapters', !downloadNewChapters), + ) + } + theme={theme} + /> + + + + + + ); }; export default GenralSettings; diff --git a/src/screens/More/More.js b/src/screens/More/More.js index 8d2a38a7..81f79c57 100644 --- a/src/screens/More/More.js +++ b/src/screens/More/More.js @@ -1,150 +1,149 @@ -import React from "react"; -import { StyleSheet, View, Image, Pressable, Text } from "react-native"; -import { Switch } from "react-native-paper"; -import { useDispatch, useSelector } from "react-redux"; +import React from 'react'; +import {StyleSheet, View, Image, Pressable, Text} from 'react-native'; +import {Switch} from 'react-native-paper'; +import {useDispatch, useSelector} from 'react-redux'; -import { Appbar } from "../../components/Appbar"; -import { ScreenContainer } from "../../components/Common"; -import { List } from "../../components/List"; +import {Appbar} from '../../components/Appbar'; +import {ScreenContainer} from '../../components/Common'; +import {List} from '../../components/List'; -import { useSettings, useTheme } from "../../hooks/reduxHooks"; -import { setAppSettings } from "../../redux/settings/settings.actions"; -import { MoreHeader } from "./components/MoreHeader"; +import {useSettings, useTheme} from '../../hooks/reduxHooks'; +import {setAppSettings} from '../../redux/settings/settings.actions'; +import {MoreHeader} from './components/MoreHeader'; -const MoreScreen = ({ navigation }) => { - const theme = useTheme(); - const { downloadQueue } = useSelector((state) => state.downloadsReducer); - const { incognitoMode = false, downloadedOnlyMode = false } = useSettings(); - const dispatch = useDispatch(); +const MoreScreen = ({navigation}) => { + const theme = useTheme(); + const {downloadQueue} = useSelector(state => state.downloadsReducer); + const {incognitoMode = false, downloadedOnlyMode = false} = useSettings(); + const dispatch = useDispatch(); - const enableIncognitoMode = () => { - dispatch(setAppSettings("incognitoMode", !incognitoMode)); - }; + const enableIncognitoMode = () => { + dispatch(setAppSettings('incognitoMode', !incognitoMode)); + }; - const enableDownloadedOnlyMode = () => { - dispatch(setAppSettings("downloadedOnlyMode", !downloadedOnlyMode)); - }; + const enableDownloadedOnlyMode = () => { + dispatch(setAppSettings('downloadedOnlyMode', !downloadedOnlyMode)); + }; - return ( - - - - - - - - - Downloaded only - - - Filters all novels in your library - - - - - - - - - - - Incognito mode - - - Pauses reading history - - - - - - - 0 && - downloadQueue.length + " remaining" - } - icon="progress-download" - onPress={() => - navigation.navigate("MoreStack", { - screen: "DownloadQueue", - }) - } - theme={theme} - /> - - navigation.navigate("MoreStack", { - screen: "Downloads", - }) - } - theme={theme} - /> - - - navigation.navigate("MoreStack", { - screen: "SettingsStack", - }) - } - theme={theme} - /> + return ( + + + + + + + + + Downloaded only + + + Filters all novels in your library + + + + + + + + + + + Incognito mode + + + Pauses reading history + + + + + + + 0 && downloadQueue.length + ' remaining' + } + icon="progress-download" + onPress={() => + navigation.navigate('MoreStack', { + screen: 'DownloadQueue', + }) + } + theme={theme} + /> + + navigation.navigate('MoreStack', { + screen: 'Downloads', + }) + } + theme={theme} + /> + + + navigation.navigate('MoreStack', { + screen: 'SettingsStack', + }) + } + theme={theme} + /> - - navigation.navigate("MoreStack", { - screen: "About", - }) - } - theme={theme} - /> - - - ); + + navigation.navigate('MoreStack', { + screen: 'About', + }) + } + theme={theme} + /> + + + ); }; export default MoreScreen; diff --git a/src/screens/More/ReaderSettings.js b/src/screens/More/ReaderSettings.js index a6ed292e..63c6fb73 100644 --- a/src/screens/More/ReaderSettings.js +++ b/src/screens/More/ReaderSettings.js @@ -1,297 +1,262 @@ -import React, { useCallback, useState } from "react"; +import React, {useCallback, useState} from 'react'; import { - Dimensions, - Pressable, - ScrollView, - StyleSheet, - Text, - TextInput, - useWindowDimensions, - View, -} from "react-native"; -import { Button } from "react-native-paper"; -import WebView from "react-native-webview"; -import { useDispatch } from "react-redux"; -import { TabView, SceneMap, TabBar } from "react-native-tab-view"; + Dimensions, + Pressable, + ScrollView, + StyleSheet, + Text, + TextInput, + useWindowDimensions, + View, +} from 'react-native'; +import {Button} from 'react-native-paper'; +import WebView from 'react-native-webview'; +import {useDispatch} from 'react-redux'; +import {TabView, SceneMap, TabBar} from 'react-native-tab-view'; -import { Appbar } from "../../components/Appbar"; -import ColorPickerModal from "../../components/ColorPickerModal"; -import { Row, ScreenContainer } from "../../components/Common"; +import {Appbar} from '../../components/Appbar'; +import ColorPickerModal from '../../components/ColorPickerModal'; +import {Row, ScreenContainer} from '../../components/Common'; import { - ToggleButton, - ToggleColorButton, -} from "../../components/Common/ToggleButton"; -import { List } from "../../components/List"; + ToggleButton, + ToggleColorButton, +} from '../../components/Common/ToggleButton'; +import {List} from '../../components/List'; +import {useReaderSettings, useSettings, useTheme} from '../../hooks/reduxHooks'; import { - useReaderSettings, - useSettings, - useTheme, -} from "../../hooks/reduxHooks"; + setAppSettings, + setReaderSettings, +} from '../../redux/settings/settings.actions'; import { - setAppSettings, - setReaderSettings, -} from "../../redux/settings/settings.actions"; -import { - readerBackground, - readerLineHeight, - readerTextColor, -} from "../Chapter/readerStyleController"; + readerBackground, + readerLineHeight, + readerTextColor, +} from '../Chapter/readerStyleController'; -const FirstRoute = React.memo(({ theme, dispatch, reader }) => { - const presetThemes = [ - { - value: 1, - backgroundColor: "#000000", - textColor: "rgba(255,255,255,0.7)", - }, - { value: 2, backgroundColor: "#FFFFFF", textColor: "#111111" }, - { value: 3, backgroundColor: "#F7DFC6", textColor: "#593100" }, - { value: 4, backgroundColor: "#292832", textColor: "#CCCCCC" }, - { value: 5, backgroundColor: "#2B2C30", textColor: "#CCCCCC" }, - ]; +const FirstRoute = React.memo(({theme, dispatch, reader}) => { + const presetThemes = [ + { + value: 1, + backgroundColor: '#000000', + textColor: 'rgba(255,255,255,0.7)', + }, + {value: 2, backgroundColor: '#FFFFFF', textColor: '#111111'}, + {value: 3, backgroundColor: '#F7DFC6', textColor: '#593100'}, + {value: 4, backgroundColor: '#292832', textColor: '#CCCCCC'}, + {value: 5, backgroundColor: '#2B2C30', textColor: '#CCCCCC'}, + ]; - const textAlignments = [ - { value: "left", icon: "format-align-left" }, - { value: "center", icon: "format-align-center" }, - { value: "justify", icon: "format-align-justify" }, - { value: "right", icon: "format-align-right" }, - ]; + const textAlignments = [ + {value: 'left', icon: 'format-align-left'}, + {value: 'center', icon: 'format-align-center'}, + {value: 'justify', icon: 'format-align-justify'}, + {value: 'right', icon: 'format-align-right'}, + ]; - const { autoScrollInterval = 10 } = useSettings(); + const {autoScrollInterval = 10} = useSettings(); - /** - * Reader Background Color Modal - */ - const [readerBackgroundColorModal, setReaderBackgroundtColorModal] = - useState(false); - const showReaderBackgroundtColorModal = () => - setReaderBackgroundtColorModal(true); - const hideReaderBackgroundtColorModal = () => - setReaderBackgroundtColorModal(false); + /** + * Reader Background Color Modal + */ + const [readerBackgroundColorModal, setReaderBackgroundtColorModal] = + useState(false); + const showReaderBackgroundtColorModal = () => + setReaderBackgroundtColorModal(true); + const hideReaderBackgroundtColorModal = () => + setReaderBackgroundtColorModal(false); - /** - * Reader Text Color Modal - */ - const [readerTextColorModal, setReaderTextColorModal] = useState(false); - const showReaderTextColorModal = () => setReaderTextColorModal(true); - const hideReaderTextColorModal = () => setReaderTextColorModal(false); + /** + * Reader Text Color Modal + */ + const [readerTextColorModal, setReaderTextColorModal] = useState(false); + const showReaderTextColorModal = () => setReaderTextColorModal(true); + const hideReaderTextColorModal = () => setReaderTextColorModal(false); - const setReaderBackground = (val) => { - dispatch(setReaderSettings("theme", val)); - }; + const setReaderBackground = val => { + dispatch(setReaderSettings('theme', val)); + }; - const setReaderTextColor = (val) => { - dispatch(setReaderSettings("textColor", val ?? reader.textColor)); - }; + const setReaderTextColor = val => { + dispatch(setReaderSettings('textColor', val ?? reader.textColor)); + }; - const [customHtmlCSS, setcustomHtmlCSS] = useState(reader.customCSS); + const [customHtmlCSS, setcustomHtmlCSS] = useState(reader.customCSS); - return ( - - - - Preset - - - Preset Themes - - - - {presetThemes.map((theme) => ( - { - dispatch( - setReaderSettings( - "theme", - theme.backgroundColor - ) - ); - dispatch( - setReaderSettings( - "textColor", - theme.textColor - ) - ); - }} - /> - ))} - - - - - Reader - - - - Text - - - - Text Align - - - {reader.textAlign} - - - - {textAlignments.map((item) => ( - { - dispatch( - setReaderSettings( - "textAlign", - item.value - ) - ); - }} - selected={item.value === reader.textAlign} - theme={theme} - /> - ))} - - - - - Custom CSS (Only works in webview mode) - - - setcustomHtmlCSS(text)} - placeholderTextColor={theme.textColorSecondary} - placeholder="Example: body { color: red; }" - multiline={true} - /> - - - - - - - Auto scroll interval (in seconds) - - - - text !== "" && - dispatch( - setAppSettings( - "autoScrollInterval", - parseInt(text) - ) - ) - } - /> - - + return ( + + + + Preset + + + Preset Themes + + + + {presetThemes.map(theme => ( + { + dispatch( + setReaderSettings('theme', theme.backgroundColor), + ); + dispatch(setReaderSettings('textColor', theme.textColor)); + }} + /> + ))} + - + + Reader + + + + Text + + + + Text Align + + + {reader.textAlign} + + + + {textAlignments.map(item => ( + { + dispatch(setReaderSettings('textAlign', item.value)); + }} + selected={item.value === reader.textAlign} + theme={theme} + /> + ))} + + + + + Custom CSS (Only works in webview mode) + + + setcustomHtmlCSS(text)} + placeholderTextColor={theme.textColorSecondary} + placeholder="Example: body { color: red; }" + multiline={true} /> - + + + + + + Auto scroll interval (in seconds) + + + + text !== '' && + dispatch(setAppSettings('autoScrollInterval', parseInt(text))) + } /> - - ); + + + + + + + ); }); -const SecondRoute = React.memo(({ reader }) => ( - - ( + + @@ -332,90 +297,84 @@ const SecondRoute = React.memo(({ reader }) => ( `, - }} - /> - + }} + /> + )); -const ReaderSettings = ({ navigation }) => { - const theme = useTheme(); - const dispatch = useDispatch(); +const ReaderSettings = ({navigation}) => { + const theme = useTheme(); + const dispatch = useDispatch(); - const reader = useReaderSettings(); + const reader = useReaderSettings(); - const renderScene = ({ route }) => { - switch (route.key) { - case "first": - return ( - - ); - case "second": - return ; - } - }; + const renderScene = ({route}) => { + switch (route.key) { + case 'first': + return ; + case 'second': + return ; + } + }; - const layout = useWindowDimensions(); + const layout = useWindowDimensions(); - const [index, setIndex] = useState(0); - const [routes] = useState([ - { key: "first", title: "Settings" }, - { key: "second", title: "Preview" }, - ]); + const [index, setIndex] = useState(0); + const [routes] = useState([ + {key: 'first', title: 'Settings'}, + {key: 'second', title: 'Preview'}, + ]); - const renderTabBar = (props) => ( - ( - {route.title} - )} - inactiveColor={theme.textColorSecondary} - activeColor={theme.colorAccent} - pressColor={theme.rippleColor} - /> - ); + const renderTabBar = props => ( + ( + {route.title} + )} + inactiveColor={theme.textColorSecondary} + activeColor={theme.colorAccent} + pressColor={theme.rippleColor} + /> + ); - return ( - - + return ( + + - - - ); + + + ); }; export default ReaderSettings; const styles = StyleSheet.create({ - pressableListItem: { - padding: 16, - flexDirection: "row", - justifyContent: "space-between", - alignItems: "center", - }, - presetToggleButton: { - marginLeft: 12, - borderRadius: 50, - borderTopRightRadius: 50, - borderBottomRightRadius: 50, - borderTopLeftRadius: 50, - borderBottomLeftRadius: 50, - borderWidth: 0, - }, + pressableListItem: { + padding: 16, + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + }, + presetToggleButton: { + marginLeft: 12, + borderRadius: 50, + borderTopRightRadius: 50, + borderBottomRightRadius: 50, + borderTopLeftRadius: 50, + borderBottomLeftRadius: 50, + borderWidth: 0, + }, }); diff --git a/src/screens/More/Settings.js b/src/screens/More/Settings.js index bfa41b88..f14c8af9 100644 --- a/src/screens/More/Settings.js +++ b/src/screens/More/Settings.js @@ -1,86 +1,86 @@ -import React from "react"; -import { View } from "react-native"; +import React from 'react'; +import {View} from 'react-native'; -import { Appbar } from "../../components/Appbar"; -import { List } from "../../components/List"; +import {Appbar} from '../../components/Appbar'; +import {List} from '../../components/List'; -import { useTheme } from "../../hooks/reduxHooks"; +import {useTheme} from '../../hooks/reduxHooks'; -const SettingsScreen = ({ navigation }) => { - const theme = useTheme(); +const SettingsScreen = ({navigation}) => { + const theme = useTheme(); - return ( - <> - - - - navigation.navigate("SettingsStack", { - screen: "GeneralSettings", - }) - } - theme={theme} - /> - - navigation.navigate("SettingsStack", { - screen: "ReaderSettings", - }) - } - theme={theme} - /> - - navigation.navigate("SettingsStack", { - screen: "TrackerSettings", - }) - } - theme={theme} - /> - - navigation.navigate("SettingsStack", { - screen: "BackupSettings", - }) - } - theme={theme} - /> - - navigation.navigate("SettingsStack", { - screen: "AppearanceSettings", - }) - } - theme={theme} - /> - - navigation.navigate("SettingsStack", { - screen: "AdvancedSettings", - }) - } - theme={theme} - /> - - - ); + return ( + <> + + + + navigation.navigate('SettingsStack', { + screen: 'GeneralSettings', + }) + } + theme={theme} + /> + + navigation.navigate('SettingsStack', { + screen: 'ReaderSettings', + }) + } + theme={theme} + /> + + navigation.navigate('SettingsStack', { + screen: 'TrackerSettings', + }) + } + theme={theme} + /> + + navigation.navigate('SettingsStack', { + screen: 'BackupSettings', + }) + } + theme={theme} + /> + + navigation.navigate('SettingsStack', { + screen: 'AppearanceSettings', + }) + } + theme={theme} + /> + + navigation.navigate('SettingsStack', { + screen: 'AdvancedSettings', + }) + } + theme={theme} + /> + + + ); }; export default SettingsScreen; diff --git a/src/screens/More/TrackerSettings.js b/src/screens/More/TrackerSettings.js index 34948c75..04289f97 100644 --- a/src/screens/More/TrackerSettings.js +++ b/src/screens/More/TrackerSettings.js @@ -1,153 +1,149 @@ -import React, { useState } from "react"; -import { View } from "react-native"; -import { Modal, Portal, Text, Button, Provider } from "react-native-paper"; +import React, {useState} from 'react'; +import {View} from 'react-native'; +import {Modal, Portal, Text, Button, Provider} from 'react-native-paper'; -import * as WebBrowser from "expo-web-browser"; +import * as WebBrowser from 'expo-web-browser'; import { - myAnimeListConfig, - getAccessToken, - malTokenWatcher, -} from "../../services/Trackers/myAnimeList"; -import { Appbar } from "../../components/Appbar"; + myAnimeListConfig, + getAccessToken, + malTokenWatcher, +} from '../../services/Trackers/myAnimeList'; +import {Appbar} from '../../components/Appbar'; -import { useSelector, useDispatch } from "react-redux"; -import { List } from "../../components/List"; -import { removeTracker, setTracker } from "../../redux/tracker/tracker.actions"; +import {useSelector, useDispatch} from 'react-redux'; +import {List} from '../../components/List'; +import {removeTracker, setTracker} from '../../redux/tracker/tracker.actions'; -const TrackerScreen = ({ navigation }) => { - const theme = useSelector((state) => state.settingsReducer.theme); - const tracker = useSelector((state) => state.trackerReducer.tracker); - const dispatch = useDispatch(); +const TrackerScreen = ({navigation}) => { + const theme = useSelector(state => state.settingsReducer.theme); + const tracker = useSelector(state => state.trackerReducer.tracker); + const dispatch = useDispatch(); - // Tracker Modal - const [visible, setVisible] = useState(false); - const showModal = () => setVisible(true); - const hideModal = () => setVisible(false); + // Tracker Modal + const [visible, setVisible] = useState(false); + const showModal = () => setVisible(true); + const hideModal = () => setVisible(false); - return ( - - navigation.goBack()} /> - + navigation.goBack()} /> + + + Services + { + if (tracker) { + showModal(); + } else { + await WebBrowser.openAuthSessionAsync( + myAnimeListConfig.authUrl, + myAnimeListConfig.redirectUri, + ).then(res => { + console.log(res.type); + if (res.type === 'success') { + const {url} = res; + + const codeExtractor = new RegExp(/=([^&]+)/); + let code = url.match(codeExtractor); + + console.log(code); + + if (code) { + code = code[1]; + getAccessToken( + code, + myAnimeListConfig.codeChallenge, + ).then(objects => { + console.log(objects); + dispatch(setTracker(objects)); + }); + } + } + }); + } + }} + right={tracker && 'check'} + theme={theme} + /> + {tracker && tracker.expires_in < new Date(Date.now()) && ( + <> + + Settings + { + const res = malTokenWatcher(tracker); + dispatch(setTracker(res)); }} + theme={theme} + /> + + )} + + + + + - - Services - { - if (tracker) { - showModal(); - } else { - await WebBrowser.openAuthSessionAsync( - myAnimeListConfig.authUrl, - myAnimeListConfig.redirectUri - ).then((res) => { - console.log(res.type); - if (res.type === "success") { - const { url } = res; - - const codeExtractor = new RegExp( - /=([^&]+)/ - ); - let code = url.match(codeExtractor); - - console.log(code); - - if (code) { - code = code[1]; - getAccessToken( - code, - myAnimeListConfig.codeChallenge - ).then((objects) => { - console.log(objects); - dispatch(setTracker(objects)); - }); - } - } - }); - } - }} - right={tracker && "check"} - theme={theme} - /> - {tracker && tracker.expires_in < new Date(Date.now()) && ( - <> - - - Settings - - { - const res = malTokenWatcher(tracker); - dispatch(setTracker(res)); - }} - theme={theme} - /> - - )} - - - - - - Log out from MyAnimeList? - - - - - - - + Log out from MyAnimeList? + + + + - - ); + + + + + ); }; export default TrackerScreen; diff --git a/src/screens/More/components/DisplayModeModal.js b/src/screens/More/components/DisplayModeModal.js index a2409092..98e23bad 100644 --- a/src/screens/More/components/DisplayModeModal.js +++ b/src/screens/More/components/DisplayModeModal.js @@ -1,62 +1,62 @@ -import React from "react"; -import { StyleSheet } from "react-native"; +import React from 'react'; +import {StyleSheet} from 'react-native'; -import { Portal, Modal } from "react-native-paper"; +import {Portal, Modal} from 'react-native-paper'; -import { Checkbox } from "../../../components/Checkbox/Checkbox"; +import {Checkbox} from '../../../components/Checkbox/Checkbox'; -import { setAppSettings } from "../../../redux/settings/settings.actions"; +import {setAppSettings} from '../../../redux/settings/settings.actions'; const DisplayModeModal = ({ - theme, - dispatch, - displayMode, - hideDisplayModal, - displayModalVisible, + theme, + dispatch, + displayMode, + hideDisplayModal, + displayModalVisible, }) => { - const displayModes = [ - { displayMode: 0, label: "Compact Grid" }, - { displayMode: 1, label: "Comfortable Grid" }, - { displayMode: 3, label: "No Title Grid" }, - { displayMode: 2, label: "List" }, - ]; + const displayModes = [ + {displayMode: 0, label: 'Compact Grid'}, + {displayMode: 1, label: 'Comfortable Grid'}, + {displayMode: 3, label: 'No Title Grid'}, + {displayMode: 2, label: 'List'}, + ]; - const renderCheckboxes = () => { - return displayModes.map((mode) => ( - - dispatch(setAppSettings("displayMode", mode.displayMode)) - } - label={mode.label} - theme={theme} - /> - )); - }; + const renderCheckboxes = () => { + return displayModes.map(mode => ( + + dispatch(setAppSettings('displayMode', mode.displayMode)) + } + label={mode.label} + theme={theme} + /> + )); + }; - return ( - - - {renderCheckboxes()} - - - ); + return ( + + + {renderCheckboxes()} + + + ); }; export default DisplayModeModal; const styles = StyleSheet.create({ - containerStyle: { - padding: 20, - margin: 20, - borderRadius: 6, - }, + containerStyle: { + padding: 20, + margin: 20, + borderRadius: 6, + }, }); diff --git a/src/screens/More/components/GridSizeModal.js b/src/screens/More/components/GridSizeModal.js index 16934bc5..cd80c067 100644 --- a/src/screens/More/components/GridSizeModal.js +++ b/src/screens/More/components/GridSizeModal.js @@ -1,83 +1,75 @@ -import React from "react"; -import { Text, StyleSheet } from "react-native"; -import { Portal, Modal } from "react-native-paper"; -import Slider from "@react-native-community/slider"; -import { RadioButton, RadioButtonGroup } from "../../../components/RadioButton"; -import { setNovelsPerRow } from "../../../redux/settings/settings.actions"; -import { Checkbox } from "../../../components/Checkbox/Checkbox"; +import React from 'react'; +import {Text, StyleSheet} from 'react-native'; +import {Portal, Modal} from 'react-native-paper'; +import Slider from '@react-native-community/slider'; +import {RadioButton, RadioButtonGroup} from '../../../components/RadioButton'; +import {setNovelsPerRow} from '../../../redux/settings/settings.actions'; +import {Checkbox} from '../../../components/Checkbox/Checkbox'; const GridSizeModal = ({ - dispatch, - novelsPerRow, - gridSizeModalVisible, - hideGridSizeModal, - theme, + dispatch, + novelsPerRow, + gridSizeModalVisible, + hideGridSizeModal, + theme, }) => { - const gridSizes = { - 5: "XS", - 4: "S", - 3: "M", - 2: "L", - 1: "XL", - }; + const gridSizes = { + 5: 'XS', + 4: 'S', + 3: 'M', + 2: 'L', + 1: 'XL', + }; - return ( - - - - Grid size - - - {`${novelsPerRow} per row`} - - {Object.keys(gridSizes).map((item) => ( - dispatch(setNovelsPerRow(item))} - theme={theme} - /> - ))} - - - ); + return ( + + + + Grid size + + + {`${novelsPerRow} per row`} + + {Object.keys(gridSizes).map(item => ( + dispatch(setNovelsPerRow(item))} + theme={theme} + /> + ))} + + + ); }; export default GridSizeModal; const styles = StyleSheet.create({ - containerStyle: { - padding: 20, - margin: 20, - borderRadius: 6, - }, - modalHeader: { - fontSize: 18, - marginBottom: 10, - }, - modalDescription: { - marginBottom: 16, - }, - slider: { - width: "100%", - height: 40, - }, + containerStyle: { + padding: 20, + margin: 20, + borderRadius: 6, + }, + modalHeader: { + fontSize: 18, + marginBottom: 10, + }, + modalDescription: { + marginBottom: 16, + }, + slider: { + width: '100%', + height: 40, + }, }); diff --git a/src/screens/More/components/MoreHeader.js b/src/screens/More/components/MoreHeader.js index bb10a235..26f7cda6 100644 --- a/src/screens/More/components/MoreHeader.js +++ b/src/screens/More/components/MoreHeader.js @@ -1,39 +1,36 @@ -import React from "react"; -import { Image, StyleSheet, View } from "react-native"; -import { Appbar } from "../../../components/Appbar"; +import React from 'react'; +import {Image, StyleSheet, View} from 'react-native'; +import {Appbar} from '../../../components/Appbar'; -export const MoreHeader = ({ title, navigation, theme, goBack }) => ( - <> - ( + <> + + + + - - - - - - + + + ); const styles = StyleSheet.create({ - logoContainer: { - paddingTop: 8, - paddingBottom: 24, - alignItems: "center", - elevation: 4, - }, - logo: { - height: 80, - width: 80, - }, + logoContainer: { + paddingTop: 8, + paddingBottom: 24, + alignItems: 'center', + elevation: 4, + }, + logo: { + height: 80, + width: 80, + }, }); diff --git a/src/screens/More/components/RemoveDownloadsDialog.js b/src/screens/More/components/RemoveDownloadsDialog.js index 25092ba5..d96d69b0 100644 --- a/src/screens/More/components/RemoveDownloadsDialog.js +++ b/src/screens/More/components/RemoveDownloadsDialog.js @@ -1,53 +1,53 @@ -import React from "react"; +import React from 'react'; -import { Button, Dialog, Portal } from "react-native-paper"; +import {Button, Dialog, Portal} from 'react-native-paper'; const RemoveDownloadsDialog = ({ - dialogVisible, - hideDialog, - theme, - onSubmit, + dialogVisible, + hideDialog, + theme, + onSubmit, }) => { - return ( - - - - Are you sure? All downloaded chapters will be deleted. - - - - - - - - ); + return ( + + + + Are you sure? All downloaded chapters will be deleted. + + + + + + + + ); }; export default RemoveDownloadsDialog; diff --git a/src/screens/Novel/Novel.js b/src/screens/Novel/Novel.js index d8e9161a..4503a986 100644 --- a/src/screens/Novel/Novel.js +++ b/src/screens/Novel/Novel.js @@ -1,635 +1,602 @@ -import React, { useCallback, useEffect, useRef, useState } from "react"; +import React, {useCallback, useEffect, useRef, useState} from 'react'; import { - StyleSheet, - View, - FlatList, - RefreshControl, - StatusBar, - Dimensions, - Share, - Text, -} from "react-native"; + StyleSheet, + View, + FlatList, + RefreshControl, + StatusBar, + Dimensions, + Share, + Text, +} from 'react-native'; import { - Provider, - Portal, - Appbar, - IconButton, - Menu, - FAB, -} from "react-native-paper"; -import { useDispatch, useSelector } from "react-redux"; -import * as Haptics from "expo-haptics"; + Provider, + Portal, + Appbar, + IconButton, + Menu, + FAB, +} from 'react-native-paper'; +import {useDispatch, useSelector} from 'react-redux'; +import * as Haptics from 'expo-haptics'; import { - bookmarkChapterAction, - deleteAllChaptersAction, - deleteChapterAction, - downloadAllChaptersAction, - downloadChapterAction, - getNovelAction, - markChaptersRead, - markChapterUnreadAction, - markPreviousChaptersReadAction, - setNovel, - sortAndFilterChapters, - updateNovelAction, -} from "../../redux/novel/novel.actions"; + bookmarkChapterAction, + deleteAllChaptersAction, + deleteChapterAction, + downloadAllChaptersAction, + downloadChapterAction, + getNovelAction, + markChaptersRead, + markChapterUnreadAction, + markPreviousChaptersReadAction, + setNovel, + sortAndFilterChapters, + updateNovelAction, +} from '../../redux/novel/novel.actions'; import { - useContinueReading, - useNovel, - usePreferences, - useSettings, - useTheme, -} from "../../hooks/reduxHooks"; -import { showToast } from "../../hooks/showToast"; + useContinueReading, + useNovel, + usePreferences, + useSettings, + useTheme, +} from '../../hooks/reduxHooks'; +import {showToast} from '../../hooks/showToast'; -import ChapterItem from "./components/ChapterItem"; -import NovelInfoHeader from "./components/Info/NovelInfoHeader"; -import ChaptersSettingsSheet from "./components/ChaptersSettingsSheet"; -import TrackSheet from "./components/Tracker/TrackSheet"; -import { Row } from "../../components/Common"; -import JumpToChapterModal from "./components/JumpToChapterModal"; -import { Actionbar } from "../../components/Actionbar/Actionbar"; -import EditInfoModal from "./components/EditInfoModal"; -import { pickCustomNovelCover } from "../../database/queries/NovelQueries"; -import FadeView from "../../components/Common/CrossFadeView"; +import ChapterItem from './components/ChapterItem'; +import NovelInfoHeader from './components/Info/NovelInfoHeader'; +import ChaptersSettingsSheet from './components/ChaptersSettingsSheet'; +import TrackSheet from './components/Tracker/TrackSheet'; +import {Row} from '../../components/Common'; +import JumpToChapterModal from './components/JumpToChapterModal'; +import {Actionbar} from '../../components/Actionbar/Actionbar'; +import EditInfoModal from './components/EditInfoModal'; +import {pickCustomNovelCover} from '../../database/queries/NovelQueries'; +import FadeView from '../../components/Common/CrossFadeView'; -const Novel = ({ route, navigation }) => { - const item = route.params; - const { sourceId, novelUrl, novelName, followed, novelId } = item; +const Novel = ({route, navigation}) => { + const item = route.params; + const {sourceId, novelUrl, novelName, followed, novelId} = item; - const theme = useTheme(); - const dispatch = useDispatch(); - const { novel, chapters, loading, updating } = useNovel(); - const { downloadQueue } = useSelector((state) => state.downloadsReducer); + const theme = useTheme(); + const dispatch = useDispatch(); + const {novel, chapters, loading, updating} = useNovel(); + const {downloadQueue} = useSelector(state => state.downloadsReducer); - const [selected, setSelected] = useState([]); - const [downloadMenu, showDownloadMenu] = useState(false); - const [extraMenu, showExtraMenu] = useState(false); + const [selected, setSelected] = useState([]); + const [downloadMenu, showDownloadMenu] = useState(false); + const [extraMenu, showExtraMenu] = useState(false); - let flatlistRef = useRef(null); - let chaptersSettingsSheetRef = useRef(null); - let trackerSheetRef = useRef(null); + let flatlistRef = useRef(null); + let chaptersSettingsSheetRef = useRef(null); + let trackerSheetRef = useRef(null); - const { - sort = "ORDER BY chapterId ASC", - filter = "", - showChapterTitles = false, - } = usePreferences(novel.novelId); + const { + sort = 'ORDER BY chapterId ASC', + filter = '', + showChapterTitles = false, + } = usePreferences(novel.novelId); - let { lastReadChapter, position } = useContinueReading( - chapters, - novel.novelId + let {lastReadChapter, position} = useContinueReading(chapters, novel.novelId); + + const {useFabForContinueReading = lastReadChapter && false} = useSettings(); + + useEffect(() => { + dispatch( + getNovelAction(followed, sourceId, novelUrl, novelId, sort, filter), + ); + }, [getNovelAction]); + + const onRefresh = () => { + dispatch(updateNovelAction(sourceId, novelUrl, novelId, sort, filter)); + showToast(`Updated ${novelName}`); + }; + + const refreshControl = () => ( + + ); + + const [jumpToChapterModal, showJumpToChapterModal] = useState(false); + + const keyExtractor = useCallback(item => item.chapterId.toString(), []); + + const downloadChapter = (chapterUrl, chapterName, chapterId) => + dispatch( + downloadChapterAction( + sourceId, + novelUrl, + chapterUrl, + chapterName, + chapterId, + ), ); - const { useFabForContinueReading = lastReadChapter && false } = - useSettings(); + const deleteChapter = (chapterId, chapterName) => + dispatch(deleteChapterAction(chapterId, chapterName)); - useEffect(() => { - dispatch( - getNovelAction(followed, sourceId, novelUrl, novelId, sort, filter) + const isSelected = chapterId => { + return selected.some(obj => obj.chapterId === chapterId); + }; + + const onSelectPress = (chapter, navigateToChapter) => { + if (selected.length === 0) { + navigateToChapter(); + } else { + if (isSelected(chapter.chapterId)) { + setSelected(selected => + selected.filter(item => item.chapterId !== chapter.chapterId), ); - }, [getNovelAction]); + } else { + setSelected(selected => [...selected, chapter]); + } + } + }; - const onRefresh = () => { - dispatch(updateNovelAction(sourceId, novelUrl, novelId, sort, filter)); - showToast(`Updated ${novelName}`); - }; + const onSelectLongPress = chapter => { + if (selected.length === 0) { + Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Medium); + setSelected(selected => [...selected, chapter]); + } else { + /** + * Select custom range + */ + const lastSelectedChapter = selected[selected.length - 1]; - const refreshControl = () => ( - - ); - - const [jumpToChapterModal, showJumpToChapterModal] = useState(false); - - const keyExtractor = useCallback((item) => item.chapterId.toString(), []); - - const downloadChapter = (chapterUrl, chapterName, chapterId) => - dispatch( - downloadChapterAction( - sourceId, - novelUrl, - chapterUrl, - chapterName, - chapterId - ) - ); - - const deleteChapter = (chapterId, chapterName) => - dispatch(deleteChapterAction(chapterId, chapterName)); - - const isSelected = (chapterId) => { - return selected.some((obj) => obj.chapterId === chapterId); - }; - - const onSelectPress = (chapter, navigateToChapter) => { - if (selected.length === 0) { - navigateToChapter(); + if (lastSelectedChapter.chapterId !== chapter.chapterId) { + if (lastSelectedChapter.chapterId > chapter.chapterId) { + setSelected(selected => [ + ...selected, + chapter, + ...chapters.filter( + chap => + (chap.chapterId <= chapter.chapterId || + chap.chapterId >= lastSelectedChapter.chapterId) === false, + ), + ]); } else { - if (isSelected(chapter.chapterId)) { - setSelected((selected) => - selected.filter( - (item) => item.chapterId !== chapter.chapterId - ) - ); - } else { - setSelected((selected) => [...selected, chapter]); - } + setSelected(selected => [ + ...selected, + chapter, + ...chapters.filter( + chap => + (chap.chapterId >= chapter.chapterId || + chap.chapterId <= lastSelectedChapter.chapterId) === false, + ), + ]); } - }; + } + } + }; - const onSelectLongPress = (chapter) => { - if (selected.length === 0) { - Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Medium); - setSelected((selected) => [...selected, chapter]); - } else { - /** - * Select custom range - */ - const lastSelectedChapter = selected[selected.length - 1]; + const navigateToChapter = chapter => + navigation.navigate('Chapter', { + sourceId, + novelUrl, + novelName, + ...chapter, + }); - if (lastSelectedChapter.chapterId !== chapter.chapterId) { - if (lastSelectedChapter.chapterId > chapter.chapterId) { - setSelected((selected) => [ - ...selected, - chapter, - ...chapters.filter( - (chap) => - (chap.chapterId <= chapter.chapterId || - chap.chapterId >= - lastSelectedChapter.chapterId) === false - ), - ]); - } else { - setSelected((selected) => [ - ...selected, - chapter, - ...chapters.filter( - (chap) => - (chap.chapterId >= chapter.chapterId || - chap.chapterId <= - lastSelectedChapter.chapterId) === false - ), - ]); + const showProgressPercentage = chapter => { + const savedProgress = + position && + position[chapter.chapterId] && + position[chapter.chapterId].percentage; + if (savedProgress < 100 && savedProgress > 0 && !chapter.read) { + return ( + + {chapter.releaseDate && '• '} + {'Progress ' + position[chapter.chapterId].percentage + '%'} + + ); + } + }; + + const setCustomNovelCover = async () => { + const cover = await pickCustomNovelCover(novelId); + + if (cover) { + dispatch( + setNovel({ + ...novel, + novelCover: cover, + }), + ); + } + + showExtraMenu(false); + }; + + const renderItem = ({item, index}) => ( + + ); + + const [editInfoModal, showEditInfoModal] = useState(false); + + return ( + + + + + setSelected([])} + /> + + + { + setSelected(chapters); + }} + /> + + + {selected.length == 0 && ( + + navigation.goBack()} + /> + + + Share.share({ + message: novel.sourceUrl, + }) } - } - } - }; + /> + showJumpToChapterModal(true)} + /> - const navigateToChapter = (chapter) => - navigation.navigate("Chapter", { - sourceId, - novelUrl, - novelName, - ...chapter, - }); - - const showProgressPercentage = (chapter) => { - const savedProgress = - position && - position[chapter.chapterId] && - position[chapter.chapterId].percentage; - if (savedProgress < 100 && savedProgress > 0 && !chapter.read) { - return ( - showDownloadMenu(false)} + anchor={ + - {chapter.releaseDate && "• "} - {"Progress " + position[chapter.chapterId].percentage + "%"} - - ); - } - }; - - const setCustomNovelCover = async () => { - const cover = await pickCustomNovelCover(novelId); - - if (cover) { - dispatch( - setNovel({ - ...novel, - novelCover: cover, - }) - ); - } - - showExtraMenu(false); - }; - - const renderItem = ({ item, index }) => ( - - ); - - const [editInfoModal, showEditInfoModal] = useState(false); - - return ( - - - - - setSelected([])} - /> - - - { - setSelected(chapters); - }} - /> - - - {selected.length == 0 && ( - - navigation.goBack()} - /> - - - Share.share({ - message: novel.sourceUrl, - }) - } - /> - showJumpToChapterModal(true)} - /> - - showDownloadMenu(false)} - anchor={ - showDownloadMenu(true)} - /> - } - contentStyle={{ - backgroundColor: theme.menuColor, - }} - > - - dispatch( - downloadAllChaptersAction( - novel.sourceId, - novel.novelUrl, - chapters - ) - ) - } - /> - - dispatch( - downloadAllChaptersAction( - novel.sourceId, - novel.novelUrl, - chapters.filter( - (chapter) => - !!chapter.read === false - ) - ) - ) - } - /> - - dispatch( - deleteAllChaptersAction(chapters) - ) - } - /> - - - showExtraMenu(false)} - anchor={ - showExtraMenu(true)} - /> - } - contentStyle={{ - backgroundColor: theme.menuColor, - }} - > - { - showEditInfoModal(true); - showExtraMenu(false); - }} - /> - - - - - )} - (flatlistRef.current = ref)} - data={!loading && chapters} - keyExtractor={keyExtractor} - removeClippedSubviews={true} - maxToRenderPerBatch={5} - windowSize={15} - initialNumToRender={7} - renderItem={renderItem} - contentContainerStyle={{ paddingBottom: 100 }} - ListHeaderComponent={ - - } - refreshControl={refreshControl()} + onPress={() => showDownloadMenu(true)} + /> + } + contentStyle={{ + backgroundColor: theme.menuColor, + }} + > + + dispatch( + downloadAllChaptersAction( + novel.sourceId, + novel.novelUrl, + chapters, + ), + ) + } /> - {useFabForContinueReading && - !loading && - chapters.length > 0 && - lastReadChapter && ( - - navigation.navigate("Chapter", { - chapterId: lastReadChapter.chapterId, - chapterUrl: lastReadChapter.chapterUrl, - novelUrl: novel.novelUrl, - novelId: lastReadChapter.novelId, - sourceId: novel.sourceId, - chapterName: lastReadChapter.chapterName, - novelName: novel.novelName, - bookmark: lastReadChapter.bookmark, - }) - } - /> - )} - - 0} - theme={theme} - style={{ marginBottom: 24 }} - actions={[ - selected.some((obj) => obj.downloaded === 0) && { - icon: "download-outline", - onPress: () => { - dispatch( - downloadAllChaptersAction( - novel.sourceId, - novel.novelUrl, - selected - ) - ); - setSelected([]); - }, - }, - selected.some((obj) => obj.downloaded === 1) && { - icon: "trash-can-outline", - onPress: () => { - dispatch(deleteAllChaptersAction(selected)); - setSelected([]); - }, - }, - { - icon: "bookmark-outline", - onPress: () => { - dispatch(bookmarkChapterAction(selected)); - setSelected([]); - }, - }, - selected.some((obj) => obj.read === 0) && { - icon: "check", - onPress: () => { - dispatch( - markChaptersRead( - selected, - novel.novelId, - sort, - filter - ) - ); - setSelected([]); - }, - }, - selected.some((obj) => obj.read === 1) && { - icon: "check-outline", - onPress: () => { - dispatch( - markChapterUnreadAction( - selected, - novel.novelId - ) - ); - setSelected([]); - }, - }, - selected.length === 1 && { - icon: "playlist-check", - onPress: () => { - dispatch( - markPreviousChaptersReadAction( - selected[0].chapterId, - selected[0].novelId - ) - ); - setSelected([]); - }, - }, - ]} - /> - - {!loading && ( - - showJumpToChapterModal(false)} - theme={theme} - chapters={chapters} - novel={novel} - navigation={navigation} - /> - showEditInfoModal(false)} - novel={novel} - theme={theme} - dispatch={dispatch} - /> - - - - )} - - - ); + + dispatch( + downloadAllChaptersAction( + novel.sourceId, + novel.novelUrl, + chapters.filter(chapter => !!chapter.read === false), + ), + ) + } + /> + dispatch(deleteAllChaptersAction(chapters))} + /> + + + showExtraMenu(false)} + anchor={ + showExtraMenu(true)} + /> + } + contentStyle={{ + backgroundColor: theme.menuColor, + }} + > + { + showEditInfoModal(true); + showExtraMenu(false); + }} + /> + + + + + )} + (flatlistRef.current = ref)} + data={!loading && chapters} + keyExtractor={keyExtractor} + removeClippedSubviews={true} + maxToRenderPerBatch={5} + windowSize={15} + initialNumToRender={7} + renderItem={renderItem} + contentContainerStyle={{paddingBottom: 100}} + ListHeaderComponent={ + + } + refreshControl={refreshControl()} + /> + {useFabForContinueReading && + !loading && + chapters.length > 0 && + lastReadChapter && ( + + navigation.navigate('Chapter', { + chapterId: lastReadChapter.chapterId, + chapterUrl: lastReadChapter.chapterUrl, + novelUrl: novel.novelUrl, + novelId: lastReadChapter.novelId, + sourceId: novel.sourceId, + chapterName: lastReadChapter.chapterName, + novelName: novel.novelName, + bookmark: lastReadChapter.bookmark, + }) + } + /> + )} + + 0} + theme={theme} + style={{marginBottom: 24}} + actions={[ + selected.some(obj => obj.downloaded === 0) && { + icon: 'download-outline', + onPress: () => { + dispatch( + downloadAllChaptersAction( + novel.sourceId, + novel.novelUrl, + selected, + ), + ); + setSelected([]); + }, + }, + selected.some(obj => obj.downloaded === 1) && { + icon: 'trash-can-outline', + onPress: () => { + dispatch(deleteAllChaptersAction(selected)); + setSelected([]); + }, + }, + { + icon: 'bookmark-outline', + onPress: () => { + dispatch(bookmarkChapterAction(selected)); + setSelected([]); + }, + }, + selected.some(obj => obj.read === 0) && { + icon: 'check', + onPress: () => { + dispatch( + markChaptersRead(selected, novel.novelId, sort, filter), + ); + setSelected([]); + }, + }, + selected.some(obj => obj.read === 1) && { + icon: 'check-outline', + onPress: () => { + dispatch(markChapterUnreadAction(selected, novel.novelId)); + setSelected([]); + }, + }, + selected.length === 1 && { + icon: 'playlist-check', + onPress: () => { + dispatch( + markPreviousChaptersReadAction( + selected[0].chapterId, + selected[0].novelId, + ), + ); + setSelected([]); + }, + }, + ]} + /> + + {!loading && ( + + showJumpToChapterModal(false)} + theme={theme} + chapters={chapters} + novel={novel} + navigation={navigation} + /> + showEditInfoModal(false)} + novel={novel} + theme={theme} + dispatch={dispatch} + /> + + + + )} + + + ); }; export default Novel; const styles = StyleSheet.create({ - container: { flex: 1 }, - rowBack: { - alignItems: "center", - flex: 1, - flexDirection: "row", - justifyContent: "space-between", - }, - fab: { - position: "absolute", - margin: 16, - right: 0, - bottom: 16, - }, + container: {flex: 1}, + rowBack: { + alignItems: 'center', + flex: 1, + flexDirection: 'row', + justifyContent: 'space-between', + }, + fab: { + position: 'absolute', + margin: 16, + right: 0, + bottom: 16, + }, }); diff --git a/src/screens/Novel/components/Chapter/ChapterDownloadButtons.js b/src/screens/Novel/components/Chapter/ChapterDownloadButtons.js index abffd23d..4d712ec4 100644 --- a/src/screens/Novel/components/Chapter/ChapterDownloadButtons.js +++ b/src/screens/Novel/components/Chapter/ChapterDownloadButtons.js @@ -1,93 +1,88 @@ -import React from "react"; -import { ActivityIndicator } from "react-native"; +import React from 'react'; +import {ActivityIndicator} from 'react-native'; -import { IconButton, Menu } from "react-native-paper"; +import {IconButton, Menu} from 'react-native-paper'; export const DownloadButton = ({ - downloadQueue, - chapter, - theme, - deleteChapter, - downloadChapter, - hideDeleteChapterMenu, - showDeleteChapterMenu, - deleteChapterMenu, + downloadQueue, + chapter, + theme, + deleteChapter, + downloadChapter, + hideDeleteChapterMenu, + showDeleteChapterMenu, + deleteChapterMenu, }) => { - if (downloadQueue.some((chap) => chap.chapterId === chapter.chapterId)) { - return ; - } else if (chapter.downloaded === 1) { - return ( - - } - contentStyle={{ backgroundColor: theme.menuColor }} - > - - deleteChapter(chapter.chapterId, chapter.chapterName) - } - title="Delete" - titleStyle={{ color: theme.textColorPrimary }} - /> - - ); - } else { - return ( - - downloadChapter( - chapter.chapterUrl, - chapter.chapterName, - chapter.chapterId - ) - } - /> - ); - } + if (downloadQueue.some(chap => chap.chapterId === chapter.chapterId)) { + return ; + } else if (chapter.downloaded === 1) { + return ( + + } + contentStyle={{backgroundColor: theme.menuColor}} + > + deleteChapter(chapter.chapterId, chapter.chapterName)} + title="Delete" + titleStyle={{color: theme.textColorPrimary}} + /> + + ); + } else { + return ( + + downloadChapter( + chapter.chapterUrl, + chapter.chapterName, + chapter.chapterId, + ) + } + /> + ); + } }; -export const ChapterDownloadingButton = ({ theme }) => ( - +export const ChapterDownloadingButton = ({theme}) => ( + ); -export const DownloadChapterButton = ({ theme, onPress }) => ( - +export const DownloadChapterButton = ({theme, onPress}) => ( + ); -export const DeleteChapterButton = ({ theme, onPress }) => ( - +export const DeleteChapterButton = ({theme, onPress}) => ( + ); -export const ChapterBookmarkButton = ({ theme }) => ( - +export const ChapterBookmarkButton = ({theme}) => ( + ); diff --git a/src/screens/Novel/components/ChapterItem.js b/src/screens/Novel/components/ChapterItem.js index 55ff906c..f4076380 100644 --- a/src/screens/Novel/components/ChapterItem.js +++ b/src/screens/Novel/components/ChapterItem.js @@ -1,110 +1,104 @@ -import React, { memo, useState } from "react"; -import { View, Text, StyleSheet, Pressable } from "react-native"; +import React, {memo, useState} from 'react'; +import {View, Text, StyleSheet, Pressable} from 'react-native'; -import { Row } from "../../../components/Common"; +import {Row} from '../../../components/Common'; -import { parseChapterNumber } from "../../../services/utils/helpers"; +import {parseChapterNumber} from '../../../services/utils/helpers'; import { - ChapterBookmarkButton, - DownloadButton, -} from "./Chapter/ChapterDownloadButtons"; + ChapterBookmarkButton, + DownloadButton, +} from './Chapter/ChapterDownloadButtons'; const ChapterItem = ({ - chapter, - theme, - index, - showChapterTitles, - downloadQueue, - downloadChapter, - deleteChapter, - isSelected, - onSelectPress, - onSelectLongPress, - navigateToChapter, - showProgressPercentage, + chapter, + theme, + index, + showChapterTitles, + downloadQueue, + downloadChapter, + deleteChapter, + isSelected, + onSelectPress, + onSelectLongPress, + navigateToChapter, + showProgressPercentage, }) => { - const { chapterId, chapterName, read, releaseDate, bookmark } = chapter; + const {chapterId, chapterName, read, releaseDate, bookmark} = chapter; - const [deleteChapterMenu, setDeleteChapterMenu] = useState(false); - const showDeleteChapterMenu = () => setDeleteChapterMenu(true); - const hideDeleteChapterMenu = () => setDeleteChapterMenu(false); + const [deleteChapterMenu, setDeleteChapterMenu] = useState(false); + const showDeleteChapterMenu = () => setDeleteChapterMenu(true); + const hideDeleteChapterMenu = () => setDeleteChapterMenu(false); - return ( - - onSelectPress(chapter, () => navigateToChapter(chapter)) - } - onLongPress={() => onSelectLongPress(chapter)} - android_ripple={{ color: theme.rippleColor }} - > - - {!!bookmark && } - - - {showChapterTitles - ? parseChapterNumber(chapterName) - ? "Chapter " + parseChapterNumber(chapterName) - : "Chapter " + index - : chapterName} - - - {releaseDate && ( - - {releaseDate} - - )} - {showProgressPercentage(chapter)} - - - - - - ); + return ( + onSelectPress(chapter, () => navigateToChapter(chapter))} + onLongPress={() => onSelectLongPress(chapter)} + android_ripple={{color: theme.rippleColor}} + > + + {!!bookmark && } + + + {showChapterTitles + ? parseChapterNumber(chapterName) + ? 'Chapter ' + parseChapterNumber(chapterName) + : 'Chapter ' + index + : chapterName} + + + {releaseDate && ( + + {releaseDate} + + )} + {showProgressPercentage(chapter)} + + + + + + ); }; export default memo(ChapterItem); const styles = StyleSheet.create({ - chapterCardContainer: { - paddingHorizontal: 15, - paddingVertical: 7, - flexDirection: "row", - justifyContent: "space-between", - alignItems: "center", - }, + chapterCardContainer: { + paddingHorizontal: 15, + paddingVertical: 7, + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + }, }); diff --git a/src/screens/Novel/components/ChaptersSettingsSheet.js b/src/screens/Novel/components/ChaptersSettingsSheet.js index 7036af07..5f04c2eb 100644 --- a/src/screens/Novel/components/ChaptersSettingsSheet.js +++ b/src/screens/Novel/components/ChaptersSettingsSheet.js @@ -1,202 +1,192 @@ -import React, { useState } from "react"; +import React, {useState} from 'react'; import { - StyleSheet, - View, - Text, - Animated, - useWindowDimensions, -} from "react-native"; + StyleSheet, + View, + Text, + Animated, + useWindowDimensions, +} from 'react-native'; -import { TabView, SceneMap, TabBar } from "react-native-tab-view"; -import { Checkbox as PaperCheckbox } from "react-native-paper"; -import Bottomsheet from "rn-sliding-up-panel"; +import {TabView, SceneMap, TabBar} from 'react-native-tab-view'; +import {Checkbox as PaperCheckbox} from 'react-native-paper'; +import Bottomsheet from 'rn-sliding-up-panel'; -import { Checkbox, SortItem } from "../../../components/Checkbox/Checkbox"; +import {Checkbox, SortItem} from '../../../components/Checkbox/Checkbox'; -import { showChapterTitlesAction } from "../../../redux/novel/novel.actions"; +import {showChapterTitlesAction} from '../../../redux/novel/novel.actions'; const ChaptersSettingsSheet = ({ - bottomSheetRef, - novelId, - sortAndFilterChapters, - dispatch, - sort, - filter, - theme, - showChapterTitles, + bottomSheetRef, + novelId, + sortAndFilterChapters, + dispatch, + sort, + filter, + theme, + showChapterTitles, }) => { - const sortChapters = (val) => - dispatch(sortAndFilterChapters(novelId, val, filter)); + const sortChapters = val => + dispatch(sortAndFilterChapters(novelId, val, filter)); - const filterChapters = (val) => - dispatch(sortAndFilterChapters(novelId, sort, val)); + const filterChapters = val => + dispatch(sortAndFilterChapters(novelId, sort, val)); - const [animatedValue] = useState(new Animated.Value(0)); + const [animatedValue] = useState(new Animated.Value(0)); - const FirstRoute = () => ( - - - filter.match("AND downloaded=1") - ? filterChapters( - filter.replace(" AND downloaded=1", "") - ) - : filterChapters(filter + " AND downloaded=1") - } - /> - { - if (filter.match("AND `read`=0")) { - filterChapters( - filter.replace(" AND `read`=0", " AND `read`=1") - ); - } else if (filter.match("AND `read`=1")) { - filterChapters(filter.replace(" AND `read`=1", "")); - } else { - filterChapters(filter + " AND `read`=0"); - } - }} - /> - { - filter.match("AND bookmark=1") - ? filterChapters(filter.replace(" AND bookmark=1", "")) - : filterChapters(filter + " AND bookmark=1"); - }} - /> - - ); + const FirstRoute = () => ( + + + filter.match('AND downloaded=1') + ? filterChapters(filter.replace(' AND downloaded=1', '')) + : filterChapters(filter + ' AND downloaded=1') + } + /> + { + if (filter.match('AND `read`=0')) { + filterChapters(filter.replace(' AND `read`=0', ' AND `read`=1')); + } else if (filter.match('AND `read`=1')) { + filterChapters(filter.replace(' AND `read`=1', '')); + } else { + filterChapters(filter + ' AND `read`=0'); + } + }} + /> + { + filter.match('AND bookmark=1') + ? filterChapters(filter.replace(' AND bookmark=1', '')) + : filterChapters(filter + ' AND bookmark=1'); + }} + /> + + ); - const SecondRoute = () => ( - - - sort === "ORDER BY chapterId ASC" - ? sortChapters("ORDER BY chapterId DESC") - : sortChapters("ORDER BY chapterId ASC") - } - theme={theme} - /> - - ); + const SecondRoute = () => ( + + + sort === 'ORDER BY chapterId ASC' + ? sortChapters('ORDER BY chapterId DESC') + : sortChapters('ORDER BY chapterId ASC') + } + theme={theme} + /> + + ); - const ThirdRoute = () => ( - - - dispatch(showChapterTitlesAction(novelId, false)) - } - theme={theme} - /> - dispatch(showChapterTitlesAction(novelId, true))} - theme={theme} - /> - - ); + const ThirdRoute = () => ( + + dispatch(showChapterTitlesAction(novelId, false))} + theme={theme} + /> + dispatch(showChapterTitlesAction(novelId, true))} + theme={theme} + /> + + ); - const renderScene = SceneMap({ - first: FirstRoute, - second: SecondRoute, - third: ThirdRoute, - }); + const renderScene = SceneMap({ + first: FirstRoute, + second: SecondRoute, + third: ThirdRoute, + }); - const layout = useWindowDimensions(); + const layout = useWindowDimensions(); - const [index, setIndex] = useState(0); - const [routes] = useState([ - { key: "first", title: "Filter" }, - { key: "second", title: "Sort" }, - { key: "third", title: "Display" }, - ]); + const [index, setIndex] = useState(0); + const [routes] = useState([ + {key: 'first', title: 'Filter'}, + {key: 'second', title: 'Sort'}, + {key: 'third', title: 'Display'}, + ]); - const renderTabBar = (props) => ( - ( - {route.title} - )} - inactiveColor={theme.textColorSecondary} - activeColor={theme.colorAccent} - pressColor={theme.rippleColor} + const renderTabBar = props => ( + ( + {route.title} + )} + inactiveColor={theme.textColorSecondary} + activeColor={theme.colorAccent} + pressColor={theme.rippleColor} + /> + ); + + return ( + + + - ); - - return ( - - - - - - ); + + + ); }; export default ChaptersSettingsSheet; const styles = StyleSheet.create({ - contentContainer: { - flex: 1, - borderTopRightRadius: 8, - borderTopLeftRadius: 8, - }, + contentContainer: { + flex: 1, + borderTopRightRadius: 8, + borderTopLeftRadius: 8, + }, }); diff --git a/src/screens/Novel/components/EditInfoModal.js b/src/screens/Novel/components/EditInfoModal.js index 53a3692b..3c963735 100644 --- a/src/screens/Novel/components/EditInfoModal.js +++ b/src/screens/Novel/components/EditInfoModal.js @@ -1,255 +1,231 @@ -import React, { useState } from "react"; +import React, {useState} from 'react'; import { - FlatList, - Pressable, - ScrollView, - StyleSheet, - Text, - View, -} from "react-native"; + FlatList, + Pressable, + ScrollView, + StyleSheet, + Text, + View, +} from 'react-native'; -import MaterialCommunityIcons from "react-native-vector-icons/MaterialCommunityIcons"; -import { Button, Modal, Portal, Switch, TextInput } from "react-native-paper"; -import { setNovel } from "../../../redux/novel/novel.actions"; -import { updateNovelInfo } from "../../../database/queries/NovelQueries"; +import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons'; +import {Button, Modal, Portal, Switch, TextInput} from 'react-native-paper'; +import {setNovel} from '../../../redux/novel/novel.actions'; +import {updateNovelInfo} from '../../../database/queries/NovelQueries'; -const EditInfoModal = ({ theme, hideModal, modalVisible, novel, dispatch }) => { - const [info, setInfo] = useState(novel); +const EditInfoModal = ({theme, hideModal, modalVisible, novel, dispatch}) => { + const [info, setInfo] = useState(novel); - const [tag, setTag] = useState(""); + const [tag, setTag] = useState(''); - const textInputTheme = { - colors: { - primary: theme.colorAccent, - placeholder: theme.textColorHint, - text: theme.textColorPrimary, - background: theme.colorPrimary, - }, - }; + const textInputTheme = { + colors: { + primary: theme.colorAccent, + placeholder: theme.textColorHint, + text: theme.textColorPrimary, + background: theme.colorPrimary, + }, + }; - const removeTag = (tag) => { - let tags = info.genre.split(",").filter((item) => item !== tag); - setInfo({ ...info, genre: tags.join(",") }); - }; + const removeTag = tag => { + let tags = info.genre.split(',').filter(item => item !== tag); + setInfo({...info, genre: tags.join(',')}); + }; - const status = ["Ongoing", "Hiatus", "Completed", "Unknown", "Cancelled"]; + const status = ['Ongoing', 'Hiatus', 'Completed', 'Unknown', 'Cancelled']; - return ( - - - + + + Edit info + + + Status: + + {status.map(item => ( + + setInfo({...info, status: item})} > - Edit info - - - - Status: - - - {status.map((item) => ( - - - setInfo({ ...info, status: item }) - } - > - - {item} - - - - ))} - - - - setInfo({ ...info, novelName: text }) - } - dense - /> - setInfo({ ...info, author: text })} - dense - /> - - setInfo({ ...info, novelSummary: text }) - } - theme={textInputTheme} - dense - /> + > + {item} + + + + ))} + + + setInfo({...info, novelName: text})} + dense + /> + setInfo({...info, author: text})} + dense + /> + setInfo({...info, novelSummary: text})} + theme={textInputTheme} + dense + /> - setTag(text)} - onSubmitEditing={() => { - setInfo({ ...info, genre: info.genre + "," + tag }); - setTag(""); - }} - theme={textInputTheme} - dense - /> + setTag(text)} + onSubmitEditing={() => { + setInfo({...info, genre: info.genre + ',' + tag}); + setTag(''); + }} + theme={textInputTheme} + dense + /> - {info.genre !== null && info.genre !== "" && ( - item} - renderItem={({ item }) => ( - removeTag(item)} - > - {item} - - )} - showsHorizontalScrollIndicator={false} - /> - )} - - - - - - - ); + {info.genre !== null && info.genre !== '' && ( + item} + renderItem={({item}) => ( + removeTag(item)}> + {item} + + )} + showsHorizontalScrollIndicator={false} + /> + )} + + + + + + + ); }; export default EditInfoModal; -const GenreChip = ({ children, theme, onPress }) => ( - ( + + - - {children} - - - + {children} + + + ); const styles = StyleSheet.create({ - modalContainer: { - margin: 30, - padding: 20, - borderRadius: 8, - }, - modalTitle: { - fontSize: 18, - marginBottom: 16, - }, - errorText: { - color: "#FF0033", - paddingTop: 8, - }, - genreChip: {}, + modalContainer: { + margin: 30, + padding: 20, + borderRadius: 8, + }, + modalTitle: { + fontSize: 18, + marginBottom: 16, + }, + errorText: { + color: '#FF0033', + paddingTop: 8, + }, + genreChip: {}, }); diff --git a/src/screens/Novel/components/Info/NovelInfoComponents.js b/src/screens/Novel/components/Info/NovelInfoComponents.js index e8cbc218..4a0629dd 100644 --- a/src/screens/Novel/components/Info/NovelInfoComponents.js +++ b/src/screens/Novel/components/Info/NovelInfoComponents.js @@ -1,301 +1,299 @@ -import React, { useState } from "react"; +import React, {useState} from 'react'; import { - FlatList, - StyleSheet, - Text, - View, - Pressable, - Dimensions, - StatusBar, -} from "react-native"; + FlatList, + StyleSheet, + Text, + View, + Pressable, + Dimensions, + StatusBar, +} from 'react-native'; -import { IconButton, Portal } from "react-native-paper"; -import { LinearGradient } from "expo-linear-gradient"; -import easeGradient from "react-native-easing-gradient"; -import FastImage from "react-native-fast-image"; -import { TouchableWithoutFeedback } from "react-native-gesture-handler"; +import {IconButton, Portal} from 'react-native-paper'; +import {LinearGradient} from 'expo-linear-gradient'; +import easeGradient from 'react-native-easing-gradient'; +import FastImage from 'react-native-fast-image'; +import {TouchableWithoutFeedback} from 'react-native-gesture-handler'; -const NovelInfoContainer = ({ children }) => ( - {children} +const NovelInfoContainer = ({children}) => ( + {children} ); -const CoverImage = ({ children, source, theme, hideBackdrop }) => { - const { colors, locations } = easeGradient({ - colorStops: { - 0: { color: "rgba(0,0,0,0)" }, - 1: { color: theme.colorPrimaryDark }, - }, - }); - - if (hideBackdrop) { - return {children}; - } else { - return ( - - - - {children} - - - - ); - } -}; - -const NovelThumbnail = ({ source, setCustomNovelCover }) => { - const [expanded, setExpanded] = useState(false); - - if (!expanded) { - return ( - setExpanded(!expanded)}> - - - ); - } else { - return ( - - setExpanded(false)} - /> - - setExpanded(false)} - > - - - - ); - } -}; - -const NovelTitle = ({ theme, children, onLongPress, onPress }) => ( - - {children} - -); - -const NovelAuthor = ({ theme, children }) => ( - - {children} - -); - -const NovelInfo = ({ theme, children }) => ( - - {children} - -); - -const FollowButton = ({ theme, onPress, followed }) => ( - - - - - {followed ? "In Library" : "Add to library"} - - - -); - -const TrackerButton = ({ theme, isTracked, onPress }) => ( - - - - - {isTracked ? "Tracked" : "Tracking"} - - - -); - -const GenreChip = ({ children, theme }) => ( - - {children} - -); - -const NovelGenres = ({ theme, genre }) => { - const data = genre.split(","); - - const renderItem = ({ item }) => ( - {item} - ); +const CoverImage = ({children, source, theme, hideBackdrop}) => { + const {colors, locations} = easeGradient({ + colorStops: { + 0: {color: 'rgba(0,0,0,0)'}, + 1: {color: theme.colorPrimaryDark}, + }, + }); + if (hideBackdrop) { + return {children}; + } else { return ( - item} - renderItem={renderItem} - showsHorizontalScrollIndicator={false} - /> + + + + {children} + + + ); + } +}; + +const NovelThumbnail = ({source, setCustomNovelCover}) => { + const [expanded, setExpanded] = useState(false); + + if (!expanded) { + return ( + setExpanded(!expanded)}> + + + ); + } else { + return ( + + setExpanded(false)} + /> + + setExpanded(false)} + > + + + + ); + } +}; + +const NovelTitle = ({theme, children, onLongPress, onPress}) => ( + + {children} + +); + +const NovelAuthor = ({theme, children}) => ( + + {children} + +); + +const NovelInfo = ({theme, children}) => ( + + {children} + +); + +const FollowButton = ({theme, onPress, followed}) => ( + + + + + {followed ? 'In Library' : 'Add to library'} + + + +); + +const TrackerButton = ({theme, isTracked, onPress}) => ( + + + + + {isTracked ? 'Tracked' : 'Tracking'} + + + +); + +const GenreChip = ({children, theme}) => ( + + {children} + +); + +const NovelGenres = ({theme, genre}) => { + const data = genre.split(','); + + const renderItem = ({item}) => {item}; + + return ( + item} + renderItem={renderItem} + showsHorizontalScrollIndicator={false} + /> + ); }; export { - NovelInfoContainer, - CoverImage, - NovelThumbnail, - NovelTitle, - NovelAuthor, - NovelInfo, - FollowButton, - TrackerButton, - NovelGenres, + NovelInfoContainer, + CoverImage, + NovelThumbnail, + NovelTitle, + NovelAuthor, + NovelInfo, + FollowButton, + TrackerButton, + NovelGenres, }; const styles = StyleSheet.create({ - novelInfoContainer: { - flexDirection: "row", - margin: 16, - marginTop: 28, - marginBottom: 0, - paddingTop: 90, - }, - coverImage: { - height: 270, - }, - linearGradient: { - height: 271, - }, - novelThumbnail: { - height: 150, - width: 100, - marginHorizontal: 4, - borderRadius: 6, - }, - novelTitle: { - fontSize: 18, - }, - novelAuthor: { - marginVertical: 5, - fontSize: 14, - fontWeight: "bold", - }, - novelInfo: { - fontSize: 14, - }, - followButton: { - height: 32, - justifyContent: "center", - alignItems: "center", - marginLeft: 16, - paddingLeft: 4, - borderWidth: 0, - elevation: 0, - }, - novelGenres: { - paddingHorizontal: 16, - marginBottom: 8, - }, - genreChip: { - flex: 1, - justifyContent: "center", - paddingVertical: 5, - paddingHorizontal: 12, - marginHorizontal: 2, - fontSize: 12, - borderRadius: 50, - textTransform: "capitalize", - }, + novelInfoContainer: { + flexDirection: 'row', + margin: 16, + marginTop: 28, + marginBottom: 0, + paddingTop: 90, + }, + coverImage: { + height: 270, + }, + linearGradient: { + height: 271, + }, + novelThumbnail: { + height: 150, + width: 100, + marginHorizontal: 4, + borderRadius: 6, + }, + novelTitle: { + fontSize: 18, + }, + novelAuthor: { + marginVertical: 5, + fontSize: 14, + fontWeight: 'bold', + }, + novelInfo: { + fontSize: 14, + }, + followButton: { + height: 32, + justifyContent: 'center', + alignItems: 'center', + marginLeft: 16, + paddingLeft: 4, + borderWidth: 0, + elevation: 0, + }, + novelGenres: { + paddingHorizontal: 16, + marginBottom: 8, + }, + genreChip: { + flex: 1, + justifyContent: 'center', + paddingVertical: 5, + paddingHorizontal: 12, + marginHorizontal: 2, + fontSize: 12, + borderRadius: 50, + textTransform: 'capitalize', + }, }); diff --git a/src/screens/Novel/components/Info/NovelInfoHeader.js b/src/screens/Novel/components/Info/NovelInfoHeader.js index df58a88f..f5a59d71 100644 --- a/src/screens/Novel/components/Info/NovelInfoHeader.js +++ b/src/screens/Novel/components/Info/NovelInfoHeader.js @@ -1,28 +1,28 @@ -import React, { memo } from "react"; -import { View, Text, StyleSheet, Clipboard, Pressable } from "react-native"; +import React, {memo} from 'react'; +import {View, Text, StyleSheet, Clipboard, Pressable} from 'react-native'; -import * as WebBrowser from "expo-web-browser"; -import { IconButton } from "react-native-paper"; -import MaterialCommunityIcons from "react-native-vector-icons/MaterialCommunityIcons"; +import * as WebBrowser from 'expo-web-browser'; +import {IconButton} from 'react-native-paper'; +import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons'; -import { followNovelAction } from "../../../../redux/novel/novel.actions"; -import { useTrackingStatus, useSettings } from "../../../../hooks/reduxHooks"; -import { showToast } from "../../../../hooks/showToast"; +import {followNovelAction} from '../../../../redux/novel/novel.actions'; +import {useTrackingStatus, useSettings} from '../../../../hooks/reduxHooks'; +import {showToast} from '../../../../hooks/showToast'; import { - CoverImage, - NovelAuthor, - NovelInfo, - NovelInfoContainer, - NovelThumbnail, - NovelTitle, - FollowButton, - TrackerButton, - NovelGenres, -} from "./NovelInfoComponents"; -import { Row } from "../../../../components/Common"; -import NovelSummary from "./NovelSummary"; -import ReadButton from "./ReadButton"; + CoverImage, + NovelAuthor, + NovelInfo, + NovelInfoContainer, + NovelThumbnail, + NovelTitle, + FollowButton, + TrackerButton, + NovelGenres, +} from './NovelInfoComponents'; +import {Row} from '../../../../components/Common'; +import NovelSummary from './NovelSummary'; +import ReadButton from './ReadButton'; // const getStatusIcon = (status) => { // const icons = { @@ -35,86 +35,82 @@ import ReadButton from "./ReadButton"; // }; const NovelInfoHeader = ({ - item, - novel, - theme, - filter, - loading, - dispatch, - chapters, - lastRead, - navigation, - trackerSheetRef, - setCustomNovelCover, - chaptersSettingsSheetRef, + item, + novel, + theme, + filter, + loading, + dispatch, + chapters, + lastRead, + navigation, + trackerSheetRef, + setCustomNovelCover, + chaptersSettingsSheetRef, }) => { - const { tracker, trackedNovels } = useTrackingStatus(); + const {tracker, trackedNovels} = useTrackingStatus(); - let isTracked = false; + let isTracked = false; - if (!loading) { - isTracked = trackedNovels.find((obj) => obj.novelId === novel.novelId); + if (!loading) { + isTracked = trackedNovels.find(obj => obj.novelId === novel.novelId); + } + + const {hideBackdrop = false} = useSettings(); + + const getNovelCoverUrl = () => { + const defaultCover = + 'https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true'; + + if (loading) { + if (item.novelCover && !item.novelCover.startsWith('/')) { + return item.novelCover; + } else { + return defaultCover; + } + } else { + if (novel.novelCover && !novel.novelCover.startsWith('/')) { + return novel.novelCover; + } else { + return defaultCover; + } } + }; - const { hideBackdrop = false } = useSettings(); - - const getNovelCoverUrl = () => { - const defaultCover = - "https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true"; - - if (loading) { - if (item.novelCover && !item.novelCover.startsWith("/")) { - return item.novelCover; - } else { - return defaultCover; - } - } else { - if (novel.novelCover && !novel.novelCover.startsWith("/")) { - return novel.novelCover; - } else { - return defaultCover; - } - } - }; - - return ( - - + + + + + + navigation.navigate('GlobalSearch', { + novelName: item.novelName, + }) + } + onLongPress={() => { + Clipboard.setString(item.novelName); + showToast('Copied to clipboard: ' + item.novelName); + }} > - - - - - navigation.navigate("GlobalSearch", { - novelName: item.novelName, - }) - } - onLongPress={() => { - Clipboard.setString(item.novelName); - showToast( - "Copied to clipboard: " + item.novelName - ); - }} - > - {item.novelName} - - <> - - {!loading && novel.author - ? novel.author - : "Unknown author"} - - - {/* + <> + + {!loading && novel.author ? novel.author : 'Unknown author'} + + + {/* */} - - {!loading - ? (novel.status || "Unknown status") + - " • " + - novel.source - : "Unknown status • Unknown source"} - - - - - - - {!loading && ( - <> - - dispatch(followNovelAction(novel))} - /> - {tracker && ( - trackerSheetRef.current.show()} - /> - )} - - - navigation.navigate("MigrateNovel", { - sourceId: novel.sourceId, - novelName: novel.novelName, - }) - } - style={{ - justifyContent: "center", - alignItems: "center", - paddingBottom: 8, - }} - > - - - Migrate - - - - - - WebBrowser.openBrowserAsync(novel.sourceUrl) - } - style={{ - justifyContent: "center", - alignItems: "center", - paddingBottom: 8, - }} - > - - - WebView - - - - - - {novel.genre !== null && novel.genre !== "" && ( - - )} - - chaptersSettingsSheetRef.current.show()} - android_ripple={{ color: theme.rippleColor }} - > - <> - - {`${chapters.length} chapters`} - - - - - + + {!loading + ? (novel.status || 'Unknown status') + ' • ' + novel.source + : 'Unknown status • Unknown source'} + + + + + + + {!loading && ( + <> + + dispatch(followNovelAction(novel))} + /> + {tracker && ( + trackerSheetRef.current.show()} + /> )} - - ); + + + navigation.navigate('MigrateNovel', { + sourceId: novel.sourceId, + novelName: novel.novelName, + }) + } + style={{ + justifyContent: 'center', + alignItems: 'center', + paddingBottom: 8, + }} + > + + + Migrate + + + + + WebBrowser.openBrowserAsync(novel.sourceUrl)} + style={{ + justifyContent: 'center', + alignItems: 'center', + paddingBottom: 8, + }} + > + + + WebView + + + + + + {novel.genre !== null && novel.genre !== '' && ( + + )} + + chaptersSettingsSheetRef.current.show()} + android_ripple={{color: theme.rippleColor}} + > + <> + + {`${chapters.length} chapters`} + + + + + + )} + + ); }; export default memo(NovelInfoHeader); const styles = StyleSheet.create({ - novelDetails: { - flex: 1, - paddingBottom: 16, - paddingLeft: 12, - justifyContent: "center", - }, - chapters: { - paddingHorizontal: 16, - paddingVertical: 4, - fontSize: 16, - fontWeight: "bold", - }, - bottomsheet: { - flexDirection: "row", - justifyContent: "space-between", - alignItems: "center", - paddingRight: 12, - }, + novelDetails: { + flex: 1, + paddingBottom: 16, + paddingLeft: 12, + justifyContent: 'center', + }, + chapters: { + paddingHorizontal: 16, + paddingVertical: 4, + fontSize: 16, + fontWeight: 'bold', + }, + bottomsheet: { + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + paddingRight: 12, + }, }); diff --git a/src/screens/Novel/components/Info/NovelSummary.js b/src/screens/Novel/components/Info/NovelSummary.js index a0387d21..5e042ae4 100644 --- a/src/screens/Novel/components/Info/NovelSummary.js +++ b/src/screens/Novel/components/Info/NovelSummary.js @@ -1,74 +1,69 @@ -import React, { useCallback, useState } from "react"; -import { View, Text, StyleSheet } from "react-native"; +import React, {useCallback, useState} from 'react'; +import {View, Text, StyleSheet} from 'react-native'; -import MaterialCommunityIcons from "react-native-vector-icons/MaterialCommunityIcons"; +import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons'; -const NovelSummary = ({ summary, followed, theme }) => { - const [expanded, setExpanded] = useState(!followed); +const NovelSummary = ({summary, followed, theme}) => { + const [expanded, setExpanded] = useState(!followed); - const maxNumberOfLines = expanded ? Number.MAX_SAFE_INTEGER : 3; + const maxNumberOfLines = expanded ? Number.MAX_SAFE_INTEGER : 3; - const expandNovelSummary = () => setExpanded(!expanded); + const expandNovelSummary = () => setExpanded(!expanded); - return ( - - - {summary} - - - - - - ); + return ( + + + {summary} + + + + + + ); }; export default NovelSummary; const styles = StyleSheet.create({ - summaryContainer: { - paddingHorizontal: 16, - marginTop: 8, - marginBottom: 8, - }, - showMoreButton: { - fontWeight: "bold", - position: "absolute", - bottom: 0, - right: 18, - paddingLeft: 6, - }, + summaryContainer: { + paddingHorizontal: 16, + marginTop: 8, + marginBottom: 8, + }, + showMoreButton: { + fontWeight: 'bold', + position: 'absolute', + bottom: 0, + right: 18, + paddingLeft: 6, + }, }); diff --git a/src/screens/Novel/components/Info/ReadButton.js b/src/screens/Novel/components/Info/ReadButton.js index b044684a..a1460443 100644 --- a/src/screens/Novel/components/Info/ReadButton.js +++ b/src/screens/Novel/components/Info/ReadButton.js @@ -1,70 +1,64 @@ -import React from "react"; -import { StyleSheet } from "react-native"; +import React from 'react'; +import {StyleSheet} from 'react-native'; -import { Button } from "react-native-paper"; -import { useSettings } from "../../../../hooks/reduxHooks"; +import {Button} from 'react-native-paper'; +import {useSettings} from '../../../../hooks/reduxHooks'; -const ReadButton = ({ navigation, novel, chapters, theme, lastRead }) => { - const { useFabForContinueReading = false } = useSettings(); +const ReadButton = ({navigation, novel, chapters, theme, lastRead}) => { + const {useFabForContinueReading = false} = useSettings(); - const navigateToLastReadChapter = () => { - navigation.navigate("Chapter", { - chapterId: lastRead.chapterId, - chapterUrl: lastRead.chapterUrl, - novelUrl: novel.novelUrl, - novelId: lastRead.novelId, - sourceId: novel.sourceId, - chapterName: lastRead.chapterName, - novelName: novel.novelName, - bookmark: lastRead.bookmark, - }); - }; + const navigateToLastReadChapter = () => { + navigation.navigate('Chapter', { + chapterId: lastRead.chapterId, + chapterUrl: lastRead.chapterUrl, + novelUrl: novel.novelUrl, + novelId: lastRead.novelId, + sourceId: novel.sourceId, + chapterName: lastRead.chapterName, + novelName: novel.novelName, + bookmark: lastRead.bookmark, + }); + }; - if (!useFabForContinueReading) { - return ( - chapters.length > 0 && - (lastRead ? ( - - ) : ( - - )) - ); - } else { - return null; - } + if (!useFabForContinueReading) { + return ( + chapters.length > 0 && + (lastRead ? ( + + ) : ( + + )) + ); + } else { + return null; + } }; export default ReadButton; const styles = StyleSheet.create({ - startButton: { - marginTop: 16, - marginBottom: 8, - marginHorizontal: 16, - }, + startButton: { + marginTop: 16, + marginBottom: 8, + marginHorizontal: 16, + }, }); diff --git a/src/screens/Novel/components/JumpToChapterModal.js b/src/screens/Novel/components/JumpToChapterModal.js index b9f57618..2af33b3c 100644 --- a/src/screens/Novel/components/JumpToChapterModal.js +++ b/src/screens/Novel/components/JumpToChapterModal.js @@ -1,149 +1,138 @@ -import React, { useState } from "react"; -import { StyleSheet, Text, View } from "react-native"; +import React, {useState} from 'react'; +import {StyleSheet, Text, View} from 'react-native'; -import { Modal, Portal, Switch, TextInput } from "react-native-paper"; +import {Modal, Portal, Switch, TextInput} from 'react-native-paper'; const JumpToChapterModal = ({ - theme, - hideModal, - modalVisible, - chapters, - navigation, - novel, + theme, + hideModal, + modalVisible, + chapters, + navigation, + novel, }) => { - const [mode, setMode] = useState(0); + const [mode, setMode] = useState(0); - const [text, setText] = useState(); - const [error, setError] = useState(); + const [text, setText] = useState(); + const [error, setError] = useState(); - const onDismiss = () => { + const onDismiss = () => { + hideModal(); + setText(); + setError(); + }; + + const onSubmit = () => { + if (!mode) { + if (text > 0 && text <= chapters.length) { + navigation.navigate('Chapter', { + sourceId: novel.sourceId, + novelUrl: novel.novelUrl, + novelId: novel.novelId, + chapterId: chapters[text - 1].chapterId, + chapterUrl: chapters[text - 1].chapterUrl, + chapterName: chapters[text - 1].chapterName, + novelName: novel.novelName, + bookmark: chapters[text - 1].bookmark, + }); hideModal(); - setText(); - setError(); - }; + } else { + setError(`Enter a valid chapter number (<= ${chapters.length})`); + } + } else { + const chapter = chapters.find(chap => + chap.chapterName.toLowerCase().includes(text.toLowerCase()), + ); - const onSubmit = () => { - if (!mode) { - if (text > 0 && text <= chapters.length) { - navigation.navigate("Chapter", { - sourceId: novel.sourceId, - novelUrl: novel.novelUrl, - novelId: novel.novelId, - chapterId: chapters[text - 1].chapterId, - chapterUrl: chapters[text - 1].chapterUrl, - chapterName: chapters[text - 1].chapterName, - novelName: novel.novelName, - bookmark: chapters[text - 1].bookmark, - }); - hideModal(); - } else { - setError( - `Enter a valid chapter number (<= ${chapters.length})` - ); - } - } else { - const chapter = chapters.find((chap) => - chap.chapterName.toLowerCase().includes(text.toLowerCase()) - ); + if (chapter) { + navigation.navigate('Chapter', { + sourceId: novel.sourceId, + novelUrl: novel.novelUrl, + novelId: chapter.novelId, + chapterId: chapter.chapterId, + chapterUrl: chapter.chapterUrl, + chapterName: chapter.chapterName, + novelName: novel.novelName, + bookmark: chapter.bookmark, + }); + hideModal(); + } else { + setError(`Enter a valid chapter name`); + } + } + }; - if (chapter) { - navigation.navigate("Chapter", { - sourceId: novel.sourceId, - novelUrl: novel.novelUrl, - novelId: chapter.novelId, - chapterId: chapter.chapterId, - chapterUrl: chapter.chapterUrl, - chapterName: chapter.chapterName, - novelName: novel.novelName, - bookmark: chapter.bookmark, - }); - hideModal(); - } else { - setError(`Enter a valid chapter name`); - } - } - }; + const onChangeText = text => setText(text); - const onChangeText = (text) => setText(text); + const textInputTheme = { + colors: { + primary: theme.colorAccent, + placeholder: theme.textColorHint, + text: theme.textColorPrimary, + background: theme.colorPrimary, + }, + }; - const textInputTheme = { - colors: { - primary: theme.colorAccent, - placeholder: theme.textColorHint, - text: theme.textColorPrimary, - background: theme.colorPrimary, - }, - }; - - return ( - - - - Jump to Chapter - - - {error} - - - Chapter Name - - setMode(!mode)} - color={theme.colorAccent} - /> - - - - ); + return ( + + + + Jump to Chapter + + + {error} + + Chapter Name + setMode(!mode)} + color={theme.colorAccent} + /> + + + + ); }; export default JumpToChapterModal; const styles = StyleSheet.create({ - modalContainer: { - margin: 30, - padding: 20, - borderRadius: 8, - }, - modalTitle: { - fontSize: 18, - marginBottom: 16, - }, - errorText: { - color: "#FF0033", - paddingTop: 8, - }, + modalContainer: { + margin: 30, + padding: 20, + borderRadius: 8, + }, + modalTitle: { + fontSize: 18, + marginBottom: 16, + }, + errorText: { + color: '#FF0033', + paddingTop: 8, + }, }); diff --git a/src/screens/Novel/components/Tracker/MyAnimeListCards.js b/src/screens/Novel/components/Tracker/MyAnimeListCards.js index fa4ff86a..062537f3 100644 --- a/src/screens/Novel/components/Tracker/MyAnimeListCards.js +++ b/src/screens/Novel/components/Tracker/MyAnimeListCards.js @@ -1,194 +1,158 @@ -import React from "react"; -import { StyleSheet, View, Text, Image, Pressable } from "react-native"; -import { TouchableRipple, IconButton } from "react-native-paper"; -import { useDispatch } from "react-redux"; -import { untrackNovel } from "../../../../redux/tracker/tracker.actions"; +import React from 'react'; +import {StyleSheet, View, Text, Image, Pressable} from 'react-native'; +import {TouchableRipple, IconButton} from 'react-native-paper'; +import {useDispatch} from 'react-redux'; +import {untrackNovel} from '../../../../redux/tracker/tracker.actions'; -export const AddMalTrackingCard = ({ theme, setTrackSearchDialog }) => ( - - +export const AddMalTrackingCard = ({theme, setTrackSearchDialog}) => ( + + - + setTrackSearchDialog(true)} + > + - setTrackSearchDialog(true)} - > - - Add Tracking - - - + Add Tracking + + + ); export const MalTrackItemCard = ({ - trackItem, - setTrackStatusDialog, - setTrackChaptersDialog, - setTrackScoreDialog, - getStatus, - theme, + trackItem, + setTrackStatusDialog, + setTrackChaptersDialog, + setTrackScoreDialog, + getStatus, + theme, }) => { - const dispatch = useDispatch(); + const dispatch = useDispatch(); - return ( - - - - - - {trackItem.title} - - dispatch(untrackNovel(trackItem.id))} - /> - - - - setTrackStatusDialog(true)} - rippleColor={theme.rippleColor} - > - - {getStatus(trackItem.my_list_status.status)} - - - setTrackChaptersDialog(true)} - rippleColor={theme.rippleColor} - > - - {`${trackItem.my_list_status.num_chapters_read}/${ - trackItem.num_chapters !== 0 - ? trackItem.num_chapters - : "-" - }`} - - - setTrackScoreDialog(true)} - rippleColor={theme.rippleColor} - > - - {trackItem.my_list_status.score === 0 - ? "-" - : trackItem.my_list_status.score} - - - + return ( + + + + + + {trackItem.title} + + dispatch(untrackNovel(trackItem.id))} + /> - ); + + + setTrackStatusDialog(true)} + rippleColor={theme.rippleColor} + > + + {getStatus(trackItem.my_list_status.status)} + + + setTrackChaptersDialog(true)} + rippleColor={theme.rippleColor} + > + + {`${trackItem.my_list_status.num_chapters_read}/${ + trackItem.num_chapters !== 0 ? trackItem.num_chapters : '-' + }`} + + + setTrackScoreDialog(true)} + rippleColor={theme.rippleColor} + > + + {trackItem.my_list_status.score === 0 + ? '-' + : trackItem.my_list_status.score} + + + + + ); }; const styles = StyleSheet.create({ - trackerIcon: { - height: 50, - width: 50, - borderRadius: 8, - }, - rippleContainer: { - flex: 1, - paddingVertical: 8, - alignItems: "center", - }, - addCardContainer: { - flexDirection: "row", - alignItems: "center", - margin: 16, - }, - cardContainer: { - margin: 8, - elevation: 2, - borderRadius: 4, - }, - titleContainer: { - flexDirection: "row", - alignItems: "center", - borderBottomWidth: 1, - }, - listItemContainer: { - flex: 1, - flexDirection: "row", - borderTopRightRadius: 4, - }, - listItem: { - flex: 1, - textAlign: "center", - textAlignVertical: "center", - }, - listItemLeft: { - flex: 1, - borderRightWidth: 1, - borderBottomLeftRadius: 4, - }, - listItemRight: { - flex: 1, - borderLeftWidth: 1, - borderBottomRightRadius: 4, - }, + trackerIcon: { + height: 50, + width: 50, + borderRadius: 8, + }, + rippleContainer: { + flex: 1, + paddingVertical: 8, + alignItems: 'center', + }, + addCardContainer: { + flexDirection: 'row', + alignItems: 'center', + margin: 16, + }, + cardContainer: { + margin: 8, + elevation: 2, + borderRadius: 4, + }, + titleContainer: { + flexDirection: 'row', + alignItems: 'center', + borderBottomWidth: 1, + }, + listItemContainer: { + flex: 1, + flexDirection: 'row', + borderTopRightRadius: 4, + }, + listItem: { + flex: 1, + textAlign: 'center', + textAlignVertical: 'center', + }, + listItemLeft: { + flex: 1, + borderRightWidth: 1, + borderBottomLeftRadius: 4, + }, + listItemRight: { + flex: 1, + borderLeftWidth: 1, + borderBottomRightRadius: 4, + }, }); diff --git a/src/screens/Novel/components/Tracker/SetTrackChaptersDialog.js b/src/screens/Novel/components/Tracker/SetTrackChaptersDialog.js index 3985bfea..0973b28f 100644 --- a/src/screens/Novel/components/Tracker/SetTrackChaptersDialog.js +++ b/src/screens/Novel/components/Tracker/SetTrackChaptersDialog.js @@ -1,67 +1,65 @@ -import React, { useState } from "react"; -import { StyleSheet, Text } from "react-native"; -import { Modal, TextInput } from "react-native-paper"; +import React, {useState} from 'react'; +import {StyleSheet, Text} from 'react-native'; +import {Modal, TextInput} from 'react-native-paper'; import { - RadioButton, - RadioButtonGroup, -} from "../../../../components/RadioButton"; + RadioButton, + RadioButtonGroup, +} from '../../../../components/RadioButton'; const SetTrackChaptersDialog = ({ - trackItem, - trackChaptersDialog, - setTrackChaptersDialog, - updateTrackChapters, - theme, + trackItem, + trackChaptersDialog, + setTrackChaptersDialog, + updateTrackChapters, + theme, }) => { - const [trackChapters, setTrackChapters] = useState( - trackItem.my_list_status.num_chapters_read - ); + const [trackChapters, setTrackChapters] = useState( + trackItem.my_list_status.num_chapters_read, + ); - return ( - setTrackChaptersDialog(false)} - contentContainerStyle={[ - styles.containerStyle, - { backgroundColor: theme.colorPrimary }, - ]} - > - - Chapters - - setTrackChapters(text ? +text : "")} - onSubmitEditing={() => updateTrackChapters(trackChapters)} - mode="outlined" - keyboardType="numeric" - theme={{ - colors: { - primary: theme.colorAccent, - placeholder: theme.textColorHint, - text: theme.textColorPrimary, - background: "transparent", - }, - }} - underlineColor={theme.textColorHint} - dense - /> - - ); + return ( + setTrackChaptersDialog(false)} + contentContainerStyle={[ + styles.containerStyle, + {backgroundColor: theme.colorPrimary}, + ]} + > + + Chapters + + setTrackChapters(text ? +text : '')} + onSubmitEditing={() => updateTrackChapters(trackChapters)} + mode="outlined" + keyboardType="numeric" + theme={{ + colors: { + primary: theme.colorAccent, + placeholder: theme.textColorHint, + text: theme.textColorPrimary, + background: 'transparent', + }, + }} + underlineColor={theme.textColorHint} + dense + /> + + ); }; export default SetTrackChaptersDialog; const styles = StyleSheet.create({ - containerStyle: { - margin: 30, - padding: 20, - borderRadius: 8, - }, - dialogTitle: { - fontSize: 18, - marginBottom: 16, - }, + containerStyle: { + margin: 30, + padding: 20, + borderRadius: 8, + }, + dialogTitle: { + fontSize: 18, + marginBottom: 16, + }, }); diff --git a/src/screens/Novel/components/Tracker/SetTrackScoreDialog.js b/src/screens/Novel/components/Tracker/SetTrackScoreDialog.js index 4ae5d456..a1c9cfdd 100644 --- a/src/screens/Novel/components/Tracker/SetTrackScoreDialog.js +++ b/src/screens/Novel/components/Tracker/SetTrackScoreDialog.js @@ -1,78 +1,76 @@ -import React from "react"; -import { StyleSheet, Text } from "react-native"; -import { Modal } from "react-native-paper"; +import React from 'react'; +import {StyleSheet, Text} from 'react-native'; +import {Modal} from 'react-native-paper'; import { - RadioButton, - RadioButtonGroup, -} from "../../../../components/RadioButton"; + RadioButton, + RadioButtonGroup, +} from '../../../../components/RadioButton'; const SetTrackScoreDialog = ({ - trackItem, - trackScoreDialog, - setTrackScoreDialog, - updateTrackScore, - theme, + trackItem, + trackScoreDialog, + setTrackScoreDialog, + updateTrackScore, + theme, }) => { - const getScoreLabel = (score) => { - const myanimeListScores = { - 0: "No Score", - 1: "Apalling", - 2: "Horrible", - 3: "Very Bad", - 4: "Bad", - 5: "Average", - 6: "Fine", - 7: "Good", - 8: "Very Good", - 9: "Great", - 10: "Masterpiece", - }; - - return `(${score}) ${myanimeListScores[score]}`; + const getScoreLabel = score => { + const myanimeListScores = { + 0: 'No Score', + 1: 'Apalling', + 2: 'Horrible', + 3: 'Very Bad', + 4: 'Bad', + 5: 'Average', + 6: 'Fine', + 7: 'Good', + 8: 'Very Good', + 9: 'Great', + 10: 'Masterpiece', }; - return ( - setTrackScoreDialog(false)} - contentContainerStyle={[ - styles.containerStyle, - { backgroundColor: theme.colorPrimary }, - ]} - theme={{ colors: { backdrop: "rgba(0,0,0,0.25)" } }} - > - - Score - - - {[...Array(11).keys()].map((item, index) => ( - - ))} - - - ); + return `(${score}) ${myanimeListScores[score]}`; + }; + + return ( + setTrackScoreDialog(false)} + contentContainerStyle={[ + styles.containerStyle, + {backgroundColor: theme.colorPrimary}, + ]} + theme={{colors: {backdrop: 'rgba(0,0,0,0.25)'}}} + > + + Score + + + {[...Array(11).keys()].map((item, index) => ( + + ))} + + + ); }; export default SetTrackScoreDialog; const styles = StyleSheet.create({ - containerStyle: { - margin: 30, - padding: 20, - borderRadius: 8, - }, - dialogTitle: { - fontSize: 18, - marginBottom: 16, - }, + containerStyle: { + margin: 30, + padding: 20, + borderRadius: 8, + }, + dialogTitle: { + fontSize: 18, + marginBottom: 16, + }, }); diff --git a/src/screens/Novel/components/Tracker/SetTrackStatusDialog.js b/src/screens/Novel/components/Tracker/SetTrackStatusDialog.js index 5439e000..e35928fe 100644 --- a/src/screens/Novel/components/Tracker/SetTrackStatusDialog.js +++ b/src/screens/Novel/components/Tracker/SetTrackStatusDialog.js @@ -1,67 +1,65 @@ -import React from "react"; -import { StyleSheet, Text } from "react-native"; -import { Modal } from "react-native-paper"; +import React from 'react'; +import {StyleSheet, Text} from 'react-native'; +import {Modal} from 'react-native-paper'; import { - RadioButton, - RadioButtonGroup, -} from "../../../../components/RadioButton"; + RadioButton, + RadioButtonGroup, +} from '../../../../components/RadioButton'; const SetTrackStatusDialog = ({ - trackItem, - trackStatusDialog, - setTrackStatusDialog, - updateTrackStatus, - theme, + trackItem, + trackStatusDialog, + setTrackStatusDialog, + updateTrackStatus, + theme, }) => { - const myAnimeListStatus = { - reading: "Reading", - completed: "Completed", - on_hold: "On Hold", - dropped: "Dropped", - plan_to_read: "Plan to read", - }; + const myAnimeListStatus = { + reading: 'Reading', + completed: 'Completed', + on_hold: 'On Hold', + dropped: 'Dropped', + plan_to_read: 'Plan to read', + }; - return ( - setTrackStatusDialog(false)} - contentContainerStyle={[ - styles.containerStyle, - { backgroundColor: theme.colorPrimary }, - ]} - > - - Status - - - {Object.keys(myAnimeListStatus).map((key, index) => ( - - ))} - - - ); + return ( + setTrackStatusDialog(false)} + contentContainerStyle={[ + styles.containerStyle, + {backgroundColor: theme.colorPrimary}, + ]} + > + + Status + + + {Object.keys(myAnimeListStatus).map((key, index) => ( + + ))} + + + ); }; export default SetTrackStatusDialog; const styles = StyleSheet.create({ - containerStyle: { - margin: 30, - padding: 20, - borderRadius: 8, - }, - dialogTitle: { - fontSize: 18, - marginBottom: 16, - }, + containerStyle: { + margin: 30, + padding: 20, + borderRadius: 8, + }, + dialogTitle: { + fontSize: 18, + marginBottom: 16, + }, }); diff --git a/src/screens/Novel/components/Tracker/TrackSearchDialog.js b/src/screens/Novel/components/Tracker/TrackSearchDialog.js index 0327f960..f9ece82b 100644 --- a/src/screens/Novel/components/Tracker/TrackSearchDialog.js +++ b/src/screens/Novel/components/Tracker/TrackSearchDialog.js @@ -1,198 +1,191 @@ -import React, { useEffect, useState } from "react"; -import { StyleSheet, Text, View, Image, ActivityIndicator } from "react-native"; -import { Button, Modal, TextInput, TouchableRipple } from "react-native-paper"; -import { searchNovels } from "../../../../services/Trackers/myAnimeList"; -import { useSelector, useDispatch } from "react-redux"; -import { ScrollView } from "react-native-gesture-handler"; -import { trackNovel } from "../../../../redux/tracker/tracker.actions"; -import MaterialCommunityIcons from "react-native-vector-icons/MaterialCommunityIcons"; +import React, {useEffect, useState} from 'react'; +import {StyleSheet, Text, View, Image, ActivityIndicator} from 'react-native'; +import {Button, Modal, TextInput, TouchableRipple} from 'react-native-paper'; +import {searchNovels} from '../../../../services/Trackers/myAnimeList'; +import {useSelector, useDispatch} from 'react-redux'; +import {ScrollView} from 'react-native-gesture-handler'; +import {trackNovel} from '../../../../redux/tracker/tracker.actions'; +import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons'; const TrackSearchDialog = ({ - trackSearchDialog, - setTrackSearchDialog, - novelId, - novelName, - theme, + trackSearchDialog, + setTrackSearchDialog, + novelId, + novelName, + theme, }) => { - const [loading, setLoading] = useState(true); - const [searchResults, setSearchResults] = useState([]); - const [searchText, setSearchText] = useState(novelName); + const [loading, setLoading] = useState(true); + const [searchResults, setSearchResults] = useState([]); + const [searchText, setSearchText] = useState(novelName); - const [selectedNovel, setSelectedNovel] = useState(); + const [selectedNovel, setSelectedNovel] = useState(); - const tracker = useSelector((state) => state.trackerReducer.tracker); + const tracker = useSelector(state => state.trackerReducer.tracker); - const dispatch = useDispatch(); + const dispatch = useDispatch(); - const getSearchresults = async () => { - const res = await searchNovels(searchText, tracker.access_token); - setSearchResults(res); - setLoading(false); - }; + const getSearchresults = async () => { + const res = await searchNovels(searchText, tracker.access_token); + setSearchResults(res); + setLoading(false); + }; - useEffect(() => { - trackSearchDialog && getSearchresults(); - }, [trackSearchDialog]); + useEffect(() => { + trackSearchDialog && getSearchresults(); + }, [trackSearchDialog]); - const renderSearchResultCard = (item) => ( - setSelectedNovel(item.node)} - rippleColor={theme.rippleColor} - borderless + const renderSearchResultCard = item => ( + setSelectedNovel(item.node)} + rippleColor={theme.rippleColor} + borderless + > + <> + {selectedNovel && selectedNovel.id === item.node.id && ( + + )} + + - <> - {selectedNovel && selectedNovel.id === item.node.id && ( - - )} - - - {item.node.title} - - - - ); + {item.node.title} + + + + ); - return ( - setTrackSearchDialog(false)} - contentContainerStyle={[ - styles.containerStyle, - { backgroundColor: theme.colorPrimary }, - ]} - theme={{ colors: { backdrop: "rgba(0,0,0,0.25)" } }} + return ( + setTrackSearchDialog(false)} + contentContainerStyle={[ + styles.containerStyle, + {backgroundColor: theme.colorPrimary}, + ]} + theme={{colors: {backdrop: 'rgba(0,0,0,0.25)'}}} + > + setSearchText(text)} + onSubmitEditing={getSearchresults} + theme={{ + colors: { + primary: theme.colorAccent, + text: theme.textColorPrimary, + background: 'transparent', + }, + }} + underlineColor={theme.textColorHint} + right={ + setSearchText('')} + /> + } + /> + + {loading ? ( + + ) : ( + searchResults && + searchResults.data && + searchResults.data.map(result => renderSearchResultCard(result)) + )} + + + - - - - - - - ); + Remove + + + + + + + + ); }; export default TrackSearchDialog; const styles = StyleSheet.create({ - containerStyle: { - padding: 20, - margin: 20, - borderRadius: 6, - }, + containerStyle: { + padding: 20, + margin: 20, + borderRadius: 6, + }, }); diff --git a/src/screens/Novel/components/Tracker/TrackSheet.js b/src/screens/Novel/components/Tracker/TrackSheet.js index 97c482d5..adffc7d8 100644 --- a/src/screens/Novel/components/Tracker/TrackSheet.js +++ b/src/screens/Novel/components/Tracker/TrackSheet.js @@ -1,180 +1,180 @@ -import React, { useState, useEffect } from "react"; -import { StyleSheet, View, ToastAndroid } from "react-native"; -import { Portal } from "react-native-paper"; -import Bottomsheet from "rn-sliding-up-panel"; +import React, {useState, useEffect} from 'react'; +import {StyleSheet, View, ToastAndroid} from 'react-native'; +import {Portal} from 'react-native-paper'; +import Bottomsheet from 'rn-sliding-up-panel'; -import { useSelector, useDispatch } from "react-redux"; -import { updateTracker } from "../../../../redux/tracker/tracker.actions"; +import {useSelector, useDispatch} from 'react-redux'; +import {updateTracker} from '../../../../redux/tracker/tracker.actions'; -import TrackSearchDialog from "./TrackSearchDialog"; -import SetTrackStatusDialog from "./SetTrackStatusDialog"; -import SetTrackScoreDialog from "./SetTrackScoreDialog"; -import SetTrackChaptersDialog from "./SetTrackChaptersDialog"; -import { AddMalTrackingCard, MalTrackItemCard } from "./MyAnimeListCards"; +import TrackSearchDialog from './TrackSearchDialog'; +import SetTrackStatusDialog from './SetTrackStatusDialog'; +import SetTrackScoreDialog from './SetTrackScoreDialog'; +import SetTrackChaptersDialog from './SetTrackChaptersDialog'; +import {AddMalTrackingCard, MalTrackItemCard} from './MyAnimeListCards'; -const TrackSheet = ({ bottomSheetRef, novelId, novelName, theme }) => { - const tracker = useSelector((state) => state.trackerReducer.tracker); - const trackedNovels = useSelector( - (state) => state.trackerReducer.trackedNovels +const TrackSheet = ({bottomSheetRef, novelId, novelName, theme}) => { + const tracker = useSelector(state => state.trackerReducer.tracker); + const trackedNovels = useSelector( + state => state.trackerReducer.trackedNovels, + ); + const dispatch = useDispatch(); + + const [trackItem, setTrackItem] = useState(); + + useEffect(() => { + setTrackItem(trackedNovels.find(obj => obj.novelId === novelId)); + }, [trackedNovels, novelId]); + + const [trackSearchDialog, setTrackSearchDialog] = useState(false); + const [trackStatusDialog, setTrackStatusDialog] = useState(false); + const [trackChaptersDialog, setTrackChaptersDialog] = useState(false); + const [trackScoreDialog, setTrackScoreDialog] = useState(false); + + const getStatus = status => { + const myAnimeListStatus = { + reading: 'Reading', + completed: 'Completed', + on_hold: 'On Hold', + dropped: 'Dropped', + plan_to_read: 'Plan to read', + }; + + return myAnimeListStatus[status]; + }; + + const updateTrackChapters = newChapters => { + if (newChapters !== '') { + setTrackItem({ + ...trackItem, + my_list_status: { + ...trackItem.my_list_status, + num_chapters_read: newChapters, + }, + }); + + dispatch( + updateTracker(trackItem.id, tracker.access_token, { + ...trackItem.my_list_status, + num_chapters_read: newChapters, + }), + ); + + setTrackChaptersDialog(false); + } else { + ToastAndroid.show('Enter a valid number', ToastAndroid.SHORT); + } + }; + + const updateTrackStatus = newStatus => { + setTrackItem({ + ...trackItem, + my_list_status: { + ...trackItem.my_list_status, + status: newStatus, + }, + }); + + dispatch( + updateTracker(trackItem.id, tracker.access_token, { + ...trackItem.my_list_status, + status: newStatus, + }), ); - const dispatch = useDispatch(); - const [trackItem, setTrackItem] = useState(); + setTrackStatusDialog(false); + }; - useEffect(() => { - setTrackItem(trackedNovels.find((obj) => obj.novelId === novelId)); - }, [trackedNovels, novelId]); + const updateTrackScore = newScore => { + setTrackItem({ + ...trackItem, + my_list_status: { + ...trackItem.my_list_status, + score: newScore, + }, + }); - const [trackSearchDialog, setTrackSearchDialog] = useState(false); - const [trackStatusDialog, setTrackStatusDialog] = useState(false); - const [trackChaptersDialog, setTrackChaptersDialog] = useState(false); - const [trackScoreDialog, setTrackScoreDialog] = useState(false); - - const getStatus = (status) => { - const myAnimeListStatus = { - reading: "Reading", - completed: "Completed", - on_hold: "On Hold", - dropped: "Dropped", - plan_to_read: "Plan to read", - }; - - return myAnimeListStatus[status]; - }; - - const updateTrackChapters = (newChapters) => { - if (newChapters !== "") { - setTrackItem({ - ...trackItem, - my_list_status: { - ...trackItem.my_list_status, - num_chapters_read: newChapters, - }, - }); - - dispatch( - updateTracker(trackItem.id, tracker.access_token, { - ...trackItem.my_list_status, - num_chapters_read: newChapters, - }) - ); - - setTrackChaptersDialog(false); - } else { - ToastAndroid.show("Enter a valid number", ToastAndroid.SHORT); - } - }; - - const updateTrackStatus = (newStatus) => { - setTrackItem({ - ...trackItem, - my_list_status: { - ...trackItem.my_list_status, - status: newStatus, - }, - }); - - dispatch( - updateTracker(trackItem.id, tracker.access_token, { - ...trackItem.my_list_status, - status: newStatus, - }) - ); - - setTrackStatusDialog(false); - }; - - const updateTrackScore = (newScore) => { - setTrackItem({ - ...trackItem, - my_list_status: { - ...trackItem.my_list_status, - score: newScore, - }, - }); - - dispatch( - updateTracker(trackItem.id, tracker.access_token, { - ...trackItem.my_list_status, - score: newScore, - }) - ); - - setTrackScoreDialog(false); - }; - - return ( - <> - - - {!trackItem ? ( - - ) : ( - - )} - - - - {trackItem ? ( - <> - - - - - ) : ( - - )} - - + dispatch( + updateTracker(trackItem.id, tracker.access_token, { + ...trackItem.my_list_status, + score: newScore, + }), ); + + setTrackScoreDialog(false); + }; + + return ( + <> + + + {!trackItem ? ( + + ) : ( + + )} + + + + {trackItem ? ( + <> + + + + + ) : ( + + )} + + + ); }; export default TrackSheet; const styles = StyleSheet.create({ - contentContainer: { flex: 1 }, + contentContainer: {flex: 1}, }); diff --git a/src/screens/Updates/Updates.js b/src/screens/Updates/Updates.js index 50e9f418..28687a78 100644 --- a/src/screens/Updates/Updates.js +++ b/src/screens/Updates/Updates.js @@ -1,228 +1,221 @@ -import React, { useState, useCallback } from "react"; +import React, {useState, useCallback} from 'react'; import { - StyleSheet, - View, - FlatList, - ActivityIndicator, - RefreshControl, - Text, -} from "react-native"; -import { useFocusEffect } from "@react-navigation/native"; -import { useDispatch, useSelector } from "react-redux"; -import EmptyView from "../../components/EmptyView"; + StyleSheet, + View, + FlatList, + ActivityIndicator, + RefreshControl, + Text, +} from 'react-native'; +import {useFocusEffect} from '@react-navigation/native'; +import {useDispatch, useSelector} from 'react-redux'; +import EmptyView from '../../components/EmptyView'; import { - getUpdatesAction, - updateLibraryAction, -} from "../../redux/updates/updates.actions"; -import UpdatesItem from "./components/UpdatesItem"; -import { useTheme } from "../../hooks/reduxHooks"; -import { Searchbar } from "../../components/Searchbar/Searchbar"; + getUpdatesAction, + updateLibraryAction, +} from '../../redux/updates/updates.actions'; +import UpdatesItem from './components/UpdatesItem'; +import {useTheme} from '../../hooks/reduxHooks'; +import {Searchbar} from '../../components/Searchbar/Searchbar'; -import moment from "moment"; -import { dateFormat } from "../../services/utils/constants"; +import moment from 'moment'; +import {dateFormat} from '../../services/utils/constants'; import { - deleteChapterAction, - downloadChapterAction, -} from "../../redux/novel/novel.actions"; + deleteChapterAction, + downloadChapterAction, +} from '../../redux/novel/novel.actions'; -const Updates = ({ navigation }) => { - const theme = useTheme(); - const dispatch = useDispatch(); - const { - updates, - lastUpdateTime = null, - showLastUpdateTime = true, - loading, - } = useSelector((state) => state.updatesReducer); - const { downloadQueue } = useSelector((state) => state.downloadsReducer); +const Updates = ({navigation}) => { + const theme = useTheme(); + const dispatch = useDispatch(); + const { + updates, + lastUpdateTime = null, + showLastUpdateTime = true, + loading, + } = useSelector(state => state.updatesReducer); + const {downloadQueue} = useSelector(state => state.downloadsReducer); - const [searchText, setSearchText] = useState(""); - const [searchResults, setSearchResults] = useState([]); - const [refreshing, setRefreshing] = useState(false); + const [searchText, setSearchText] = useState(''); + const [searchResults, setSearchResults] = useState([]); + const [refreshing, setRefreshing] = useState(false); - useFocusEffect( - useCallback(() => { - dispatch(getUpdatesAction()); - }, [getUpdatesAction]) - ); + useFocusEffect( + useCallback(() => { + dispatch(getUpdatesAction()); + }, [getUpdatesAction]), + ); - const onRefresh = async () => { - setRefreshing(true); - dispatch(updateLibraryAction()); - setRefreshing(false); - }; + const onRefresh = async () => { + setRefreshing(true); + dispatch(updateLibraryAction()); + setRefreshing(false); + }; - const onPress = useCallback( - (item) => - navigation.navigate("Chapter", { - chapterId: item.chapterId, - chapterUrl: item.chapterUrl, - sourceId: item.sourceId, - novelUrl: item.novelUrl, - chapterName: item.chapterName, - novelId: item.novelId, - novelName: item.novelName, - bookmark: item.bookmark, - }), - [] - ); + const onPress = useCallback( + item => + navigation.navigate('Chapter', { + chapterId: item.chapterId, + chapterUrl: item.chapterUrl, + sourceId: item.sourceId, + novelUrl: item.novelUrl, + chapterName: item.chapterName, + novelId: item.novelId, + novelName: item.novelName, + bookmark: item.bookmark, + }), + [], + ); - const onPressCover = useCallback( - (item) => - navigation.navigate("Novel", { - sourceId: item.sourceId, - novelUrl: item.novelUrl, - novelName: item.novelName, - novelCover: item.novelCover, - }), - [] - ); + const onPressCover = useCallback( + item => + navigation.navigate('Novel', { + sourceId: item.sourceId, + novelUrl: item.novelUrl, + novelName: item.novelName, + novelCover: item.novelCover, + }), + [], + ); - const downloadChapter = useCallback( - (sourceId, novelUrl, chapterUrl, chapterName, chapterId) => { - dispatch( - downloadChapterAction( - sourceId, - novelUrl, - chapterUrl, - chapterName, - chapterId - ) - ); - }, - [] - ); + const downloadChapter = useCallback( + (sourceId, novelUrl, chapterUrl, chapterName, chapterId) => { + dispatch( + downloadChapterAction( + sourceId, + novelUrl, + chapterUrl, + chapterName, + chapterId, + ), + ); + }, + [], + ); - const deleteChapter = useCallback((chapterId, chapterName) => { - dispatch(deleteChapterAction(chapterId, chapterName)); - dispatch(getUpdatesAction()); - }, []); + const deleteChapter = useCallback((chapterId, chapterName) => { + dispatch(deleteChapterAction(chapterId, chapterName)); + dispatch(getUpdatesAction()); + }, []); - const renderItem = ({ item }) => ( - onPress(item)} - onPressCover={() => onPressCover(item)} - downloadQueue={downloadQueue} - deleteChapter={deleteChapter} - downloadChapter={downloadChapter} - /> - ); + const renderItem = ({item}) => ( + onPress(item)} + onPressCover={() => onPressCover(item)} + downloadQueue={downloadQueue} + deleteChapter={deleteChapter} + downloadChapter={downloadChapter} + /> + ); - const ListFooterComponent = () => - loading && ; + const ListFooterComponent = () => + loading && ; - const ListEmptyComponent = () => - !loading && ( - + const ListEmptyComponent = () => + !loading && ; + + const refreshControl = () => ( + + ); + + const clearSearchbar = () => { + setSearchText(''); + }; + + const onChangeText = text => { + setSearchText(text); + let results = []; + + text !== '' && + updates.map(item => { + const date = item.date; + const chapters = item.chapters.filter(chapter => + chapter.novelName.toLowerCase().includes(text.toLowerCase()), ); - const refreshControl = () => ( - - ); + if (chapters.length > 0) { + results.push({ + date, + chapters, + }); + } + }); - const clearSearchbar = () => { - setSearchText(""); - }; + setSearchResults(results); + }; - const onChangeText = (text) => { - setSearchText(text); - let results = []; + const keyExtractor = useCallback(item => item.updateId.toString(), []); - text !== "" && - updates.map((item) => { - const date = item.date; - const chapters = item.chapters.filter((chapter) => - chapter.novelName.toLowerCase().includes(text.toLowerCase()) - ); - - if (chapters.length > 0) { - results.push({ - date, - chapters, - }); - } - }); - - setSearchResults(results); - }; - - const keyExtractor = useCallback((item) => item.updateId.toString(), []); - - return ( - + dispatch(updateLibraryAction()), + }, + ]} + /> + {showLastUpdateTime && lastUpdateTime && ( + - dispatch(updateLibraryAction()), - }, - ]} - /> - {showLastUpdateTime && lastUpdateTime && ( - - Library last updated: {moment(lastUpdateTime).fromNow()} - - )} - index.toString()} - renderItem={({ item }) => ( - - {moment(item.date).calendar(null, dateFormat)} - - } - data={item.chapters} - keyExtractor={keyExtractor} - renderItem={renderItem} - /> - )} - ListFooterComponent={} - ListEmptyComponent={} - refreshControl={refreshControl()} - /> - - ); + Library last updated: {moment(lastUpdateTime).fromNow()} + + )} + index.toString()} + renderItem={({item}) => ( + + {moment(item.date).calendar(null, dateFormat)} + + } + data={item.chapters} + keyExtractor={keyExtractor} + renderItem={renderItem} + /> + )} + ListFooterComponent={} + ListEmptyComponent={} + refreshControl={refreshControl()} + /> + + ); }; export default Updates; const styles = StyleSheet.create({ - container: { flex: 1 }, - flatList: { flexGrow: 1, paddingBottom: 8 }, + container: {flex: 1}, + flatList: {flexGrow: 1, paddingBottom: 8}, }); diff --git a/src/screens/Updates/components/DownloadButton.js b/src/screens/Updates/components/DownloadButton.js index 4e50bfbd..cf689379 100644 --- a/src/screens/Updates/components/DownloadButton.js +++ b/src/screens/Updates/components/DownloadButton.js @@ -1,61 +1,58 @@ -import React from "react"; +import React from 'react'; -import { Menu } from "react-native-paper"; +import {Menu} from 'react-native-paper'; import { - ChapterDownloadingButton, - DeleteChapterButton, - DownloadChapterButton, -} from "../../Novel/components/Chapter/ChapterDownloadButtons"; + ChapterDownloadingButton, + DeleteChapterButton, + DownloadChapterButton, +} from '../../Novel/components/Chapter/ChapterDownloadButtons'; export const DownloadButton = ({ - downloadQueue, - theme, - chapter, - downloadChapter, - deleteChapter, - deleteChapterMenu, - showDeleteChapterMenu, - hideDeleteChapterMenu, + downloadQueue, + theme, + chapter, + downloadChapter, + deleteChapter, + deleteChapterMenu, + showDeleteChapterMenu, + hideDeleteChapterMenu, }) => { - if (downloadQueue.some((chap) => chap.chapterId === chapter.chapterId)) { - return ; - } else if (chapter.downloaded === 1) { - return ( - - } - contentStyle={{ backgroundColor: theme.menuColor }} - > - { - deleteChapter(chapter.chapterId, chapter.chapterName); - hideDeleteChapterMenu(); - }} - title="Delete" - titleStyle={{ color: theme.textColorPrimary }} - /> - - ); - } else { - return ( - - downloadChapter( - chapter.sourceId, - chapter.novelUrl, - chapter.chapterUrl, - chapter.chapterName, - chapter.chapterId - ) - } - /> - ); - } + if (downloadQueue.some(chap => chap.chapterId === chapter.chapterId)) { + return ; + } else if (chapter.downloaded === 1) { + return ( + + } + contentStyle={{backgroundColor: theme.menuColor}} + > + { + deleteChapter(chapter.chapterId, chapter.chapterName); + hideDeleteChapterMenu(); + }} + title="Delete" + titleStyle={{color: theme.textColorPrimary}} + /> + + ); + } else { + return ( + + downloadChapter( + chapter.sourceId, + chapter.novelUrl, + chapter.chapterUrl, + chapter.chapterName, + chapter.chapterId, + ) + } + /> + ); + } }; diff --git a/src/screens/Updates/components/UpdatesItem.js b/src/screens/Updates/components/UpdatesItem.js index 86717f1e..d4505c1b 100644 --- a/src/screens/Updates/components/UpdatesItem.js +++ b/src/screens/Updates/components/UpdatesItem.js @@ -1,105 +1,104 @@ -import React, { useState } from "react"; -import { View, Text, StyleSheet, Pressable } from "react-native"; +import React, {useState} from 'react'; +import {View, Text, StyleSheet, Pressable} from 'react-native'; -import FastImage from "react-native-fast-image"; -import { DownloadButton } from "./DownloadButton"; +import FastImage from 'react-native-fast-image'; +import {DownloadButton} from './DownloadButton'; const UpdateCard = ({ - item, - theme, - onPress, - onPressCover, - downloadQueue, - downloadChapter, - deleteChapter, + item, + theme, + onPress, + onPressCover, + downloadQueue, + downloadChapter, + deleteChapter, }) => { - const [deleteChapterMenu, setDeleteChapterMenu] = useState(false); - const showDeleteChapterMenu = () => setDeleteChapterMenu(true); - const hideDeleteChapterMenu = () => setDeleteChapterMenu(false); + const [deleteChapterMenu, setDeleteChapterMenu] = useState(false); + const showDeleteChapterMenu = () => setDeleteChapterMenu(true); + const hideDeleteChapterMenu = () => setDeleteChapterMenu(false); - return ( - - <> - - - - - - - {item.novelName} - - - {item.chapterName} - - - - - + return ( + + <> + + - ); + + + + {item.novelName} + + + {item.chapterName} + + + + + + + ); }; export default UpdateCard; const styles = StyleSheet.create({ - updateCard: { - flexDirection: "row", - alignItems: "center", - paddingVertical: 8, - paddingHorizontal: 16, - }, - updateIcon: { - width: 42, - height: 42, - borderRadius: 4, - }, - chapterDetails: { - flex: 1, - marginLeft: 16, - }, + updateCard: { + flexDirection: 'row', + alignItems: 'center', + paddingVertical: 8, + paddingHorizontal: 16, + }, + updateIcon: { + width: 42, + height: 42, + borderRadius: 4, + }, + chapterDetails: { + flex: 1, + marginLeft: 16, + }, }); diff --git a/src/services/Source/source.js b/src/services/Source/source.js index 8d246333..6729e7aa 100644 --- a/src/services/Source/source.js +++ b/src/services/Source/source.js @@ -1,43 +1,43 @@ -import { getSource } from "../../sources/sources"; +import {getSource} from '../../sources/sources'; export const fetchNovel = async (sourceId, novelUrl) => { - const source = getSource(sourceId); + const source = getSource(sourceId); - const res = await source.parseNovelAndChapters(novelUrl); + const res = await source.parseNovelAndChapters(novelUrl); - const novel = { - novelUrl: res.novelUrl, - sourceUrl: res.url, - source: res.sourceName, - sourceId: res.sourceId, - novelName: res.novelName, - novelCover: res.novelCover, - novelSummary: res.summary, - author: res.author, - artist: res.artist, - status: res.status, - genre: res.genre, - followed: 0, - chapters: res.chapters, - }; + const novel = { + novelUrl: res.novelUrl, + sourceUrl: res.url, + source: res.sourceName, + sourceId: res.sourceId, + novelName: res.novelName, + novelCover: res.novelCover, + novelSummary: res.summary, + author: res.author, + artist: res.artist, + status: res.status, + genre: res.genre, + followed: 0, + chapters: res.chapters, + }; - return novel; + return novel; }; export const fetchChapter = async (sourceId, novelUrl, chapterUrl) => { - const source = getSource(sourceId); + const source = getSource(sourceId); - let chapter = await source.parseChapter(novelUrl, chapterUrl); + let chapter = await source.parseChapter(novelUrl, chapterUrl); - return chapter; + return chapter; }; export const fetchChapters = async (sourceId, novelUrl) => { - const source = getSource(sourceId); + const source = getSource(sourceId); - const res = await source.parseNovelAndChapters(novelUrl); + const res = await source.parseNovelAndChapters(novelUrl); - const chapters = res.chapters; + const chapters = res.chapters; - return chapters; + return chapters; }; diff --git a/src/services/Trackers/myAnimeList.js b/src/services/Trackers/myAnimeList.js index 796bc240..2d0fa97a 100644 --- a/src/services/Trackers/myAnimeList.js +++ b/src/services/Trackers/myAnimeList.js @@ -1,24 +1,24 @@ -import * as Linking from "expo-linking"; -import qs from "qs"; +import * as Linking from 'expo-linking'; +import qs from 'qs'; -const clientId = "d2f499825d64b0213bb77e78193ccbb1"; +const clientId = 'd2f499825d64b0213bb77e78193ccbb1'; -const baseOAuthUrl = "https://myanimelist.net/v1/oauth2/authorize"; -const baseApiUrl = "https://api.myanimelist.net/v2"; +const baseOAuthUrl = 'https://myanimelist.net/v1/oauth2/authorize'; +const baseApiUrl = 'https://api.myanimelist.net/v2'; const pkceChallenger = () => { - const MAX_LENGTH = 88; - let code = ""; + const MAX_LENGTH = 88; + let code = ''; - const codes = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + const codes = + 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; - const randomPicker = () => Math.floor(Math.random() * codes.length); + const randomPicker = () => Math.floor(Math.random() * codes.length); - for (let index = 0; index < MAX_LENGTH; index++) { - code += codes.charAt(randomPicker()); - } - return code; + for (let index = 0; index < MAX_LENGTH; index++) { + code += codes.charAt(randomPicker()); + } + return code; }; const codeChallenge = pkceChallenger(); @@ -30,142 +30,142 @@ export const authUrl = `${baseOAuthUrl}?response_type=code&client_id=${clientId} const tokenUrl = `https://myanimelist.net/v1/oauth2/token`; export const myAnimeListConfig = { - clientId, - redirectUri, - authUrl, - codeChallenge, - tokenUrl, + clientId, + redirectUri, + authUrl, + codeChallenge, + tokenUrl, }; export const getAccessToken = async (code, codeChallenge) => { - const headers = { - "Content-Type": "application/x-www-form-urlencoded", - }; + const headers = { + 'Content-Type': 'application/x-www-form-urlencoded', + }; - const body = { - client_id: myAnimeListConfig.clientId, - grant_type: "authorization_code", - code, - code_verifier: codeChallenge, - }; + const body = { + client_id: myAnimeListConfig.clientId, + grant_type: 'authorization_code', + code, + code_verifier: codeChallenge, + }; - const response = await fetch(myAnimeListConfig.tokenUrl, { - headers, - method: "POST", - body: qs.stringify(body), - }); + const response = await fetch(myAnimeListConfig.tokenUrl, { + headers, + method: 'POST', + body: qs.stringify(body), + }); - let tokenResponse = await response.json(); + let tokenResponse = await response.json(); - tokenResponse = { - ...tokenResponse, - expires_in: new Date(Date.now() + tokenResponse.expires_in), - }; + tokenResponse = { + ...tokenResponse, + expires_in: new Date(Date.now() + tokenResponse.expires_in), + }; - console.log(tokenResponse); + console.log(tokenResponse); - return tokenResponse; + return tokenResponse; }; export const searchNovels = async (novelName, bearerToken) => { - const searchrl = `${baseApiUrl}/manga?q=${novelName}`; + const searchrl = `${baseApiUrl}/manga?q=${novelName}`; - const headers = { - Authorization: "Bearer " + bearerToken, - "Content-Type": "application/x-www-form-urlencoded", - }; + const headers = { + Authorization: 'Bearer ' + bearerToken, + 'Content-Type': 'application/x-www-form-urlencoded', + }; - const res = await fetch(searchrl, { method: "GET", headers }); - const searchResults = await res.json(); + const res = await fetch(searchrl, {method: 'GET', headers}); + const searchResults = await res.json(); - return searchResults; + return searchResults; }; export const findListItem = async (malId, bearerToken) => { - const url = `${baseApiUrl}/manga/${malId}?fields=id,num_chapters,my_list_status{start_date,finish_date}`; + const url = `${baseApiUrl}/manga/${malId}?fields=id,num_chapters,my_list_status{start_date,finish_date}`; - const headers = { - Authorization: "Bearer " + bearerToken, - "Content-Type": "application/x-www-form-urlencoded", + const headers = { + Authorization: 'Bearer ' + bearerToken, + 'Content-Type': 'application/x-www-form-urlencoded', + }; + + const res = await fetch(url, {method: 'GET', headers}); + const listItem = await res.json(); + + if (!listItem.my_list_status) { + listItem.my_list_status = { + status: 'reading', + score: 0, + num_chapters_read: 0, }; - - const res = await fetch(url, { method: "GET", headers }); - const listItem = await res.json(); - - if (!listItem.my_list_status) { - listItem.my_list_status = { - status: "reading", - score: 0, - num_chapters_read: 0, - }; - } - return listItem; + } + return listItem; }; export const updateItem = async (malId, bearerToken, body) => { - const url = `${baseApiUrl}/manga/${malId}/my_list_status`; + const url = `${baseApiUrl}/manga/${malId}/my_list_status`; - const headers = { - Authorization: "Bearer " + bearerToken, - "Content-Type": "application/x-www-form-urlencoded", - }; + const headers = { + Authorization: 'Bearer ' + bearerToken, + 'Content-Type': 'application/x-www-form-urlencoded', + }; - const res = await fetch(url, { - method: "PUT", - headers, - body: qs.stringify(body), - }); + const res = await fetch(url, { + method: 'PUT', + headers, + body: qs.stringify(body), + }); - const listItem = await res.json(); - console.log(listItem); - return listItem; + const listItem = await res.json(); + console.log(listItem); + return listItem; }; export const updateMalChaptersRead = async (malId, bearerToken, body) => { - const url = `${baseApiUrl}/manga/${malId}/my_list_status`; + const url = `${baseApiUrl}/manga/${malId}/my_list_status`; - const headers = { - Authorization: "Bearer " + bearerToken, - "Content-Type": "application/x-www-form-urlencoded", - }; + const headers = { + Authorization: 'Bearer ' + bearerToken, + 'Content-Type': 'application/x-www-form-urlencoded', + }; - const res = await fetch(url, { - method: "PUT", - headers, - body: qs.stringify(body), - }); + const res = await fetch(url, { + method: 'PUT', + headers, + body: qs.stringify(body), + }); - const listItem = await res.json(); - console.log(listItem.num_chapters_read); - return listItem.num_chapters_read; + const listItem = await res.json(); + console.log(listItem.num_chapters_read); + return listItem.num_chapters_read; }; -const revalidateMalToken = async (refreshToken) => { - const headers = { - "Content-Type": "application/x-www-form-urlencoded", - }; +const revalidateMalToken = async refreshToken => { + const headers = { + 'Content-Type': 'application/x-www-form-urlencoded', + }; - const body = { - grant_type: "refresh_token", - refresh_token: refreshToken, - }; + const body = { + grant_type: 'refresh_token', + refresh_token: refreshToken, + }; - const res = await fetch(myAnimeListConfig.tokenUrl, { - headers, - method: "POST", - body: qs.stringify(body), - }); + const res = await fetch(myAnimeListConfig.tokenUrl, { + headers, + method: 'POST', + body: qs.stringify(body), + }); - let tokenResponse = res.json(); + let tokenResponse = res.json(); - return tokenResponse; + return tokenResponse; }; -export const malTokenWatcher = async (tracker) => { - if (tracker) { - const date = new Date(Date.now()); - if (tracker.expires_in < date) { - return await revalidateMalToken(tracker.refresh_token); - } +export const malTokenWatcher = async tracker => { + if (tracker) { + const date = new Date(Date.now()); + if (tracker.expires_in < date) { + return await revalidateMalToken(tracker.refresh_token); } + } }; diff --git a/src/services/backup.js b/src/services/backup.js index 618c0a19..627941b8 100644 --- a/src/services/backup.js +++ b/src/services/backup.js @@ -1,46 +1,46 @@ -import * as DocumentPicker from "expo-document-picker"; -import { StorageAccessFramework } from "expo-file-system"; +import * as DocumentPicker from 'expo-document-picker'; +import {StorageAccessFramework} from 'expo-file-system'; -import { restoreLibrary } from "../database/queries/NovelQueries"; +import {restoreLibrary} from '../database/queries/NovelQueries'; -import * as Notifications from "expo-notifications"; +import * as Notifications from 'expo-notifications'; Notifications.setNotificationHandler({ - handleNotification: async () => { - return { - shouldShowAlert: true, - shouldPlaySound: true, - shouldSetBadge: true, - }; - }, + handleNotification: async () => { + return { + shouldShowAlert: true, + shouldPlaySound: true, + shouldSetBadge: true, + }; + }, }); export const restoreBackup = async () => { - const backup = await DocumentPicker.getDocumentAsync(); + const backup = await DocumentPicker.getDocumentAsync(); - Notifications.scheduleNotificationAsync({ - content: { title: "Restoring backup" }, - trigger: null, + Notifications.scheduleNotificationAsync({ + content: {title: 'Restoring backup'}, + trigger: null, + }); + + if (backup.uri) { + let novels = await StorageAccessFramework.readAsStringAsync(backup.uri); + novels = await JSON.parse(novels); + + novels.map((novel, index) => { + setTimeout(async () => { + if (index + 1 === novels.length) { + Notifications.scheduleNotificationAsync({ + content: { + title: 'Library Restored', + body: novels.length + ' novels restored', + }, + trigger: null, + }); + } + + await restoreLibrary(novel); + }, 1000 * index); }); - - if (backup.uri) { - let novels = await StorageAccessFramework.readAsStringAsync(backup.uri); - novels = await JSON.parse(novels); - - novels.map((novel, index) => { - setTimeout(async () => { - if (index + 1 === novels.length) { - Notifications.scheduleNotificationAsync({ - content: { - title: "Library Restored", - body: novels.length + " novels restored", - }, - trigger: null, - }); - } - - await restoreLibrary(novel); - }, 1000 * index); - }); - } + } }; diff --git a/src/services/backup/BackupQueries.js b/src/services/backup/BackupQueries.js index 86262240..45b38228 100644 --- a/src/services/backup/BackupQueries.js +++ b/src/services/backup/BackupQueries.js @@ -1,83 +1,97 @@ -import * as SQLite from "expo-sqlite"; -const db = SQLite.openDatabase("lnreader.db"); +import * as SQLite from 'expo-sqlite'; +const db = SQLite.openDatabase('lnreader.db'); const getLibraryNovelsQuery = `SELECT * FROM novels WHERE followed = 1`; const getLibraryNovels = () => { - return new Promise((resolve, reject) => - db.transaction((tx) => { - tx.executeSql( - getLibraryNovelsQuery, - null, - (txObj, { rows: { _array } }) => resolve(_array), - (txObj, error) => console.log("Error ", error) - ); - }) - ); + return new Promise((resolve, reject) => + db.transaction(tx => { + tx.executeSql( + getLibraryNovelsQuery, + null, + (txObj, {rows: {_array}}) => resolve(_array), + (txObj, error) => console.log('Error ', error), + ); + }), + ); }; const getLibraryChaptersQuery = `SELECT chapters.* FROM chapters JOIN novels ON chapters.novelId = novels.novelId WHERE novels.followed = 1`; const getLibraryChapters = () => { - return new Promise((resolve, reject) => - db.transaction((tx) => { - tx.executeSql( - getLibraryChaptersQuery, - null, - (txObj, { rows: { _array } }) => resolve(_array), - (txObj, error) => console.log("Error ", error) - ); - }) - ); + return new Promise((resolve, reject) => + db.transaction(tx => { + tx.executeSql( + getLibraryChaptersQuery, + null, + (txObj, {rows: {_array}}) => resolve(_array), + (txObj, error) => console.log('Error ', error), + ); + }), + ); }; const getLibraryDownloadsQuery = `SELECT downloads.* FROM downloads JOIN chapters ON downloads.downloadChapterId = chapters.chapterId JOIN novels ON chapters.novelId = novels.novelId WHERE novels.followed = 1`; const getLibraryDownloads = () => { - return new Promise((resolve, reject) => - db.transaction((tx) => { - tx.executeSql( - getLibraryDownloadsQuery, - null, - (txObj, { rows: { _array } }) => resolve(_array), - (txObj, error) => console.log("Error ", error) - ); - }) - ); + return new Promise((resolve, reject) => + db.transaction(tx => { + tx.executeSql( + getLibraryDownloadsQuery, + null, + (txObj, {rows: {_array}}) => resolve(_array), + (txObj, error) => console.log('Error ', error), + ); + }), + ); }; const restoreNovelsQuery = `INSERT OR REPLACE INTO novels (novelId, novelUrl, sourceUrl, sourceId, source, novelName, novelCover, novelSummary, author, artist, status, genre, followed, unread) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`; -const restoreNovels = async (novel) => { - db.transaction((tx) => - tx.executeSql( - restoreNovelsQuery, - [ - novel.novelId, - novel.novelUrl, - novel.sourceUrl, - novel.sourceId, - novel.source, - novel.novelName, - novel.novelCover, - novel.novelSummary, - novel.author, - novel.artist, - novel.status, - novel.genre, - novel.followed, - novel.unread, - ], - (txObj, res) => {}, - (txObj, error) => console.log("Error ", error) - ) - ); +const restoreNovels = async novel => { + db.transaction(tx => + tx.executeSql( + restoreNovelsQuery, + [ + novel.novelId, + novel.novelUrl, + novel.sourceUrl, + novel.sourceId, + novel.source, + novel.novelName, + novel.novelCover, + novel.novelSummary, + novel.author, + novel.artist, + novel.status, + novel.genre, + novel.followed, + novel.unread, + ], + (txObj, res) => {}, + (txObj, error) => console.log('Error ', error), + ), + ); }; const restoreChaptersQuery = `INSERT OR IGNORE INTO chapters (novelId, chapterId, chapterUrl, chapterName, releaseDate, bookmark, \`read\`, downloaded) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`; -const restoreChapters = async (chapter) => { - const { +const restoreChapters = async chapter => { + const { + novelId, + chapterId, + chapterUrl, + chapterName, + releaseDate, + bookmark, + read, + downloaded, + } = chapter; + + db.transaction(tx => + tx.executeSql( + restoreChaptersQuery, + [ novelId, chapterId, chapterUrl, @@ -86,47 +100,33 @@ const restoreChapters = async (chapter) => { bookmark, read, downloaded, - } = chapter; - - db.transaction((tx) => - tx.executeSql( - restoreChaptersQuery, - [ - novelId, - chapterId, - chapterUrl, - chapterName, - releaseDate, - bookmark, - read, - downloaded, - ], - (txObj, res) => {}, - (txObj, error) => console.log("Error ", error) - ) - ); + ], + (txObj, res) => {}, + (txObj, error) => console.log('Error ', error), + ), + ); }; const restoreDownloadsQuery = `INSERT OR IGNORE INTO downloads (downloadChapterId, chapterName, chapterText) VALUES (?, ?, ?)`; -const restoreDownloads = async (chapter) => { - const { downloadChapterId, chapterName, chapterText } = chapter; +const restoreDownloads = async chapter => { + const {downloadChapterId, chapterName, chapterText} = chapter; - db.transaction((tx) => - tx.executeSql( - restoreDownloadsQuery, - [downloadChapterId, chapterName, chapterText], - (txObj, res) => {}, - (txObj, error) => console.log("Error ", error) - ) - ); + db.transaction(tx => + tx.executeSql( + restoreDownloadsQuery, + [downloadChapterId, chapterName, chapterText], + (txObj, res) => {}, + (txObj, error) => console.log('Error ', error), + ), + ); }; export { - getLibraryNovels, - getLibraryChapters, - getLibraryDownloads, - restoreNovels, - restoreChapters, - restoreDownloads, + getLibraryNovels, + getLibraryChapters, + getLibraryDownloads, + restoreNovels, + restoreChapters, + restoreDownloads, }; diff --git a/src/services/backup/backup.js b/src/services/backup/backup.js index 7cf2570f..487b7d3b 100644 --- a/src/services/backup/backup.js +++ b/src/services/backup/backup.js @@ -1,71 +1,71 @@ -import * as DocumentPicker from "expo-document-picker"; -import { StorageAccessFramework } from "expo-file-system"; -import moment from "moment"; +import * as DocumentPicker from 'expo-document-picker'; +import {StorageAccessFramework} from 'expo-file-system'; +import moment from 'moment'; -import { showToast } from "../../hooks/showToast"; +import {showToast} from '../../hooks/showToast'; import { - getLibraryChapters, - getLibraryDownloads, - getLibraryNovels, - restoreChapters, - restoreDownloads, - restoreNovels, -} from "./BackupQueries"; + getLibraryChapters, + getLibraryDownloads, + getLibraryNovels, + restoreChapters, + restoreDownloads, + restoreNovels, +} from './BackupQueries'; const createFullBackup = async () => { - const novels = await getLibraryNovels(); - const chapters = await getLibraryChapters(); - const downloads = await getLibraryDownloads(); + const novels = await getLibraryNovels(); + const chapters = await getLibraryChapters(); + const downloads = await getLibraryDownloads(); - const backup = { novels, chapters, downloads }; + const backup = {novels, chapters, downloads}; - /** - * Request permissions - */ - const permissions = - await StorageAccessFramework.requestDirectoryPermissionsAsync(); - if (!permissions.granted) { - return; - } + /** + * Request permissions + */ + const permissions = + await StorageAccessFramework.requestDirectoryPermissionsAsync(); + if (!permissions.granted) { + return; + } - const uri = permissions.directoryUri; + const uri = permissions.directoryUri; - const date = moment().format("YYYY-MM-DD"); + const date = moment().format('YYYY-MM-DD'); - const fileName = "lnreader_backup_" + date; + const fileName = 'lnreader_backup_' + date; - if (uri) { - const fileUri = await StorageAccessFramework.createFileAsync( - uri, - fileName, - "application/json" - ); + if (uri) { + const fileUri = await StorageAccessFramework.createFileAsync( + uri, + fileName, + 'application/json', + ); - await StorageAccessFramework.writeAsStringAsync( - fileUri, - JSON.stringify(backup) - ); + await StorageAccessFramework.writeAsStringAsync( + fileUri, + JSON.stringify(backup), + ); - showToast("Backup created."); - } + showToast('Backup created.'); + } }; const restoreFullBackup = async () => { - const backup = await DocumentPicker.getDocumentAsync(); + const backup = await DocumentPicker.getDocumentAsync(); - if (backup.uri) { - let data = await StorageAccessFramework.readAsStringAsync(backup.uri); - data = JSON.parse(data); + if (backup.uri) { + let data = await StorageAccessFramework.readAsStringAsync(backup.uri); + data = JSON.parse(data); - const { novels, chapters, downloads } = data; + const {novels, chapters, downloads} = data; - novels.map((novel) => restoreNovels(novel)); - chapters.map((chapter) => restoreChapters(chapter)); - downloads.map((chapter) => restoreDownloads(chapter)); - } + novels.map(novel => restoreNovels(novel)); + chapters.map(chapter => restoreChapters(chapter)); + downloads.map(chapter => restoreDownloads(chapter)); + } - showToast("Backup restored."); + showToast('Backup restored.'); }; -export { createFullBackup, restoreFullBackup }; +export {createFullBackup, restoreFullBackup}; diff --git a/src/services/updates.js b/src/services/updates.js index 7bf667f5..7f4efb18 100644 --- a/src/services/updates.js +++ b/src/services/updates.js @@ -1,249 +1,222 @@ -import * as SQLite from "expo-sqlite"; -const db = SQLite.openDatabase("lnreader.db"); +import * as SQLite from 'expo-sqlite'; +const db = SQLite.openDatabase('lnreader.db'); -import { getLibrary } from "../database/queries/LibraryQueries"; -import { fetchChapters, fetchNovel } from "../services/Source/source"; -import * as Notifications from "expo-notifications"; +import {getLibrary} from '../database/queries/LibraryQueries'; +import {fetchChapters, fetchNovel} from '../services/Source/source'; +import * as Notifications from 'expo-notifications'; -import BackgroundService from "react-native-background-actions"; -import { showToast } from "../hooks/showToast"; -import { downloadChapter } from "../database/queries/ChapterQueries"; +import BackgroundService from 'react-native-background-actions'; +import {showToast} from '../hooks/showToast'; +import {downloadChapter} from '../database/queries/ChapterQueries'; Notifications.setNotificationHandler({ - handleNotification: async () => { - return { - shouldShowAlert: true, - shouldPlaySound: true, - shouldSetBadge: true, - }; - }, + handleNotification: async () => { + return { + shouldShowAlert: true, + shouldPlaySound: true, + shouldSetBadge: true, + }; + }, }); const updateNovelDetails = async (novel, novelId) => { - db.transaction((tx) => { - tx.executeSql( - "UPDATE novels SET novelName = ?, novelCover = ?, novelSummary = ?, author = ?, artist = ?, genre = ?, status = ? WHERE novelId = ?", - [ - novel.novelName, - novel.novelCover, - novel.novelSummary, - novel.author, - novel.artist, - novel.genre, - novel.status, - novelId, - ], - (txObj, res) => {}, - (txObj, error) => console.log("Error ", error) - ); - }); + db.transaction(tx => { + tx.executeSql( + 'UPDATE novels SET novelName = ?, novelCover = ?, novelSummary = ?, author = ?, artist = ?, genre = ?, status = ? WHERE novelId = ?', + [ + novel.novelName, + novel.novelCover, + novel.novelSummary, + novel.author, + novel.artist, + novel.genre, + novel.status, + novelId, + ], + (txObj, res) => {}, + (txObj, error) => console.log('Error ', error), + ); + }); }; export const updateNovel = async (sourceId, novelUrl, novelId) => { - let novel = await fetchNovel(sourceId, novelUrl); + let novel = await fetchNovel(sourceId, novelUrl); - await updateNovelDetails(novel, novelId); + await updateNovelDetails(novel, novelId); - db.transaction((tx) => { - novel.chapters.map((chapter) => + db.transaction(tx => { + novel.chapters.map(chapter => + tx.executeSql( + 'INSERT OR IGNORE INTO chapters (chapterUrl, chapterName, releaseDate, novelId) values (?, ?, ?, ?)', + [chapter.chapterUrl, chapter.chapterName, chapter.releaseDate, novelId], + (txObj, {insertId}) => { + if (insertId !== -1) { tx.executeSql( - "INSERT OR IGNORE INTO chapters (chapterUrl, chapterName, releaseDate, novelId) values (?, ?, ?, ?)", - [ - chapter.chapterUrl, - chapter.chapterName, - chapter.releaseDate, - novelId, - ], - (txObj, { insertId }) => { - if (insertId !== -1) { - tx.executeSql( - "INSERT OR IGNORE INTO updates (chapterId, novelId, updateTime) values (?, ?, (datetime('now','localtime')))", - [insertId, novelId], - (txObj, res) => { - // console.log( - // "Inserted Chapter Id -> " + - // insertId + - // " Novel Id " + - // novelId - // ); - }, - (txObj, error) => console.log("Error ", error) - ); - } - }, - (txObj, error) => console.log("Error ", error) - ) - ); - }); + "INSERT OR IGNORE INTO updates (chapterId, novelId, updateTime) values (?, ?, (datetime('now','localtime')))", + [insertId, novelId], + (txObj, res) => { + // console.log( + // "Inserted Chapter Id -> " + + // insertId + + // " Novel Id " + + // novelId + // ); + }, + (txObj, error) => console.log('Error ', error), + ); + } + }, + (txObj, error) => console.log('Error ', error), + ), + ); + }); }; export const updateNovelChapters = async ( - sourceId, - novelUrl, - novelId, - updateSettings + sourceId, + novelUrl, + novelId, + updateSettings, ) => { - let chapters = await fetchChapters(sourceId, novelUrl); + let chapters = await fetchChapters(sourceId, novelUrl); - const { downloadNewChapters = false } = updateSettings; + const {downloadNewChapters = false} = updateSettings; + + db.transaction(tx => { + chapters.map(chapter => + tx.executeSql( + 'INSERT OR IGNORE INTO chapters (chapterUrl, chapterName, releaseDate, novelId) values (?, ?, ?, ?)', + [chapter.chapterUrl, chapter.chapterName, chapter.releaseDate, novelId], + (txObj, {insertId}) => { + if (insertId !== -1) { + downloadNewChapters && + downloadChapter(sourceId, novelUrl, chapter.chapterUrl, insertId); - db.transaction((tx) => { - chapters.map((chapter) => tx.executeSql( - "INSERT OR IGNORE INTO chapters (chapterUrl, chapterName, releaseDate, novelId) values (?, ?, ?, ?)", - [ - chapter.chapterUrl, - chapter.chapterName, - chapter.releaseDate, - novelId, - ], - (txObj, { insertId }) => { - if (insertId !== -1) { - downloadNewChapters && - downloadChapter( - sourceId, - novelUrl, - chapter.chapterUrl, - insertId - ); + "INSERT OR IGNORE INTO updates (chapterId, novelId, updateTime) values (?, ?, (datetime('now','localtime')))", + [insertId, novelId], + (txObj, res) => {}, + (txObj, error) => console.log('Error ', error), + ); + } + }, + (txObj, error) => console.log('Error ', error), + ), + ); + }); +}; - tx.executeSql( - "INSERT OR IGNORE INTO updates (chapterId, novelId, updateTime) values (?, ?, (datetime('now','localtime')))", - [insertId, novelId], - (txObj, res) => {}, - (txObj, error) => console.log("Error ", error) - ); - } +const sleep = time => new Promise(resolve => setTimeout(() => resolve(), time)); + +export const updateAllNovels = async updateSettings => { + let libraryNovels = await getLibrary(); + + const {onlyUpdateOngoingNovels = false} = updateSettings; + + if (onlyUpdateOngoingNovels) { + libraryNovels = libraryNovels.filter(item => item.status !== 'Completed'); + } + + const options = { + taskName: 'Library Update', + taskTitle: 'Updating library', + taskDesc: '(0/' + libraryNovels.length + ')', + taskIcon: { + name: 'notification_icon', + type: 'drawable', + }, + color: '#00adb5', + parameters: { + delay: 1000, + }, + linkingURI: 'lnreader://updates', + progressBar: { + max: libraryNovels.length, + value: 0, + }, + }; + + const veryIntensiveTask = async taskData => + await new Promise(async resolve => { + for ( + let i = 0; + BackgroundService.isRunning() && i < libraryNovels.length; + i++ + ) { + try { + if (BackgroundService.isRunning()) { + /** + * Update chapters + */ + await updateNovelChapters( + libraryNovels[i].sourceId, + libraryNovels[i].novelUrl, + libraryNovels[i].novelId, + updateSettings, + ); + + /** + * Update notification + */ + await BackgroundService.updateNotification({ + taskTitle: libraryNovels[i].novelName, + taskDesc: '(' + (i + 1) + '/' + libraryNovels.length + ')', + progressBar: { + max: libraryNovels.length, + value: i + 1, + }, + }); + + /** + * When updating library is finished + */ + if (libraryNovels.length === i + 1) { + resolve(); + + Notifications.scheduleNotificationAsync({ + content: { + title: 'Library Updated', + body: libraryNovels.length + ' novels updated', }, - (txObj, error) => console.log("Error ", error) - ) - ); - }); -}; - -const sleep = (time) => - new Promise((resolve) => setTimeout(() => resolve(), time)); - -export const updateAllNovels = async (updateSettings) => { - let libraryNovels = await getLibrary(); - - const { onlyUpdateOngoingNovels = false } = updateSettings; - - if (onlyUpdateOngoingNovels) { - libraryNovels = libraryNovels.filter( - (item) => item.status !== "Completed" - ); - } - - const options = { - taskName: "Library Update", - taskTitle: "Updating library", - taskDesc: "(0/" + libraryNovels.length + ")", - taskIcon: { - name: "notification_icon", - type: "drawable", - }, - color: "#00adb5", - parameters: { - delay: 1000, - }, - linkingURI: "lnreader://updates", - progressBar: { - max: libraryNovels.length, - value: 0, - }, - }; - - const veryIntensiveTask = async (taskData) => - await new Promise(async (resolve) => { - for ( - let i = 0; - BackgroundService.isRunning() && i < libraryNovels.length; - i++ - ) { - try { - if (BackgroundService.isRunning()) { - /** - * Update chapters - */ - await updateNovelChapters( - libraryNovels[i].sourceId, - libraryNovels[i].novelUrl, - libraryNovels[i].novelId, - updateSettings - ); - - /** - * Update notification - */ - await BackgroundService.updateNotification({ - taskTitle: libraryNovels[i].novelName, - taskDesc: - "(" + - (i + 1) + - "/" + - libraryNovels.length + - ")", - progressBar: { - max: libraryNovels.length, - value: i + 1, - }, - }); - - /** - * When updating library is finished - */ - if (libraryNovels.length === i + 1) { - resolve(); - - Notifications.scheduleNotificationAsync({ - content: { - title: "Library Updated", - body: - libraryNovels.length + - " novels updated", - }, - trigger: null, - }); - } - - const nextNovelIndex = i + 1; - - if ( - nextNovelIndex in libraryNovels && - libraryNovels[nextNovelIndex].sourceId === - libraryNovels[i].sourceId - ) { - await sleep(taskData.delay); - } - } - } catch (error) { - showToast( - libraryNovels[i].novelName + ": " + error.message - ); - continue; - } + trigger: null, + }); } - }); - if (libraryNovels.length > 0) { - await BackgroundService.start(veryIntensiveTask, options); - } + const nextNovelIndex = i + 1; + + if ( + nextNovelIndex in libraryNovels && + libraryNovels[nextNovelIndex].sourceId === + libraryNovels[i].sourceId + ) { + await sleep(taskData.delay); + } + } + } catch (error) { + showToast(libraryNovels[i].novelName + ': ' + error.message); + continue; + } + } + }); + + if (libraryNovels.length > 0) { + await BackgroundService.start(veryIntensiveTask, options); + } }; -export const parseChapterNumber = (chapterName) => { - chapterName = chapterName.toLowerCase(); - chapterName = chapterName.replace(/volume (\d+)/, ""); +export const parseChapterNumber = chapterName => { + chapterName = chapterName.toLowerCase(); + chapterName = chapterName.replace(/volume (\d+)/, ''); - const basic = chapterName.match(/ch (\d+)/); + const basic = chapterName.match(/ch (\d+)/); - const occurrence = chapterName.match(/\d+/); + const occurrence = chapterName.match(/\d+/); - if (basic) { - return basic[0]; - } else if (occurrence) { - return occurrence[0]; - } else { - return 0; - } + if (basic) { + return basic[0]; + } else if (occurrence) { + return occurrence[0]; + } else { + return 0; + } }; diff --git a/src/services/utils/constants.js b/src/services/utils/constants.js index 9ec5d2c1..a37e99ce 100644 --- a/src/services/utils/constants.js +++ b/src/services/utils/constants.js @@ -1,20 +1,20 @@ export const fonts = [ - { fontFamily: "", name: "Original" }, - { fontFamily: "lora", name: "Lora" }, - { fontFamily: "nunito", name: "Nunito" }, - { fontFamily: "noto-sans", name: "Noto Sans" }, - { fontFamily: "open-sans", name: "Open Sans" }, - { fontFamily: "arbutus-slab", name: "Arbutus Slab" }, - { fontFamily: "domine", name: "Domine" }, - { fontFamily: "lato", name: "Lato" }, - { fontFamily: "pt-serif", name: "PT Serif" }, + {fontFamily: '', name: 'Original'}, + {fontFamily: 'lora', name: 'Lora'}, + {fontFamily: 'nunito', name: 'Nunito'}, + {fontFamily: 'noto-sans', name: 'Noto Sans'}, + {fontFamily: 'open-sans', name: 'Open Sans'}, + {fontFamily: 'arbutus-slab', name: 'Arbutus Slab'}, + {fontFamily: 'domine', name: 'Domine'}, + {fontFamily: 'lato', name: 'Lato'}, + {fontFamily: 'pt-serif', name: 'PT Serif'}, ]; export const dateFormat = { - sameDay: "[Today]", - nextDay: "[Tomorrow]", - nextWeek: "dddd", - lastDay: "[Yesterday]", - lastWeek: "[Last] dddd", - sameElse: "DD/MM/YYYY", + sameDay: '[Today]', + nextDay: '[Tomorrow]', + nextWeek: 'dddd', + lastDay: '[Yesterday]', + lastWeek: '[Last] dddd', + sameElse: 'DD/MM/YYYY', }; diff --git a/src/services/utils/helpers.js b/src/services/utils/helpers.js index ac89abd7..35dd0d9f 100644 --- a/src/services/utils/helpers.js +++ b/src/services/utils/helpers.js @@ -1,27 +1,27 @@ -import { useWindowDimensions } from "react-native"; +import {useWindowDimensions} from 'react-native'; -export const parseChapterNumber = (chapterName) => { - chapterName = chapterName.toLowerCase(); - chapterName = chapterName.replace(/volume (\d+)|v(\d+)/, ""); +export const parseChapterNumber = chapterName => { + chapterName = chapterName.toLowerCase(); + chapterName = chapterName.replace(/volume (\d+)|v(\d+)/, ''); - const basic = chapterName.match(/[ch]i (\d+)/); - const occurrence = chapterName.match(/\d+/); + const basic = chapterName.match(/[ch]i (\d+)/); + const occurrence = chapterName.match(/\d+/); - if (basic) { - return basic[0]; - } else if (occurrence) { - return occurrence[0]; - } else { - return 0; - } + if (basic) { + return basic[0]; + } else if (occurrence) { + return occurrence[0]; + } else { + return 0; + } }; export const getDeviceOrientation = () => { - const window = useWindowDimensions(); + const window = useWindowDimensions(); - if (window.width > window.height) { - return "landscape"; - } else { - return "potrait"; - } + if (window.width > window.height) { + return 'landscape'; + } else { + return 'potrait'; + } }; diff --git a/src/sources/ar/arnovel.js b/src/sources/ar/arnovel.js index 1a74eb9c..5c37f24a 100644 --- a/src/sources/ar/arnovel.js +++ b/src/sources/ar/arnovel.js @@ -1,186 +1,186 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; const sourceId = 59; -const sourceName = "ArNovel"; +const sourceName = 'ArNovel'; -const baseUrl = "https://arnovel.me/"; +const baseUrl = 'https://arnovel.me/'; -const popularNovels = async (page) => { - let totalPages = 21; - let url = baseUrl + "novels/page/" + page; +const popularNovels = async page => { + let totalPages = 21; + let url = baseUrl + 'novels/page/' + page; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".page-item-detail").each(function () { - const novelName = $(this).find(".h5 > a").text(); - const novelCover = - "https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true"; + $('.page-item-detail').each(function () { + const novelName = $(this).find('.h5 > a').text(); + const novelCover = + 'https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true'; - let novelUrl = $(this).find(".h5 > a").attr("href").split("/")[4]; + let novelUrl = $(this).find('.h5 > a').attr('href').split('/')[4]; - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}novel/${novelUrl}`; +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}novel/${novelUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = { sourceId, sourceName, url, novelUrl }; + let novel = {sourceId, sourceName, url, novelUrl}; - novel.novelName = $(".post-title > h1") - .text() - .replace(/[\t\n]/g, "") - .trim(); + novel.novelName = $('.post-title > h1') + .text() + .replace(/[\t\n]/g, '') + .trim(); - novel.novelCover = - "https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true"; + novel.novelCover = + 'https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true'; - $(".post-content_item").each(function () { - detailName = $(this) - .find(".summary-heading > h5") - .text() - .replace(/[\t\n]/g, "") - .trim(); - detail = $(this) - .find(".summary-content") - .text() - .replace(/[\t\n]/g, "") - .trim(); + $('.post-content_item').each(function () { + detailName = $(this) + .find('.summary-heading > h5') + .text() + .replace(/[\t\n]/g, '') + .trim(); + detail = $(this) + .find('.summary-content') + .text() + .replace(/[\t\n]/g, '') + .trim(); - switch (detailName) { - case "التصنيفات": - novel.genre = detail.trim().replace(/[\t\n]/g, ","); - break; - case "المؤلف (ين)": - novel.author = detail.trim(); - break; - case "الحالة": - novel.status = detail.trim(); - break; - } - }); + switch (detailName) { + case 'التصنيفات': + novel.genre = detail.trim().replace(/[\t\n]/g, ','); + break; + case 'المؤلف (ين)': + novel.author = detail.trim(); + break; + case 'الحالة': + novel.status = detail.trim(); + break; + } + }); - $(".description-summary > div.summary__content").find("em").remove(); + $('.description-summary > div.summary__content').find('em').remove(); - novel.summary = $(".description-summary > div.summary__content") - .text() - .trim(); + novel.summary = $('.description-summary > div.summary__content') + .text() + .trim(); - let novelChapters = []; + let novelChapters = []; - const novelId = $("#manga-chapters-holder").attr("data-id"); + const novelId = $('#manga-chapters-holder').attr('data-id'); - let formData = new FormData(); - formData.append("action", "manga_get_chapters"); - formData.append("manga", novelId); + let formData = new FormData(); + formData.append('action', 'manga_get_chapters'); + formData.append('manga', novelId); - const data = await fetch("https://www.arnovel.me/wp-admin/admin-ajax.php", { - method: "POST", - body: formData, - }); - const text = await data.text(); + const data = await fetch('https://www.arnovel.me/wp-admin/admin-ajax.php', { + method: 'POST', + body: formData, + }); + const text = await data.text(); - $ = cheerio.load(text); + $ = cheerio.load(text); - $(".wp-manga-chapter").each(function () { - chapterName = $(this) - .find("a") - .text() - .replace(/[\t\n]/g, "") - .trim(); + $('.wp-manga-chapter').each(function () { + chapterName = $(this) + .find('a') + .text() + .replace(/[\t\n]/g, '') + .trim(); - releaseDate = $(this).find("span").text().trim(); + releaseDate = $(this).find('span').text().trim(); - chapterUrl = $(this).find("a").attr("href").split("/"); + chapterUrl = $(this).find('a').attr('href').split('/'); - chapterUrl[6] - ? (chapterUrl = chapterUrl[5] + "/" + chapterUrl[6]) - : (chapterUrl = chapterUrl[5]); + chapterUrl[6] + ? (chapterUrl = chapterUrl[5] + '/' + chapterUrl[6]) + : (chapterUrl = chapterUrl[5]); - novelChapters.push({ chapterName, releaseDate, chapterUrl }); - }); + novelChapters.push({chapterName, releaseDate, chapterUrl}); + }); - novel.chapters = novelChapters.reverse(); + novel.chapters = novelChapters.reverse(); - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}novel/${novelUrl}/${chapterUrl}/`; + const url = `${baseUrl}novel/${novelUrl}/${chapterUrl}/`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - const chapterName = $("h1#chapter-heading").text(); - const chapterText = $(".reading-content").html(); + const chapterName = $('h1#chapter-heading').text(); + const chapterText = $('.reading-content').html(); - const chapter = { - sourceId, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = `${baseUrl}?s=${searchTerm}&post_type=wp-manga`; +const searchNovels = async searchTerm => { + const url = `${baseUrl}?s=${searchTerm}&post_type=wp-manga`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".c-tabs-item__content").each(function () { - const novelName = $(this).find(".h4 > a").text(); - const novelCover = - "https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true"; + $('.c-tabs-item__content').each(function () { + const novelName = $(this).find('.h4 > a').text(); + const novelCover = + 'https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true'; - let novelUrl = $(this).find(".h4 > a").attr("href").split("/")[4]; + let novelUrl = $(this).find('.h4 > a').attr('href').split('/')[4]; - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const ArNovelScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default ArNovelScraper; diff --git a/src/sources/br/ArthurScans.js b/src/sources/br/ArthurScans.js index b12cd5d9..c807cfdd 100644 --- a/src/sources/br/ArthurScans.js +++ b/src/sources/br/ArthurScans.js @@ -1,166 +1,166 @@ -import cheerio from "react-native-cheerio"; -import { Status } from "../helpers/constants"; +import cheerio from 'react-native-cheerio'; +import {Status} from '../helpers/constants'; -const baseUrl = "https://arthurscan.xyz/"; +const baseUrl = 'https://arthurscan.xyz/'; const sourceId = 80; -const sourceName = "ArthurScans (Br)"; +const sourceName = 'ArthurScans (Br)'; -const popularNovels = async (page) => { - let url = baseUrl + "/manga/page/" + page + "/?m_orderby=rating"; +const popularNovels = async page => { + let url = baseUrl + '/manga/page/' + page + '/?m_orderby=rating'; - const totalPages = 2; + const totalPages = 2; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".page-item-detail").each(function () { - const novelName = $(this).find(".item-summary h3").text().trim(); - const novelCover = $(this).find(".img-responsive").attr("data-src"); + $('.page-item-detail').each(function () { + const novelName = $(this).find('.item-summary h3').text().trim(); + const novelCover = $(this).find('.img-responsive').attr('data-src'); - let novelUrl = $(this).find("div > a").attr("href"); + let novelUrl = $(this).find('div > a').attr('href'); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = novelUrl; +const parseNovelAndChapters = async novelUrl => { + const url = novelUrl; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = { sourceId, url, sourceName }; + let novel = {sourceId, url, sourceName}; - $(".post-title > h3 > span").remove(); + $('.post-title > h3 > span').remove(); - novel.novelUrl = novelUrl; + novel.novelUrl = novelUrl; - novel.novelName = $(".post-title > h1").text().trim(); + novel.novelName = $('.post-title > h1').text().trim(); - novel.novelCover = $(".summary_image > a > img").attr("data-src"); + novel.novelCover = $('.summary_image > a > img').attr('data-src'); - $(".post-content_item").each(function () { - const detailName = $(this).find(".summary-heading > h5").text().trim(); - const detail = $(this).find(".summary-content").text().trim(); + $('.post-content_item').each(function () { + const detailName = $(this).find('.summary-heading > h5').text().trim(); + const detail = $(this).find('.summary-content').text().trim(); - switch (detailName) { - case "Genre(s)": - novel.genre = detail.replace(/[\t\n]/g, ","); - break; - case "Author(s)": - novel.author = detail; - break; - case "Status": - novel.status = detail.includes("OnGoing") - ? Status.ONGOING - : Status.COMPLETED; - break; - } - }); + switch (detailName) { + case 'Genre(s)': + novel.genre = detail.replace(/[\t\n]/g, ','); + break; + case 'Author(s)': + novel.author = detail; + break; + case 'Status': + novel.status = detail.includes('OnGoing') + ? Status.ONGOING + : Status.COMPLETED; + break; + } + }); - $(".description-summary > div.summary__content").find("em").remove(); - $(".premium-block").remove(); + $('.description-summary > div.summary__content').find('em').remove(); + $('.premium-block').remove(); - novel.summary = $("div.summary__content").text().trim(); + novel.summary = $('div.summary__content').text().trim(); - let novelChapters = []; + let novelChapters = []; - const data = await fetch(novelUrl + "ajax/chapters", { method: "POST" }); - const text = await data.text(); + const data = await fetch(novelUrl + 'ajax/chapters', {method: 'POST'}); + const text = await data.text(); - $ = cheerio.load(text); + $ = cheerio.load(text); - $(".wp-manga-chapter").each(function () { - $("i").remove(); + $('.wp-manga-chapter').each(function () { + $('i').remove(); - const chapterName = $(this).find("a").text().trim(); - const releaseDate = null; + const chapterName = $(this).find('a').text().trim(); + const releaseDate = null; - const chapterUrl = $(this).find("a").attr("href"); + const chapterUrl = $(this).find('a').attr('href'); - const chapter = { chapterName, releaseDate, chapterUrl }; + const chapter = {chapterName, releaseDate, chapterUrl}; - novelChapters.push(chapter); - }); + novelChapters.push(chapter); + }); - novel.chapters = novelChapters.reverse(); + novel.chapters = novelChapters.reverse(); - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = chapterUrl; + const url = chapterUrl; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - const chapterName = $("#chapter-heading").text(); - const chapterText = $(".reading-content").html(); + const chapterName = $('#chapter-heading').text(); + const chapterText = $('.reading-content').html(); - const chapter = { - sourceId, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = `${baseUrl}?s=${searchTerm}&post_type=wp-manga`; +const searchNovels = async searchTerm => { + const url = `${baseUrl}?s=${searchTerm}&post_type=wp-manga`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".c-tabs-item__content").each(function (result) { - const novelName = $(this).find(".post-title > h3").text().trim(); - const novelCover = $(this).find("div > div > a > img").attr("data-src"); + $('.c-tabs-item__content').each(function (result) { + const novelName = $(this).find('.post-title > h3').text().trim(); + const novelCover = $(this).find('div > div > a > img').attr('data-src'); - let novelUrl = $(this).find("div > div > a").attr("href"); - novelUrl = novelUrl.replace(`${baseUrl}/`, ""); + let novelUrl = $(this).find('div > div > a').attr('href'); + novelUrl = novelUrl.replace(`${baseUrl}/`, ''); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const ArthurScansScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default ArthurScansScraper; diff --git a/src/sources/br/ReaperScansBr.js b/src/sources/br/ReaperScansBr.js index 54deac73..62f34af8 100644 --- a/src/sources/br/ReaperScansBr.js +++ b/src/sources/br/ReaperScansBr.js @@ -1,164 +1,161 @@ -import cheerio from "react-native-cheerio"; -import { Status } from "../helpers/constants"; +import cheerio from 'react-native-cheerio'; +import {Status} from '../helpers/constants'; -const baseUrl = "https://reaperscans.com.br/"; +const baseUrl = 'https://reaperscans.com.br/'; const sourceId = 79; -const sourceName = "ReaperScans (Br)"; +const sourceName = 'ReaperScans (Br)'; -const popularNovels = async (page) => { - let url = - baseUrl + - "/all-series/todas-as-series/page/" + - page + - "/?m_orderby=rating"; +const popularNovels = async page => { + let url = + baseUrl + '/all-series/todas-as-series/page/' + page + '/?m_orderby=rating'; - const totalPages = 1; + const totalPages = 1; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".page-item-detail").each(function (result) { - const novelName = $(this).find(".item-summary h3").text().trim(); - const novelCover = $(this).find(".img-responsive").attr("data-src"); + $('.page-item-detail').each(function (result) { + const novelName = $(this).find('.item-summary h3').text().trim(); + const novelCover = $(this).find('.img-responsive').attr('data-src'); - let novelUrl = $(this).find("div > a").attr("href"); + let novelUrl = $(this).find('div > a').attr('href'); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = novelUrl; +const parseNovelAndChapters = async novelUrl => { + const url = novelUrl; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = { sourceId, url, sourceName }; + let novel = {sourceId, url, sourceName}; - $(".post-title > h3 > span").remove(); + $('.post-title > h3 > span').remove(); - novel.novelUrl = novelUrl; + novel.novelUrl = novelUrl; - novel.novelName = $(".post-title > h1").text().trim(); + novel.novelName = $('.post-title > h1').text().trim(); - novel.novelCover = $(".summary_image > a > img").attr("data-src"); + novel.novelCover = $('.summary_image > a > img').attr('data-src'); - $(".post-content_item").each(function () { - const detailName = $(this).find(".summary-heading > h5").text().trim(); - const detail = $(this).find(".summary-content").text().trim(); + $('.post-content_item').each(function () { + const detailName = $(this).find('.summary-heading > h5').text().trim(); + const detail = $(this).find('.summary-content').text().trim(); - switch (detailName) { - case "Genre(s)": - novel.genre = detail.replace(/[\t\n]/g, ","); - break; - case "Author(s)": - novel.author = detail; - break; - case "Status": - novel.status = detail.includes("OnGoing") - ? Status.ONGOING - : Status.COMPLETED; - break; - } - }); + switch (detailName) { + case 'Genre(s)': + novel.genre = detail.replace(/[\t\n]/g, ','); + break; + case 'Author(s)': + novel.author = detail; + break; + case 'Status': + novel.status = detail.includes('OnGoing') + ? Status.ONGOING + : Status.COMPLETED; + break; + } + }); - $(".description-summary > div.summary__content").find("em").remove(); - $(".premium-block").remove(); + $('.description-summary > div.summary__content').find('em').remove(); + $('.premium-block').remove(); - novel.summary = $("div.summary__content").text().trim(); + novel.summary = $('div.summary__content').text().trim(); - let novelChapters = []; + let novelChapters = []; - $(".wp-manga-chapter").each(function () { - $("i").remove(); + $('.wp-manga-chapter').each(function () { + $('i').remove(); - const chapterName = $(this).find("a").text().trim(); - const releaseDate = null; + const chapterName = $(this).find('a').text().trim(); + const releaseDate = null; - const chapterUrl = $(this).find("a").attr("href"); + const chapterUrl = $(this).find('a').attr('href'); - const chapter = { chapterName, releaseDate, chapterUrl }; + const chapter = {chapterName, releaseDate, chapterUrl}; - novelChapters.push(chapter); - }); + novelChapters.push(chapter); + }); - novel.chapters = novelChapters.reverse(); + novel.chapters = novelChapters.reverse(); - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = chapterUrl; + const url = chapterUrl; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - const chapterName = $("#chapter-heading").text(); - let chapterText = $(".reading-content").html(); - const chapter = { - sourceId, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapterName = $('#chapter-heading').text(); + let chapterText = $('.reading-content').html(); + const chapter = { + sourceId, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = `${baseUrl}?s=${searchTerm}&post_type=wp-manga`; +const searchNovels = async searchTerm => { + const url = `${baseUrl}?s=${searchTerm}&post_type=wp-manga`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".c-tabs-item__content").each(function (result) { - const novelName = $(this).find(".post-title > h3").text().trim(); - const novelCover = $(this).find("div > div > a > img").attr("data-src"); + $('.c-tabs-item__content').each(function (result) { + const novelName = $(this).find('.post-title > h3').text().trim(); + const novelCover = $(this).find('div > div > a > img').attr('data-src'); - let novelUrl = $(this).find("div > div > a").attr("href"); - novelUrl = novelUrl.replace(`${baseUrl}/`, ""); + let novelUrl = $(this).find('div > div > a').attr('href'); + novelUrl = novelUrl.replace(`${baseUrl}/`, ''); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const ReaperScansBrScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default ReaperScansBrScraper; diff --git a/src/sources/ch/yushubo.js b/src/sources/ch/yushubo.js index 440d358a..2e28a660 100644 --- a/src/sources/ch/yushubo.js +++ b/src/sources/ch/yushubo.js @@ -1,183 +1,181 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -const baseUrl = "https://m.yushubo.com"; +const baseUrl = 'https://m.yushubo.com'; -const popularNovels = async (page) => { - const url = `${baseUrl}/all/order/hits_week+desc.html?page=${page}`; - const totalPages = 5846; +const popularNovels = async page => { + const url = `${baseUrl}/all/order/hits_week+desc.html?page=${page}`; + const totalPages = 5846; - const result = await fetch(url, { - headers: { - "User-Agent": - "'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", - }, - }); - const body = await result.text(); + const result = await fetch(url, { + headers: { + 'User-Agent': + "'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", + }, + }); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".clearfix > li").each(function (result) { - const novelUrl = - $(this).find("a").attr("href").replace(".html", "").substring(1) + - "/"; + $('.clearfix > li').each(function (result) { + const novelUrl = + $(this).find('a').attr('href').replace('.html', '').substring(1) + '/'; - const novelName = $(this).find("a").text(); - let novelCover = $(this).find("img").attr("src"); - novelCover = novelCover.includes("https://tva1.sinaimg.cn/") - ? `${novelCover}` - : `${baseUrl}${novelCover}`; + const novelName = $(this).find('a').text(); + let novelCover = $(this).find('img').attr('src'); + novelCover = novelCover.includes('https://tva1.sinaimg.cn/') + ? `${novelCover}` + : `${baseUrl}${novelCover}`; - const novel = { - sourceId: 52, - novelUrl, - novelName, - novelCover, - }; + const novel = { + sourceId: 52, + novelUrl, + novelName, + novelCover, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}/${novelUrl.slice(0, -1)}.html`; +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}/${novelUrl.slice(0, -1)}.html`; - const result = await fetch(url, { - headers: { - "User-Agent": - "'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", - }, + const result = await fetch(url, { + headers: { + 'User-Agent': + "'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", + }, + }); + const body = await result.text(); + + $ = cheerio.load(body); + + let novel = {}; + + novel.sourceId = 52; + + novel.sourceName = 'Yushubo'; + + novel.url = url; + + novel.novelUrl = novelUrl; + + novel.novelName = $('dd > h2').text(); + + novel.novelCover = $('dt > img').attr('src'); + + novel.summary = $('div.content > p').text(); + + let info = []; + $('.info a').each(function (result) { + info.push($(this).text()); + }); + + novel.genre = info[0]; + + novel.author = info[1]; + + novel.artist = null; + + novel.status = 'Unknown'; + + let chapters = []; + + $('.bookshelf-list a').each(function (result) { + let chapterUrl = $(this).attr('href').substring(1); + let chapterName = $(this).attr('title'); + let releaseDate = null; + + chapters.push({ + chapterName, + releaseDate, + chapterUrl, }); - const body = await result.text(); + }); - $ = cheerio.load(body); + novel.chapters = chapters; - let novel = {}; - - novel.sourceId = 52; - - novel.sourceName = "Yushubo"; - - novel.url = url; - - novel.novelUrl = novelUrl; - - novel.novelName = $("dd > h2").text(); - - novel.novelCover = $("dt > img").attr("src"); - - novel.summary = $("div.content > p").text(); - - let info = []; - $(".info a").each(function (result) { - info.push($(this).text()); - }); - - novel.genre = info[0]; - - novel.author = info[1]; - - novel.artist = null; - - novel.status = "Unknown"; - - let chapters = []; - - $(".bookshelf-list a").each(function (result) { - let chapterUrl = $(this).attr("href").substring(1); - let chapterName = $(this).attr("title"); - let releaseDate = null; - - chapters.push({ - chapterName, - releaseDate, - chapterUrl, - }); - }); - - novel.chapters = chapters; - - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}/${chapterUrl}`; + const url = `${baseUrl}/${chapterUrl}`; - const result = await fetch(url, { - headers: { - "User-Agent": - "'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", - }, - }); - const body = await result.text(); + const result = await fetch(url, { + headers: { + 'User-Agent': + "'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", + }, + }); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - const chapterName = $(".read-section h3").text(); - let chapterText = $(".read-section").html(); + const chapterName = $('.read-section h3').text(); + let chapterText = $('.read-section').html(); - const chapter = { - sourceId: 52, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId: 52, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const searchUrl = `${baseUrl}/search.html`; +const searchNovels = async searchTerm => { + const searchUrl = `${baseUrl}/search.html`; - const result = await fetch(searchUrl, { - method: "post", - body: JSON.stringify({ keyword: searchTerm }), - headers: { - "User-Agent": - "'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", - "Content-Type": "application/json", - }, - }); + const result = await fetch(searchUrl, { + method: 'post', + body: JSON.stringify({keyword: searchTerm}), + headers: { + 'User-Agent': + "'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", + 'Content-Type': 'application/json', + }, + }); - const body = await result.text(); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".clearfix > li").each(function (result) { - let novelUrl = - $(this).find("a").attr("href").replace(".html", "").substring(1) + - "/"; + $('.clearfix > li').each(function (result) { + let novelUrl = + $(this).find('a').attr('href').replace('.html', '').substring(1) + '/'; - const novelName = $(this).find("a").text(); - let novelCover = $(this).find("img").attr("src"); - novelCover = novelCover.includes("https://tva1.sinaimg.cn/") - ? `${novelCover}` - : `${baseUrl}${novelCover}`; + const novelName = $(this).find('a').text(); + let novelCover = $(this).find('img').attr('src'); + novelCover = novelCover.includes('https://tva1.sinaimg.cn/') + ? `${novelCover}` + : `${baseUrl}${novelCover}`; - const novel = { - sourceId: 52, - novelUrl, - novelName, - novelCover, - }; + const novel = { + sourceId: 52, + novelUrl, + novelName, + novelCover, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const YushuboScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default YushuboScraper; diff --git a/src/sources/en/boxnovel.js b/src/sources/en/boxnovel.js index 941c7db7..1815e57b 100644 --- a/src/sources/en/boxnovel.js +++ b/src/sources/en/boxnovel.js @@ -1,184 +1,184 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -const baseUrl = "https://boxnovel.com/novel"; -const searchUrl = "https://boxnovel.com/"; +const baseUrl = 'https://boxnovel.com/novel'; +const searchUrl = 'https://boxnovel.com/'; const sourceId = 1; -const popularNovels = async (page) => { - let url = `${baseUrl}/page/${page}/?m_orderby=rating`; - let totalPages = 73; +const popularNovels = async page => { + let url = `${baseUrl}/page/${page}/?m_orderby=rating`; + let totalPages = 73; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".page-item-detail").each(function (result) { - const novelName = $(this).find("h5 > a").text(); - const novelCover = $(this).find("img").attr("src"); + $('.page-item-detail').each(function (result) { + const novelName = $(this).find('h5 > a').text(); + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this).find("h5 > a").attr("href"); - novelUrl = novelUrl.replace(`${baseUrl}/`, ""); + let novelUrl = $(this).find('h5 > a').attr('href'); + novelUrl = novelUrl.replace(`${baseUrl}/`, ''); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}/${novelUrl}`; +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}/${novelUrl}`; - console.log(url); + console.log(url); - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = {}; + let novel = {}; - $(".post-title > h3 > span").remove(); + $('.post-title > h3 > span').remove(); - novel.sourceId = 1; + novel.sourceId = 1; - novel.sourceName = "BoxNovel"; + novel.sourceName = 'BoxNovel'; - novel.url = url; + novel.url = url; - novel.novelUrl = novelUrl; + novel.novelUrl = novelUrl; - novel.novelName = $(".post-title > h3") - .text() - .replace(/[\t\n]/g, "") - .trim(); + novel.novelName = $('.post-title > h3') + .text() + .replace(/[\t\n]/g, '') + .trim(); - novel.novelCover = $(".summary_image > a > img").attr("src"); + novel.novelCover = $('.summary_image > a > img').attr('src'); - $(".post-content_item").each(function (result) { - detailName = $(this) - .find(".summary-heading > h5") - .text() - .replace(/[\t\n]/g, "") - .trim(); - detail = $(this) - .find(".summary-content") - .text() - .replace(/[\t\n]/g, "") - .trim(); + $('.post-content_item').each(function (result) { + detailName = $(this) + .find('.summary-heading > h5') + .text() + .replace(/[\t\n]/g, '') + .trim(); + detail = $(this) + .find('.summary-content') + .text() + .replace(/[\t\n]/g, '') + .trim(); - switch (detailName) { - case "Genre(s)": - novel.genre = detail.trim().replace(/[\t\n]/g, ","); - break; - case "Author(s)": - novel.author = detail.trim(); - break; - case "Artist(s)": - novel.status = detail.trim(); - break; - } - }); + switch (detailName) { + case 'Genre(s)': + novel.genre = detail.trim().replace(/[\t\n]/g, ','); + break; + case 'Author(s)': + novel.author = detail.trim(); + break; + case 'Artist(s)': + novel.status = detail.trim(); + break; + } + }); - $(".description-summary > div.summary__content").find("em").remove(); + $('.description-summary > div.summary__content').find('em').remove(); - novel.summary = $(".description-summary > div.summary__content") - .text() - .replace(/[\t\n]|Description|Summary/g, ""); + novel.summary = $('.description-summary > div.summary__content') + .text() + .replace(/[\t\n]|Description|Summary/g, ''); - let novelChapters = []; + let novelChapters = []; - $(".wp-manga-chapter").each(function (result) { - const chapterName = $(this) - .find("a") - .text() - .replace(/[\t\n]/g, "") - .trim(); + $('.wp-manga-chapter').each(function (result) { + const chapterName = $(this) + .find('a') + .text() + .replace(/[\t\n]/g, '') + .trim(); - const releaseDate = $(this) - .find("span") - .text() - .replace(/[\t\n]/g, "") - .trim(); + const releaseDate = $(this) + .find('span') + .text() + .replace(/[\t\n]/g, '') + .trim(); - const chapterUrl = $(this).find("a").attr("href").replace(url, ""); + const chapterUrl = $(this).find('a').attr('href').replace(url, ''); - const chapter = { chapterName, releaseDate, chapterUrl }; + const chapter = {chapterName, releaseDate, chapterUrl}; - novelChapters.push(chapter); - }); + novelChapters.push(chapter); + }); - novel.chapters = novelChapters.reverse(); + novel.chapters = novelChapters.reverse(); - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}/${novelUrl}/${chapterUrl}`; + const url = `${baseUrl}/${novelUrl}/${chapterUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - const chapterName = $("div.text-left > h3").text(); - let chapterText = $(".reading-content").html(); - const chapter = { - sourceId, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapterName = $('div.text-left > h3').text(); + let chapterText = $('.reading-content').html(); + const chapter = { + sourceId, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = `${searchUrl}?s=${searchTerm}&post_type=wp-manga&m_orderby=rating`; +const searchNovels = async searchTerm => { + const url = `${searchUrl}?s=${searchTerm}&post_type=wp-manga&m_orderby=rating`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".c-tabs-item__content").each(function (result) { - const novelName = $(this).find("h4 > a").text(); - const novelCover = $(this).find("img").attr("src"); + $('.c-tabs-item__content').each(function (result) { + const novelName = $(this).find('h4 > a').text(); + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this).find("h4 > a").attr("href"); - novelUrl = novelUrl.replace(`${baseUrl}/`, ""); + let novelUrl = $(this).find('h4 > a').attr('href'); + novelUrl = novelUrl.replace(`${baseUrl}/`, ''); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const BoxNovelScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default BoxNovelScraper; diff --git a/src/sources/en/comrademao.js b/src/sources/en/comrademao.js index b30aeb6a..c530614a 100644 --- a/src/sources/en/comrademao.js +++ b/src/sources/en/comrademao.js @@ -1,204 +1,204 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; const sourceId = 27; -const sourceName = "Comrade Mao"; +const sourceName = 'Comrade Mao'; -const baseUrl = "https://comrademao.com/"; +const baseUrl = 'https://comrademao.com/'; -const popularNovels = async (page) => { - let url = baseUrl + "novel/page/" + page; - const totalPages = 111; +const popularNovels = async page => { + let url = baseUrl + 'novel/page/' + page; + const totalPages = 111; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $("div.container") - .find("section") - .each(function () { - const novelName = $(this) - .find("div.columns > div:nth-child(2) > a") - .text(); - const novelCover = $(this).find("img").attr("src"); + $('div.container') + .find('section') + .each(function () { + const novelName = $(this) + .find('div.columns > div:nth-child(2) > a') + .text(); + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this) - .find("div.columns > div:nth-child(2) > a") - .attr("href"); - novelUrl = novelUrl.replace(baseUrl + "novel/", ""); + let novelUrl = $(this) + .find('div.columns > div:nth-child(2) > a') + .attr('href'); + novelUrl = novelUrl.replace(baseUrl + 'novel/', ''); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { novels, totalPages }; + return {novels, totalPages}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = baseUrl + "novel/" + novelUrl; - console.log(url); +const parseNovelAndChapters = async novelUrl => { + const url = baseUrl + 'novel/' + novelUrl; + console.log(url); - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = { sourceId, sourceName, url, novelUrl }; + let novel = {sourceId, sourceName, url, novelUrl}; - novel.novelName = $( - "#NovelInfo > div > div.column.is-one-third.has-text-centered > p" - ) - .text() - .trim(); + novel.novelName = $( + '#NovelInfo > div > div.column.is-one-third.has-text-centered > p', + ) + .text() + .trim(); - novel.novelCover = $("img.attachment-post-thumbnail").attr("src"); + novel.novelCover = $('img.attachment-post-thumbnail').attr('src'); - novel.summary = $("#NovelInfo > div > div:nth-child(2) > p").text().trim(); + novel.summary = $('#NovelInfo > div > div:nth-child(2) > p').text().trim(); - novel.genre = $("#NovelInfo > p:nth-child(2)") - .text() - .replace(/Genre(s):|\s/g, ""); + novel.genre = $('#NovelInfo > p:nth-child(2)') + .text() + .replace(/Genre(s):|\s/g, ''); - novel.status = $("#NovelInfo > p:nth-child(5)") - .text() - .replace(/Status:|\s/g, "") - .trim(); + novel.status = $('#NovelInfo > p:nth-child(5)') + .text() + .replace(/Status:|\s/g, '') + .trim(); - novel.author = $("#NovelInfo > p:nth-child(4)") - .text() - .replace(/Publisher:|\s/g, "") - .trim(); + novel.author = $('#NovelInfo > p:nth-child(4)') + .text() + .replace(/Publisher:|\s/g, '') + .trim(); - let novelChapters = []; + let novelChapters = []; - // $("table > tbody") - // .find("tr") - // .each(function () { - // const releaseDate = $(this).find("span").text(); + // $("table > tbody") + // .find("tr") + // .each(function () { + // const releaseDate = $(this).find("span").text(); - // const chapterName = $(this).find("a").text(); - // const chapterUrl = $(this).find("a").attr("href").split("/")[5]; + // const chapterName = $(this).find("a").text(); + // const chapterUrl = $(this).find("a").attr("href").split("/")[5]; - // novelChapters.push({ - // chapterName, - // chapterUrl, - // releaseDate, - // }); - // }); + // novelChapters.push({ + // chapterName, + // chapterUrl, + // releaseDate, + // }); + // }); - // $("small").remove(); + // $("small").remove(); - let chapterUrlPrefix = $("table > tbody") - .find("tr") - .first() - .find("a") - .attr("href") - .slice(0, -1) - .split("/") - .pop() - .split("-"); + let chapterUrlPrefix = $('table > tbody') + .find('tr') + .first() + .find('a') + .attr('href') + .slice(0, -1) + .split('/') + .pop() + .split('-'); - chapterUrlPrefix.pop(); + chapterUrlPrefix.pop(); - chapterUrlPrefix = chapterUrlPrefix.join("-").toLowerCase(); + chapterUrlPrefix = chapterUrlPrefix.join('-').toLowerCase(); - let latestChapter = $("table > tbody") - .find("tr") - .first() - .find("a") - .text() - .replace(/^\D+/g, ""); + let latestChapter = $('table > tbody') + .find('tr') + .first() + .find('a') + .text() + .replace(/^\D+/g, ''); - for (let i = 1; i <= latestChapter; i++) { - const chapterName = "Chapter " + i; - const releaseDate = null; - const chapterUrl = chapterUrlPrefix + "-" + i + "/"; + for (let i = 1; i <= latestChapter; i++) { + const chapterName = 'Chapter ' + i; + const releaseDate = null; + const chapterUrl = chapterUrlPrefix + '-' + i + '/'; - const chapter = { - chapterName, - releaseDate, - chapterUrl, - }; + const chapter = { + chapterName, + releaseDate, + chapterUrl, + }; - novelChapters.push(chapter); - } + novelChapters.push(chapter); + } - novel.chapters = novelChapters; + novel.chapters = novelChapters; - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}mtl/${novelUrl}/${chapterUrl}`; + const url = `${baseUrl}mtl/${novelUrl}/${chapterUrl}`; - console.log(url); + console.log(url); - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let chapterName = ""; + let chapterName = ''; - let chapterText = $("#content").html(); + let chapterText = $('#content').html(); - const chapter = { - sourceId, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = baseUrl + "?s=" + searchTerm + "&post_type=novel"; +const searchNovels = async searchTerm => { + const url = baseUrl + '?s=' + searchTerm + '&post_type=novel'; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".newbox") - .find("li") - .each(function () { - const novelName = $(this).find("h3").text(); - const novelCover = $(this).find("img").attr("src"); + $('.newbox') + .find('li') + .each(function () { + const novelName = $(this).find('h3').text(); + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this).find("a").attr("href"); - novelUrl = novelUrl.replace(baseUrl + "novel/", ""); + let novelUrl = $(this).find('a').attr('href'); + novelUrl = novelUrl.replace(baseUrl + 'novel/', ''); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const ComradeMaoScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default ComradeMaoScraper; diff --git a/src/sources/en/divinedaolibrary.js b/src/sources/en/divinedaolibrary.js index bb152318..2485dffa 100644 --- a/src/sources/en/divinedaolibrary.js +++ b/src/sources/en/divinedaolibrary.js @@ -1,152 +1,152 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; const sourceId = 70; -const sourceName = "Divine Dao Library"; +const sourceName = 'Divine Dao Library'; -const baseUrl = "https://www.divinedaolibrary.com/"; +const baseUrl = 'https://www.divinedaolibrary.com/'; -const popularNovels = async (page) => { - let url = baseUrl + "novels"; - const totalPages = 1; +const popularNovels = async page => { + let url = baseUrl + 'novels'; + const totalPages = 1; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $("#main") - .find("li") - .each(function () { - const novelName = $(this).find("a").text(); - const novelCover = null; - const novelUrl = $(this).find(" a").attr("href"); + $('#main') + .find('li') + .each(function () { + const novelName = $(this).find('a').text(); + const novelCover = null; + const novelUrl = $(this).find(' a').attr('href'); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { novels, totalPages }; + return {novels, totalPages}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = novelUrl; +const parseNovelAndChapters = async novelUrl => { + const url = novelUrl; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = { sourceId, sourceName, url, novelUrl }; + let novel = {sourceId, sourceName, url, novelUrl}; - novel.novelName = $("h1.entry-title").text().trim(); + novel.novelName = $('h1.entry-title').text().trim(); - novel.novelCover = - $(".entry-content").find("img").attr("src") || - "https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true"; + novel.novelCover = + $('.entry-content').find('img').attr('src') || + 'https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true'; - novel.summary = $("#main > article > div > p:nth-child(6)").text().trim(); + novel.summary = $('#main > article > div > p:nth-child(6)').text().trim(); - novel.genre = null; + novel.genre = null; - novel.status = null; + novel.status = null; - novel.author = $("#main > article > div > h3:nth-child(2)") - .text() - .replace(/Author:/g, "") - .trim(); + novel.author = $('#main > article > div > h3:nth-child(2)') + .text() + .replace(/Author:/g, '') + .trim(); - let novelChapters = []; + let novelChapters = []; - $("#main") - .find("li > span > a") - .each(function () { - const chapterName = $(this).text().trim(); - const releaseDate = null; - const chapterUrl = $(this).attr("href"); + $('#main') + .find('li > span > a') + .each(function () { + const chapterName = $(this).text().trim(); + const releaseDate = null; + const chapterUrl = $(this).attr('href'); - novelChapters.push({ chapterName, releaseDate, chapterUrl }); - }); + novelChapters.push({chapterName, releaseDate, chapterUrl}); + }); - novel.chapters = novelChapters; + novel.chapters = novelChapters; - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = chapterUrl; + const url = chapterUrl; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let chapterName = $(".entry-title").text().trim(); + let chapterName = $('.entry-title').text().trim(); - let chapterText = $(".entry-content").html(); + let chapterText = $('.entry-content').html(); - if (!chapterText) { - chapterText = $(".page-header").html(); - } + if (!chapterText) { + chapterText = $('.page-header').html(); + } - const chapter = { - sourceId, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - let url = baseUrl + "novels"; +const searchNovels = async searchTerm => { + let url = baseUrl + 'novels'; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $("#main") - .find("li") - .each(function () { - const novelName = $(this).find("a").text(); - const novelCover = null; - const novelUrl = $(this).find(" a").attr("href"); + $('#main') + .find('li') + .each(function () { + const novelName = $(this).find('a').text(); + const novelCover = null; + const novelUrl = $(this).find(' a').attr('href'); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - novels = novels.filter((novel) => - novel.novelName.toLowerCase().includes(searchTerm.toLowerCase()) - ); + novels = novels.filter(novel => + novel.novelName.toLowerCase().includes(searchTerm.toLowerCase()), + ); - return novels; + return novels; }; const DivineDaoLibraryScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default DivineDaoLibraryScraper; diff --git a/src/sources/en/fastnovel.js b/src/sources/en/fastnovel.js index 698d9e56..1426f7dc 100644 --- a/src/sources/en/fastnovel.js +++ b/src/sources/en/fastnovel.js @@ -1,165 +1,165 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -const baseUrl = "https://fastnovel.net"; +const baseUrl = 'https://fastnovel.net'; const searchUrl = `https://fastnovel.net/search/`; -const popularNovels = async (page) => { - let totalPages = 39; - const url = `${baseUrl}/list/most-popular.html?page=${page}`; +const popularNovels = async page => { + let totalPages = 39; + const url = `${baseUrl}/list/most-popular.html?page=${page}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".film-item").each(function (result) { - const novelName = $(this).find(".name").text(); - const novelCover = $(this).find(".img").attr("data-original"); - const novelUrl = $(this).find("a").attr("href").substring(1); + $('.film-item').each(function (result) { + const novelName = $(this).find('.name').text(); + const novelCover = $(this).find('.img').attr('data-original'); + const novelUrl = $(this).find('a').attr('href').substring(1); - const novel = { - sourceId: 3, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 3, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}/${novelUrl}/`; +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}/${novelUrl}/`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = {}; + let novel = {}; - novel.sourceId = 3; + novel.sourceId = 3; - novel.sourceName = "FastNovel"; + novel.sourceName = 'FastNovel'; - novel.url = url; + novel.url = url; - novel.novelUrl = novelUrl; + novel.novelUrl = novelUrl; - novel.novelName = $("h1").text(); + novel.novelName = $('h1').text(); - novel.novelCover = $(".book-cover").attr("data-original"); + novel.novelCover = $('.book-cover').attr('data-original'); - novel.summary = $("div.film-content > p").text(); + novel.summary = $('div.film-content > p').text(); - novel.author = $("li > label") - .filter(function () { - return $(this).text().trim() === "Author:"; - }) - .next() - .text(); + novel.author = $('li > label') + .filter(function () { + return $(this).text().trim() === 'Author:'; + }) + .next() + .text(); - novel.genre = $("li") - .filter(function () { - return $(this).find("label").text().trim() === "Genre:"; - }) - .text() - .replace("Genre:", ""); + novel.genre = $('li') + .filter(function () { + return $(this).find('label').text().trim() === 'Genre:'; + }) + .text() + .replace('Genre:', ''); - novel.artist = null; + novel.artist = null; - novel.status = null; + novel.status = null; - novel.status = $("li") - .filter(function () { - return $(this).find("label").text().trim() === "Status:"; - }) - .text() - .includes("Completed") - ? "Completed" - : "Ongoing"; + novel.status = $('li') + .filter(function () { + return $(this).find('label').text().trim() === 'Status:'; + }) + .text() + .includes('Completed') + ? 'Completed' + : 'Ongoing'; - let novelChapters = []; + let novelChapters = []; - $(".chapter").each(function (result) { - const chapterName = $(this).text(); - const releaseDate = null; - let chapterUrl = $(this).attr("href"); - chapterUrl = chapterUrl.replace(`/${novelUrl}/`, ""); + $('.chapter').each(function (result) { + const chapterName = $(this).text(); + const releaseDate = null; + let chapterUrl = $(this).attr('href'); + chapterUrl = chapterUrl.replace(`/${novelUrl}/`, ''); - const novel = { - chapterName, - releaseDate, - chapterUrl, - }; + const novel = { + chapterName, + releaseDate, + chapterUrl, + }; - novelChapters.push(novel); - }); + novelChapters.push(novel); + }); - novel.chapters = novelChapters; + novel.chapters = novelChapters; - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}/${novelUrl}/${chapterUrl}`; + const url = `${baseUrl}/${novelUrl}/${chapterUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - const chapterName = $(".episode-name").text(); + const chapterName = $('.episode-name').text(); - let chapterText = $("#chapter-body").html(); - const chapter = { - sourceId: 3, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + let chapterText = $('#chapter-body').html(); + const chapter = { + sourceId: 3, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = `${searchUrl}${searchTerm}`; +const searchNovels = async searchTerm => { + const url = `${searchUrl}${searchTerm}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".film-item").each(function (result) { - const novelName = $(this).find("div.title > p.name").text(); - const novelCover = $(this).find(".img").attr("data-original"); - const novelUrl = $(this).find("a").attr("href").substring(1); + $('.film-item').each(function (result) { + const novelName = $(this).find('div.title > p.name').text(); + const novelCover = $(this).find('.img').attr('data-original'); + const novelUrl = $(this).find('a').attr('href').substring(1); - const novel = { - sourceId: 3, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 3, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const fastNovelScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default fastNovelScraper; diff --git a/src/sources/en/foxaholic.js b/src/sources/en/foxaholic.js index 839b0e33..8082a52c 100644 --- a/src/sources/en/foxaholic.js +++ b/src/sources/en/foxaholic.js @@ -1,191 +1,191 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -const baseUrl = "https://foxaholic.com/"; +const baseUrl = 'https://foxaholic.com/'; -const popularNovels = async (page) => { - let totalPages = 5; - let url = baseUrl + "novel/page/" + page + "/?m_orderby=rating"; +const popularNovels = async page => { + let totalPages = 5; + let url = baseUrl + 'novel/page/' + page + '/?m_orderby=rating'; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".page-item-detail").each(function (result) { - const novelName = $(this).find(".h5 > a").text(); - const novelCover = $(this).find("img").attr("data-src"); + $('.page-item-detail').each(function (result) { + const novelName = $(this).find('.h5 > a').text(); + const novelCover = $(this).find('img').attr('data-src'); - let novelUrl = $(this).find(".h5 > a").attr("href").split("/")[4]; - novelUrl += "/"; + let novelUrl = $(this).find('.h5 > a').attr('href').split('/')[4]; + novelUrl += '/'; - const novel = { - sourceId: 22, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 22, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}novel/${novelUrl}`; +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}novel/${novelUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = {}; + let novel = {}; - novel.sourceId = 22; + novel.sourceId = 22; - novel.sourceName = "Foxaholic"; + novel.sourceName = 'Foxaholic'; - novel.url = url; + novel.url = url; - novel.novelUrl = novelUrl; + novel.novelUrl = novelUrl; - novel.novelName = $(".post-title > h1") - .text() - .replace(/[\t\n]/g, "") - .trim(); + novel.novelName = $('.post-title > h1') + .text() + .replace(/[\t\n]/g, '') + .trim(); - novel.novelCover = $(".summary_image > a > img").attr("data-src"); + novel.novelCover = $('.summary_image > a > img').attr('data-src'); - $(".post-content_item").each(function (result) { - detailName = $(this) - .find(".summary-heading > h5") - .text() - .replace(/[\t\n]/g, "") - .trim(); - detail = $(this) - .find(".summary-content") - .text() - .replace(/[\t\n]/g, "") - .trim(); + $('.post-content_item').each(function (result) { + detailName = $(this) + .find('.summary-heading > h5') + .text() + .replace(/[\t\n]/g, '') + .trim(); + detail = $(this) + .find('.summary-content') + .text() + .replace(/[\t\n]/g, '') + .trim(); - switch (detailName) { - case "Genre": - novel.genre = detail.trim().replace(/[\t\n]/g, ","); - break; - case "Author": - novel.author = detail.trim(); - break; - case "Novel": - novel.status = detail.trim(); - break; - } - }); + switch (detailName) { + case 'Genre': + novel.genre = detail.trim().replace(/[\t\n]/g, ','); + break; + case 'Author': + novel.author = detail.trim(); + break; + case 'Novel': + novel.status = detail.trim(); + break; + } + }); - $(".description-summary > div.summary__content").find("em").remove(); + $('.description-summary > div.summary__content').find('em').remove(); - novel.summary = $(".description-summary > div.summary__content") - .text() - .trim(); + novel.summary = $('.description-summary > div.summary__content') + .text() + .trim(); - let novelChapters = []; + let novelChapters = []; - const novelId = $("#manga-chapters-holder").attr("data-id"); + const novelId = $('#manga-chapters-holder').attr('data-id'); - let formData = new FormData(); - formData.append("action", "manga_get_chapters"); - formData.append("manga", novelId); + let formData = new FormData(); + formData.append('action', 'manga_get_chapters'); + formData.append('manga', novelId); - const data = await fetch( - "https://www.foxaholic.com/wp-admin/admin-ajax.php", - { - method: "POST", - body: formData, - } - ); - const text = await data.text(); + const data = await fetch( + 'https://www.foxaholic.com/wp-admin/admin-ajax.php', + { + method: 'POST', + body: formData, + }, + ); + const text = await data.text(); - $ = cheerio.load(text); + $ = cheerio.load(text); - $(".wp-manga-chapter").each(function (result) { - chapterName = $(this) - .find("a") - .text() - .replace(/[\t\n]/g, "") - .trim(); + $('.wp-manga-chapter').each(function (result) { + chapterName = $(this) + .find('a') + .text() + .replace(/[\t\n]/g, '') + .trim(); - releaseDate = $(this).find("span").text().trim(); + releaseDate = $(this).find('span').text().trim(); - chapterUrl = $(this).find("a").attr("href").split("/"); + chapterUrl = $(this).find('a').attr('href').split('/'); - chapterUrl[6] - ? (chapterUrl = chapterUrl[5] + "/" + chapterUrl[6]) - : (chapterUrl = chapterUrl[5]); + chapterUrl[6] + ? (chapterUrl = chapterUrl[5] + '/' + chapterUrl[6]) + : (chapterUrl = chapterUrl[5]); - novelChapters.push({ chapterName, releaseDate, chapterUrl }); - }); + novelChapters.push({chapterName, releaseDate, chapterUrl}); + }); - novel.chapters = novelChapters.reverse(); + novel.chapters = novelChapters.reverse(); - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}novel/${novelUrl}${chapterUrl}/`; + const url = `${baseUrl}novel/${novelUrl}${chapterUrl}/`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - const chapterName = $("h1#chapter-heading").text(); - let chapterText = $(".reading-content").html(); - const chapter = { - sourceId: 22, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapterName = $('h1#chapter-heading').text(); + let chapterText = $('.reading-content').html(); + const chapter = { + sourceId: 22, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = `${baseUrl}?s=${searchTerm}&post_type=wp-manga`; +const searchNovels = async searchTerm => { + const url = `${baseUrl}?s=${searchTerm}&post_type=wp-manga`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".c-tabs-item__content").each(function (result) { - const novelName = $(this).find(".h4 > a").text(); - const novelCover = $(this).find("img").attr("data-src"); + $('.c-tabs-item__content').each(function (result) { + const novelName = $(this).find('.h4 > a').text(); + const novelCover = $(this).find('img').attr('data-src'); - let novelUrl = $(this).find(".h4 > a").attr("href").split("/")[4]; - novelUrl += "/"; - const novel = { - sourceId: 22, - novelName, - novelCover, - novelUrl, - }; + let novelUrl = $(this).find('.h4 > a').attr('href').split('/')[4]; + novelUrl += '/'; + const novel = { + sourceId: 22, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const FoxaHolicScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default FoxaHolicScraper; diff --git a/src/sources/en/freewebnovel.js b/src/sources/en/freewebnovel.js index 14016b13..23adacff 100644 --- a/src/sources/en/freewebnovel.js +++ b/src/sources/en/freewebnovel.js @@ -1,183 +1,183 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -const baseUrl = "https://freewebnovel.com/"; +const baseUrl = 'https://freewebnovel.com/'; -const popularNovels = async (page) => { - let totalPages = 30; - let url = baseUrl + "completed-novel/" + page; +const popularNovels = async page => { + let totalPages = 30; + let url = baseUrl + 'completed-novel/' + page; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".li-row").each(function (result) { - const novelName = $(this).find(".tit").text(); - const novelCover = $(this).find("img").attr("src"); + $('.li-row').each(function (result) { + const novelName = $(this).find('.tit').text(); + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this) - .find("h3 > a") - .attr("href") - .replace(".html", "") - .slice(1); + let novelUrl = $(this) + .find('h3 > a') + .attr('href') + .replace('.html', '') + .slice(1); - const novel = { - sourceId: 13, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 13, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}${novelUrl.replace("/", "")}.html`; +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}${novelUrl.replace('/', '')}.html`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = {}; + let novel = {}; - novel.sourceId = 13; + novel.sourceId = 13; - novel.sourceName = "FreeWebNovel"; + novel.sourceName = 'FreeWebNovel'; - novel.url = url; + novel.url = url; - novel.novelUrl = novelUrl; + novel.novelUrl = novelUrl; - novel.novelName = $("h1.tit").text(); + novel.novelName = $('h1.tit').text(); - novel.novelCover = $(".pic > img").attr("src"); + novel.novelCover = $('.pic > img').attr('src'); - novel.genre = $("[title=Genre]") - .next() - .text() - .replace(/[\t\n]/g, ""); + novel.genre = $('[title=Genre]') + .next() + .text() + .replace(/[\t\n]/g, ''); - novel.author = $("[title=Author]") - .next() - .text() - .replace(/[\t\n]/g, ""); + novel.author = $('[title=Author]') + .next() + .text() + .replace(/[\t\n]/g, ''); - novel.artist = null; + novel.artist = null; - novel.status = $("[title=Status]") - .next() - .text() - .replace(/[\t\n]/g, ""); + novel.status = $('[title=Status]') + .next() + .text() + .replace(/[\t\n]/g, ''); - let novelSummary = $(".inner").text().trim(); - novel.summary = novelSummary; + let novelSummary = $('.inner').text().trim(); + novel.summary = novelSummary; - let novelChapters = []; + let novelChapters = []; - let latestChapter; + let latestChapter; - $("h3.tit").each(function (res) { - if ($(this).find("a").text() === novel.novelName) { - latestChapter = $(this).next().find("span.s3").text().match(/\d+/); - } - }); - - latestChapter = latestChapter[0]; - - for (let i = 1; i <= parseInt(latestChapter); i++) { - const chapterName = "Chapter " + i; - - const releaseDate = null; - - const chapterUrl = "chapter-" + i; - - const chapter = { chapterName, releaseDate, chapterUrl }; - - novelChapters.push(chapter); + $('h3.tit').each(function (res) { + if ($(this).find('a').text() === novel.novelName) { + latestChapter = $(this).next().find('span.s3').text().match(/\d+/); } + }); - novel.chapters = novelChapters; + latestChapter = latestChapter[0]; - return novel; + for (let i = 1; i <= parseInt(latestChapter); i++) { + const chapterName = 'Chapter ' + i; + + const releaseDate = null; + + const chapterUrl = 'chapter-' + i; + + const chapter = {chapterName, releaseDate, chapterUrl}; + + novelChapters.push(chapter); + } + + novel.chapters = novelChapters; + + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - let novelId = novelUrl.replace("/", ""); + let novelId = novelUrl.replace('/', ''); - const url = `${baseUrl}${novelId}/${chapterUrl}.html`; + const url = `${baseUrl}${novelId}/${chapterUrl}.html`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let chapterName = $("h1.tit").text(); + let chapterName = $('h1.tit').text(); - let chapterText = $("div.txt").html(); + let chapterText = $('div.txt').html(); - const chapter = { - sourceId: 13, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId: 13, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = baseUrl + "search/"; +const searchNovels = async searchTerm => { + const url = baseUrl + 'search/'; - const formData = new FormData(); - formData.append("searchkey", searchTerm); + const formData = new FormData(); + formData.append('searchkey', searchTerm); - const result = await fetch(url, { - method: "POST", - body: formData, - }); - const body = await result.text(); + const result = await fetch(url, { + method: 'POST', + body: formData, + }); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".li-row > .li > .con").each(function (result) { - const novelName = $(this).find(".tit").text(); - const novelCover = $(this).find(".pic > a > img").attr("data-cfsrc"); + $('.li-row > .li > .con').each(function (result) { + const novelName = $(this).find('.tit').text(); + const novelCover = $(this).find('.pic > a > img').attr('data-cfsrc'); - let novelUrl = $(this) - .find("h3 > a") - .attr("href") - .replace(".html", "") - .slice(1); + let novelUrl = $(this) + .find('h3 > a') + .attr('href') + .replace('.html', '') + .slice(1); - novelUrl += "/"; + novelUrl += '/'; - const novel = { - sourceId: 13, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 13, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const FreeWebNovelScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default FreeWebNovelScraper; diff --git a/src/sources/en/jpmtl.js b/src/sources/en/jpmtl.js index 7b52144d..33aa033a 100644 --- a/src/sources/en/jpmtl.js +++ b/src/sources/en/jpmtl.js @@ -1,170 +1,170 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -const baseUrl = "https://jpmtl.com/"; +const baseUrl = 'https://jpmtl.com/'; -const popularNovels = async (page) => { - let totalPages = 157; - let url = - "https://jpmtl.com/v2/book/show/browse?query=&categories=&content_type=0&direction=0&page=" + - page + - "&limit=20&type=5&status=all&language=3&exclude_categories="; +const popularNovels = async page => { + let totalPages = 157; + let url = + 'https://jpmtl.com/v2/book/show/browse?query=&categories=&content_type=0&direction=0&page=' + + page + + '&limit=20&type=5&status=all&language=3&exclude_categories='; - const result = await fetch(url); - const body = await result.json(); + const result = await fetch(url); + const body = await result.json(); - let novels = []; + let novels = []; - body.map((item) => { - const novelName = item.title; - const novelCover = item.cover; - const novelUrl = item.id + "/"; + body.map(item => { + const novelName = item.title; + const novelCover = item.cover; + const novelUrl = item.id + '/'; - const novel = { sourceId: 14, novelName, novelCover, novelUrl }; + const novel = {sourceId: 14, novelName, novelCover, novelUrl}; - novels.push(novel); - }); + novels.push(novel); + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}books/${novelUrl}`; +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}books/${novelUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = {}; + let novel = {}; - novel.sourceId = 14; + novel.sourceId = 14; - novel.sourceName = "JPMTL"; + novel.sourceName = 'JPMTL'; - novel.url = url; + novel.url = url; - novel.novelUrl = novelUrl; + novel.novelUrl = novelUrl; - novel.novelName = $("h1.book-sidebar__title").text(); + novel.novelName = $('h1.book-sidebar__title').text(); - novel.novelCover = $(".book-sidebar").find("img").attr("src"); + novel.novelCover = $('.book-sidebar').find('img').attr('src'); - $(".post-content_item").each(function (result) { - detailName = $(this) - .find(".summary-heading > h5") - .text() - .replace(/[\t\n]/g, "") - .trim(); - detail = $(this) - .find(".summary-content") - .text() - .replace(/[\t\n]/g, "") - .trim(); + $('.post-content_item').each(function (result) { + detailName = $(this) + .find('.summary-heading > h5') + .text() + .replace(/[\t\n]/g, '') + .trim(); + detail = $(this) + .find('.summary-content') + .text() + .replace(/[\t\n]/g, '') + .trim(); - novel[detailName] = detail; + novel[detailName] = detail; + }); + + novel.summary = $('.main-book__synopsis').text(); + + novel.genre = ''; + + $('a.main-book__category').each(function (result) { + novel.genre += $(this).text(); + }); + + function capitalizeFirstLetter(string) { + return string.charAt(0).toUpperCase() + string.slice(1); + } + + const info = $('.book-sidebar__author > .book-sidebar__info') + .text() + .trim() + .split('・'); + + if (info) { + novel.author = info[0]; + + novel.status = capitalizeFirstLetter(info[1]); + } + + let novelChapters = []; + + const chapterListUrl = `https://jpmtl.com/v2/chapter/${novelUrl}/list?state=published&structured=true&d`; + + const chapterResult = await fetch(chapterListUrl); + const volumes = await chapterResult.json(); + + volumes.map(volume => { + volume.chapters.map(chapter => { + const chapterName = chapter.title; + const releaseDate = chapter.created_at; + const chapterUrl = chapter.id; + + const obj = { + sourceId: 14, + chapterName, + releaseDate, + chapterUrl, + }; + + novelChapters.push(obj); }); + }); - novel.summary = $(".main-book__synopsis").text(); + novel.chapters = novelChapters; - novel.genre = ""; - - $("a.main-book__category").each(function (result) { - novel.genre += $(this).text(); - }); - - function capitalizeFirstLetter(string) { - return string.charAt(0).toUpperCase() + string.slice(1); - } - - const info = $(".book-sidebar__author > .book-sidebar__info") - .text() - .trim() - .split("・"); - - if (info) { - novel.author = info[0]; - - novel.status = capitalizeFirstLetter(info[1]); - } - - let novelChapters = []; - - const chapterListUrl = `https://jpmtl.com/v2/chapter/${novelUrl}/list?state=published&structured=true&d`; - - const chapterResult = await fetch(chapterListUrl); - const volumes = await chapterResult.json(); - - volumes.map((volume) => { - volume.chapters.map((chapter) => { - const chapterName = chapter.title; - const releaseDate = chapter.created_at; - const chapterUrl = chapter.id; - - const obj = { - sourceId: 14, - chapterName, - releaseDate, - chapterUrl, - }; - - novelChapters.push(obj); - }); - }); - - novel.chapters = novelChapters; - - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}books/${novelUrl}${chapterUrl}`; + const url = `${baseUrl}books/${novelUrl}${chapterUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - const chapterName = $(".chapter-content__title").text(); - let chapterText = $(".chapter-content__content").html(); - novelUrl += "/"; + const chapterName = $('.chapter-content__title').text(); + let chapterText = $('.chapter-content__content').html(); + novelUrl += '/'; - const chapter = { - sourceId: 14, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId: 14, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = `https://jpmtl.com/v2/book/show/browse?query=${searchTerm}&categories=&content_type=2&direction=0&page=1&limit=20&type=5&status=all&language=3&exclude_categories=`; +const searchNovels = async searchTerm => { + const url = `https://jpmtl.com/v2/book/show/browse?query=${searchTerm}&categories=&content_type=2&direction=0&page=1&limit=20&type=5&status=all&language=3&exclude_categories=`; - const result = await fetch(url); - const body = await result.json(); + const result = await fetch(url); + const body = await result.json(); - const novels = []; + const novels = []; - body.map((item) => { - const novelName = item.title; - const novelCover = item.cover; - const novelUrl = item.id + "/"; + body.map(item => { + const novelName = item.title; + const novelCover = item.cover; + const novelUrl = item.id + '/'; - const novel = { sourceId: 14, novelName, novelCover, novelUrl }; + const novel = {sourceId: 14, novelName, novelCover, novelUrl}; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const JPMTLScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default JPMTLScraper; diff --git a/src/sources/en/kisslightnovels.js b/src/sources/en/kisslightnovels.js index faa37a4d..f6e7572c 100644 --- a/src/sources/en/kisslightnovels.js +++ b/src/sources/en/kisslightnovels.js @@ -1,178 +1,178 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -const baseUrl = "https://kisslightnovels.info/"; +const baseUrl = 'https://kisslightnovels.info/'; -const popularNovels = async (page) => { - let totalPages = 26; - const url = `${baseUrl}light-novel/page/${page}`; +const popularNovels = async page => { + let totalPages = 26; + const url = `${baseUrl}light-novel/page/${page}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".page-item-detail").each(function (result) { - const novelName = $(this).find("h5 > a").text(); - const novelCover = $(this).find("img").attr("src"); + $('.page-item-detail').each(function (result) { + const novelName = $(this).find('h5 > a').text(); + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this).find("h5 > a").attr("href"); - novelUrl = novelUrl.replace(`${baseUrl}novel/`, ""); + let novelUrl = $(this).find('h5 > a').attr('href'); + novelUrl = novelUrl.replace(`${baseUrl}novel/`, ''); - const novel = { - sourceId: 11, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 11, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}novel/${novelUrl}`; +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}novel/${novelUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = {}; + let novel = {}; - novel.sourceId = 11; + novel.sourceId = 11; - novel.sourceName = "KissLightNovels"; + novel.sourceName = 'KissLightNovels'; - novel.url = url; + novel.url = url; - novel.novelUrl = novelUrl; + novel.novelUrl = novelUrl; - novel.novelName = $(".post-title > h1") - .text() - .replace(/[\t\n]/g, "") - .trim(); + novel.novelName = $('.post-title > h1') + .text() + .replace(/[\t\n]/g, '') + .trim(); - novel.novelCover = $(".summary_image > a > img").attr("src"); + novel.novelCover = $('.summary_image > a > img').attr('src'); - $(".post-content_item").each(function (result) { - detailName = $(this) - .find(".summary-heading > h5") - .text() - .replace(/[\t\n]/g, "") - .trim(); - detail = $(this) - .find(".summary-content") - .text() - .replace(/[\t\n]/g, "") - .trim(); + $('.post-content_item').each(function (result) { + detailName = $(this) + .find('.summary-heading > h5') + .text() + .replace(/[\t\n]/g, '') + .trim(); + detail = $(this) + .find('.summary-content') + .text() + .replace(/[\t\n]/g, '') + .trim(); - switch (detailName) { - case "Genre(s)": - novel.genre = detail.trim().replace(/[\t\n]/g, ","); - break; - case "Author(s)": - novel.author = detail.trim(); - break; - case "Artist(s)": - novel.status = detail.trim(); - break; - } - }); + switch (detailName) { + case 'Genre(s)': + novel.genre = detail.trim().replace(/[\t\n]/g, ','); + break; + case 'Author(s)': + novel.author = detail.trim(); + break; + case 'Artist(s)': + novel.status = detail.trim(); + break; + } + }); - $(".description-summary > div.summary__content").find("em").remove(); + $('.description-summary > div.summary__content').find('em').remove(); - novel.summary = $(".description-summary > div.summary__content") - .text() - .replace(/[\t\n]/g, ""); + novel.summary = $('.description-summary > div.summary__content') + .text() + .replace(/[\t\n]/g, ''); - let novelChapters = []; + let novelChapters = []; - $(".wp-manga-chapter").each(function (result) { - chapterName = $(this) - .find("a") - .text() - .replace(/[\t\n]/g, "") - .trim(); + $('.wp-manga-chapter').each(function (result) { + chapterName = $(this) + .find('a') + .text() + .replace(/[\t\n]/g, '') + .trim(); - releaseDate = $(this) - .find("span") - .text() - .replace(/[\t\n]/g, "") - .trim(); + releaseDate = $(this) + .find('span') + .text() + .replace(/[\t\n]/g, '') + .trim(); - chapterUrl = $(this).find("a").attr("href").replace(url, ""); + chapterUrl = $(this).find('a').attr('href').replace(url, ''); - novelChapters.push({ chapterName, releaseDate, chapterUrl }); - }); + novelChapters.push({chapterName, releaseDate, chapterUrl}); + }); - novel.chapters = novelChapters.reverse(); + novel.chapters = novelChapters.reverse(); - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}novel/${novelUrl}/${chapterUrl}`; + const url = `${baseUrl}novel/${novelUrl}/${chapterUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - $("#snippet-box").remove(); + $('#snippet-box').remove(); - const chapterName = $("div.text-left > h4").text(); + const chapterName = $('div.text-left > h4').text(); - let chapterText = $(".reading-content").html(); - const chapter = { - sourceId: 11, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + let chapterText = $('.reading-content').html(); + const chapter = { + sourceId: 11, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = `${baseUrl}?s=${searchTerm}&post_type=wp-manga&m_orderby=rating`; +const searchNovels = async searchTerm => { + const url = `${baseUrl}?s=${searchTerm}&post_type=wp-manga&m_orderby=rating`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".c-tabs-item__content").each(function (result) { - const novelName = $(this).find("h4 > a").text(); - const novelCover = $(this).find("img").attr("src"); + $('.c-tabs-item__content').each(function (result) { + const novelName = $(this).find('h4 > a').text(); + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this).find("h4 > a").attr("href"); - novelUrl = novelUrl.replace(`${baseUrl}novel/`, ""); + let novelUrl = $(this).find('h4 > a').attr('href'); + novelUrl = novelUrl.replace(`${baseUrl}novel/`, ''); - const novel = { - sourceId: 11, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 11, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const kissLightNovelScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default kissLightNovelScraper; diff --git a/src/sources/en/lightnovelpub.js b/src/sources/en/lightnovelpub.js index 7dd317c4..eda6edd5 100644 --- a/src/sources/en/lightnovelpub.js +++ b/src/sources/en/lightnovelpub.js @@ -1,215 +1,215 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -const baseUrl = "https://www.lightnovelpub.com/"; +const baseUrl = 'https://www.lightnovelpub.com/'; -const popularNovels = async (page) => { - let totalPages = 33; - let url = baseUrl + "browse/all/popular/all/" + page; +const popularNovels = async page => { + let totalPages = 33; + let url = baseUrl + 'browse/all/popular/all/' + page; - let headers = new Headers({ - Accept: "application/json", - "Content-Type": "application/json", - "User-Agent": - "'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", - }); + let headers = new Headers({ + Accept: 'application/json', + 'Content-Type': 'application/json', + 'User-Agent': + "'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", + }); - const result = await fetch(url, { - method: "GET", - headers: headers, - }); - const body = await result.text(); + const result = await fetch(url, { + method: 'GET', + headers: headers, + }); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".novel-item.ads").remove(); + $('.novel-item.ads').remove(); - $(".novel-item").each(function () { - const novelName = $(this) - .find(".novel-title") - .text() - .replace(/[\t\n]/g, ""); + $('.novel-item').each(function () { + const novelName = $(this) + .find('.novel-title') + .text() + .replace(/[\t\n]/g, ''); - const novelCover = $(this).find("img").attr("data-src"); + const novelCover = $(this).find('img').attr('data-src'); - let novelUrl = $(this) - .find(".novel-title > a") - .attr("href") - .replace(`/novel/`, ""); - novelUrl += "/"; + let novelUrl = $(this) + .find('.novel-title > a') + .attr('href') + .replace(`/novel/`, ''); + novelUrl += '/'; - const novel = { - sourceId: 15, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 15, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}novel/${novelUrl}/`; +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}novel/${novelUrl}/`; - let headers = new Headers({ - Accept: "application/json", - "Content-Type": "application/json", - "User-Agent": - "'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", - }); + let headers = new Headers({ + Accept: 'application/json', + 'Content-Type': 'application/json', + 'User-Agent': + "'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", + }); - const result = await fetch(url, { - method: "GET", - headers: headers, - }); - const body = await result.text(); + const result = await fetch(url, { + method: 'GET', + headers: headers, + }); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = {}; + let novel = {}; - novel.sourceId = 15; + novel.sourceId = 15; - novel.sourceName = "LightNovelPub"; + novel.sourceName = 'LightNovelPub'; - novel.url = url; + novel.url = url; - novel.novelUrl = novelUrl; + novel.novelUrl = novelUrl; - novel.novelName = $("h1.novel-title") + novel.novelName = $('h1.novel-title') + .text() + .replace(/[\t\n]/g, '') + .trim(); + + novel.novelCover = $('figure.cover > img').attr('data-src'); + + novel.genre = ''; + + $('div.categories > ul > li').each(function () { + novel.genre += + $(this) .text() - .replace(/[\t\n]/g, "") - .trim(); + .replace(/[\t\n]/g, '') + ','; + }); - novel.novelCover = $("figure.cover > img").attr("data-src"); - - novel.genre = ""; - - $("div.categories > ul > li").each(function () { - novel.genre += - $(this) - .text() - .replace(/[\t\n]/g, "") + ","; - }); - - $("div.header-stats > span").each(function () { - if ($(this).find("small").text() === "Status") { - novel.status = $(this).find("strong").text(); - } - }); - - novel.genre = novel.genre.slice(0, -1); - - novel.author = $(".author > a > span").text(); - - novel.summary = $(".summary > .content").text().trim(); - - let novelChapters = []; - - let totalChapters; - - totalChapters = $(".header-stats > span").first().text().match(/\d+/)[0]; - - for (let i = 1; i <= totalChapters; i++) { - const chapterName = "Chapter " + i; - - const releaseDate = null; - - const chapterUrl = "chapter-" + i; - - const chapter = { chapterName, releaseDate, chapterUrl }; - - novelChapters.push(chapter); + $('div.header-stats > span').each(function () { + if ($(this).find('small').text() === 'Status') { + novel.status = $(this).find('strong').text(); } + }); - novel.chapters = novelChapters; + novel.genre = novel.genre.slice(0, -1); - return novel; + novel.author = $('.author > a > span').text(); + + novel.summary = $('.summary > .content').text().trim(); + + let novelChapters = []; + + let totalChapters; + + totalChapters = $('.header-stats > span').first().text().match(/\d+/)[0]; + + for (let i = 1; i <= totalChapters; i++) { + const chapterName = 'Chapter ' + i; + + const releaseDate = null; + + const chapterUrl = 'chapter-' + i; + + const chapter = {chapterName, releaseDate, chapterUrl}; + + novelChapters.push(chapter); + } + + novel.chapters = novelChapters; + + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}novel/${novelUrl}/${chapterUrl}`; + const url = `${baseUrl}novel/${novelUrl}/${chapterUrl}`; - let headers = new Headers({ - Accept: "application/json", - "Content-Type": "application/json", - "User-Agent": - "'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", - }); + let headers = new Headers({ + Accept: 'application/json', + 'Content-Type': 'application/json', + 'User-Agent': + "'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", + }); - const result = await fetch(url, { - method: "GET", - headers: headers, - }); - const body = await result.text(); - $ = cheerio.load(body); + const result = await fetch(url, { + method: 'GET', + headers: headers, + }); + const body = await result.text(); + $ = cheerio.load(body); - const chapterName = $("h2").text(); - let chapterText = $("#chapter-container").html(); - const chapter = { - sourceId: 15, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapterName = $('h2').text(); + let chapterText = $('#chapter-container').html(); + const chapter = { + sourceId: 15, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = `${baseUrl}lnwsearchlive?inputContent=${searchTerm}`; +const searchNovels = async searchTerm => { + const url = `${baseUrl}lnwsearchlive?inputContent=${searchTerm}`; - let headers = new Headers({ - Accept: "application/json", - "Content-Type": "application/json", - "User-Agent": - "'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", - }); + let headers = new Headers({ + Accept: 'application/json', + 'Content-Type': 'application/json', + 'User-Agent': + "'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", + }); - const result = await fetch(url, { - method: "GET", - headers: headers, - }); - const body = await result.text(); + const result = await fetch(url, { + method: 'GET', + headers: headers, + }); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - let results = JSON.parse($("body").text()); + let results = JSON.parse($('body').text()); - $ = cheerio.load(results.resultview); + $ = cheerio.load(results.resultview); - $(".novel-item").each(function () { - const novelName = $(this).find("h4.novel-title").text(); - const novelCover = $(this).find("img").attr("src"); + $('.novel-item').each(function () { + const novelName = $(this).find('h4.novel-title').text(); + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this).find("a").attr("href").replace(`/novel/`, ""); - novelUrl += "/"; + let novelUrl = $(this).find('a').attr('href').replace(`/novel/`, ''); + novelUrl += '/'; - const novel = { - sourceId: 15, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 15, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const lightNovelPubScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default lightNovelPubScraper; diff --git a/src/sources/en/lightnovelupdates.js b/src/sources/en/lightnovelupdates.js index c651bc9e..b4531b9e 100644 --- a/src/sources/en/lightnovelupdates.js +++ b/src/sources/en/lightnovelupdates.js @@ -1,159 +1,159 @@ -import cheerio from "react-native-cheerio"; -import NovelUpdatesScraper from "./novelupdates"; +import cheerio from 'react-native-cheerio'; +import NovelUpdatesScraper from './novelupdates'; const sourceId = 72; -const sourceName = "LightNovelUpdates"; -const baseUrl = "https://www.lightnovelupdates.com/"; +const sourceName = 'LightNovelUpdates'; +const baseUrl = 'https://www.lightnovelupdates.com/'; -const popularNovels = async (page) => { - let url = `${baseUrl}novel/page/${page}/?m_orderby=rating`; - let totalPages = 500; +const popularNovels = async page => { + let url = `${baseUrl}novel/page/${page}/?m_orderby=rating`; + let totalPages = 500; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".page-item-detail").each(function () { - const novelName = $(this).find(".h5 > a").text(); - const novelCover = $(this).find("img").attr("src"); - const novelUrl = $(this).find(".h5 > a").attr("href"); + $('.page-item-detail').each(function () { + const novelName = $(this).find('.h5 > a').text(); + const novelCover = $(this).find('img').attr('src'); + const novelUrl = $(this).find('.h5 > a').attr('href'); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = novelUrl; +const parseNovelAndChapters = async novelUrl => { + const url = novelUrl; - console.log(url); + console.log(url); - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = { sourceId, sourceName, novelUrl, url }; + let novel = {sourceId, sourceName, novelUrl, url}; - novel.novelName = $(".post-title > h1").text().trim(); - novel.novelCover = - $(".summary_image > a > img").attr("src") || - "https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true"; + novel.novelName = $('.post-title > h1').text().trim(); + novel.novelCover = + $('.summary_image > a > img').attr('src') || + 'https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true'; - $(".post-content_item").each(function (result) { - detailName = $(this).find(".summary-heading > h5").text().trim(); - detail = $(this).find(".summary-content").text().trim(); + $('.post-content_item').each(function (result) { + detailName = $(this).find('.summary-heading > h5').text().trim(); + detail = $(this).find('.summary-content').text().trim(); - switch (detailName) { - case "Genre(s)": - novel.genre = detail.trim().replace(/[\t\n]/g, ","); - break; - case "Author(s)": - novel.author = detail.trim(); - break; - case "Artist(s)": - novel.status = detail.trim(); - break; - } - }); + switch (detailName) { + case 'Genre(s)': + novel.genre = detail.trim().replace(/[\t\n]/g, ','); + break; + case 'Author(s)': + novel.author = detail.trim(); + break; + case 'Artist(s)': + novel.status = detail.trim(); + break; + } + }); - novel.summary = $("div.summary__content").text(); + novel.summary = $('div.summary__content').text(); - let novelChapters = []; + let novelChapters = []; - const novelId = $(".rating-post-id").attr("value"); + const novelId = $('.rating-post-id').attr('value'); - let formData = new FormData(); - formData.append("action", "manga_get_chapters"); - formData.append("manga", novelId); + let formData = new FormData(); + formData.append('action', 'manga_get_chapters'); + formData.append('manga', novelId); - const data = await fetch( - "https://www.lightnovelupdates.com/wp-admin/admin-ajax.php", - { - method: "POST", - body: formData, - } - ); - const text = await data.text(); + const data = await fetch( + 'https://www.lightnovelupdates.com/wp-admin/admin-ajax.php', + { + method: 'POST', + body: formData, + }, + ); + const text = await data.text(); - $ = cheerio.load(text); + $ = cheerio.load(text); - $(".wp-manga-chapter").each(function () { - const chapterName = $(this).find("a").text().trim(); - const releaseDate = $(this).find("span").text().trim(); - const chapterUrl = $(this).find("a").attr("href"); + $('.wp-manga-chapter').each(function () { + const chapterName = $(this).find('a').text().trim(); + const releaseDate = $(this).find('span').text().trim(); + const chapterUrl = $(this).find('a').attr('href'); - const chapter = { chapterName, releaseDate, chapterUrl }; + const chapter = {chapterName, releaseDate, chapterUrl}; - novelChapters.push(chapter); - }); + novelChapters.push(chapter); + }); - novel.chapters = novelChapters.reverse(); + novel.chapters = novelChapters.reverse(); - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const chapterName = ""; - const chapterText = ( - await NovelUpdatesScraper.parseChapter(novelUrl, chapterUrl) - ).chapterText; + const chapterName = ''; + const chapterText = ( + await NovelUpdatesScraper.parseChapter(novelUrl, chapterUrl) + ).chapterText; - const chapter = { - sourceId, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = `${baseUrl}?s=${searchTerm}&post_type=wp-manga&m_orderby=rating`; +const searchNovels = async searchTerm => { + const url = `${baseUrl}?s=${searchTerm}&post_type=wp-manga&m_orderby=rating`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".c-tabs-item__content").each(function (result) { - const novelName = $(this).find(".h4 > a").text(); - const novelCover = $(this).find("img").attr("src"); - const novelUrl = $(this).find(".h4 > a").attr("href"); + $('.c-tabs-item__content').each(function (result) { + const novelName = $(this).find('.h4 > a').text(); + const novelCover = $(this).find('img').attr('src'); + const novelUrl = $(this).find('.h4 > a').attr('href'); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const LightNovelUpdatesScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default LightNovelUpdatesScraper; diff --git a/src/sources/en/lnmtl.js b/src/sources/en/lnmtl.js index b306656d..205fed9c 100644 --- a/src/sources/en/lnmtl.js +++ b/src/sources/en/lnmtl.js @@ -1,194 +1,192 @@ -import cheerio from "react-native-cheerio"; -import { showToast } from "../../hooks/showToast"; -import { htmlToText } from "../helpers/htmlToText"; +import cheerio from 'react-native-cheerio'; +import {showToast} from '../../hooks/showToast'; +import {htmlToText} from '../helpers/htmlToText'; -const baseUrl = "https://lnmtl.com/"; +const baseUrl = 'https://lnmtl.com/'; -const popularNovels = async (page) => { - const totalPages = 63; - let url = baseUrl + "novel?page=" + page; +const popularNovels = async page => { + const totalPages = 63; + let url = baseUrl + 'novel?page=' + page; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".media").each(function (result) { - const novelName = $(this).find("h4").text(); - const novelCover = $(this).find("img").attr("src"); + $('.media').each(function (result) { + const novelName = $(this).find('h4').text(); + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this).find("h4 > a").attr("href"); - novelUrl = novelUrl.replace(baseUrl + "novel/", ""); + let novelUrl = $(this).find('h4 > a').attr('href'); + novelUrl = novelUrl.replace(baseUrl + 'novel/', ''); - const novel = { - sourceId: 37, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 37, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - showToast("LNMTL might take around 20-30 seconds."); +const parseNovelAndChapters = async novelUrl => { + showToast('LNMTL might take around 20-30 seconds.'); - const url = baseUrl + "novel/" + novelUrl; + const url = baseUrl + 'novel/' + novelUrl; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = {}; + let novel = {}; - novel.sourceId = 37; + novel.sourceId = 37; - novel.sourceName = "LNMTL"; + novel.sourceName = 'LNMTL'; - novel.url = url; + novel.url = url; - novel.novelUrl = novelUrl; + novel.novelUrl = novelUrl; - novel.novelName = $(".novel-name").text(); + novel.novelName = $('.novel-name').text(); - novel.novelCover = $("div.novel").find("img").attr("src"); + novel.novelCover = $('div.novel').find('img').attr('src'); - novel.summary = $("div.description").text().trim(); + novel.summary = $('div.description').text().trim(); - novel.author = $( - "main > div:nth-child(3) > div > div.col-lg-3.col-md-4 > div:nth-child(2) > div.panel-body > dl:nth-child(1) > dd > span" - ).text(); + novel.author = $( + 'main > div:nth-child(3) > div > div.col-lg-3.col-md-4 > div:nth-child(2) > div.panel-body > dl:nth-child(1) > dd > span', + ).text(); - novel.status = $( - "main > div:nth-child(3) > div > div.col-lg-3.col-md-4 > div:nth-child(2) > div.panel-body > dl:nth-child(2) > dd" - ) - .text() - .trim(); + novel.status = $( + 'main > div:nth-child(3) > div > div.col-lg-3.col-md-4 > div:nth-child(2) > div.panel-body > dl:nth-child(2) > dd', + ) + .text() + .trim(); - novel.genre = $( - "main > div.container > div > div.col-lg-3.col-md-4 > div:nth-child(4) > div.panel-body > ul" - ) - .text() - .trim() - .replace(/\s\s/g, ","); + novel.genre = $( + 'main > div.container > div > div.col-lg-3.col-md-4 > div:nth-child(4) > div.panel-body > ul', + ) + .text() + .trim() + .replace(/\s\s/g, ','); - let volumes = JSON.parse( - $("main") - .next() - .html() - .match(/lnmtl.volumes = \[(.*?)\]/)[0] - .replace("lnmtl.volumes = ", "") + let volumes = JSON.parse( + $('main') + .next() + .html() + .match(/lnmtl.volumes = \[(.*?)\]/)[0] + .replace('lnmtl.volumes = ', ''), + ); + + let chapters = []; + + volumes = volumes.map(volume => volume.id); + + for (const volume of volumes) { + let volumeData = await fetch( + `https://lnmtl.com/chapter?page=1&volumeId=${volume}`, ); + volumeData = await volumeData.json(); - let chapters = []; + // volumeData = volumeData.data.map((volume) => volume.slug); - volumes = volumes.map((volume) => volume.id); + for (let i = 1; i <= volumeData.last_page; i++) { + let chapterData = await fetch( + `https://lnmtl.com/chapter?page=${i}&volumeId=${volume}`, + ); + chapterData = await chapterData.json(); - for (const volume of volumes) { - let volumeData = await fetch( - `https://lnmtl.com/chapter?page=1&volumeId=${volume}` - ); - volumeData = await volumeData.json(); + chapterData = chapterData.data.map(chapter => ({ + chapterName: `#${chapter.number} ${chapter.title}`, + chapterUrl: chapter.slug, + releaseDate: chapter.created_at, + })); - // volumeData = volumeData.data.map((volume) => volume.slug); - - for (let i = 1; i <= volumeData.last_page; i++) { - let chapterData = await fetch( - `https://lnmtl.com/chapter?page=${i}&volumeId=${volume}` - ); - chapterData = await chapterData.json(); - - chapterData = chapterData.data.map((chapter) => ({ - chapterName: `#${chapter.number} ${chapter.title}`, - chapterUrl: chapter.slug, - releaseDate: chapter.created_at, - })); - - chapters.push(...chapterData); - } + chapters.push(...chapterData); } + } - novel.chapters = chapters; + novel.chapters = chapters; - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}chapter/${chapterUrl}`; + const url = `${baseUrl}chapter/${chapterUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let chapterName = $("h3 > span.chapter-title").text().trim(); + let chapterName = $('h3 > span.chapter-title').text().trim(); - $(".original").remove(); + $('.original').remove(); - let chapterText = $(".chapter-body").html(); + let chapterText = $('.chapter-body').html(); - if (!chapterText) { - chapterText = $(".alert.alert-warning").text(); - } + if (!chapterText) { + chapterText = $('.alert.alert-warning').text(); + } - chapterText = - chapterName + - "\n\n" + - htmlToText(chapterText, { removeLineBreaks: false }); + chapterText = + chapterName + '\n\n' + htmlToText(chapterText, {removeLineBreaks: false}); - const chapter = { - sourceId: 37, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId: 37, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = "https://lnmtl.com/term"; +const searchNovels = async searchTerm => { + const url = 'https://lnmtl.com/term'; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = $("footer") - .next() - .next() - .html() - .match(/local: \[(.*?)\]/)[0] - .replace("local: ", ""); + let novels = $('footer') + .next() + .next() + .html() + .match(/local: \[(.*?)\]/)[0] + .replace('local: ', ''); - novels = JSON.parse(novels); + novels = JSON.parse(novels); - novels = novels.filter((novel) => - novel.name.toLowerCase().includes(searchTerm.toLowerCase()) - ); + novels = novels.filter(novel => + novel.name.toLowerCase().includes(searchTerm.toLowerCase()), + ); - novels = novels.map((novel) => ({ - sourceId: 37, - novelName: novel.name, - novelUrl: novel.slug, - novelCover: novel.image, - })); + novels = novels.map(novel => ({ + sourceId: 37, + novelName: novel.name, + novelUrl: novel.slug, + novelCover: novel.image, + })); - return novels; + return novels; }; const LNMTLScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default LNMTLScraper; diff --git a/src/sources/en/mtlnovel.js b/src/sources/en/mtlnovel.js index 4996c7c6..331a4fcc 100644 --- a/src/sources/en/mtlnovel.js +++ b/src/sources/en/mtlnovel.js @@ -1,202 +1,199 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -const baseUrl = "https://www.mtlnovel.com"; +const baseUrl = 'https://www.mtlnovel.com'; -const popularNovels = async (page) => { - let totalPages = 10; - const url = `${baseUrl}/alltime-rank/page/${page}`; +const popularNovels = async page => { + let totalPages = 10; + const url = `${baseUrl}/alltime-rank/page/${page}`; - console.log(url); + console.log(url); - let headers = new Headers({ - referer: "https://www.mtlnovel.com/", - "User-Agent": - "'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", - }); + let headers = new Headers({ + referer: 'https://www.mtlnovel.com/', + 'User-Agent': + "'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", + }); - const result = await fetch(url, { - method: "GET", - headers: headers, - }); - const body = await result.text(); + const result = await fetch(url, { + method: 'GET', + headers: headers, + }); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $("div.box.wide").each(function (result) { - const novelName = $(this).find("a.list-title").text().slice(4); - const novelCover = $(this).find("amp-img").attr("src"); + $('div.box.wide').each(function (result) { + const novelName = $(this).find('a.list-title').text().slice(4); + const novelCover = $(this).find('amp-img').attr('src'); - let novelUrl = $(this).find("a.list-title").attr("href"); - novelUrl = novelUrl.replace("https://www.mtlnovel.com/", ""); + let novelUrl = $(this).find('a.list-title').attr('href'); + novelUrl = novelUrl.replace('https://www.mtlnovel.com/', ''); - const novel = { - sourceId: 5, - novelUrl, - novelName, - novelCover, - }; - - novels.push(novel); - }); - - return { totalPages, novels }; -}; - -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}/${novelUrl}`; - - let headers = new Headers({ - referer: "https://www.mtlnovel.com/alltime-rank/", - "User-Agent": - "'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", - }); - - const result = await fetch(url, { - method: "GET", - headers: headers, - }); - const body = await result.text(); - - $ = cheerio.load(body); - - let novel = {}; - - novel.sourceId = 5; - - novel.sourceName = "MTLNovel"; - - novel.url = url; - - novel.novelUrl = novelUrl; - - novel.novelName = $("h1.entry-title").text(); - - novel.novelCover = $(".nov-head > amp-img").attr("src"); - - novel.summary = $("div.desc > h2").next().text(); - - novel.author = $("tr > td") - .filter(function () { - return $(this).prev().text().trim() === "Author"; - }) - .next() - .text() - .replace("Auhtor:", ""); - - novel.status = $("tr > td") - .filter(function () { - return $(this).prev().text().trim() === "Status"; - }) - .next() - .text() - .replace("Status:", ""); - - novel.genre = $("td") - .filter(function () { - return $(this).prev().text().trim() === "Genre"; - }) - .next() - .text() - .replace("Genre:", ""); - - novel.artist = null; - - const chapterListUrl = url + "/chapter-list/"; - - const getChapters = async () => { - const result = await fetch(chapterListUrl); - const body = await result.text(); - - $ = cheerio.load(body); - - let novelChapters = []; - - $("div.ch-list") - .find("a.ch-link") - .each(function (result) { - const chapterName = $(this).text().replace("~ ", ""); - const releaseDate = null; - - let chapterUrl = $(this).attr("href"); - chapterUrl = chapterUrl.replace( - `https://www.mtlnovel.com/${novelUrl}`, - "" - ); - - novelChapters.push({ - chapterUrl, - chapterName, - releaseDate, - }); - }); - return novelChapters.reverse(); + const novel = { + sourceId: 5, + novelUrl, + novelName, + novelCover, }; - novel.chapters = await getChapters(); + novels.push(novel); + }); - return novel; + return {totalPages, novels}; +}; + +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}/${novelUrl}`; + + let headers = new Headers({ + referer: 'https://www.mtlnovel.com/alltime-rank/', + 'User-Agent': + "'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", + }); + + const result = await fetch(url, { + method: 'GET', + headers: headers, + }); + const body = await result.text(); + + $ = cheerio.load(body); + + let novel = {}; + + novel.sourceId = 5; + + novel.sourceName = 'MTLNovel'; + + novel.url = url; + + novel.novelUrl = novelUrl; + + novel.novelName = $('h1.entry-title').text(); + + novel.novelCover = $('.nov-head > amp-img').attr('src'); + + novel.summary = $('div.desc > h2').next().text(); + + novel.author = $('tr > td') + .filter(function () { + return $(this).prev().text().trim() === 'Author'; + }) + .next() + .text() + .replace('Auhtor:', ''); + + novel.status = $('tr > td') + .filter(function () { + return $(this).prev().text().trim() === 'Status'; + }) + .next() + .text() + .replace('Status:', ''); + + novel.genre = $('td') + .filter(function () { + return $(this).prev().text().trim() === 'Genre'; + }) + .next() + .text() + .replace('Genre:', ''); + + novel.artist = null; + + const chapterListUrl = url + '/chapter-list/'; + + const getChapters = async () => { + const result = await fetch(chapterListUrl); + const body = await result.text(); + + $ = cheerio.load(body); + + let novelChapters = []; + + $('div.ch-list') + .find('a.ch-link') + .each(function (result) { + const chapterName = $(this).text().replace('~ ', ''); + const releaseDate = null; + + let chapterUrl = $(this).attr('href'); + chapterUrl = chapterUrl.replace( + `https://www.mtlnovel.com/${novelUrl}`, + '', + ); + + novelChapters.push({ + chapterUrl, + chapterName, + releaseDate, + }); + }); + return novelChapters.reverse(); + }; + + novel.chapters = await getChapters(); + + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}/${novelUrl}${chapterUrl}`; - console.log(url); + const url = `${baseUrl}/${novelUrl}${chapterUrl}`; + console.log(url); - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - const chapterName = $("h1.main-title").text(); - let chapterText = $("div.par").html(); - const chapter = { - sourceId: 5, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapterName = $('h1.main-title').text(); + let chapterText = $('div.par').html(); + const chapter = { + sourceId: 5, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const searchUrl = - "https://www.mtlnovel.com/wp-admin/admin-ajax.php?action=autosuggest&q=" + - searchTerm + - "&__amp_source_origin=https%3A%2F%2Fwww.mtlnovel.com"; +const searchNovels = async searchTerm => { + const searchUrl = + 'https://www.mtlnovel.com/wp-admin/admin-ajax.php?action=autosuggest&q=' + + searchTerm + + '&__amp_source_origin=https%3A%2F%2Fwww.mtlnovel.com'; - const res = await fetch(searchUrl); - const result = await res.text(); + const res = await fetch(searchUrl); + const result = await res.text(); - $ = cheerio.load(result); + $ = cheerio.load(result); - let body = JSON.parse($("body").text()); + let body = JSON.parse($('body').text()); - let novels = []; + let novels = []; - body.items[0].results.map((item) => { - const novelName = item.title.replace(/<\/?strong>/g, ""); - const novelCover = item.thumbnail; - const novelUrl = item.permalink.replace( - "https://www.mtlnovel.com/", - "" - ); + body.items[0].results.map(item => { + const novelName = item.title.replace(/<\/?strong>/g, ''); + const novelCover = item.thumbnail; + const novelUrl = item.permalink.replace('https://www.mtlnovel.com/', ''); - const novel = { sourceId: 5, novelName, novelCover, novelUrl }; + const novel = {sourceId: 5, novelName, novelCover, novelUrl}; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const mtlNovelScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default mtlNovelScraper; diff --git a/src/sources/en/novelfull.js b/src/sources/en/novelfull.js index 375ec438..76ce7595 100644 --- a/src/sources/en/novelfull.js +++ b/src/sources/en/novelfull.js @@ -1,186 +1,185 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -const baseUrl = "https://novelfull.com"; +const baseUrl = 'https://novelfull.com'; -const popularNovels = async (page) => { - let totalPages = 42; - const url = `${baseUrl}/most-popular?page=${page}`; +const popularNovels = async page => { + let totalPages = 42; + const url = `${baseUrl}/most-popular?page=${page}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $("div.col-truyen-main > div.list-truyen > .row").each(function (result) { - const novelName = $(this).find("h3.truyen-title > a").text(); + $('div.col-truyen-main > div.list-truyen > .row').each(function (result) { + const novelName = $(this).find('h3.truyen-title > a').text(); - let novelCover = $(this).find("img").attr("src"); - novelCover = baseUrl + novelCover; + let novelCover = $(this).find('img').attr('src'); + novelCover = baseUrl + novelCover; - let novelUrl = $(this) - .find("h3.truyen-title > a") - .attr("href") - .replace(".html", "") - .substring(1); - novelUrl = `${novelUrl}/`; + let novelUrl = $(this) + .find('h3.truyen-title > a') + .attr('href') + .replace('.html', '') + .substring(1); + novelUrl = `${novelUrl}/`; - const novel = { - sourceId: 8, - novelUrl, - novelName, - novelCover, - }; - - novels.push(novel); - }); - - return { totalPages, novels }; -}; - -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}/${novelUrl.slice(0, -1)}.html`; - - const result = await fetch(url); - const body = await result.text(); - - $ = cheerio.load(body); - - let novel = {}; - - novel.sourceId = 8; - - novel.sourceName = "NovelFull"; - - novel.url = url; - - novel.novelUrl = novelUrl; - - novel.novelName = $("div.book > img").attr("alt"); - - novel.novelCover = baseUrl + $("div.book > img").attr("src"); - - novel.summary = $("div.desc-text").text().trim(); - - novel.author = $("div.info > div > h3") - .filter(function () { - return $(this).text().trim() === "Author:"; - }) - .siblings() - .text(); - - novel.genre = $("div.info > div") - .filter(function () { - return $(this).find("h3").text().trim() === "Genre:"; - }) - .text() - .replace("Genre:", ""); - - novel.artist = null; - - novel.status = $("div.info > div > h3") - .filter(function () { - return $(this).text().trim() === "Status:"; - }) - .next() - .text(); - - const novelId = $("#rating").attr("data-novel-id"); - - const getChapters = async (novelId) => { - const chapterListUrl = - baseUrl + "/ajax/chapter-option?novelId=" + novelId; - - const data = await fetch(chapterListUrl); - const chapters = await data.text(); - - $ = cheerio.load(chapters); - - let novelChapters = []; - - $("select > option").each(function (result) { - let chapterName = $(this).text(); - let releaseDate = null; - let chapterUrl = $(this).attr("value"); - chapterUrl = chapterUrl.replace(`/${novelUrl}`, ""); - - novelChapters.push({ - chapterName, - releaseDate, - chapterUrl, - }); - }); - return novelChapters; + const novel = { + sourceId: 8, + novelUrl, + novelName, + novelCover, }; - novel.chapters = await getChapters(novelId); + novels.push(novel); + }); - return novel; + return {totalPages, novels}; +}; + +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}/${novelUrl.slice(0, -1)}.html`; + + const result = await fetch(url); + const body = await result.text(); + + $ = cheerio.load(body); + + let novel = {}; + + novel.sourceId = 8; + + novel.sourceName = 'NovelFull'; + + novel.url = url; + + novel.novelUrl = novelUrl; + + novel.novelName = $('div.book > img').attr('alt'); + + novel.novelCover = baseUrl + $('div.book > img').attr('src'); + + novel.summary = $('div.desc-text').text().trim(); + + novel.author = $('div.info > div > h3') + .filter(function () { + return $(this).text().trim() === 'Author:'; + }) + .siblings() + .text(); + + novel.genre = $('div.info > div') + .filter(function () { + return $(this).find('h3').text().trim() === 'Genre:'; + }) + .text() + .replace('Genre:', ''); + + novel.artist = null; + + novel.status = $('div.info > div > h3') + .filter(function () { + return $(this).text().trim() === 'Status:'; + }) + .next() + .text(); + + const novelId = $('#rating').attr('data-novel-id'); + + const getChapters = async novelId => { + const chapterListUrl = baseUrl + '/ajax/chapter-option?novelId=' + novelId; + + const data = await fetch(chapterListUrl); + const chapters = await data.text(); + + $ = cheerio.load(chapters); + + let novelChapters = []; + + $('select > option').each(function (result) { + let chapterName = $(this).text(); + let releaseDate = null; + let chapterUrl = $(this).attr('value'); + chapterUrl = chapterUrl.replace(`/${novelUrl}`, ''); + + novelChapters.push({ + chapterName, + releaseDate, + chapterUrl, + }); + }); + return novelChapters; + }; + + novel.chapters = await getChapters(novelId); + + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}/${novelUrl}${chapterUrl}`; + const url = `${baseUrl}/${novelUrl}${chapterUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - const chapterName = $(".chapter-title").attr("title"); - let chapterText = $("#chapter-content").html(); - const chapter = { - sourceId: 8, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapterName = $('.chapter-title').attr('title'); + let chapterText = $('#chapter-content').html(); + const chapter = { + sourceId: 8, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const searchUrl = `https://novelfull.com/search?keyword=`; +const searchNovels = async searchTerm => { + const searchUrl = `https://novelfull.com/search?keyword=`; - const url = `${searchUrl}${searchTerm}`; + const url = `${searchUrl}${searchTerm}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $("div.col-truyen-main > div.list-truyen > .row").each(function (result) { - let novelUrl = $(this) - .find("h3.truyen-title > a") - .attr("href") - .replace(".html", "") - .substring(1); - novelUrl = `${novelUrl}/`; + $('div.col-truyen-main > div.list-truyen > .row').each(function (result) { + let novelUrl = $(this) + .find('h3.truyen-title > a') + .attr('href') + .replace('.html', '') + .substring(1); + novelUrl = `${novelUrl}/`; - const novelName = $(this).find("h3.truyen-title > a").text(); - const novelCover = baseUrl + $(this).find("img").attr("src"); + const novelName = $(this).find('h3.truyen-title > a').text(); + const novelCover = baseUrl + $(this).find('img').attr('src'); - const novel = { - sourceId: 8, - novelUrl, - novelName, - novelCover, - }; + const novel = { + sourceId: 8, + novelUrl, + novelName, + novelCover, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const novelFullScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default novelFullScraper; diff --git a/src/sources/en/novelhall.js b/src/sources/en/novelhall.js index 2bb3a57d..f79b464e 100644 --- a/src/sources/en/novelhall.js +++ b/src/sources/en/novelhall.js @@ -1,161 +1,161 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -const baseUrl = "https://www.novelhall.com/"; +const baseUrl = 'https://www.novelhall.com/'; -const popularNovels = async (page) => { - let totalPages = 1; - const result = await fetch(baseUrl); - const body = await result.text(); +const popularNovels = async page => { + let totalPages = 1; + const result = await fetch(baseUrl); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $("div.section1") - .find("li") - .each(function (result) { - const novelName = $(this).find(".book-info > h2 > a").text(); - const novelCover = $(this).find("img").attr("src"); - const novelUrl = $(this).find("a").attr("href").substring(1); + $('div.section1') + .find('li') + .each(function (result) { + const novelName = $(this).find('.book-info > h2 > a').text(); + const novelCover = $(this).find('img').attr('src'); + const novelUrl = $(this).find('a').attr('href').substring(1); - const novel = { - sourceId: 6, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 6, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}${novelUrl}/`; +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}${novelUrl}/`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = {}; + let novel = {}; - novel.sourceId = 6; + novel.sourceId = 6; - novel.sourceName = "NovelHall"; + novel.sourceName = 'NovelHall'; - novel.url = url; + novel.url = url; - novel.novelUrl = novelUrl; + novel.novelUrl = novelUrl; - novel.novelName = $("h1").text(); + novel.novelName = $('h1').text(); - novel.novelCover = $("div.book-img > img").attr("src"); + novel.novelCover = $('div.book-img > img').attr('src'); - novel.summary = $("div.intro") - .text() - .replace(/[\t\n]/g, ""); + novel.summary = $('div.intro') + .text() + .replace(/[\t\n]/g, ''); - novel.author = $("span.blue").first().text().replace("Author:", ""); + novel.author = $('span.blue').first().text().replace('Author:', ''); - novel.genre = $("a.red").text(); + novel.genre = $('a.red').text(); - novel.artist = null; + novel.artist = null; - novel.status = $("span.blue").first().next().text().replace("Status:", ""); + novel.status = $('span.blue').first().next().text().replace('Status:', ''); - let novelChapters = []; + let novelChapters = []; - $("div.book-catalog.hidden-xs#morelist") - .find("li.post-11") - .each(function (result) { - let chapterName = $(this).find("a").text(); + $('div.book-catalog.hidden-xs#morelist') + .find('li.post-11') + .each(function (result) { + let chapterName = $(this).find('a').text(); - let releaseDate = null; + let releaseDate = null; - let chapterUrl = $(this).find("a").attr("href"); + let chapterUrl = $(this).find('a').attr('href'); - if (chapterUrl) { - chapterUrl = chapterUrl.replace(`/${novelUrl}/`, ""); - } + if (chapterUrl) { + chapterUrl = chapterUrl.replace(`/${novelUrl}/`, ''); + } - const chapter = { - chapterName, - releaseDate, - chapterUrl, - }; + const chapter = { + chapterName, + releaseDate, + chapterUrl, + }; - novelChapters.push(chapter); - }); + novelChapters.push(chapter); + }); - novel.chapters = novelChapters; + novel.chapters = novelChapters; - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}${novelUrl}/${chapterUrl}`; + const url = `${baseUrl}${novelUrl}/${chapterUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - const chapterName = $("h1").text(); - let chapterText = $("div.entry-content").html(); - chapter = { - sourceId: 6, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapterName = $('h1').text(); + let chapterText = $('div.entry-content').html(); + chapter = { + sourceId: 6, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const searchUrl = `${baseUrl}index.php?s=so&module=book&keyword=`; +const searchNovels = async searchTerm => { + const searchUrl = `${baseUrl}index.php?s=so&module=book&keyword=`; - const url = `${searchUrl}${searchTerm}`; + const url = `${searchUrl}${searchTerm}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $("tr").each(function (result) { - let novelName = $(this).find("td:nth-child(2)").text(); - novelName = novelName.replace(/[\t\n]/g, ""); + $('tr').each(function (result) { + let novelName = $(this).find('td:nth-child(2)').text(); + novelName = novelName.replace(/[\t\n]/g, ''); - const novelCover = "https://cdn.novelupdates.com/imgmid/noimagemid.jpg"; + const novelCover = 'https://cdn.novelupdates.com/imgmid/noimagemid.jpg'; - let novelUrl = $(this).find("td:nth-child(2) >").attr("href"); - if (novelUrl) { - novelUrl = novelUrl.slice(1); - } + let novelUrl = $(this).find('td:nth-child(2) >').attr('href'); + if (novelUrl) { + novelUrl = novelUrl.slice(1); + } - novel = { - sourceId: 6, - novelName, - novelCover, - novelUrl, - }; + novel = { + sourceId: 6, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const novelhallScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default novelhallScraper; diff --git a/src/sources/en/novelonlinefull.js b/src/sources/en/novelonlinefull.js index 402d6e7c..88134e57 100644 --- a/src/sources/en/novelonlinefull.js +++ b/src/sources/en/novelonlinefull.js @@ -1,158 +1,158 @@ -import cheerio from "react-native-cheerio"; -import { Status } from "../helpers/constants"; +import cheerio from 'react-native-cheerio'; +import {Status} from '../helpers/constants'; const sourceId = 71; -const sourceName = "NovelOnlineFull.com"; -const baseUrl = "https://novelonlinefull.com/"; +const sourceName = 'NovelOnlineFull.com'; +const baseUrl = 'https://novelonlinefull.com/'; -const popularNovels = async (page) => { - let url = - baseUrl + "novel_list?type=topview&category=all&state=all&page=" + page; - const totalPages = 2155; +const popularNovels = async page => { + let url = + baseUrl + 'novel_list?type=topview&category=all&state=all&page=' + page; + const totalPages = 2155; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".update_item.list_category").each(function () { - const novelName = $(this).find("h3").text().trim(); - const novelCover = $(this).find("img").attr("src"); + $('.update_item.list_category').each(function () { + const novelName = $(this).find('h3').text().trim(); + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this).find("h3 > a").attr("href"); - novelUrl = novelUrl.replace(baseUrl + "novel/", ""); + let novelUrl = $(this).find('h3 > a').attr('href'); + novelUrl = novelUrl.replace(baseUrl + 'novel/', ''); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { novels, totalPages }; + return {novels, totalPages}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = baseUrl + "novel/" + novelUrl; +const parseNovelAndChapters = async novelUrl => { + const url = baseUrl + 'novel/' + novelUrl; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = { sourceId, sourceName, url, novelUrl }; + let novel = {sourceId, sourceName, url, novelUrl}; - novel.novelName = $("h1").text().trim(); + novel.novelName = $('h1').text().trim(); - novel.novelCover = $(".info_image > img").attr("src"); + novel.novelCover = $('.info_image > img').attr('src'); - novel.summary = $("#noidungm").text().trim(); + novel.summary = $('#noidungm').text().trim(); - novel.genre = $("div.truyen_if_wrap > ul > li:nth-child(3)") - .text() - .replace("GENRES: ", "") - .replace(/ - /g, ",") - .trim(); + novel.genre = $('div.truyen_if_wrap > ul > li:nth-child(3)') + .text() + .replace('GENRES: ', '') + .replace(/ - /g, ',') + .trim(); - console.log(novel.genre); + console.log(novel.genre); - novel.status = - $(" div.truyen_if_wrap > ul > li:nth-child(4) > a") - .text() - .replace("STATUS", "") - .trim() === "ONGOING" - ? Status.ONGOING - : Status.COMPLETED; + novel.status = + $(' div.truyen_if_wrap > ul > li:nth-child(4) > a') + .text() + .replace('STATUS', '') + .trim() === 'ONGOING' + ? Status.ONGOING + : Status.COMPLETED; - novel.author = $("div.truyen_if_wrap > ul > li:nth-child(2)") - .text() - .replace("Author(s):", "") - .trim(); + novel.author = $('div.truyen_if_wrap > ul > li:nth-child(2)') + .text() + .replace('Author(s):', '') + .trim(); - let novelChapters = []; + let novelChapters = []; - $(".chapter-list") - .find(".row") - .each(function () { - const releaseDate = $(this).find("span:nth-child(2)").text(); + $('.chapter-list') + .find('.row') + .each(function () { + const releaseDate = $(this).find('span:nth-child(2)').text(); - const chapterName = $(this).find("span:nth-child(1) > a").text(); - const chapterUrl = $(this).find("a").attr("href"); + const chapterName = $(this).find('span:nth-child(1) > a').text(); + const chapterUrl = $(this).find('a').attr('href'); - novelChapters.push({ - chapterName, - chapterUrl, - releaseDate, - }); - }); + novelChapters.push({ + chapterName, + chapterUrl, + releaseDate, + }); + }); - novel.chapters = novelChapters.reverse(); + novel.chapters = novelChapters.reverse(); - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = chapterUrl; + const url = chapterUrl; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let chapterName = $(".name_chapter").text(); - let chapterText = $("#vung_doc").html(); + let chapterName = $('.name_chapter').text(); + let chapterText = $('#vung_doc').html(); - const chapter = { - sourceId, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = baseUrl + "search_novels/" + searchTerm; +const searchNovels = async searchTerm => { + const url = baseUrl + 'search_novels/' + searchTerm; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".update_item.list_category").each(function () { - const novelName = $(this).find("h3").text(); - const novelCover = $(this).find("img").attr("src"); + $('.update_item.list_category').each(function () { + const novelName = $(this).find('h3').text(); + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this).find("h3 > a").attr("href"); - novelUrl = novelUrl.replace(baseUrl + "novel/", ""); + let novelUrl = $(this).find('h3 > a').attr('href'); + novelUrl = novelUrl.replace(baseUrl + 'novel/', ''); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const NovelOnlineFullScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default NovelOnlineFullScraper; diff --git a/src/sources/en/novelpassion.js b/src/sources/en/novelpassion.js index 4ed884df..92b0d67e 100644 --- a/src/sources/en/novelpassion.js +++ b/src/sources/en/novelpassion.js @@ -1,177 +1,175 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -import moment from "moment"; +import moment from 'moment'; -const baseUrl = "https://www.novelpassion.com/"; +const baseUrl = 'https://www.novelpassion.com/'; -const popularNovels = async (page) => { - const totalPages = 42; - let url = baseUrl + "category/all?p=" + page + "&s=1&f=4"; +const popularNovels = async page => { + const totalPages = 42; + let url = baseUrl + 'category/all?p=' + page + '&s=1&f=4'; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $("div.j_bookList.lis-mn.ddc") - .find("li") - .each(function (result) { - const novelName = $(this).find("h3").text(); - const novelCover = - "https://www.novelpassion.com" + - $(this).find("img").attr("src"); + $('div.j_bookList.lis-mn.ddc') + .find('li') + .each(function (result) { + const novelName = $(this).find('h3').text(); + const novelCover = + 'https://www.novelpassion.com' + $(this).find('img').attr('src'); - let novelUrl = $(this).find("div.pr > a").attr("href"); - novelUrl = novelUrl.replace("/novel/", ""); + let novelUrl = $(this).find('div.pr > a').attr('href'); + novelUrl = novelUrl.replace('/novel/', ''); - const novel = { - sourceId: 33, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 33, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); - - return { totalPages, novels }; -}; - -const parseNovelAndChapters = async (novelUrl) => { - const url = baseUrl + "novel/" + novelUrl; - - const result = await fetch(url); - const body = await result.text(); - - $ = cheerio.load(body); - - let novel = {}; - - novel.sourceId = 33; - - novel.sourceName = "NovelPassion"; - - novel.url = url; - - novel.novelUrl = novelUrl; - - novelName = $("h2.mh").text(); - novel.novelName = novelName; - - novel.novelCover = baseUrl + $("i.g_thumb > img").attr("src"); - - let novelSummary = $("div.j_synopsis").text().trim(); - novel.summary = novelSummary; - - $("address.lh20.m14.pr").each(function (result) { - detailName = $(this).find("p.ell.dib.vam").text().trim(); - - detail = $(this).find("div.dns").text().trim(); - - switch (detailName) { - case "Categories:": - novel.genre = detail.trim().replace(/ - /g, ","); - break; - case "Author:": - novel.author = detail.trim().replace(/ - /g, ", "); - break; - } - - if (detailName.includes("Status:")) { - novel.status = detailName.replace("Status:", "").trim(); - } + novels.push(novel); }); - let novelChapters = []; + return {totalPages, novels}; +}; - $(".content-list") - .find("li") - .each(function (result) { - const chapterName = $(this).find("span.sp1").text(); +const parseNovelAndChapters = async novelUrl => { + const url = baseUrl + 'novel/' + novelUrl; - let releaseDate = $(this).find("i.sp2").text(); - releaseDate = moment(new Date(releaseDate)).format("MM/DD/YY"); + const result = await fetch(url); + const body = await result.text(); - const chapterUrl = $(this) - .find("a") - .attr("href") - .replace("/novel/" + novelUrl + "/", ""); + $ = cheerio.load(body); - novelChapters.push({ - chapterName, - releaseDate, - chapterUrl, - }); - }); + let novel = {}; - novel.chapters = novelChapters.reverse(); + novel.sourceId = 33; - return novel; + novel.sourceName = 'NovelPassion'; + + novel.url = url; + + novel.novelUrl = novelUrl; + + novelName = $('h2.mh').text(); + novel.novelName = novelName; + + novel.novelCover = baseUrl + $('i.g_thumb > img').attr('src'); + + let novelSummary = $('div.j_synopsis').text().trim(); + novel.summary = novelSummary; + + $('address.lh20.m14.pr').each(function (result) { + detailName = $(this).find('p.ell.dib.vam').text().trim(); + + detail = $(this).find('div.dns').text().trim(); + + switch (detailName) { + case 'Categories:': + novel.genre = detail.trim().replace(/ - /g, ','); + break; + case 'Author:': + novel.author = detail.trim().replace(/ - /g, ', '); + break; + } + + if (detailName.includes('Status:')) { + novel.status = detailName.replace('Status:', '').trim(); + } + }); + + let novelChapters = []; + + $('.content-list') + .find('li') + .each(function (result) { + const chapterName = $(this).find('span.sp1').text(); + + let releaseDate = $(this).find('i.sp2').text(); + releaseDate = moment(new Date(releaseDate)).format('MM/DD/YY'); + + const chapterUrl = $(this) + .find('a') + .attr('href') + .replace('/novel/' + novelUrl + '/', ''); + + novelChapters.push({ + chapterName, + releaseDate, + chapterUrl, + }); + }); + + novel.chapters = novelChapters.reverse(); + + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}novel/${novelUrl}/${chapterUrl}`; + const url = `${baseUrl}novel/${novelUrl}/${chapterUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let chapterName = $("div.cha-content").find("strong").text(); + let chapterName = $('div.cha-content').find('strong').text(); - let chapterText = $("div.cha-content").html(); - const chapter = { - sourceId: 33, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + let chapterText = $('div.cha-content').html(); + const chapter = { + sourceId: 33, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = baseUrl + "search?keyword=" + searchTerm; +const searchNovels = async searchTerm => { + const url = baseUrl + 'search?keyword=' + searchTerm; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $("div.j_bookList.lis-mn.ddc") - .find("li") - .each(function (result) { - const novelName = $(this).find("h3").text(); - const novelCover = - "https://www.novelpassion.com" + - $(this).find("img").attr("src"); + $('div.j_bookList.lis-mn.ddc') + .find('li') + .each(function (result) { + const novelName = $(this).find('h3').text(); + const novelCover = + 'https://www.novelpassion.com' + $(this).find('img').attr('src'); - let novelUrl = $(this).find("div.pr > a").attr("href"); - novelUrl = novelUrl.replace("/novel/", ""); + let novelUrl = $(this).find('div.pr > a').attr('href'); + novelUrl = novelUrl.replace('/novel/', ''); - const novel = { - sourceId: 33, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 33, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const NovelPassionScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default NovelPassionScraper; diff --git a/src/sources/en/noveltrench.js b/src/sources/en/noveltrench.js index 94a6f1ca..514154d5 100644 --- a/src/sources/en/noveltrench.js +++ b/src/sources/en/noveltrench.js @@ -1,174 +1,174 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -const baseUrl = "https://noveltrench.com/"; +const baseUrl = 'https://noveltrench.com/'; -const popularNovels = async (page) => { - let totalPages = 270; - let url = baseUrl + "manga/page/" + page; +const popularNovels = async page => { + let totalPages = 270; + let url = baseUrl + 'manga/page/' + page; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".page-item-detail").each(function (result) { - const novelName = $(this).find(".h5 > a").text(); - const novelCover = $(this).find("img").attr("data-src"); + $('.page-item-detail').each(function (result) { + const novelName = $(this).find('.h5 > a').text(); + const novelCover = $(this).find('img').attr('data-src'); - let novelUrl = $(this).find(".h5 > a").attr("href"); - novelUrl = novelUrl.replace(`${baseUrl}manga/`, ""); + let novelUrl = $(this).find('.h5 > a').attr('href'); + novelUrl = novelUrl.replace(`${baseUrl}manga/`, ''); - const novel = { - sourceId: 9, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 9, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}manga/${novelUrl}`; +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}manga/${novelUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = {}; + let novel = {}; - novel.sourceId = 9; + novel.sourceId = 9; - novel.sourceName = "NovelTrench"; + novel.sourceName = 'NovelTrench'; - novel.url = url; + novel.url = url; - novel.novelUrl = novelUrl; + novel.novelUrl = novelUrl; - novel.novelName = $(".post-title > h1") - .text() - .replace(/[\t\n]/g, "") - .trim(); + novel.novelName = $('.post-title > h1') + .text() + .replace(/[\t\n]/g, '') + .trim(); - novel.novelCover = $(".summary_image > a > img").attr("data-src"); + novel.novelCover = $('.summary_image > a > img').attr('data-src'); - $(".post-content_item").each(function (result) { - detailName = $(this) - .find(".summary-heading > h5") - .text() - .replace(/[\t\n]/g, "") - .trim(); - detail = $(this) - .find(".summary-content") - .text() - .replace(/[\t\n]/g, "") - .trim(); + $('.post-content_item').each(function (result) { + detailName = $(this) + .find('.summary-heading > h5') + .text() + .replace(/[\t\n]/g, '') + .trim(); + detail = $(this) + .find('.summary-content') + .text() + .replace(/[\t\n]/g, '') + .trim(); - switch (detailName) { - case "Genre(s)": - novel.genre = detail.trim().replace(/[\t\n]/g, ","); - break; - case "Author(s)": - novel.author = detail.trim(); - break; - case "Artist(s)": - novel.status = detail.trim(); - break; - } - }); + switch (detailName) { + case 'Genre(s)': + novel.genre = detail.trim().replace(/[\t\n]/g, ','); + break; + case 'Author(s)': + novel.author = detail.trim(); + break; + case 'Artist(s)': + novel.status = detail.trim(); + break; + } + }); - $(".description-summary > div.summary__content").find("em").remove(); + $('.description-summary > div.summary__content').find('em').remove(); - novel.summary = $(".description-summary > div.summary__content") - .text() - .replace(/[\t\n]/g, ""); + novel.summary = $('.description-summary > div.summary__content') + .text() + .replace(/[\t\n]/g, ''); - let novelChapters = []; + let novelChapters = []; - $(".wp-manga-chapter").each(function (result) { - chapterName = $(this) - .find("a") - .text() - .replace(/[\t\n]/g, "") - .trim(); + $('.wp-manga-chapter').each(function (result) { + chapterName = $(this) + .find('a') + .text() + .replace(/[\t\n]/g, '') + .trim(); - releaseDate = $(this) - .find("span") - .text() - .replace(/[\t\n]/g, "") - .trim(); + releaseDate = $(this) + .find('span') + .text() + .replace(/[\t\n]/g, '') + .trim(); - chapterUrl = $(this).find("a").attr("href").replace(url, ""); - novelChapters.push({ chapterName, releaseDate, chapterUrl }); - }); + chapterUrl = $(this).find('a').attr('href').replace(url, ''); + novelChapters.push({chapterName, releaseDate, chapterUrl}); + }); - novel.chapters = novelChapters.reverse(); + novel.chapters = novelChapters.reverse(); - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}manga/${novelUrl}${chapterUrl}`; + const url = `${baseUrl}manga/${novelUrl}${chapterUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - const chapterName = $("h1#chapter-heading").text(); - let chapterText = $(".reading-content").html(); - const chapter = { - sourceId: 9, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapterName = $('h1#chapter-heading').text(); + let chapterText = $('.reading-content').html(); + const chapter = { + sourceId: 9, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = `${baseUrl}?s=${searchTerm}&post_type=wp-manga`; +const searchNovels = async searchTerm => { + const url = `${baseUrl}?s=${searchTerm}&post_type=wp-manga`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".c-tabs-item__content").each(function (result) { - const novelName = $(this).find(".h4 > a").text(); - const novelCover = $(this).find("img").attr("data-src"); + $('.c-tabs-item__content').each(function (result) { + const novelName = $(this).find('.h4 > a').text(); + const novelCover = $(this).find('img').attr('data-src'); - let novelUrl = $(this).find(".h4 > a").attr("href"); - novelUrl = novelUrl.replace(`${baseUrl}manga/`, ""); + let novelUrl = $(this).find('.h4 > a').attr('href'); + novelUrl = novelUrl.replace(`${baseUrl}manga/`, ''); - const novel = { - sourceId: 9, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 9, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const novelTrenchScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default novelTrenchScraper; diff --git a/src/sources/en/novelupdates.js b/src/sources/en/novelupdates.js index db68dd8c..452ffd9f 100644 --- a/src/sources/en/novelupdates.js +++ b/src/sources/en/novelupdates.js @@ -1,310 +1,307 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; const sourceId = 50; -const sourceName = "Novel Updates"; +const sourceName = 'Novel Updates'; -const baseUrl = "https://www.novelupdates.com/"; +const baseUrl = 'https://www.novelupdates.com/'; let headers = new Headers({ - "User-Agent": - "'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", + 'User-Agent': + "'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", }); -const popularNovels = async (page) => { - const totalPages = 100; - let url = `${baseUrl}series-ranking/?rank=week&pg=` + page; +const popularNovels = async page => { + const totalPages = 100; + let url = `${baseUrl}series-ranking/?rank=week&pg=` + page; - const result = await fetch(url, { - method: "GET", - headers: headers, - }); - const body = await result.text(); + const result = await fetch(url, { + method: 'GET', + headers: headers, + }); + const body = await result.text(); - const $ = cheerio.load(body); + const $ = cheerio.load(body); - const novels = []; + const novels = []; - $("div.search_main_box_nu").each(function (res) { - const novelCover = $(this).find("img").attr("src"); - const novelName = $(this).find(".search_title > a").text(); - const novelUrl = $(this) - .find(".search_title > a") - .attr("href") - .split("/")[4]; + $('div.search_main_box_nu').each(function (res) { + const novelCover = $(this).find('img').attr('src'); + const novelName = $(this).find('.search_title > a').text(); + const novelUrl = $(this) + .find('.search_title > a') + .attr('href') + .split('/')[4]; - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; - - novels.push(novel); - }); - - return { totalPages, novels }; -}; - -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}series/${novelUrl}`; - - const result = await fetch(url, { - method: "GET", - headers: headers, - }); - const body = await result.text(); - - $ = cheerio.load(body); - - let novel = { - sourceId, - sourceName, - url, - novelUrl, + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, }; - novel.novelName = $(".seriestitlenu").text(); + novels.push(novel); + }); - novel.novelCover = $(".seriesimg > img").attr("src"); + return {totalPages, novels}; +}; - novel.author = $("#showauthors").text().trim(); +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}series/${novelUrl}`; - novel.genre = $("#seriesgenre").text().trim().replace(/\s/g, ","); + const result = await fetch(url, { + method: 'GET', + headers: headers, + }); + const body = await result.text(); - novel.status = $("#editstatus").text().includes("Ongoing") - ? "Ongoing" - : "Completed"; + $ = cheerio.load(body); - let type = $("#showtype").text().trim(); + let novel = { + sourceId, + sourceName, + url, + novelUrl, + }; - let summary = $("#editdescription").text().trim(); + novel.novelName = $('.seriestitlenu').text(); - novel.summary = summary + `\n\nType: ${type}`; + novel.novelCover = $('.seriesimg > img').attr('src'); - let novelChapters = []; + novel.author = $('#showauthors').text().trim(); - const novelId = $("input#mypostid").attr("value"); + novel.genre = $('#seriesgenre').text().trim().replace(/\s/g, ','); - let formData = new FormData(); - formData.append("action", "nd_getchapters"); - formData.append("mygrr", 0); - formData.append("mypostid", parseInt(novelId)); + novel.status = $('#editstatus').text().includes('Ongoing') + ? 'Ongoing' + : 'Completed'; - const data = await fetch( - "https://www.novelupdates.com/wp-admin/admin-ajax.php", - { - method: "POST", - headers, - body: formData, - } - ); - const text = await data.text(); + let type = $('#showtype').text().trim(); - $ = cheerio.load(text); + let summary = $('#editdescription').text().trim(); - $("li.sp_li_chp").each(function () { - const chapterName = $(this).text().trim(); + novel.summary = summary + `\n\nType: ${type}`; - const releaseDate = null; + let novelChapters = []; - const chapterUrl = - "https:" + $(this).find("a").first().next().attr("href"); + const novelId = $('input#mypostid').attr('value'); - novelChapters.push({ chapterName, releaseDate, chapterUrl }); - }); + let formData = new FormData(); + formData.append('action', 'nd_getchapters'); + formData.append('mygrr', 0); + formData.append('mypostid', parseInt(novelId)); - novel.chapters = novelChapters.reverse(); + const data = await fetch( + 'https://www.novelupdates.com/wp-admin/admin-ajax.php', + { + method: 'POST', + headers, + body: formData, + }, + ); + const text = await data.text(); - return novel; + $ = cheerio.load(text); + + $('li.sp_li_chp').each(function () { + const chapterName = $(this).text().trim(); + + const releaseDate = null; + + const chapterUrl = 'https:' + $(this).find('a').first().next().attr('href'); + + novelChapters.push({chapterName, releaseDate, chapterUrl}); + }); + + novel.chapters = novelChapters.reverse(); + + return novel; }; function getLocation(href) { - var match = href.match( - /^(https?\:)\/\/(([^:\/?#]*)(?:\:([0-9]+))?)([\/]{0,1}[^?#]*)(\?[^#]*|)(#.*|)$/ - ); - return match && `${match[1]}//${match[3]}`; + var match = href.match( + /^(https?\:)\/\/(([^:\/?#]*)(?:\:([0-9]+))?)([\/]{0,1}[^?#]*)(\?[^#]*|)(#.*|)$/, + ); + return match && `${match[1]}//${match[3]}`; } const parseChapter = async (novelUrl, chapterUrl) => { - const url = chapterUrl; + const url = chapterUrl; - // console.log("Original URL: ", url); + // console.log("Original URL: ", url); - let result, body; + let result, body; - let chapterName = ""; + let chapterName = ''; - try { - result = await fetch(url, { - method: "GET", - headers: headers, - }); - body = await result.text(); - - // console.log(result.url); - - // console.log("Redirected URL: ", result.url); - - $ = cheerio.load(body); - - let isWuxiaWorld = result.url.toLowerCase().includes("wuxiaworld"); - - let isBlogspot = result.url.toLowerCase().includes("blogspot"); - - let isTumblr = result.url.toLowerCase().includes("tumblr"); - - /** - * Checks if its a wwordpress site - */ - let isWordPress = - $('meta[name="generator"]').attr("content") || $("footer").text(); - - if (isWordPress) { - isWordPress = - isWordPress.toLowerCase().includes("wordpress") || - isWordPress.includes("Site Kit by Google") || - $(".powered-by").text().toLowerCase().includes("wordpress"); - } - - let isRainOfSnow = result.url.toLowerCase().includes("rainofsnow"); - - let isWebNovel = result.url.toLowerCase().includes("webnovel"); - - let isHostedNovel = result.url.toLowerCase().includes("hostednovel"); - - let isScribbleHub = result.url.toLowerCase().includes("scribblehub"); - - if (isWuxiaWorld) { - chapterText = $("#chapter-content").html(); - } else if (isRainOfSnow) { - chapterText = $("div.content").html(); - } else if (isTumblr) { - chapterText = $(".post").html(); - } else if (isBlogspot) { - $(".post-share-buttons").remove(); - - chapterText = $(".entry-content").html(); - } else if (isHostedNovel) { - chapterText = $(".chapter").html(); - } else if (isScribbleHub) { - chapterText = $("div.chp_raw").html(); - } else if (isWordPress) { - /** - * Remove wordpress bloat tags - */ - - const bloatClasses = [ - ".c-ads", - "#madara-comments", - "#comments", - ".content-comments", - ".sharedaddy", - ".wp-dark-mode-switcher", - ".wp-next-post-navi", - ".wp-block-buttons", - ".wp-block-columns", - ".post-cats", - ".sidebar", - ".author-avatar", - ".ezoic-ad", - ]; - - bloatClasses.map((tag) => $(tag).remove()); - - chapterText = - $(".entry-content").html() || - $(".single_post").html() || - $(".post-entry").html() || - $(".main-content").html() || - $("article.post").html() || - $(".content").html() || - $("#content").html(); - } else if (isWebNovel) { - chapterText = $(".cha-words").html(); - - if (!chapterText) { - chapterText = $("._content").html(); - } - } else { - /** - * Remove unnecessary tags - */ - const tags = ["nav", "header", "footer", ".hidden"]; - - tags.map((tag) => $(tag).remove()); - - chapterText = $("body").html(); - } - - if (!chapterText) { - chapterText = - "Chapter not available.\n\nReport if it's available in webview."; - } else { - /** - * Convert relative urls to absolute - */ - chapterText = chapterText.replace( - /href="\//g, - `href="${getLocation(result.url)}/` - ); - } - } catch (error) { - chapterText = `Chapter not available (Error: ${error.message}).\n\nReport if it's available in webview.`; - } - - const chapter = { - sourceId, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; - - return chapter; -}; - -const searchNovels = async (searchTerm) => { - const url = - "https://www.novelupdates.com/?s=" + - searchTerm + - "&post_type=seriesplans"; - - const res = await fetch(url, { - method: "GET", - headers: headers, + try { + result = await fetch(url, { + method: 'GET', + headers: headers, }); - const body = await res.text(); + body = await result.text(); + + // console.log(result.url); + + // console.log("Redirected URL: ", result.url); $ = cheerio.load(body); - let novels = []; + let isWuxiaWorld = result.url.toLowerCase().includes('wuxiaworld'); - $("div.search_main_box_nu").each(function (res) { - const novelCover = $(this).find("img").attr("src"); - const novelName = $(this).find(".search_title > a").text(); - const novelUrl = $(this) - .find(".search_title > a") - .attr("href") - .split("/")[4]; + let isBlogspot = result.url.toLowerCase().includes('blogspot'); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + let isTumblr = result.url.toLowerCase().includes('tumblr'); - novels.push(novel); - }); - return novels; + /** + * Checks if its a wwordpress site + */ + let isWordPress = + $('meta[name="generator"]').attr('content') || $('footer').text(); + + if (isWordPress) { + isWordPress = + isWordPress.toLowerCase().includes('wordpress') || + isWordPress.includes('Site Kit by Google') || + $('.powered-by').text().toLowerCase().includes('wordpress'); + } + + let isRainOfSnow = result.url.toLowerCase().includes('rainofsnow'); + + let isWebNovel = result.url.toLowerCase().includes('webnovel'); + + let isHostedNovel = result.url.toLowerCase().includes('hostednovel'); + + let isScribbleHub = result.url.toLowerCase().includes('scribblehub'); + + if (isWuxiaWorld) { + chapterText = $('#chapter-content').html(); + } else if (isRainOfSnow) { + chapterText = $('div.content').html(); + } else if (isTumblr) { + chapterText = $('.post').html(); + } else if (isBlogspot) { + $('.post-share-buttons').remove(); + + chapterText = $('.entry-content').html(); + } else if (isHostedNovel) { + chapterText = $('.chapter').html(); + } else if (isScribbleHub) { + chapterText = $('div.chp_raw').html(); + } else if (isWordPress) { + /** + * Remove wordpress bloat tags + */ + + const bloatClasses = [ + '.c-ads', + '#madara-comments', + '#comments', + '.content-comments', + '.sharedaddy', + '.wp-dark-mode-switcher', + '.wp-next-post-navi', + '.wp-block-buttons', + '.wp-block-columns', + '.post-cats', + '.sidebar', + '.author-avatar', + '.ezoic-ad', + ]; + + bloatClasses.map(tag => $(tag).remove()); + + chapterText = + $('.entry-content').html() || + $('.single_post').html() || + $('.post-entry').html() || + $('.main-content').html() || + $('article.post').html() || + $('.content').html() || + $('#content').html(); + } else if (isWebNovel) { + chapterText = $('.cha-words').html(); + + if (!chapterText) { + chapterText = $('._content').html(); + } + } else { + /** + * Remove unnecessary tags + */ + const tags = ['nav', 'header', 'footer', '.hidden']; + + tags.map(tag => $(tag).remove()); + + chapterText = $('body').html(); + } + + if (!chapterText) { + chapterText = + "Chapter not available.\n\nReport if it's available in webview."; + } else { + /** + * Convert relative urls to absolute + */ + chapterText = chapterText.replace( + /href="\//g, + `href="${getLocation(result.url)}/`, + ); + } + } catch (error) { + chapterText = `Chapter not available (Error: ${error.message}).\n\nReport if it's available in webview.`; + } + + const chapter = { + sourceId, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; + + return chapter; +}; + +const searchNovels = async searchTerm => { + const url = + 'https://www.novelupdates.com/?s=' + searchTerm + '&post_type=seriesplans'; + + const res = await fetch(url, { + method: 'GET', + headers: headers, + }); + const body = await res.text(); + + $ = cheerio.load(body); + + let novels = []; + + $('div.search_main_box_nu').each(function (res) { + const novelCover = $(this).find('img').attr('src'); + const novelName = $(this).find('.search_title > a').text(); + const novelUrl = $(this) + .find('.search_title > a') + .attr('href') + .split('/')[4]; + + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; + + novels.push(novel); + }); + return novels; }; const NovelUpdatesScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default NovelUpdatesScraper; diff --git a/src/sources/en/novelupdatescc.js b/src/sources/en/novelupdatescc.js index 9d58e1a1..624ff7ff 100644 --- a/src/sources/en/novelupdatescc.js +++ b/src/sources/en/novelupdatescc.js @@ -1,142 +1,142 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -const baseUrl = "https://www.novelupdates.cc/"; +const baseUrl = 'https://www.novelupdates.cc/'; -const popularNovels = async (page) => { - let totalPages = 1; - const result = await fetch(baseUrl); - const body = await result.text(); +const popularNovels = async page => { + let totalPages = 1; + const result = await fetch(baseUrl); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".section-item").each(function (result) { - const novelName = $(this).find(".book-name").text(); - const novelCover = $(this).find("img").attr("src"); + $('.section-item').each(function (result) { + const novelName = $(this).find('.book-name').text(); + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this).find("a").attr("href").slice(1); + let novelUrl = $(this).find('a').attr('href').slice(1); - const novel = { - sourceId: 18, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 18, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}${novelUrl}/`; +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}${novelUrl}/`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = {}; + let novel = {}; - novel.sourceId = 18; + novel.sourceId = 18; - novel.sourceName = "NovelUpdates.cc"; + novel.sourceName = 'NovelUpdates.cc'; - novel.url = url; + novel.url = url; - novel.novelUrl = novelUrl; + novel.novelUrl = novelUrl; - novel.novelName = $(".book-name").text(); + novel.novelName = $('.book-name').text(); - novel.novelCover = $("div.book-img > img").attr("src"); + novel.novelCover = $('div.book-img > img').attr('src'); - novel.genre = $("div.book-catalog > span.txt").text(); + novel.genre = $('div.book-catalog > span.txt').text(); - novel.status = $("div.book-state > span.txt").text(); + novel.status = $('div.book-state > span.txt').text(); - novel.author = $("div.author > span.name").text(); + novel.author = $('div.author > span.name').text(); - novelSummary = $("div.content > p.desc").text(); - novel.summary = novelSummary.trim(); + novelSummary = $('div.content > p.desc').text(); + novel.summary = novelSummary.trim(); - let novelChapters = []; + let novelChapters = []; - $(".chapter-item").each(function (result) { - const chapterName = $(this).find(".chapter-name").text(); - const releaseDate = null; - const chapterUrl = $(this).attr("href").slice(1); + $('.chapter-item').each(function (result) { + const chapterName = $(this).find('.chapter-name').text(); + const releaseDate = null; + const chapterUrl = $(this).attr('href').slice(1); - novelChapters.push({ - chapterName, - releaseDate, - chapterUrl, - }); + novelChapters.push({ + chapterName, + releaseDate, + chapterUrl, }); + }); - novel.chapters = novelChapters; + novel.chapters = novelChapters; - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}${chapterUrl}`; + const url = `${baseUrl}${chapterUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - const chapterName = $("h1.chapter-title").text(); - let chapterText = $("div.chapter-entity").html(); - const chapter = { - sourceId: 18, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapterName = $('h1.chapter-title').text(); + let chapterText = $('div.chapter-entity').html(); + const chapter = { + sourceId: 18, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = `${baseUrl}search/${searchTerm}/1`; +const searchNovels = async searchTerm => { + const url = `${baseUrl}search/${searchTerm}/1`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".list-item").each(function (result) { - $(this).find("font").remove(); + $('.list-item').each(function (result) { + $(this).find('font').remove(); - const novelName = $(this).find(".book-name").text(); - const novelCover = $(this).find("img").attr("src"); + const novelName = $(this).find('.book-name').text(); + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this).find("a").attr("href").slice(1); + let novelUrl = $(this).find('a').attr('href').slice(1); - const novel = { - sourceId: 18, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 18, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const novelUpdatesCcScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default novelUpdatesCcScraper; diff --git a/src/sources/en/rainofsnow.js b/src/sources/en/rainofsnow.js index aa2576fd..9a81d9d0 100644 --- a/src/sources/en/rainofsnow.js +++ b/src/sources/en/rainofsnow.js @@ -1,140 +1,140 @@ -import cheerio from "react-native-cheerio"; -import { Status } from "../helpers/constants"; +import cheerio from 'react-native-cheerio'; +import {Status} from '../helpers/constants'; const sourceId = 78; -const sourceName = "RainOfSnow"; +const sourceName = 'RainOfSnow'; -const baseUrl = "https://rainofsnow.com/"; +const baseUrl = 'https://rainofsnow.com/'; -const popularNovels = async (page) => { - let url = baseUrl + "novels/page/" + page; +const popularNovels = async page => { + let url = baseUrl + 'novels/page/' + page; - const totalPages = 5; + const totalPages = 5; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".minbox").each(function () { - const novelName = $(this).find("h3").text(); - const novelCover = $(this).find("img").attr("data-src"); - const novelUrl = $(this).find("h3 > a").attr("href"); + $('.minbox').each(function () { + const novelName = $(this).find('h3').text(); + const novelCover = $(this).find('img').attr('data-src'); + const novelUrl = $(this).find('h3 > a').attr('href'); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { novels, totalPages }; + return {novels, totalPages}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = novelUrl; +const parseNovelAndChapters = async novelUrl => { + const url = novelUrl; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = { sourceId, sourceName, url, novelUrl }; + let novel = {sourceId, sourceName, url, novelUrl}; - novel.novelName = $("h2").text().trim(); + novel.novelName = $('h2').text().trim(); - novel.novelCover = $(".imagboca1 > img").attr("data-src"); + novel.novelCover = $('.imagboca1 > img').attr('data-src'); - novel.summary = $("#synop").text().trim(); + novel.summary = $('#synop').text().trim(); - novel.genre = $( - "body > div.queen > div > div > div.row > div.col-md-12.col-lg-7 > div > div.backcolor1 > ul > li:nth-child(5) > small" - ) - .text() - .trim(); + novel.genre = $( + 'body > div.queen > div > div > div.row > div.col-md-12.col-lg-7 > div > div.backcolor1 > ul > li:nth-child(5) > small', + ) + .text() + .trim(); - novel.author = $( - "body > div.queen > div > div > div.row > div.col-md-12.col-lg-7 > div > div.backcolor1 > ul > li:nth-child(2) > small" - ).text(); + novel.author = $( + 'body > div.queen > div > div > div.row > div.col-md-12.col-lg-7 > div > div.backcolor1 > ul > li:nth-child(2) > small', + ).text(); - novel.status = Status.UNKNOWN; + novel.status = Status.UNKNOWN; - let novelChapters = []; + let novelChapters = []; - $("#chapter") - .find("li") - .each(function () { - const chapterName = $(this).find(".chapter").first().text().trim(); - const releaseDate = $(this).find("small").text(); - const chapterUrl = $(this).find("a").attr("href"); + $('#chapter') + .find('li') + .each(function () { + const chapterName = $(this).find('.chapter').first().text().trim(); + const releaseDate = $(this).find('small').text(); + const chapterUrl = $(this).find('a').attr('href'); - novelChapters.push({ chapterName, releaseDate, chapterUrl }); - }); + novelChapters.push({chapterName, releaseDate, chapterUrl}); + }); - novel.chapters = novelChapters; + novel.chapters = novelChapters; - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const result = await fetch(chapterUrl); - const body = await result.text(); + const result = await fetch(chapterUrl); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let chapterName = $(".content > h2").text(); - let chapterText = $(".content").html(); + let chapterName = $('.content > h2').text(); + let chapterText = $('.content').html(); - const chapter = { - sourceId, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - let url = baseUrl + "?s=" + searchTerm; +const searchNovels = async searchTerm => { + let url = baseUrl + '?s=' + searchTerm; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".minbox").each(function () { - const novelName = $(this).find("h3").text(); - const novelCover = $(this).find("img").attr("data-src"); - const novelUrl = $(this).find("h3 > a").attr("href"); + $('.minbox').each(function () { + const novelName = $(this).find('h3').text(); + const novelCover = $(this).find('img').attr('data-src'); + const novelUrl = $(this).find('h3 > a').attr('href'); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const RainOfSnowScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default RainOfSnowScraper; diff --git a/src/sources/en/ranobes.js b/src/sources/en/ranobes.js index a9b724d0..38c12a15 100644 --- a/src/sources/en/ranobes.js +++ b/src/sources/en/ranobes.js @@ -1,228 +1,226 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -import moment from "moment"; -import { showToast } from "../../hooks/showToast"; +import moment from 'moment'; +import {showToast} from '../../hooks/showToast'; const sourceId = 51; -const sourceName = "Ranobes"; +const sourceName = 'Ranobes'; -const baseUrl = "https://ranobes.net/"; +const baseUrl = 'https://ranobes.net/'; -const popularNovels = async (page) => { - const totalPages = 152; - let url = `${baseUrl}novels/page/${page}`; +const popularNovels = async page => { + const totalPages = 152; + let url = `${baseUrl}novels/page/${page}`; - let headers = new Headers({ - referer: "https://ranobes.net/", - "user-agent": - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", - }); + let headers = new Headers({ + referer: 'https://ranobes.net/', + 'user-agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36', + }); - const result = await fetch(url, { method: "GET", headers: headers }); - const body = await result.text(); + const result = await fetch(url, {method: 'GET', headers: headers}); + const body = await result.text(); - let $ = cheerio.load(body); + let $ = cheerio.load(body); - let novels = []; + let novels = []; - $("article.block.story.shortstory.mod-poster").each(function () { - const novelName = $(this).find("h2.title").text(); - let novelCover = $(this).find("figure").attr("style"); + $('article.block.story.shortstory.mod-poster').each(function () { + const novelName = $(this).find('h2.title').text(); + let novelCover = $(this).find('figure').attr('style'); - let novelUrl = $(this) - .find("a") - .attr("href") - .replace(baseUrl + "novels/", ""); + let novelUrl = $(this) + .find('a') + .attr('href') + .replace(baseUrl + 'novels/', ''); - novelCover = novelCover - .match(/background-image: url(.*);/)[1] - .slice(1, -1); + novelCover = novelCover.match(/background-image: url(.*);/)[1].slice(1, -1); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; - - novels.push(novel); - }); - - return { totalPages, novels }; -}; - -const parseNovelAndChapters = async (novelUrl) => { - showToast("Ranobes: Only has latest 25 chapters."); - - const url = `${baseUrl}novels/${novelUrl}`; - - const result = await fetch(url); - const body = await result.text(); - - let $ = cheerio.load(body); - - let novel = { - sourceId, - sourceName, - url, - novelUrl, + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, }; - novel.novelName = $('meta[property="og:title"]').attr("content"); + novels.push(novel); + }); - novel.novelCover = baseUrl + $(".poster > a > img").attr("src"); + return {totalPages, novels}; +}; - novel.author = $("dl.author > dd").text(); +const parseNovelAndChapters = async novelUrl => { + showToast('Ranobes: Only has latest 25 chapters.'); - novel.genre = $(".book-generes").text().trim(); + const url = `${baseUrl}novels/${novelUrl}`; - novel.summary = $('div[itemprop="description"]').text().trim(); + const result = await fetch(url); + const body = await result.text(); - novel.author = $('span[itemprop="author"]').text(); - novel.genre = $('span[itemprop="genre"]').text().replace(", ", ","); + let $ = cheerio.load(body); - let tempNovelUrl = $(".r-fullstory-chapters-foot") - .find("a") - .next() - .next() - .attr("href") - .split("/")[2]; + let novel = { + sourceId, + sourceName, + url, + novelUrl, + }; - const chapterListUrl = `${baseUrl}up/${tempNovelUrl}/page/1`; + novel.novelName = $('meta[property="og:title"]').attr('content'); - const chaptersHtml = await fetch(chapterListUrl); - const chapterHtmlToString = await chaptersHtml.text(); + novel.novelCover = baseUrl + $('.poster > a > img').attr('src'); - $ = cheerio.load(chapterHtmlToString); + novel.author = $('dl.author > dd').text(); - // let lastPage = $("div.pages > a").last().text(); + novel.genre = $('.book-generes').text().trim(); - let novelChapters = []; + novel.summary = $('div[itemprop="description"]').text().trim(); - $("#dle-content > div.cat_block.cat_line").each(function () { - const chapterName = $(this).find(".title").text(); + novel.author = $('span[itemprop="author"]').text(); + novel.genre = $('span[itemprop="genre"]').text().replace(', ', ','); - let releaseDate = new Date(); + let tempNovelUrl = $('.r-fullstory-chapters-foot') + .find('a') + .next() + .next() + .attr('href') + .split('/')[2]; - let timeAgo = $(this).find("small").text(); + const chapterListUrl = `${baseUrl}up/${tempNovelUrl}/page/1`; - timeAgo = timeAgo.match(/\d+/)[0]; + const chaptersHtml = await fetch(chapterListUrl); + const chapterHtmlToString = await chaptersHtml.text(); - if (timeAgo.includes("hours ago")) { - releaseDate.setTime(releaseDate.getTime() - timeAgo); - } + $ = cheerio.load(chapterHtmlToString); - if (timeAgo.includes("months ago")) { - releaseDate.setMonth(releaseDate.getMonth() - timeAgo); - } + // let lastPage = $("div.pages > a").last().text(); - if (timeAgo.includes("days ago")) { - releaseDate.setDate(releaseDate.getDate() - timeAgo); - } + let novelChapters = []; - releaseDate = moment(releaseDate).format("MM/DD/YY"); + $('#dle-content > div.cat_block.cat_line').each(function () { + const chapterName = $(this).find('.title').text(); - const chapterUrl = $(this) - .find("a") - .attr("href") - .replace(baseUrl + "up/", ""); + let releaseDate = new Date(); - const chapter = { - chapterName, - releaseDate, - chapterUrl, - }; + let timeAgo = $(this).find('small').text(); - novelChapters.push(chapter); - }); + timeAgo = timeAgo.match(/\d+/)[0]; - // for (i = 1; i <= lastPage; i++) { - // const chapterPageUrl = `${baseUrl}up/${tempNovelUrl}/page/${i}`; + if (timeAgo.includes('hours ago')) { + releaseDate.setTime(releaseDate.getTime() - timeAgo); + } - // const chaptersHtml = await fetch(chapterPageUrl); - // const chapterHtmlToString = await chaptersHtml.text(); - // $ = cheerio.load(chapterHtmlToString); + if (timeAgo.includes('months ago')) { + releaseDate.setMonth(releaseDate.getMonth() - timeAgo); + } - // $("#dle-content > div.cat_block.cat_line").each(function () { - // const chapterName = $(this).find(".title").text(); + if (timeAgo.includes('days ago')) { + releaseDate.setDate(releaseDate.getDate() - timeAgo); + } - // let releaseDate = new Date(); + releaseDate = moment(releaseDate).format('MM/DD/YY'); - // let timeAgo = $(this).find("small").text(); + const chapterUrl = $(this) + .find('a') + .attr('href') + .replace(baseUrl + 'up/', ''); - // timeAgo = timeAgo.match(/\d+/)[0]; + const chapter = { + chapterName, + releaseDate, + chapterUrl, + }; - // if (timeAgo.includes("hours ago")) { - // releaseDate.setTime(releaseDate.getTime() - timeAgo); - // } + novelChapters.push(chapter); + }); - // if (timeAgo.includes("months ago")) { - // releaseDate.setMonth(releaseDate.getMonth() - timeAgo); - // } + // for (i = 1; i <= lastPage; i++) { + // const chapterPageUrl = `${baseUrl}up/${tempNovelUrl}/page/${i}`; - // if (timeAgo.includes("days ago")) { - // releaseDate.setDate(releaseDate.getDate() - timeAgo); - // } + // const chaptersHtml = await fetch(chapterPageUrl); + // const chapterHtmlToString = await chaptersHtml.text(); + // $ = cheerio.load(chapterHtmlToString); - // releaseDate = moment(releaseDate).format("MM/DD/YY"); + // $("#dle-content > div.cat_block.cat_line").each(function () { + // const chapterName = $(this).find(".title").text(); - // const chapterUrl = $(this) - // .find("a") - // .attr("href") - // .replace(baseUrl + "up/", ""); + // let releaseDate = new Date(); - // const chapter = { - // chapterName, - // releaseDate, - // chapterUrl, - // }; + // let timeAgo = $(this).find("small").text(); - // novelChapters.push(chapter); - // }); - // } + // timeAgo = timeAgo.match(/\d+/)[0]; - novel.chapters = novelChapters.reverse(); + // if (timeAgo.includes("hours ago")) { + // releaseDate.setTime(releaseDate.getTime() - timeAgo); + // } - return novel; + // if (timeAgo.includes("months ago")) { + // releaseDate.setMonth(releaseDate.getMonth() - timeAgo); + // } + + // if (timeAgo.includes("days ago")) { + // releaseDate.setDate(releaseDate.getDate() - timeAgo); + // } + + // releaseDate = moment(releaseDate).format("MM/DD/YY"); + + // const chapterUrl = $(this) + // .find("a") + // .attr("href") + // .replace(baseUrl + "up/", ""); + + // const chapter = { + // chapterName, + // releaseDate, + // chapterUrl, + // }; + + // novelChapters.push(chapter); + // }); + // } + + novel.chapters = novelChapters.reverse(); + + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}up/${chapterUrl}`; + const url = `${baseUrl}up/${chapterUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let chapterName = $("h1.title").text(); + let chapterName = $('h1.title').text(); - let chapterText = $("#arrticle").html(); - const chapter = { - sourceId, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + let chapterText = $('#arrticle').html(); + const chapter = { + sourceId, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - /** - * TODO - */ +const searchNovels = async searchTerm => { + /** + * TODO + */ - showToast("Ranobes: Search does not work"); - return []; + showToast('Ranobes: Search does not work'); + return []; }; const RanobesScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default RanobesScraper; diff --git a/src/sources/en/readlightnovel.js b/src/sources/en/readlightnovel.js index 57d46146..93e78093 100644 --- a/src/sources/en/readlightnovel.js +++ b/src/sources/en/readlightnovel.js @@ -1,214 +1,214 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; const sourceId = 2; -const sourceName = "ReadLightNovel"; +const sourceName = 'ReadLightNovel'; -const lang = "en"; +const lang = 'en'; -const baseUrl = "https://www.readlightnovel.me"; +const baseUrl = 'https://www.readlightnovel.me'; -const searchUrl = "https://www.readlightnovel.me/detailed-search"; +const searchUrl = 'https://www.readlightnovel.me/detailed-search'; -const popularNovels = async (page) => { - let totalPages = 1751; - const url = `${baseUrl}/top-novel/${page}`; +const popularNovels = async page => { + let totalPages = 1751; + const url = `${baseUrl}/top-novel/${page}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - const $ = cheerio.load(body); + const $ = cheerio.load(body); - const novels = []; + const novels = []; - $(".top-novel-block").each(function (result) { - const novelName = $(this).find("h2 > a").text(); - const novelCover = $(this).find("img").attr("src"); - const novelUrl = $(this) - .find("h2 > a") - .attr("href") - .replace(`${baseUrl}/`, ""); + $('.top-novel-block').each(function (result) { + const novelName = $(this).find('h2 > a').text(); + const novelCover = $(this).find('img').attr('src'); + const novelUrl = $(this) + .find('h2 > a') + .attr('href') + .replace(`${baseUrl}/`, ''); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; - - novels.push(novel); - }); - - return { totalPages, novels }; -}; - -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}/${novelUrl}`; - - const result = await fetch(url); - const body = await result.text(); - - $ = cheerio.load(body); - - let novel; - - const novelName = $(".block-title > h1").text(); - - const novelCover = $(".novel-cover > a > img").attr("src"); - - let author, artist, genre, summary, status; - - $(".novel-detail-item").each(function (result) { - const detailName = $(this).find(".novel-detail-header > h6").text(); - const detail = $(this).find(".novel-detail-body").text().trim(); - - switch (detailName) { - case "Genre": - genre = detail.trim().replace(/\s{2,}/g, ","); - - break; - case "Author(s)": - author = detail; - break; - case "Artist(s)": - artist = detail; - break; - case "Description": - summary = detail; - break; - case "Status": - status = detail; - break; - } - }); - - let chapters = []; - - $(".panel").each(function () { - let volumeName = $(this).find("h4.panel-title").text(); - - $(this) - .find("ul.chapter-chs > li") - .each(function () { - let chapterName = $(this).find("a").text(); - - const releaseDate = null; - - const chapterUrl = $(this) - .find("a") - .attr("href") - .replace(`${baseUrl}/${novelUrl}/`, ""); - - if (volumeName.includes("Volume")) { - chapterName = volumeName + " " + chapterName; - } - - const chapter = { - chapterName, - releaseDate, - chapterUrl, - }; - - chapters.push(chapter); - }); - }); - - novel = { - sourceId, - sourceName, - url, - novelUrl, - novelName, - novelCover, - genre, - author, - status, - artist, - summary, - chapters, + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, }; - return novel; + novels.push(novel); + }); + + return {totalPages, novels}; +}; + +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}/${novelUrl}`; + + const result = await fetch(url); + const body = await result.text(); + + $ = cheerio.load(body); + + let novel; + + const novelName = $('.block-title > h1').text(); + + const novelCover = $('.novel-cover > a > img').attr('src'); + + let author, artist, genre, summary, status; + + $('.novel-detail-item').each(function (result) { + const detailName = $(this).find('.novel-detail-header > h6').text(); + const detail = $(this).find('.novel-detail-body').text().trim(); + + switch (detailName) { + case 'Genre': + genre = detail.trim().replace(/\s{2,}/g, ','); + + break; + case 'Author(s)': + author = detail; + break; + case 'Artist(s)': + artist = detail; + break; + case 'Description': + summary = detail; + break; + case 'Status': + status = detail; + break; + } + }); + + let chapters = []; + + $('.panel').each(function () { + let volumeName = $(this).find('h4.panel-title').text(); + + $(this) + .find('ul.chapter-chs > li') + .each(function () { + let chapterName = $(this).find('a').text(); + + const releaseDate = null; + + const chapterUrl = $(this) + .find('a') + .attr('href') + .replace(`${baseUrl}/${novelUrl}/`, ''); + + if (volumeName.includes('Volume')) { + chapterName = volumeName + ' ' + chapterName; + } + + const chapter = { + chapterName, + releaseDate, + chapterUrl, + }; + + chapters.push(chapter); + }); + }); + + novel = { + sourceId, + sourceName, + url, + novelUrl, + novelName, + novelCover, + genre, + author, + status, + artist, + summary, + chapters, + }; + + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}/${novelUrl}/${chapterUrl}/`; + const url = `${baseUrl}/${novelUrl}/${chapterUrl}/`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - $(".block-title > h1").find("a").remove(); + $('.block-title > h1').find('a').remove(); - const chapterName = $(".block-title > h1").text().replace(" - ", ""); + const chapterName = $('.block-title > h1').text().replace(' - ', ''); - $(".alert").remove(); - $(".hidden").remove(); - $("iframe").remove(); - $("button").remove(); - $(".hid").remove(); - $("center").remove(); - $( - 'div[style="float: left; margin-top: 20px; font-style: italic;margin-left: 50px; font-size: 14px;"]' - ).remove(); - $('div[style="float:left;margin-top:15px;margin-bottom:15px;"]').remove(); + $('.alert').remove(); + $('.hidden').remove(); + $('iframe').remove(); + $('button').remove(); + $('.hid').remove(); + $('center').remove(); + $( + 'div[style="float: left; margin-top: 20px; font-style: italic;margin-left: 50px; font-size: 14px;"]', + ).remove(); + $('div[style="float:left;margin-top:15px;margin-bottom:15px;"]').remove(); - let chapterText = $(".desc").html(); + let chapterText = $('.desc').html(); - const chapter = { - sourceId: 2, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId: 2, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const formData = new FormData(); - formData.append("keyword", searchTerm); - formData.append("search", 1); +const searchNovels = async searchTerm => { + const formData = new FormData(); + formData.append('keyword', searchTerm); + formData.append('search', 1); - const result = await fetch(searchUrl, { - method: "POST", - body: formData, - }); - const body = await result.text(); + const result = await fetch(searchUrl, { + method: 'POST', + body: formData, + }); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".top-novel-block").each(function (result) { - const novelName = $(this).find(".top-novel-header > h2 > a").text(); - const novelCover = $(this).find("img").attr("src"); + $('.top-novel-block').each(function (result) { + const novelName = $(this).find('.top-novel-header > h2 > a').text(); + const novelCover = $(this).find('img').attr('src'); - const novelUrl = $(this) - .find(".top-novel-header > h2 > a") - .attr("href") - .replace(`${baseUrl}/`, ""); + const novelUrl = $(this) + .find('.top-novel-header > h2 > a') + .attr('href') + .replace(`${baseUrl}/`, ''); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const ReadLightNovelScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default ReadLightNovelScraper; diff --git a/src/sources/en/readlightnovelcc.js b/src/sources/en/readlightnovelcc.js index e926cb1d..da3c628a 100644 --- a/src/sources/en/readlightnovelcc.js +++ b/src/sources/en/readlightnovelcc.js @@ -1,142 +1,142 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -const baseUrl = "https://m.readlightnovel.cc/"; +const baseUrl = 'https://m.readlightnovel.cc/'; -const popularNovels = async (page) => { - let totalPages = 1; - const result = await fetch(baseUrl); - const body = await result.text(); +const popularNovels = async page => { + let totalPages = 1; + const result = await fetch(baseUrl); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".section-item").each(function (result) { - const novelName = $(this).find(".book-name").text(); - const novelCover = $(this).find("img").attr("src"); + $('.section-item').each(function (result) { + const novelName = $(this).find('.book-name').text(); + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this).find("a").attr("href").slice(1); + let novelUrl = $(this).find('a').attr('href').slice(1); - const novel = { - sourceId: 19, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 19, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}${novelUrl}/`; +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}${novelUrl}/`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = {}; + let novel = {}; - novel.sourceId = 19; + novel.sourceId = 19; - novel.sourceName = "ReadLightNovel.cc"; + novel.sourceName = 'ReadLightNovel.cc'; - novel.url = url; + novel.url = url; - novel.novelUrl = novelUrl; + novel.novelUrl = novelUrl; - novel.novelName = $(".book-name").text(); + novel.novelName = $('.book-name').text(); - novel.novelCover = $("div.book-img > img").attr("src"); + novel.novelCover = $('div.book-img > img').attr('src'); - novel.genre = $("div.book-catalog > span.txt").text(); + novel.genre = $('div.book-catalog > span.txt').text(); - novel.status = $("div.book-state > span.txt").text(); + novel.status = $('div.book-state > span.txt').text(); - novel.author = $("div.author > span.name").text(); + novel.author = $('div.author > span.name').text(); - novelSummary = $("div.content > p.desc").text(); - novel.summary = novelSummary.trim(); + novelSummary = $('div.content > p.desc').text(); + novel.summary = novelSummary.trim(); - let novelChapters = []; + let novelChapters = []; - $(".chapter-item").each(function (result) { - const chapterName = $(this).find(".chapter-name").text(); - const releaseDate = null; - const chapterUrl = $(this).attr("href").slice(1); + $('.chapter-item').each(function (result) { + const chapterName = $(this).find('.chapter-name').text(); + const releaseDate = null; + const chapterUrl = $(this).attr('href').slice(1); - novelChapters.push({ - chapterName, - releaseDate, - chapterUrl, - }); + novelChapters.push({ + chapterName, + releaseDate, + chapterUrl, }); + }); - novel.chapters = novelChapters; + novel.chapters = novelChapters; - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}${chapterUrl}`; + const url = `${baseUrl}${chapterUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - const chapterName = $("h1.chapter-title").text(); - let chapterText = $("div.chapter-entity").html(); - const chapter = { - sourceId: 19, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapterName = $('h1.chapter-title').text(); + let chapterText = $('div.chapter-entity').html(); + const chapter = { + sourceId: 19, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = `${baseUrl}search/${searchTerm}/1`; +const searchNovels = async searchTerm => { + const url = `${baseUrl}search/${searchTerm}/1`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".list-item").each(function (result) { - $(this).find("font").remove(); + $('.list-item').each(function (result) { + $(this).find('font').remove(); - const novelName = $(this).find(".book-name").text(); - const novelCover = $(this).find("img").attr("src"); + const novelName = $(this).find('.book-name').text(); + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this).find("a").attr("href").slice(1); + let novelUrl = $(this).find('a').attr('href').slice(1); - const novel = { - sourceId: 19, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 19, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const readLightNovelCcScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default readLightNovelCcScraper; diff --git a/src/sources/en/readnovelfull.js b/src/sources/en/readnovelfull.js index 07c03432..e05aca0d 100644 --- a/src/sources/en/readnovelfull.js +++ b/src/sources/en/readnovelfull.js @@ -1,186 +1,186 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -const baseUrl = "https://readnovelfull.com"; +const baseUrl = 'https://readnovelfull.com'; -const popularNovels = async (page) => { - let totalPages = 61; - const url = `${baseUrl}/most-popular-novel?page=${page}`; +const popularNovels = async page => { + let totalPages = 61; + const url = `${baseUrl}/most-popular-novel?page=${page}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $("div.col-novel-main > div.list-novel > .row").each(function (result) { - let novelUrl = $(this) - .find("h3.novel-title > a") - .attr("href") - .replace(".html", "") - .substring(1); - novelUrl = `${novelUrl}/`; + $('div.col-novel-main > div.list-novel > .row').each(function (result) { + let novelUrl = $(this) + .find('h3.novel-title > a') + .attr('href') + .replace('.html', '') + .substring(1); + novelUrl = `${novelUrl}/`; - const novelName = $(this).find("h3.novel-title > a").text(); - const novelCover = $(this).find("img").attr("src"); + const novelName = $(this).find('h3.novel-title > a').text(); + const novelCover = $(this).find('img').attr('src'); - const novel = { - sourceId: 4, - novelUrl, - novelName, - novelCover, - }; - - novels.push(novel); - }); - - return { totalPages, novels }; -}; - -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}/${novelUrl.slice(0, -1)}.html`; - - const result = await fetch(url); - const body = await result.text(); - - $ = cheerio.load(body); - - let novel = {}; - - novel.sourceId = 4; - - novel.sourceName = "ReadNovelFull"; - - novel.url = url; - - novel.novelUrl = novelUrl; - - novel.novelName = $("div.book > img").attr("alt"); - - novel.novelCover = $("div.book > img").attr("src"); - - novel.summary = $("div.desc-text").text().trim(); - - novel.author = $("li > h3") - .filter(function () { - return $(this).text().trim() === "Author:"; - }) - .siblings() - .text(); - - novel.genre = $("li") - .filter(function () { - return $(this).find("h3").text().trim() === "Genre:"; - }) - .text() - .replace("Genre:", ""); - - novel.artist = null; - - novel.status = $("li > h3") - .filter(function () { - return $(this).text().trim() === "Status:"; - }) - .siblings() - .text(); - - const novelId = $("#rating").attr("data-novel-id"); - - const getChapters = async (novelId) => { - const chapterListUrl = - "https://readnovelfull.com/ajax/chapter-archive?novelId=" + novelId; - - const data = await fetch(chapterListUrl); - const chapters = await data.text(); - - $ = cheerio.load(chapters); - - let novelChapters = []; - - $(".panel-body") - .find("li") - .each(function (result) { - let chapterName = $(this).find("a").attr("title"); - let releaseDate = null; - let chapterUrl = $(this).find("a").attr("href"); - chapterUrl = chapterUrl.replace(`/${novelUrl}`, ""); - - novelChapters.push({ - chapterName, - releaseDate, - chapterUrl, - }); - }); - return novelChapters; + const novel = { + sourceId: 4, + novelUrl, + novelName, + novelCover, }; - novel.chapters = await getChapters(novelId); + novels.push(novel); + }); - return novel; + return {totalPages, novels}; +}; + +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}/${novelUrl.slice(0, -1)}.html`; + + const result = await fetch(url); + const body = await result.text(); + + $ = cheerio.load(body); + + let novel = {}; + + novel.sourceId = 4; + + novel.sourceName = 'ReadNovelFull'; + + novel.url = url; + + novel.novelUrl = novelUrl; + + novel.novelName = $('div.book > img').attr('alt'); + + novel.novelCover = $('div.book > img').attr('src'); + + novel.summary = $('div.desc-text').text().trim(); + + novel.author = $('li > h3') + .filter(function () { + return $(this).text().trim() === 'Author:'; + }) + .siblings() + .text(); + + novel.genre = $('li') + .filter(function () { + return $(this).find('h3').text().trim() === 'Genre:'; + }) + .text() + .replace('Genre:', ''); + + novel.artist = null; + + novel.status = $('li > h3') + .filter(function () { + return $(this).text().trim() === 'Status:'; + }) + .siblings() + .text(); + + const novelId = $('#rating').attr('data-novel-id'); + + const getChapters = async novelId => { + const chapterListUrl = + 'https://readnovelfull.com/ajax/chapter-archive?novelId=' + novelId; + + const data = await fetch(chapterListUrl); + const chapters = await data.text(); + + $ = cheerio.load(chapters); + + let novelChapters = []; + + $('.panel-body') + .find('li') + .each(function (result) { + let chapterName = $(this).find('a').attr('title'); + let releaseDate = null; + let chapterUrl = $(this).find('a').attr('href'); + chapterUrl = chapterUrl.replace(`/${novelUrl}`, ''); + + novelChapters.push({ + chapterName, + releaseDate, + chapterUrl, + }); + }); + return novelChapters; + }; + + novel.chapters = await getChapters(novelId); + + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}/${novelUrl}${chapterUrl}`; + const url = `${baseUrl}/${novelUrl}${chapterUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - const chapterName = $(".chr-title").attr("title"); - let chapterText = $("#chr-content").html(); - const chapter = { - sourceId: 4, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapterName = $('.chr-title').attr('title'); + let chapterText = $('#chr-content').html(); + const chapter = { + sourceId: 4, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const searchUrl = `https://readnovelfull.com/search?keyword=`; +const searchNovels = async searchTerm => { + const searchUrl = `https://readnovelfull.com/search?keyword=`; - const url = `${searchUrl}${searchTerm}`; + const url = `${searchUrl}${searchTerm}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $("div.col-novel-main > div.list-novel > .row").each(function (result) { - let novelUrl = $(this) - .find("h3.novel-title > a") - .attr("href") - .replace(".html", "") - .substring(1); - novelUrl = `${novelUrl}/`; + $('div.col-novel-main > div.list-novel > .row').each(function (result) { + let novelUrl = $(this) + .find('h3.novel-title > a') + .attr('href') + .replace('.html', '') + .substring(1); + novelUrl = `${novelUrl}/`; - const novelName = $(this).find("h3.novel-title > a").text(); - const novelCover = $(this).find("img").attr("src"); + const novelName = $(this).find('h3.novel-title > a').text(); + const novelCover = $(this).find('img').attr('src'); - const novel = { - sourceId: 4, - novelUrl, - novelName, - novelCover, - }; + const novel = { + sourceId: 4, + novelUrl, + novelName, + novelCover, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const readNovelFullScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default readNovelFullScraper; diff --git a/src/sources/en/readwn.js b/src/sources/en/readwn.js index 2ea0f3f5..3a38575b 100644 --- a/src/sources/en/readwn.js +++ b/src/sources/en/readwn.js @@ -1,193 +1,193 @@ -import QueryString from "qs"; -import cheerio from "react-native-cheerio"; +import QueryString from 'qs'; +import cheerio from 'react-native-cheerio'; const sourceId = 68; -const sourceName = "Readwn.com"; +const sourceName = 'Readwn.com'; -const baseUrl = "https://www.readwn.com/"; +const baseUrl = 'https://www.readwn.com/'; -const popularNovels = async (page) => { - let url = `${baseUrl}list/all/all-onclick-${page - 1}.html`; - const totalPages = 281; +const popularNovels = async page => { + let url = `${baseUrl}list/all/all-onclick-${page - 1}.html`; + const totalPages = 281; - const headers = new Headers({ - "user-agent": - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36", - }); + const headers = new Headers({ + 'user-agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36', + }); - const result = await fetch(url, { method: "GET", headers }); - const body = await result.text(); + const result = await fetch(url, {method: 'GET', headers}); + const body = await result.text(); - console.log(body); + console.log(body); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $("li.novel-item").each(function () { - const novelName = $(this).find("h4").text(); - const novelUrl = $(this).find("a").attr("href").split("/").pop(); + $('li.novel-item').each(function () { + const novelName = $(this).find('h4').text(); + const novelUrl = $(this).find('a').attr('href').split('/').pop(); - const novelCover = - baseUrl + $(this).find(".novel-cover > img").attr("data-src"); + const novelCover = + baseUrl + $(this).find('.novel-cover > img').attr('data-src'); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; - - novels.push(novel); - }); - return { novels, totalPages }; -}; - -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}novel/${novelUrl}`; - - const headers = new Headers({ - "user-agent": - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36", - }); - - const result = await fetch(url, { method: "GET", headers }); - const body = await result.text(); - - $ = cheerio.load(body); - - let novel = { - sourceId, - sourceName, - url, - novelUrl, + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, }; - novel.novelUrl = novelUrl; + novels.push(novel); + }); + return {novels, totalPages}; +}; - novel.novelName = $("h1.novel-title").text(); +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}novel/${novelUrl}`; - novel.novelCover = baseUrl + $("figure.cover > img").attr("data-src"); + const headers = new Headers({ + 'user-agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36', + }); - novel.summary = $("p.description").text().trim(); + const result = await fetch(url, {method: 'GET', headers}); + const body = await result.text(); - novel.genre = ""; + $ = cheerio.load(body); - $("div.categories > ul > li").each(function () { - novel.genre += $(this).text().trim() + ","; - }); + let novel = { + sourceId, + sourceName, + url, + novelUrl, + }; - $("div.header-stats > span").each(function () { - if ($(this).find("small").text() === "Status") { - novel.status = $(this).find("strong").text(); - } - }); + novel.novelUrl = novelUrl; - novel.genre = novel.genre.slice(0, -1); + novel.novelName = $('h1.novel-title').text(); - novel.author = $("span[itemprop=author]").text(); + novel.novelCover = baseUrl + $('figure.cover > img').attr('data-src'); - let novelChapters = []; + novel.summary = $('p.description').text().trim(); - const novelId = novelUrl.split("/").pop().replace(".html", ""); + novel.genre = ''; - const latestChapterNumber = $(".header-stats") - .find("span > strong") - .first() - .text() - .trim(); + $('div.categories > ul > li').each(function () { + novel.genre += $(this).text().trim() + ','; + }); - for (let i = 1; i <= latestChapterNumber; i++) { - const chapterName = `Chapter ${i}`; - const chapterUrl = `${novelId}_${i}`; - const releaseDate = null; - - const chapter = { chapterName, releaseDate, chapterUrl }; - - novelChapters.push(chapter); + $('div.header-stats > span').each(function () { + if ($(this).find('small').text() === 'Status') { + novel.status = $(this).find('strong').text(); } + }); - novel.chapters = novelChapters; + novel.genre = novel.genre.slice(0, -1); - return novel; + novel.author = $('span[itemprop=author]').text(); + + let novelChapters = []; + + const novelId = novelUrl.split('/').pop().replace('.html', ''); + + const latestChapterNumber = $('.header-stats') + .find('span > strong') + .first() + .text() + .trim(); + + for (let i = 1; i <= latestChapterNumber; i++) { + const chapterName = `Chapter ${i}`; + const chapterUrl = `${novelId}_${i}`; + const releaseDate = null; + + const chapter = {chapterName, releaseDate, chapterUrl}; + + novelChapters.push(chapter); + } + + novel.chapters = novelChapters; + + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}novel/${chapterUrl}.html`; + const url = `${baseUrl}novel/${chapterUrl}.html`; - const headers = new Headers({ - "user-agent": - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36", - }); + const headers = new Headers({ + 'user-agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36', + }); - const result = await fetch(url, { method: "GET", headers }); - const body = await result.text(); + const result = await fetch(url, {method: 'GET', headers}); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - const chapterName = $(".titles > h2").text(); - let chapterText = $(".chapter-content").html(); + const chapterName = $('.titles > h2').text(); + let chapterText = $('.chapter-content').html(); - const chapter = { - sourceId, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const searchUrl = "https://www.readwn.com/e/search/index.php"; +const searchNovels = async searchTerm => { + const searchUrl = 'https://www.readwn.com/e/search/index.php'; - const result = await fetch(searchUrl, { - headers: { - "Content-Type": "application/x-www-form-urlencoded", - Referer: "https://www.readwn.com/search.html", - Origin: "https://www.readwn.com", - "user-agent": - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36", - }, - method: "POST", - body: QueryString.stringify({ - show: "title", - tempid: 1, - tbname: "news", - keyboard: searchTerm, - }), - }); - const body = await result.text(); + const result = await fetch(searchUrl, { + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + Referer: 'https://www.readwn.com/search.html', + Origin: 'https://www.readwn.com', + 'user-agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36', + }, + method: 'POST', + body: QueryString.stringify({ + show: 'title', + tempid: 1, + tbname: 'news', + keyboard: searchTerm, + }), + }); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $("li.novel-item").each(function () { - const novelName = $(this).find("h4").text(); - const novelCover = baseUrl + $(this).find("img").attr("src"); - const novelUrl = $(this).find("a").attr("href").split("/").pop(); + $('li.novel-item').each(function () { + const novelName = $(this).find('h4').text(); + const novelCover = baseUrl + $(this).find('img').attr('src'); + const novelUrl = $(this).find('a').attr('href').split('/').pop(); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const ReadwnScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default ReadwnScraper; diff --git a/src/sources/en/reaperscans.js b/src/sources/en/reaperscans.js index 8fb495f6..76330403 100644 --- a/src/sources/en/reaperscans.js +++ b/src/sources/en/reaperscans.js @@ -1,160 +1,160 @@ -import cheerio from "react-native-cheerio"; -import { Status } from "../helpers/constants"; +import cheerio from 'react-native-cheerio'; +import {Status} from '../helpers/constants'; -const baseUrl = "https://reaperscans.com"; +const baseUrl = 'https://reaperscans.com'; const sourceId = 67; -const sourceName = "ReaperScans"; +const sourceName = 'ReaperScans'; -const popularNovels = async (page) => { - let url = `${baseUrl}/all-series/novels/`; - let totalPages = 1; +const popularNovels = async page => { + let url = `${baseUrl}/all-series/novels/`; + let totalPages = 1; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".page-item-detail").each(function (result) { - const novelName = $(this).find(".item-summary h3").text().trim(); - const novelCover = $(this).find(".img-responsive").attr("data-src"); + $('.page-item-detail').each(function (result) { + const novelName = $(this).find('.item-summary h3').text().trim(); + const novelCover = $(this).find('.img-responsive').attr('data-src'); - let novelUrl = $(this).find("div > a").attr("href"); - novelUrl = novelUrl.replace(`${baseUrl}/`, ""); + let novelUrl = $(this).find('div > a').attr('href'); + novelUrl = novelUrl.replace(`${baseUrl}/`, ''); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}/${novelUrl}`; +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}/${novelUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = { sourceId, url, sourceName }; + let novel = {sourceId, url, sourceName}; - $(".post-title > h3 > span").remove(); + $('.post-title > h3 > span').remove(); - novel.novelUrl = novelUrl; + novel.novelUrl = novelUrl; - novel.novelName = $(".post-title > h1").text().trim(); + novel.novelName = $('.post-title > h1').text().trim(); - novel.novelCover = $(".summary_image > a > img").attr("data-src"); + novel.novelCover = $('.summary_image > a > img').attr('data-src'); - $(".post-content_item").each(function () { - const detailName = $(this).find(".summary-heading > h5").text().trim(); - const detail = $(this).find(".summary-content").text().trim(); + $('.post-content_item').each(function () { + const detailName = $(this).find('.summary-heading > h5').text().trim(); + const detail = $(this).find('.summary-content').text().trim(); - switch (detailName) { - case "Genre(s)": - novel.genre = detail.replace(/[\t\n]/g, ","); - break; - case "Author(s)": - novel.author = detail; - break; - case "Status": - novel.status = detail.includes("OnGoing") - ? Status.ONGOING - : Status.COMPLETED; - break; - } - }); + switch (detailName) { + case 'Genre(s)': + novel.genre = detail.replace(/[\t\n]/g, ','); + break; + case 'Author(s)': + novel.author = detail; + break; + case 'Status': + novel.status = detail.includes('OnGoing') + ? Status.ONGOING + : Status.COMPLETED; + break; + } + }); - $(".description-summary > div.summary__content").find("em").remove(); - $(".premium-block").remove(); + $('.description-summary > div.summary__content').find('em').remove(); + $('.premium-block').remove(); - novel.summary = $("div.summary__content").text().trim(); + novel.summary = $('div.summary__content').text().trim(); - let novelChapters = []; + let novelChapters = []; - $(".wp-manga-chapter").each(function (result) { - $("i").remove(); + $('.wp-manga-chapter').each(function (result) { + $('i').remove(); - const chapterName = $(this).find("a").text().trim(); - const releaseDate = null; + const chapterName = $(this).find('a').text().trim(); + const releaseDate = null; - const chapterUrl = $(this).find("a").attr("href").replace(url, ""); + const chapterUrl = $(this).find('a').attr('href').replace(url, ''); - const chapter = { chapterName, releaseDate, chapterUrl }; + const chapter = {chapterName, releaseDate, chapterUrl}; - novelChapters.push(chapter); - }); + novelChapters.push(chapter); + }); - novel.chapters = novelChapters.reverse(); + novel.chapters = novelChapters.reverse(); - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}/${novelUrl}/${chapterUrl}`; + const url = `${baseUrl}/${novelUrl}/${chapterUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - const chapterName = $("#chapter-heading").text(); - let chapterText = $(".reading-content").html(); - const chapter = { - sourceId, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapterName = $('#chapter-heading').text(); + let chapterText = $('.reading-content').html(); + const chapter = { + sourceId, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = `${baseUrl}?s=${searchTerm}&post_type=wp-manga`; +const searchNovels = async searchTerm => { + const url = `${baseUrl}?s=${searchTerm}&post_type=wp-manga`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".c-tabs-item__content").each(function (result) { - const novelName = $(this).find(".post-title > h3").text().trim(); - const novelCover = $(this).find("div > div > a > img").attr("data-src"); + $('.c-tabs-item__content').each(function (result) { + const novelName = $(this).find('.post-title > h3').text().trim(); + const novelCover = $(this).find('div > div > a > img').attr('data-src'); - let novelUrl = $(this).find("div > div > a").attr("href"); - novelUrl = novelUrl.replace(`${baseUrl}/`, ""); + let novelUrl = $(this).find('div > div > a').attr('href'); + novelUrl = novelUrl.replace(`${baseUrl}/`, ''); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const ReaperScansScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default ReaperScansScraper; diff --git a/src/sources/en/royalroad.js b/src/sources/en/royalroad.js index 9f522859..1b9014be 100644 --- a/src/sources/en/royalroad.js +++ b/src/sources/en/royalroad.js @@ -1,184 +1,182 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -import { parseMadaraDate } from "../helpers/parseDate"; -import { Status } from "../helpers/constants"; +import {parseMadaraDate} from '../helpers/parseDate'; +import {Status} from '../helpers/constants'; -const baseUrl = "https://www.royalroad.com/"; +const baseUrl = 'https://www.royalroad.com/'; -const popularNovels = async (page) => { - const totalPages = 1846; - let url = baseUrl + "fictions/best-rated?page=" + page; +const popularNovels = async page => { + const totalPages = 1846; + let url = baseUrl + 'fictions/best-rated?page=' + page; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $("div.fiction-list-item.row").each(function () { - const novelName = $(this).find("h2.fiction-title").text().trim(); - let novelCover = $(this).find("img").attr("src"); + $('div.fiction-list-item.row').each(function () { + const novelName = $(this).find('h2.fiction-title').text().trim(); + let novelCover = $(this).find('img').attr('src'); - if (novelCover === "/Content/Images/nocover-new-min.png") { - novelCover = - "https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true"; - } - let novelUrl = $(this) - .find("h2.fiction-title > a") - .attr("href") - .replace("/fiction/", ""); + if (novelCover === '/Content/Images/nocover-new-min.png') { + novelCover = + 'https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true'; + } + let novelUrl = $(this) + .find('h2.fiction-title > a') + .attr('href') + .replace('/fiction/', ''); - const novel = { - sourceId: 34, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 34, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = baseUrl + "fiction/" + novelUrl; +const parseNovelAndChapters = async novelUrl => { + const url = baseUrl + 'fiction/' + novelUrl; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = {}; + let novel = {}; - novel.sourceId = 34; + novel.sourceId = 34; - novel.sourceName = "Royal Road"; + novel.sourceName = 'Royal Road'; - novel.url = url; + novel.url = url; - novel.novelUrl = novelUrl; + novel.novelUrl = novelUrl; - novelName = $("h1").text(); - novel.novelName = novelName; + novelName = $('h1').text(); + novel.novelName = novelName; - let novelCover = $("img.thumbnail").attr("src"); + let novelCover = $('img.thumbnail').attr('src'); - if (novelCover === "/Content/Images/nocover-new-min.png") { - novelCover = - "https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true"; - } + if (novelCover === '/Content/Images/nocover-new-min.png') { + novelCover = + 'https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true'; + } - novel.novelCover = novelCover; + novel.novelCover = novelCover; - novel.summary = $("div.description").text().trim(); + novel.summary = $('div.description').text().trim(); - novel.author = $("h1").next().text().replace("by ", "").trim(); - novel.genre = $("span.tags").text().trim().replace(/\n\s+/g, ","); - novel.status = - $( - "div.fiction-info > div.portlet > .col-md-8 > .margin-bottom-10 > span" - ) - .first() - .next() - .text() - .trim() === "ONGOING" - ? Status.ONGOING - : Status.COMPLETED; + novel.author = $('h1').next().text().replace('by ', '').trim(); + novel.genre = $('span.tags').text().trim().replace(/\n\s+/g, ','); + novel.status = + $('div.fiction-info > div.portlet > .col-md-8 > .margin-bottom-10 > span') + .first() + .next() + .text() + .trim() === 'ONGOING' + ? Status.ONGOING + : Status.COMPLETED; - let novelChapters = []; + let novelChapters = []; - $("table#chapters > tbody") - .find("tr") - .each(function () { - const chapterName = $(this).find("td").first().text().trim(); - let releaseDate = $(this).find("td").first().next().text().trim(); - releaseDate = releaseDate && parseMadaraDate(releaseDate); + $('table#chapters > tbody') + .find('tr') + .each(function () { + const chapterName = $(this).find('td').first().text().trim(); + let releaseDate = $(this).find('td').first().next().text().trim(); + releaseDate = releaseDate && parseMadaraDate(releaseDate); - const chapterUrl = $(this) - .find("td") - .first() - .find("a") - .attr("href") - .replace("/fiction/" + novelUrl + "/chapter/", ""); + const chapterUrl = $(this) + .find('td') + .first() + .find('a') + .attr('href') + .replace('/fiction/' + novelUrl + '/chapter/', ''); - novelChapters.push({ - chapterName, - releaseDate, - chapterUrl, - }); - }); + novelChapters.push({ + chapterName, + releaseDate, + chapterUrl, + }); + }); - novel.chapters = novelChapters; + novel.chapters = novelChapters; - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}fiction/${novelUrl}/chapter/${chapterUrl}`; + const url = `${baseUrl}fiction/${novelUrl}/chapter/${chapterUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let chapterName = $("div.chapter-content").find("strong").text(); + let chapterName = $('div.chapter-content').find('strong').text(); - let chapterText = $("div.chapter-content").html(); + let chapterText = $('div.chapter-content').html(); - const chapter = { - sourceId: 34, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId: 34, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = baseUrl + "fictions/search?title=" + searchTerm; +const searchNovels = async searchTerm => { + const url = baseUrl + 'fictions/search?title=' + searchTerm; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $("div.fiction-list-item.row").each(function () { - const novelName = $(this).find("h2.fiction-title").text().trim(); - let novelCover = $(this).find("img").attr("src"); + $('div.fiction-list-item.row').each(function () { + const novelName = $(this).find('h2.fiction-title').text().trim(); + let novelCover = $(this).find('img').attr('src'); - if (novelCover.includes("Content")) { - novelCover = baseUrl + novelCover; - } + if (novelCover.includes('Content')) { + novelCover = baseUrl + novelCover; + } - let novelUrl = $(this) - .find("h2.fiction-title > a") - .attr("href") - .replace("/fiction/", ""); + let novelUrl = $(this) + .find('h2.fiction-title > a') + .attr('href') + .replace('/fiction/', ''); - const novel = { - sourceId: 34, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 34, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const RoyalRoadScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default RoyalRoadScraper; diff --git a/src/sources/en/scribblehub.js b/src/sources/en/scribblehub.js index ae7b0f82..d4638c3e 100644 --- a/src/sources/en/scribblehub.js +++ b/src/sources/en/scribblehub.js @@ -1,176 +1,174 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -const baseUrl = "https://www.scribblehub.com/"; +const baseUrl = 'https://www.scribblehub.com/'; -const popularNovels = async (page) => { - const totalPages = 326; - let url = baseUrl + "series-ranking/?sort=1&order=4&pg=" + page; +const popularNovels = async page => { + const totalPages = 326; + let url = baseUrl + 'series-ranking/?sort=1&order=4&pg=' + page; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $("div.search_main_box").each(function (result) { - const novelName = $(this).find("div.search_title > a").text(); - const novelCover = $(this).find("div.search_img > img").attr("src"); + $('div.search_main_box').each(function (result) { + const novelName = $(this).find('div.search_title > a').text(); + const novelCover = $(this).find('div.search_img > img').attr('src'); - let novelUrl = $(this).find("div.search_title > a").attr("href"); - novelUrl = novelUrl.split("/"); - novelUrl = novelUrl[4] + "-" + novelUrl[5]; + let novelUrl = $(this).find('div.search_title > a').attr('href'); + novelUrl = novelUrl.split('/'); + novelUrl = novelUrl[4] + '-' + novelUrl[5]; - const novel = { - sourceId: 35, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 35, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = baseUrl + "read/" + novelUrl; +const parseNovelAndChapters = async novelUrl => { + const url = baseUrl + 'read/' + novelUrl; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = {}; + let novel = {}; - novel.sourceId = 35; + novel.sourceId = 35; - novel.sourceName = "Scribble Hub"; + novel.sourceName = 'Scribble Hub'; - novel.url = url; + novel.url = url; - novel.novelUrl = novelUrl; + novel.novelUrl = novelUrl; - novel.novelName = $("div.fic_title").text(); + novel.novelName = $('div.fic_title').text(); - novel.novelCover = $("div.fic_image > img").attr("src"); + novel.novelCover = $('div.fic_image > img').attr('src'); - novel.summary = $("div.wi_fic_desc").text(); + novel.summary = $('div.wi_fic_desc').text(); - novel.genre = ""; - $("span.wi_fic_genre") - .find("span") - .each(function (res) { - novel.genre += $(this).text() + ","; - }); - if (novel.genre) { - novel.genre = novel.genre.slice(0, -1); - } - - novel.status = $("span.rnd_stats").next().text().includes("Ongoing") - ? "Ongoing" - : "Completed"; - - novel.author = $("span.auth_name_fic").text(); - - let formData = new FormData(); - formData.append("action", "wi_getreleases_pagination"); - formData.append("pagenum", "-1"); - formData.append("mypostid", novelUrl.split("-")[0]); - - const data = await fetch( - "https://www.scribblehub.com/wp-admin/admin-ajax.php", - { - method: "POST", - body: formData, - } - ); - const text = await data.text(); - - $ = cheerio.load(text); - - let novelChapters = []; - - $(".toc_w").each(function (result) { - const chapterName = $(this).find(".toc_a").text(); - const releaseDate = $(this).find(".fic_date_pub").text(); - - const chapterUrl = $(this).find("a").attr("href").split("/")[6]; - // .replace("/novel/" + novelUrl + "/", ""); - - novelChapters.push({ - chapterName, - releaseDate, - chapterUrl, - }); + novel.genre = ''; + $('span.wi_fic_genre') + .find('span') + .each(function (res) { + novel.genre += $(this).text() + ','; }); + if (novel.genre) { + novel.genre = novel.genre.slice(0, -1); + } - novel.chapters = novelChapters.reverse(); + novel.status = $('span.rnd_stats').next().text().includes('Ongoing') + ? 'Ongoing' + : 'Completed'; - return novel; + novel.author = $('span.auth_name_fic').text(); + + let formData = new FormData(); + formData.append('action', 'wi_getreleases_pagination'); + formData.append('pagenum', '-1'); + formData.append('mypostid', novelUrl.split('-')[0]); + + const data = await fetch( + 'https://www.scribblehub.com/wp-admin/admin-ajax.php', + { + method: 'POST', + body: formData, + }, + ); + const text = await data.text(); + + $ = cheerio.load(text); + + let novelChapters = []; + + $('.toc_w').each(function (result) { + const chapterName = $(this).find('.toc_a').text(); + const releaseDate = $(this).find('.fic_date_pub').text(); + + const chapterUrl = $(this).find('a').attr('href').split('/')[6]; + // .replace("/novel/" + novelUrl + "/", ""); + + novelChapters.push({ + chapterName, + releaseDate, + chapterUrl, + }); + }); + + novel.chapters = novelChapters.reverse(); + + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}read/${novelUrl}/chapter/${chapterUrl}`; + const url = `${baseUrl}read/${novelUrl}/chapter/${chapterUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let chapterName = $("div.chapter-title").text(); + let chapterName = $('div.chapter-title').text(); - let chapterText = $("div.chp_raw").html(); - const chapter = { - sourceId: 35, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + let chapterText = $('div.chp_raw').html(); + const chapter = { + sourceId: 35, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = - "https://www.scribblehub.com/?s=" + - searchTerm + - "&post_type=fictionposts"; +const searchNovels = async searchTerm => { + const url = + 'https://www.scribblehub.com/?s=' + searchTerm + '&post_type=fictionposts'; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $("div.search_main_box").each(function (result) { - const novelName = $(this).find("div.search_title > a").text(); - const novelCover = $(this).find("div.search_img > img").attr("src"); + $('div.search_main_box').each(function (result) { + const novelName = $(this).find('div.search_title > a').text(); + const novelCover = $(this).find('div.search_img > img').attr('src'); - let novelUrl = $(this).find("div.search_title > a").attr("href"); - novelUrl = novelUrl.split("/"); - novelUrl = novelUrl[4] + "-" + novelUrl[5]; + let novelUrl = $(this).find('div.search_title > a').attr('href'); + novelUrl = novelUrl.split('/'); + novelUrl = novelUrl[4] + '-' + novelUrl[5]; - const novel = { - sourceId: 35, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 35, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); - return novels; + novels.push(novel); + }); + return novels; }; const ScribbleHubScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default ScribbleHubScraper; diff --git a/src/sources/en/tapread.js b/src/sources/en/tapread.js index 1426b094..78b5c713 100644 --- a/src/sources/en/tapread.js +++ b/src/sources/en/tapread.js @@ -1,174 +1,174 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -const baseUrl = "http://www.tapread.com"; +const baseUrl = 'http://www.tapread.com'; let headers = new Headers({ - "User-Agent": - "'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", + 'User-Agent': + "'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", }); -const popularNovels = async (page) => { - let totalPages = 0; +const popularNovels = async page => { + let totalPages = 0; - const result = await fetch(baseUrl); - const body = await result.text(); + const result = await fetch(baseUrl); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $('.section-item[data-classify="1"]').each(function (result) { - const novelName = $(this).find(".book-name").text(); - const novelCover = "http:" + $(this).find("img").attr("src"); - let novelUrl = $(this).attr("data-id"); + $('.section-item[data-classify="1"]').each(function (result) { + const novelName = $(this).find('.book-name').text(); + const novelCover = 'http:' + $(this).find('img').attr('src'); + let novelUrl = $(this).attr('data-id'); - const novel = { - sourceId: 17, - novelName, - novelCover, - novelUrl, - }; - - novels.push(novel); - }); - - return { totalPages, novels }; -}; - -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}/book/detail/${novelUrl}`; - - console.log(url); - - const result = await fetch(url); - const body = await result.text(); - - $ = cheerio.load(body); - - let novel = {}; - - novel.sourceId = 17; - - novel.sourceName = "TapRead"; - - novel.url = url; - - novel.novelUrl = novelUrl; - - novel.novelName = $(".book-name").text(); - - novel.novelCover = "http:" + $("div.book-img > img").attr("src"); - - novel.genre = $("div.book-catalog > span.txt").text(); - - novel.status = $("div.book-state > span.txt").text(); - - novel.author = $("div.author > span.name").text(); - - novel.summary = $("div.content > p.desc").text(); - - const getChapters = async (novelId) => { - const chapterListUrl = "http://www.tapread.com/ajax/book/contents"; - - let formData = new FormData(); - formData.append("bookId", novelId); - - const data = await fetch(chapterListUrl, { - method: "POST", - body: formData, - }); - - const chapters = await data.json(); - - let novelChapters = []; - - chapters.result.chapterList.map((chapter) => { - let chapterName = chapter.chapterName; - const releaseDate = chapter.pubTime; - const chapterUrl = chapter.chapterId.toString(); - - if (chapter.lock) { - chapterName = "🔒 " + chapterName; - } - - novelChapters.push({ - chapterUrl, - chapterName, - releaseDate, - }); - }); - - return novelChapters; + const novel = { + sourceId: 17, + novelName, + novelCover, + novelUrl, }; - novel.chapters = await getChapters(novelUrl); + novels.push(novel); + }); - return novel; + return {totalPages, novels}; +}; + +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}/book/detail/${novelUrl}`; + + console.log(url); + + const result = await fetch(url); + const body = await result.text(); + + $ = cheerio.load(body); + + let novel = {}; + + novel.sourceId = 17; + + novel.sourceName = 'TapRead'; + + novel.url = url; + + novel.novelUrl = novelUrl; + + novel.novelName = $('.book-name').text(); + + novel.novelCover = 'http:' + $('div.book-img > img').attr('src'); + + novel.genre = $('div.book-catalog > span.txt').text(); + + novel.status = $('div.book-state > span.txt').text(); + + novel.author = $('div.author > span.name').text(); + + novel.summary = $('div.content > p.desc').text(); + + const getChapters = async novelId => { + const chapterListUrl = 'http://www.tapread.com/ajax/book/contents'; + + let formData = new FormData(); + formData.append('bookId', novelId); + + const data = await fetch(chapterListUrl, { + method: 'POST', + body: formData, + }); + + const chapters = await data.json(); + + let novelChapters = []; + + chapters.result.chapterList.map(chapter => { + let chapterName = chapter.chapterName; + const releaseDate = chapter.pubTime; + const chapterUrl = chapter.chapterId.toString(); + + if (chapter.lock) { + chapterName = '🔒 ' + chapterName; + } + + novelChapters.push({ + chapterUrl, + chapterName, + releaseDate, + }); + }); + + return novelChapters; + }; + + novel.chapters = await getChapters(novelUrl); + + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - let formData = new FormData(); - formData.append("bookId", novelUrl); - formData.append("chapterId", chapterUrl); + let formData = new FormData(); + formData.append('bookId', novelUrl); + formData.append('chapterId', chapterUrl); - const url = "http://www.tapread.com/ajax/book/chapter"; + const url = 'http://www.tapread.com/ajax/book/chapter'; - const result = await fetch(url, { - method: "POST", - body: formData, - }); - const body = await result.json(); + const result = await fetch(url, { + method: 'POST', + body: formData, + }); + const body = await result.json(); - const chapterName = body.result.chapterName; - const chapterText = body.result.content; + const chapterName = body.result.chapterName; + const chapterText = body.result.content; - const chapter = { - sourceId: 17, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId: 17, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - let formData = new FormData(); - formData.append("storyType", 1); - formData.append("pageNo", 1); - formData.append("searchText", searchTerm); +const searchNovels = async searchTerm => { + let formData = new FormData(); + formData.append('storyType', 1); + formData.append('pageNo', 1); + formData.append('searchText', searchTerm); - const url = "http://www.tapread.com/ajax/search/story"; + const url = 'http://www.tapread.com/ajax/search/story'; - const data = await fetch(url, { - method: "POST", - body: formData, - }); + const data = await fetch(url, { + method: 'POST', + body: formData, + }); - const body = await data.json(); + const body = await data.json(); - const novels = []; + const novels = []; - body.result.storyList.map((novel) => { - const novelName = novel.storyName.replace( - /|<\/font>/g, - "" - ); - const novelUrl = novel.storyId; - const novelCover = "http://static.tapread.com" + novel.coverUrl; + body.result.storyList.map(novel => { + const novelName = novel.storyName.replace( + /|<\/font>/g, + '', + ); + const novelUrl = novel.storyId; + const novelCover = 'http://static.tapread.com' + novel.coverUrl; - novels.push({ sourceId: 17, novelName, novelCover, novelUrl }); - }); + novels.push({sourceId: 17, novelName, novelCover, novelUrl}); + }); - return novels; + return novels; }; const tapReadScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default tapReadScraper; diff --git a/src/sources/en/travistranslations.js b/src/sources/en/travistranslations.js index 4a9c2f65..bdf7ea76 100644 --- a/src/sources/en/travistranslations.js +++ b/src/sources/en/travistranslations.js @@ -1,156 +1,155 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; const sourceId = 76; -const sourceName = "TravisTranslations"; +const sourceName = 'TravisTranslations'; -const baseUrl = "https://travistranslations.com/"; +const baseUrl = 'https://travistranslations.com/'; -const popularNovels = async (page) => { - let url = baseUrl + "all-series/"; +const popularNovels = async page => { + let url = baseUrl + 'all-series/'; - if (page > 1) { - url += `page/${page}/`; - } + if (page > 1) { + url += `page/${page}/`; + } - const totalPages = 19; + const totalPages = 19; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".group").each(function () { - const novelName = $(this).find("h3").text(); - const novelCover = "https://" + $(this).find("img").attr("data-src"); - const novelUrl = $(this).find(" a").attr("href"); + $('.group').each(function () { + const novelName = $(this).find('h3').text(); + const novelCover = 'https://' + $(this).find('img').attr('data-src'); + const novelUrl = $(this).find(' a').attr('href'); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { novels, totalPages }; + return {novels, totalPages}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = novelUrl; +const parseNovelAndChapters = async novelUrl => { + const url = novelUrl; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = { sourceId, sourceName, url, novelUrl }; + let novel = {sourceId, sourceName, url, novelUrl}; - novel.novelName = $("h1").text().trim(); + novel.novelName = $('h1').text().trim(); - novel.novelCover = "https://" + $("img.object-cover").attr("data-src"); + novel.novelCover = 'https://' + $('img.object-cover').attr('data-src'); - novel.summary = $("div[property=description]").text().trim(); + novel.summary = $('div[property=description]').text().trim(); - novel.genre = ""; + novel.genre = ''; - $("div.flex.flex-col.mt-3.text-center > ul > li").each(function () { - novel.genre += - $(this) - .text() - .replace(/[\t\n]/g, "") + ","; - }); - $("div.header-stats > span").each(function () { - if ($(this).find("small").text() === "Status") { - novel.status = $(this).find("strong").text(); - } + $('div.flex.flex-col.mt-3.text-center > ul > li').each(function () { + novel.genre += + $(this) + .text() + .replace(/[\t\n]/g, '') + ','; + }); + $('div.header-stats > span').each(function () { + if ($(this).find('small').text() === 'Status') { + novel.status = $(this).find('strong').text(); + } + }); + + novel.genre = novel.genre.slice(0, -1); + + novel.author = $('.author > a > span').text(); + let novelChapters = []; + + $('.tab_content > ul.grid') + .find('li') + .each(function () { + const chapterName = $(this).find('span').first().text().trim(); + const releaseDate = null; + const chapterUrl = $(this).find('a').attr('href'); + + novelChapters.push({chapterName, releaseDate, chapterUrl}); }); - novel.genre = novel.genre.slice(0, -1); + novel.chapters = novelChapters; - novel.author = $(".author > a > span").text(); - let novelChapters = []; - - $(".tab_content > ul.grid") - .find("li") - .each(function () { - const chapterName = $(this).find("span").first().text().trim(); - const releaseDate = null; - const chapterUrl = $(this).find("a").attr("href"); - - novelChapters.push({ chapterName, releaseDate, chapterUrl }); - }); - - novel.chapters = novelChapters; - - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const result = await fetch(chapterUrl); - let body = await result.text(); + const result = await fetch(chapterUrl); + let body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - const chapterId = $("input[name=id]").attr("value"); + const chapterId = $('input[name=id]').attr('value'); - const url = - "https://travistranslations.com/wp-json/wp/v2/posts/" + chapterId; + const url = 'https://travistranslations.com/wp-json/wp/v2/posts/' + chapterId; - const data = await fetch(url); - body = await data.json(); + const data = await fetch(url); + body = await data.json(); - let chapterName = body.title.rendered; - let chapterText = body.content.rendered; + let chapterName = body.title.rendered; + let chapterText = body.content.rendered; - const chapter = { - sourceId, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - let url = baseUrl + "all-series/?search=" + searchTerm; +const searchNovels = async searchTerm => { + let url = baseUrl + 'all-series/?search=' + searchTerm; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".group").each(function () { - const novelName = $(this).find("h3").text(); - const novelCover = "https://" + $(this).find("img").attr("data-src"); - const novelUrl = $(this).find(" a").attr("href"); + $('.group').each(function () { + const novelName = $(this).find('h3').text(); + const novelCover = 'https://' + $(this).find('img').attr('data-src'); + const novelUrl = $(this).find(' a').attr('href'); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const TravisTranslationsScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default TravisTranslationsScraper; diff --git a/src/sources/en/vipnovel.js b/src/sources/en/vipnovel.js index a856dfeb..6b8398fc 100644 --- a/src/sources/en/vipnovel.js +++ b/src/sources/en/vipnovel.js @@ -1,189 +1,189 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -const baseUrl = "https://vipnovel.com/"; +const baseUrl = 'https://vipnovel.com/'; -const popularNovels = async (page) => { - let totalPages = 89; - let url = `${baseUrl}vipnovel/page/${page}/?m_orderby=rating`; +const popularNovels = async page => { + let totalPages = 89; + let url = `${baseUrl}vipnovel/page/${page}/?m_orderby=rating`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".page-item-detail").each(function (result) { - const novelName = $(this).find("h5 > a").text(); - const novelCover = $(this).find("img").attr("src"); + $('.page-item-detail').each(function (result) { + const novelName = $(this).find('h5 > a').text(); + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this).find("h5 > a").attr("href"); - novelUrl = novelUrl.replace(`${baseUrl}vipnovel/`, ""); + let novelUrl = $(this).find('h5 > a').attr('href'); + novelUrl = novelUrl.replace(`${baseUrl}vipnovel/`, ''); - const novel = { - sourceId: 10, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 10, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}vipnovel/${novelUrl}`; +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}vipnovel/${novelUrl}`; - console.log(url); + console.log(url); - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = {}; + let novel = {}; - novel.sourceId = 10; + novel.sourceId = 10; - novel.sourceName = "VipNovel"; + novel.sourceName = 'VipNovel'; - novel.url = url; + novel.url = url; - novel.novelUrl = novelUrl; + novel.novelUrl = novelUrl; - novel.novelName = $(".post-title > h3") - .text() - .replace(/[\t\n]/g, "") - .trim(); + novel.novelName = $('.post-title > h3') + .text() + .replace(/[\t\n]/g, '') + .trim(); - novel.novelCover = $(".summary_image > a > img").attr("src"); - $(".post-content_item").each(function (result) { - detailName = $(this) - .find(".summary-heading > h5") - .text() - .replace(/[\t\n]/g, "") - .trim(); - detail = $(this) - .find(".summary-content") - .text() - .replace(/[\t\n]/g, "") - .trim(); + novel.novelCover = $('.summary_image > a > img').attr('src'); + $('.post-content_item').each(function (result) { + detailName = $(this) + .find('.summary-heading > h5') + .text() + .replace(/[\t\n]/g, '') + .trim(); + detail = $(this) + .find('.summary-content') + .text() + .replace(/[\t\n]/g, '') + .trim(); - switch (detailName) { - case "Genre(s)": - novel.genre = detail.trim().replace(/[\t\n]/g, ","); - break; - case "Author(s)": - novel.author = detail.trim(); - break; - case "Artist(s)": - novel.status = detail.trim(); - break; - } - }); + switch (detailName) { + case 'Genre(s)': + novel.genre = detail.trim().replace(/[\t\n]/g, ','); + break; + case 'Author(s)': + novel.author = detail.trim(); + break; + case 'Artist(s)': + novel.status = detail.trim(); + break; + } + }); - $(".summary__content > p").first().remove(); + $('.summary__content > p').first().remove(); - let novelSummary = $(".description-summary > div.summary__content") - .text() - .replace("Synopsis", ""); + let novelSummary = $('.description-summary > div.summary__content') + .text() + .replace('Synopsis', ''); - novel.summary = novelSummary.replace(/[\t\n]/g, ""); + novel.summary = novelSummary.replace(/[\t\n]/g, ''); - let novelChapters = []; + let novelChapters = []; - $(".wp-manga-chapter").each(function (result) { - const chapterName = $(this) - .find("a") - .text() - .replace(/[\t\n]/g, "") - .trim(); + $('.wp-manga-chapter').each(function (result) { + const chapterName = $(this) + .find('a') + .text() + .replace(/[\t\n]/g, '') + .trim(); - const releaseDate = $(this) - .find("span") - .text() - .replace(/[\t\n]/g, "") - .trim(); + const releaseDate = $(this) + .find('span') + .text() + .replace(/[\t\n]/g, '') + .trim(); - const chapterUrl = $(this).find("a").attr("href").replace(url, ""); + const chapterUrl = $(this).find('a').attr('href').replace(url, ''); - const chapter = { chapterName, releaseDate, chapterUrl }; + const chapter = {chapterName, releaseDate, chapterUrl}; - console.log(chapterUrl); + console.log(chapterUrl); - novelChapters.push(chapter); - }); + novelChapters.push(chapter); + }); - novel.chapters = novelChapters.reverse(); + novel.chapters = novelChapters.reverse(); - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = baseUrl + "vipnovel/" + novelUrl + chapterUrl; + const url = baseUrl + 'vipnovel/' + novelUrl + chapterUrl; - console.log(url); + console.log(url); - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let chapterName = $(".text-center").text(); + let chapterName = $('.text-center').text(); - if (!chapterName) { - chapterName = $(".text-left > div> h3").text(); - } + if (!chapterName) { + chapterName = $('.text-left > div> h3').text(); + } - let chapterText = $(".text-left").html(); - const chapter = { - sourceId: 10, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + let chapterText = $('.text-left').html(); + const chapter = { + sourceId: 10, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = `${baseUrl}?s=${searchTerm}&post_type=wp-manga`; +const searchNovels = async searchTerm => { + const url = `${baseUrl}?s=${searchTerm}&post_type=wp-manga`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".c-tabs-item__content").each(function (result) { - const novelName = $(this).find("h4 > a").text(); - const novelCover = $(this).find("img").attr("src"); + $('.c-tabs-item__content').each(function (result) { + const novelName = $(this).find('h4 > a').text(); + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this).find("h4 > a").attr("href"); - novelUrl = novelUrl.replace(`${baseUrl}vipnovel/`, ""); + let novelUrl = $(this).find('h4 > a').attr('href'); + novelUrl = novelUrl.replace(`${baseUrl}vipnovel/`, ''); - const novel = { - sourceId: 10, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 10, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const vipNovelScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default vipNovelScraper; diff --git a/src/sources/en/wlnupdates.js b/src/sources/en/wlnupdates.js index 4b37e454..642bcbad 100644 --- a/src/sources/en/wlnupdates.js +++ b/src/sources/en/wlnupdates.js @@ -1,177 +1,177 @@ -import cheerio from "react-native-cheerio"; -import { Status } from "../helpers/constants"; -import NovelUpdatesScraper from "./novelupdates"; +import cheerio from 'react-native-cheerio'; +import {Status} from '../helpers/constants'; +import NovelUpdatesScraper from './novelupdates'; const sourceId = 62; -const sourceName = "WLNUpdates"; +const sourceName = 'WLNUpdates'; -const baseUrl = "https://www.wlnupdates.com/"; +const baseUrl = 'https://www.wlnupdates.com/'; let headers = new Headers({ - "User-Agent": - "'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", + 'User-Agent': + "'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", }); -const popularNovels = async (page) => { - const totalPages = 100; - let url = `${baseUrl}highest-rated/` + page; +const popularNovels = async page => { + const totalPages = 100; + let url = `${baseUrl}highest-rated/` + page; - const result = await fetch(url, { - method: "GET", - headers: headers, - }); - const body = await result.text(); + const result = await fetch(url, { + method: 'GET', + headers: headers, + }); + const body = await result.text(); - const $ = cheerio.load(body); + const $ = cheerio.load(body); - const novels = []; + const novels = []; - $("table").find("tr").first().remove(); + $('table').find('tr').first().remove(); - $("tr").each(function (res) { - const novelCover = - "https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true"; + $('tr').each(function (res) { + const novelCover = + 'https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true'; - const novelName = $(this).find("td > a").text(); - const novelUrl = - "https://www.wlnupdates.com" + $(this).find("td > a").attr("href"); + const novelName = $(this).find('td > a').text(); + const novelUrl = + 'https://www.wlnupdates.com' + $(this).find('td > a').attr('href'); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; - - novels.push(novel); - }); - - return { totalPages, novels }; -}; - -const parseNovelAndChapters = async (novelUrl) => { - const url = novelUrl; - - const result = await fetch(url, { - method: "GET", - headers: headers, - }); - const body = await result.text(); - - $ = cheerio.load(body); - - let novel = { - sourceId, - sourceName, - url, - novelUrl, + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, }; - novel.novelName = $("h2").text(); + novels.push(novel); + }); - novel.novelCover = - "https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true"; + return {totalPages, novels}; +}; - novel.author = $(".multiitem#author") - .text() - .trim() - .replace(/[\t\n]/g, ""); +const parseNovelAndChapters = async novelUrl => { + const url = novelUrl; - novel.genre = $(".multiitem#genre") - .text() - .trim() - .replace(/[\t\n]/g, ""); + const result = await fetch(url, { + method: 'GET', + headers: headers, + }); + const body = await result.text(); - novel.status = Status.UNKNOWN; + $ = cheerio.load(body); - let summary = $("#description").text().trim(); + let novel = { + sourceId, + sourceName, + url, + novelUrl, + }; - novel.summary = summary; + novel.novelName = $('h2').text(); - let novelChapters = []; + novel.novelCover = + 'https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true'; - $("#release-entry").each(function () { - let chapterName; + novel.author = $('.multiitem#author') + .text() + .trim() + .replace(/[\t\n]/g, ''); - if ($(this).find("td.numeric").length > 1) { - chapterName = - "Volume " + - $(this).find(" td:nth-child(3)").text().trim() + - " Chapter " + - $(this).find(" td:nth-child(4)").text().trim(); - } else if ($(this).find("td.numeric").length > 0) { - chapterName = "Chapter " + $(this).find("td.numeric").text().trim(); - } else { - chapterName = $(this).find("td.postfix").text().trim(); - } + novel.genre = $('.multiitem#genre') + .text() + .trim() + .replace(/[\t\n]/g, ''); - const releaseDate = $(this).find(".release-entry-cell").text().trim(); + novel.status = Status.UNKNOWN; - const chapterUrl = $(this).find("td:nth-child(1) > a").attr("href"); + let summary = $('#description').text().trim(); - novelChapters.push({ chapterName, releaseDate, chapterUrl }); - }); + novel.summary = summary; - novel.chapters = novelChapters.reverse(); + let novelChapters = []; - return novel; + $('#release-entry').each(function () { + let chapterName; + + if ($(this).find('td.numeric').length > 1) { + chapterName = + 'Volume ' + + $(this).find(' td:nth-child(3)').text().trim() + + ' Chapter ' + + $(this).find(' td:nth-child(4)').text().trim(); + } else if ($(this).find('td.numeric').length > 0) { + chapterName = 'Chapter ' + $(this).find('td.numeric').text().trim(); + } else { + chapterName = $(this).find('td.postfix').text().trim(); + } + + const releaseDate = $(this).find('.release-entry-cell').text().trim(); + + const chapterUrl = $(this).find('td:nth-child(1) > a').attr('href'); + + novelChapters.push({chapterName, releaseDate, chapterUrl}); + }); + + novel.chapters = novelChapters.reverse(); + + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const chapterName = ""; - const chapterText = ( - await NovelUpdatesScraper.parseChapter(novelUrl, chapterUrl) - ).chapterText; + const chapterName = ''; + const chapterText = ( + await NovelUpdatesScraper.parseChapter(novelUrl, chapterUrl) + ).chapterText; - const chapter = { - sourceId, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = baseUrl + "search?title=" + searchTerm; +const searchNovels = async searchTerm => { + const url = baseUrl + 'search?title=' + searchTerm; - const res = await fetch(url, { - method: "GET", - headers: headers, - }); - const body = await res.text(); + const res = await fetch(url, { + method: 'GET', + headers: headers, + }); + const body = await res.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $("tr").each(function (res) { - const novelCover = - "https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true"; - const novelName = $(this).find("td > a").text(); - const novelUrl = - "https://www.wlnupdates.com" + $(this).find("td > a").attr("href"); + $('tr').each(function (res) { + const novelCover = + 'https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true'; + const novelName = $(this).find('td > a').text(); + const novelUrl = + 'https://www.wlnupdates.com' + $(this).find('td > a').attr('href'); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); - return novels; + novels.push(novel); + }); + return novels; }; const WLNUpdatesScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default WLNUpdatesScraper; diff --git a/src/sources/en/woopread.js b/src/sources/en/woopread.js index 4dfb0bd9..6b28cce5 100644 --- a/src/sources/en/woopread.js +++ b/src/sources/en/woopread.js @@ -1,187 +1,187 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -const baseUrl = "https://woopread.com/"; +const baseUrl = 'https://woopread.com/'; -const popularNovels = async (page) => { - let totalPages = 6; - let url = baseUrl + "novellist/page/" + page + "/?m_orderby=rating"; +const popularNovels = async page => { + let totalPages = 6; + let url = baseUrl + 'novellist/page/' + page + '/?m_orderby=rating'; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".page-item-detail").each(function (result) { - const novelName = $(this).find(".h5 > a").text(); - const novelCover = $(this).find("img").attr("data-src"); + $('.page-item-detail').each(function (result) { + const novelName = $(this).find('.h5 > a').text(); + const novelCover = $(this).find('img').attr('data-src'); - let novelUrl = $(this).find(".h5 > a").attr("href"); - novelUrl = novelUrl.replace(baseUrl + "series/", ""); + let novelUrl = $(this).find('.h5 > a').attr('href'); + novelUrl = novelUrl.replace(baseUrl + 'series/', ''); - const novel = { - sourceId: 21, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 21, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}series/${novelUrl}`; +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}series/${novelUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = {}; + let novel = {}; - novel.sourceId = 21; + novel.sourceId = 21; - novel.sourceName = "WoopRead"; + novel.sourceName = 'WoopRead'; - novel.url = url; + novel.url = url; - novel.novelUrl = novelUrl; + novel.novelUrl = novelUrl; - novel.novelName = $(".post-title > h1") - .text() - .replace(/[\t\n]/g, "") - .trim(); + novel.novelName = $('.post-title > h1') + .text() + .replace(/[\t\n]/g, '') + .trim(); - novel.novelCover = $(".summary_image > a > img").attr("src"); + novel.novelCover = $('.summary_image > a > img').attr('src'); - $(".post-content_item").each(function (result) { - detailName = $(this) - .find(".summary-heading > h5") - .text() - .replace(/[\t\n]/g, "") - .trim(); - detail = $(this) - .find(".summary-content") - .text() - .replace(/[\t\n]/g, "") - .trim(); + $('.post-content_item').each(function (result) { + detailName = $(this) + .find('.summary-heading > h5') + .text() + .replace(/[\t\n]/g, '') + .trim(); + detail = $(this) + .find('.summary-content') + .text() + .replace(/[\t\n]/g, '') + .trim(); - switch (detailName) { - case "Genre(s)": - novel.genre = detail.trim().replace(/[\t\n]/g, ","); - break; - case "Author(s)": - novel.author = detail.trim(); - break; - case "Artist(s)": - novel.status = detail.trim(); - break; - } - }); - $(".description-summary > div.summary__content").find("em").remove(); + switch (detailName) { + case 'Genre(s)': + novel.genre = detail.trim().replace(/[\t\n]/g, ','); + break; + case 'Author(s)': + novel.author = detail.trim(); + break; + case 'Artist(s)': + novel.status = detail.trim(); + break; + } + }); + $('.description-summary > div.summary__content').find('em').remove(); - novel.summary = $(".description-summary > div.summary__content") - .text() - .trim(); + novel.summary = $('.description-summary > div.summary__content') + .text() + .trim(); - let novelChapters = []; + let novelChapters = []; - const novelId = $(".rating-post-id").attr("value"); + const novelId = $('.rating-post-id').attr('value'); - let formData = new FormData(); - formData.append("action", "manga_get_chapters"); - formData.append("manga", novelId); + let formData = new FormData(); + formData.append('action', 'manga_get_chapters'); + formData.append('manga', novelId); - const data = await fetch("https://woopread.com/wp-admin/admin-ajax.php", { - method: "POST", - body: formData, - }); - const text = await data.text(); + const data = await fetch('https://woopread.com/wp-admin/admin-ajax.php', { + method: 'POST', + body: formData, + }); + const text = await data.text(); - $ = cheerio.load(text); + $ = cheerio.load(text); - $(".wp-manga-chapter.free-chap").each(function (result) { - chapterName = $(this) - .find("a") - .text() - .replace(/[\t\n]/g, "") - .trim(); + $('.wp-manga-chapter.free-chap').each(function (result) { + chapterName = $(this) + .find('a') + .text() + .replace(/[\t\n]/g, '') + .trim(); - releaseDate = $(this).find("span").text().replace("Free", "").trim(); + releaseDate = $(this).find('span').text().replace('Free', '').trim(); - chapterUrl = $(this).find("a").attr("href").replace(url, ""); + chapterUrl = $(this).find('a').attr('href').replace(url, ''); - novelChapters.push({ chapterName, releaseDate, chapterUrl }); - }); + novelChapters.push({chapterName, releaseDate, chapterUrl}); + }); - novel.chapters = novelChapters.reverse(); + novel.chapters = novelChapters.reverse(); - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}series/${novelUrl}/${chapterUrl}/`; + const url = `${baseUrl}series/${novelUrl}/${chapterUrl}/`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - const chapterName = $("h1#chapter-heading").text(); + const chapterName = $('h1#chapter-heading').text(); - let chapterText = $(".reading-content").html(); - chapterText = chapterText.replace(/(?<=[[])[\n](?=[h])/g, ""); + let chapterText = $('.reading-content').html(); + chapterText = chapterText.replace(/(?<=[[])[\n](?=[h])/g, ''); - const chapter = { - sourceId: 21, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId: 21, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = `${baseUrl}?s=${searchTerm}&post_type=wp-manga&op=&author=&artist=&release=&adult=`; +const searchNovels = async searchTerm => { + const url = `${baseUrl}?s=${searchTerm}&post_type=wp-manga&op=&author=&artist=&release=&adult=`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".c-tabs-item__content").each(function (result) { - const novelName = $(this).find(".h4 > a").text(); - const novelCover = $(this).find("img").attr("src"); + $('.c-tabs-item__content').each(function (result) { + const novelName = $(this).find('.h4 > a').text(); + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this).find(".h4 > a").attr("href"); - novelUrl = novelUrl.replace(`${baseUrl}series/`, ""); + let novelUrl = $(this).find('.h4 > a').attr('href'); + novelUrl = novelUrl.replace(`${baseUrl}series/`, ''); - const novel = { - sourceId: 21, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 21, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const WoopReadScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default WoopReadScraper; diff --git a/src/sources/en/wuxiablog.js b/src/sources/en/wuxiablog.js index 7ce5b0b5..e4a7320c 100644 --- a/src/sources/en/wuxiablog.js +++ b/src/sources/en/wuxiablog.js @@ -1,204 +1,204 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; const sourceId = 48; -const sourceName = "Wuxia.Blog"; +const sourceName = 'Wuxia.Blog'; -const baseUrl = "https://www.wuxia.blog/"; +const baseUrl = 'https://www.wuxia.blog/'; -const popularNovels = async (page) => { - const totalPages = 0; - let url = `${baseUrl}listNovels`; +const popularNovels = async page => { + const totalPages = 0; + let url = `${baseUrl}listNovels`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $("div.panel-body > table") - .find("tr") - .each(function () { - const novelName = $(this).find("td.novel").text(); + $('div.panel-body > table') + .find('tr') + .each(function () { + const novelName = $(this).find('td.novel').text(); - if (novelName) { - const novelId = $(this).find("td:nth-child(1)").text(); + if (novelName) { + const novelId = $(this).find('td:nth-child(1)').text(); - const novelCover = baseUrl + "/data/image/" + novelId + ".jpg"; + const novelCover = baseUrl + '/data/image/' + novelId + '.jpg'; - let novelUrl = $(this) - .find("td.novel > a") - .attr("href") - .replace("/novel/", ""); + let novelUrl = $(this) + .find('td.novel > a') + .attr('href') + .replace('/novel/', ''); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - } - }); + novels.push(novel); + } + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}novel/${novelUrl}/`; +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}novel/${novelUrl}/`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = { - sourceId, - sourceName, - url, - novelUrl, + let novel = { + sourceId, + sourceName, + url, + novelUrl, + }; + + novel.novelName = $( + 'body > div.container-fluid.text-center > div.row.content > div.col-sm-8.text-left > div:nth-child(6) > div.panel-heading.clearfix > h4', + ).text(); + + novel.novelCover = $('img[itemprop="image"]').attr('src'); + + novel.author = $( + 'div.col-md-6 > div > div:nth-child(2) > div > div:nth-child(2) > a', + ).text(); + + novel.genre = $('div.row > div.col-md-6 > div > a:nth-child(4)').text(); + + novel.summary = $('div[itemprop="description"]').find('p').text().trim(); + + let novelChapters = []; + + $('table#chplist > #chapters > tr').each(function () { + const chapterName = $(this).find('a').text(); + + const releaseDate = $(this) + .find('td:nth-child(2)') + .text() + .replace(/-/g, '/'); + + const chapterUrl = $(this).find('a').attr('href').replace(url, ''); + + const chapter = { + chapterName, + releaseDate, + chapterUrl, }; - novel.novelName = $( - "body > div.container-fluid.text-center > div.row.content > div.col-sm-8.text-left > div:nth-child(6) > div.panel-heading.clearfix > h4" - ).text(); + novelChapters.push(chapter); + }); - novel.novelCover = $('img[itemprop="image"]').attr("src"); + let moreChaptersUrl = + baseUrl + + 'temphtml/_tempChapterList_all_' + + $('div#more').attr('data-nid') + + '.html'; - novel.author = $( - "div.col-md-6 > div > div:nth-child(2) > div > div:nth-child(2) > a" - ).text(); + let moreChapters = await fetch(moreChaptersUrl); + let moreChaptersString = await moreChapters.text(); - novel.genre = $("div.row > div.col-md-6 > div > a:nth-child(4)").text(); + $ = cheerio.load(moreChaptersString); - novel.summary = $('div[itemprop="description"]').find("p").text().trim(); + $('a').each(function () { + const chapterName = $(this).text(); - let novelChapters = []; + const releaseDate = $(this)[0] + .nextSibling.nodeValue.replace(/-/g, '/') + .trim(); - $("table#chplist > #chapters > tr").each(function () { - const chapterName = $(this).find("a").text(); + const chapterUrl = $(this).attr('href').replace(url, ''); - const releaseDate = $(this) - .find("td:nth-child(2)") - .text() - .replace(/-/g, "/"); + const chapter = { + chapterName, + releaseDate, + chapterUrl, + }; - const chapterUrl = $(this).find("a").attr("href").replace(url, ""); + novelChapters.push(chapter); + }); - const chapter = { - chapterName, - releaseDate, - chapterUrl, - }; + novel.chapters = novelChapters.reverse(); - novelChapters.push(chapter); - }); - - let moreChaptersUrl = - baseUrl + - "temphtml/_tempChapterList_all_" + - $("div#more").attr("data-nid") + - ".html"; - - let moreChapters = await fetch(moreChaptersUrl); - let moreChaptersString = await moreChapters.text(); - - $ = cheerio.load(moreChaptersString); - - $("a").each(function () { - const chapterName = $(this).text(); - - const releaseDate = $(this)[0] - .nextSibling.nodeValue.replace(/-/g, "/") - .trim(); - - const chapterUrl = $(this).attr("href").replace(url, ""); - - const chapter = { - chapterName, - releaseDate, - chapterUrl, - }; - - novelChapters.push(chapter); - }); - - novel.chapters = novelChapters.reverse(); - - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}novel/${novelUrl}/${chapterUrl}`; + const url = `${baseUrl}novel/${novelUrl}/${chapterUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let chapterName = $("div.panel-body.article").find("h4").text(); + let chapterName = $('div.panel-body.article').find('h4').text(); - $("ul.pager").remove(); + $('ul.pager').remove(); - let chapterText = $("div.panel-body.article") - .html() - .replace(/(.*?)<\/span>/g, ""); + let chapterText = $('div.panel-body.article') + .html() + .replace(/(.*?)<\/span>/g, ''); - const chapter = { - sourceId, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = `${baseUrl}?search=${searchTerm}`; +const searchNovels = async searchTerm => { + const url = `${baseUrl}?search=${searchTerm}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $("#table") - .find("tr") - .each(function () { - const novelName = $(this).find("a").text().trim(); + $('#table') + .find('tr') + .each(function () { + const novelName = $(this).find('a').text().trim(); - if (novelName) { - const novelCover = $(this).find("img").attr("src"); + if (novelName) { + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this) - .find("a") - .attr("href") - .replace(baseUrl + "novel/", ""); + let novelUrl = $(this) + .find('a') + .attr('href') + .replace(baseUrl + 'novel/', ''); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - } - }); + novels.push(novel); + } + }); - return novels; + return novels; }; const WuxiaBlogScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default WuxiaBlogScraper; diff --git a/src/sources/en/wuxiacity.js b/src/sources/en/wuxiacity.js index a109d078..6df815d0 100644 --- a/src/sources/en/wuxiacity.js +++ b/src/sources/en/wuxiacity.js @@ -1,173 +1,173 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -import moment from "moment"; +import moment from 'moment'; const sourceId = 49; -const sourceName = "wuxia.city"; +const sourceName = 'wuxia.city'; -const baseUrl = "https://wuxia.city/"; +const baseUrl = 'https://wuxia.city/'; -const popularNovels = async (page) => { - const totalPages = 133; - let url = `${baseUrl}genre/all?page=` + page; +const popularNovels = async page => { + const totalPages = 133; + let url = `${baseUrl}genre/all?page=` + page; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".section-item.card").each(function () { - const novelName = $(this).find(".book-name").text(); - const novelCover = $(this).find("img").attr("src"); - const novelUrl = $(this).find("a").attr("href").replace("/book/", ""); + $('.section-item.card').each(function () { + const novelName = $(this).find('.book-name').text(); + const novelCover = $(this).find('img').attr('src'); + const novelUrl = $(this).find('a').attr('href').replace('/book/', ''); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; - - novels.push(novel); - }); - - return { totalPages, novels }; -}; - -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}book/${novelUrl}`; - - const result = await fetch(url); - const body = await result.text(); - - let $ = cheerio.load(body); - - let novel = { - sourceId, - sourceName, - url, - novelUrl, + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, }; - novel.novelName = $("h1.book-name").text(); + novels.push(novel); + }); - novel.novelCover = $("div.book-img > img").attr("src"); + return {totalPages, novels}; +}; - novel.author = $("dl.author > dd").text(); +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}book/${novelUrl}`; - novel.genre = $(".book-generes").text().trim(); + const result = await fetch(url); + const body = await result.text(); - novel.summary = $(".book-synopsis").text().replace("Synopsis", "").trim(); + let $ = cheerio.load(body); - const chapterListUrl = `${baseUrl}book/${novelUrl}/chapter-list`; + let novel = { + sourceId, + sourceName, + url, + novelUrl, + }; - const chaptersHtml = await fetch(chapterListUrl); - const chapterHtmlToString = await chaptersHtml.text(); + novel.novelName = $('h1.book-name').text(); - $ = cheerio.load(chapterHtmlToString); + novel.novelCover = $('div.book-img > img').attr('src'); - let novelChapters = []; + novel.author = $('dl.author > dd').text(); - $("ul.chapters > li").each(function () { - const chapterName = $(this) - .find(".chapter-name") - .text() - .trim() - .replace(/\n/, " "); + novel.genre = $('.book-generes').text().trim(); - let releaseDate = new Date(); + novel.summary = $('.book-synopsis').text().replace('Synopsis', '').trim(); - let timeAgo = $(this).find(".chapter-time").text(); + const chapterListUrl = `${baseUrl}book/${novelUrl}/chapter-list`; - timeAgo = timeAgo.replace("one", 1); + const chaptersHtml = await fetch(chapterListUrl); + const chapterHtmlToString = await chaptersHtml.text(); - timeAgo = timeAgo.match(/\d+/)[0]; + $ = cheerio.load(chapterHtmlToString); - if (timeAgo.includes("months ago") || timeAgo.includes("month ago")) { - releaseDate.setMonth(releaseDate.getMonth() - timeAgo); - } + let novelChapters = []; - if (timeAgo.includes("days ago")) { - releaseDate.setDate(releaseDate.getDate() - timeAgo); - } + $('ul.chapters > li').each(function () { + const chapterName = $(this) + .find('.chapter-name') + .text() + .trim() + .replace(/\n/, ' '); - releaseDate = moment(releaseDate).format("MM/DD/YY"); + let releaseDate = new Date(); - const chapterUrl = $(this).find("a").attr("href").split("/").pop(); + let timeAgo = $(this).find('.chapter-time').text(); - const chapter = { - chapterName, - releaseDate, - chapterUrl, - }; + timeAgo = timeAgo.replace('one', 1); - novelChapters.push(chapter); - }); + timeAgo = timeAgo.match(/\d+/)[0]; - novel.chapters = novelChapters.reverse(); + if (timeAgo.includes('months ago') || timeAgo.includes('month ago')) { + releaseDate.setMonth(releaseDate.getMonth() - timeAgo); + } - return novel; + if (timeAgo.includes('days ago')) { + releaseDate.setDate(releaseDate.getDate() - timeAgo); + } + + releaseDate = moment(releaseDate).format('MM/DD/YY'); + + const chapterUrl = $(this).find('a').attr('href').split('/').pop(); + + const chapter = { + chapterName, + releaseDate, + chapterUrl, + }; + + novelChapters.push(chapter); + }); + + novel.chapters = novelChapters.reverse(); + + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}book/${novelUrl}/${chapterUrl}`; + const url = `${baseUrl}book/${novelUrl}/${chapterUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let chapterName = $(".chapter-name").text(); + let chapterName = $('.chapter-name').text(); - let chapterText = $(".chapter-content").html(); - const chapter = { - sourceId, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + let chapterText = $('.chapter-content').html(); + const chapter = { + sourceId, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = `${baseUrl}search?q=${searchTerm}`; +const searchNovels = async searchTerm => { + const url = `${baseUrl}search?q=${searchTerm}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".section-item").each(function () { - const novelName = $(this).find(".book-name").text().trim(); - const novelCover = $(this).find("img").attr("src"); + $('.section-item').each(function () { + const novelName = $(this).find('.book-name').text().trim(); + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this).find("a").attr("href").replace("/book/", ""); + let novelUrl = $(this).find('a').attr('href').replace('/book/', ''); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const WuxiaCityScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default WuxiaCityScraper; diff --git a/src/sources/en/wuxiaworld.js b/src/sources/en/wuxiaworld.js index 749268d6..d9cca545 100644 --- a/src/sources/en/wuxiaworld.js +++ b/src/sources/en/wuxiaworld.js @@ -1,171 +1,171 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -const baseUrl = "https://www.wuxiaworld.com/"; +const baseUrl = 'https://www.wuxiaworld.com/'; -const popularNovels = async (page) => { - let totalPages = 1; - const url = `${baseUrl}api/novels`; +const popularNovels = async page => { + let totalPages = 1; + const url = `${baseUrl}api/novels`; - const result = await fetch(url); - const data = await result.json(); + const result = await fetch(url); + const data = await result.json(); - let novels = []; + let novels = []; - data.items.map((novel) => { - let novelName = novel.name; - let novelCover = novel.coverUrl; - let novelUrl = novel.slug; + data.items.map(novel => { + let novelName = novel.name; + let novelCover = novel.coverUrl; + let novelUrl = novel.slug; - novels.push({ - sourceId: 7, - novelUrl, - novelName, - novelCover, - }); + novels.push({ + sourceId: 7, + novelUrl, + novelName, + novelCover, }); + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}novel/${novelUrl}/`; +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}novel/${novelUrl}/`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = {}; + let novel = {}; - novel.sourceId = 7; + novel.sourceId = 7; - novel.sourceName = "WuxiaWorld"; + novel.sourceName = 'WuxiaWorld'; - novel.url = url; + novel.url = url; - novel.novelUrl = novelUrl; + novel.novelUrl = novelUrl; - novel.novelName = $("h2").text(); + novel.novelName = $('h2').text(); - novel.novelCover = $("img.img-thumbnail").attr("src"); + novel.novelCover = $('img.img-thumbnail').attr('src'); - novel.summary = $("h3") - .filter(function () { - return $(this).text().trim() === "Synopsis"; - }) - .next() - .text() - .trim(); + novel.summary = $('h3') + .filter(function () { + return $(this).text().trim() === 'Synopsis'; + }) + .next() + .text() + .trim(); - novel.author = $("div > dt") - .filter(function () { - return $(this).text().trim() === "Author:"; - }) - .next() - .text(); + novel.author = $('div > dt') + .filter(function () { + return $(this).text().trim() === 'Author:'; + }) + .next() + .text(); - let genres = []; + let genres = []; - $(".genres") - .find("div") - .each(function (res) { - genres.push($(this).find("a").text()); - }); - - novel.genre = genres.join(","); - - novel.artist = null; - - novel.status = null; - - novel.status = $("div.fr-view.pt-10").text().includes("Complete") - ? "Completed" - : "Ongoing"; - - let novelChapters = []; - - $(".chapter-item").each(function (result) { - let chapterName = $(this).text(); - chapterName = chapterName.replace(/[\t\n]/g, ""); - - const releaseDate = null; - - let chapterUrl = $(this).find("a").attr("href"); - chapterUrl = chapterUrl.replace(`/novel/${novelUrl}/`, ""); - - const chapter = { - chapterName, - releaseDate, - chapterUrl, - }; - - novelChapters.push(chapter); + $('.genres') + .find('div') + .each(function (res) { + genres.push($(this).find('a').text()); }); - novel.chapters = novelChapters; + novel.genre = genres.join(','); - return novel; + novel.artist = null; + + novel.status = null; + + novel.status = $('div.fr-view.pt-10').text().includes('Complete') + ? 'Completed' + : 'Ongoing'; + + let novelChapters = []; + + $('.chapter-item').each(function (result) { + let chapterName = $(this).text(); + chapterName = chapterName.replace(/[\t\n]/g, ''); + + const releaseDate = null; + + let chapterUrl = $(this).find('a').attr('href'); + chapterUrl = chapterUrl.replace(`/novel/${novelUrl}/`, ''); + + const chapter = { + chapterName, + releaseDate, + chapterUrl, + }; + + novelChapters.push(chapter); + }); + + novel.chapters = novelChapters; + + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - let url = `${baseUrl}novel/${novelUrl}/${chapterUrl}`; + let url = `${baseUrl}novel/${novelUrl}/${chapterUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - $(".chapter-nav").remove(); + $('.chapter-nav').remove(); - let chapterName = $("#sidebar-toggler-container").next().text(); - chapterName = chapterName.replace(/[\t\n]/g, ""); + let chapterName = $('#sidebar-toggler-container').next().text(); + chapterName = chapterName.replace(/[\t\n]/g, ''); - $("#chapter-content > script").remove(); + $('#chapter-content > script').remove(); - let chapterText = $("#chapter-content").html(); + let chapterText = $('#chapter-content').html(); - const chapter = { - sourceId: 7, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId: 7, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const searchUrl = `https://www.wuxiaworld.com/api/novels/search?query=`; +const searchNovels = async searchTerm => { + const searchUrl = `https://www.wuxiaworld.com/api/novels/search?query=`; - const url = `${searchUrl}${searchTerm}`; + const url = `${searchUrl}${searchTerm}`; - const result = await fetch(url); - const data = await result.json(); + const result = await fetch(url); + const data = await result.json(); - let novels = []; + let novels = []; - data.items.map((novel) => { - let novelName = novel.name; - let novelCover = novel.coverUrl; - let novelUrl = novel.slug; + data.items.map(novel => { + let novelName = novel.name; + let novelCover = novel.coverUrl; + let novelUrl = novel.slug; - novels.push({ - sourceId: 7, - novelUrl, - novelName, - novelCover, - }); + novels.push({ + sourceId: 7, + novelUrl, + novelName, + novelCover, }); + }); - return novels; + return novels; }; const WuxiaWorldScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default WuxiaWorldScraper; diff --git a/src/sources/en/wuxiaworldcloud.js b/src/sources/en/wuxiaworldcloud.js index 4deeeb55..429da792 100644 --- a/src/sources/en/wuxiaworldcloud.js +++ b/src/sources/en/wuxiaworldcloud.js @@ -1,186 +1,185 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -const baseUrl = "http://wuxiaworld.cloud/"; +const baseUrl = 'http://wuxiaworld.cloud/'; -const popularNovels = async (page) => { - let totalPages = 41; - const url = `${baseUrl}/popular-novel?page=${page}`; +const popularNovels = async page => { + let totalPages = 41; + const url = `${baseUrl}/popular-novel?page=${page}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $("div.col-novel-main > div.list-novel > .row").each(function (result) { - let novelUrl = $(this) - .find("h3.novel-title > a") - .attr("href") - .replace(baseUrl + "novel/", ""); - novelUrl = `${novelUrl}/`; + $('div.col-novel-main > div.list-novel > .row').each(function (result) { + let novelUrl = $(this) + .find('h3.novel-title > a') + .attr('href') + .replace(baseUrl + 'novel/', ''); + novelUrl = `${novelUrl}/`; - const novelName = $(this).find("h3.novel-title > a").text(); - const novelCover = $(this).find("img").attr("src"); + const novelName = $(this).find('h3.novel-title > a').text(); + const novelCover = $(this).find('img').attr('src'); - const novel = { - sourceId: 20, - novelUrl, - novelName, - novelCover, - }; - - novels.push(novel); - }); - - return { totalPages, novels }; -}; - -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}novel/${novelUrl}`; - - const result = await fetch(url); - const body = await result.text(); - - $ = cheerio.load(body); - - let novel = {}; - - novel.sourceId = 20; - - novel.sourceName = "WuxiaWorld.cloud"; - - novel.url = url; - - novel.novelUrl = novelUrl; - - novel.novelName = $("div.book > img").attr("alt"); - - novel.novelCover = $("div.book > img").attr("src"); - - novel.summary = $("div.desc-text").text().trim(); - - novel.author = $("div.info > div > h3") - .filter(function () { - return $(this).text().trim() === "Author:"; - }) - .siblings() - .text(); - - novel.genre = $("div.info > div") - .filter(function () { - return $(this).find("h3").text().trim() === "Genre:"; - }) - .text() - .replace("Genre:", "") - .replace(/\s/g, ""); - - novel.artist = null; - - novel.status = $("div.info > div") - .filter(function () { - return $(this).find("h3").text().trim() === "Status:"; - }) - .text() - .replace("Status:", "") - .replace(/\s/g, ""); - - const novelId = $("#rating").attr("data-novel-id"); - - const getChapters = async (novelId) => { - const chapterListUrl = - baseUrl + "ajax/chapter-option?novelId=" + novelId; - - const data = await fetch(chapterListUrl); - const chapters = await data.text(); - - $ = cheerio.load(chapters); - - let novelChapters = []; - - $("select > option").each(function (result) { - let chapterName = $(this).text(); - let releaseDate = null; - let chapterUrl = $(this).attr("value"); - chapterUrl = chapterUrl.replace(baseUrl, ""); - - novelChapters.push({ - chapterName, - releaseDate, - chapterUrl, - }); - }); - return novelChapters; + const novel = { + sourceId: 20, + novelUrl, + novelName, + novelCover, }; - novel.chapters = await getChapters(novelId); + novels.push(novel); + }); - return novel; + return {totalPages, novels}; +}; + +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}novel/${novelUrl}`; + + const result = await fetch(url); + const body = await result.text(); + + $ = cheerio.load(body); + + let novel = {}; + + novel.sourceId = 20; + + novel.sourceName = 'WuxiaWorld.cloud'; + + novel.url = url; + + novel.novelUrl = novelUrl; + + novel.novelName = $('div.book > img').attr('alt'); + + novel.novelCover = $('div.book > img').attr('src'); + + novel.summary = $('div.desc-text').text().trim(); + + novel.author = $('div.info > div > h3') + .filter(function () { + return $(this).text().trim() === 'Author:'; + }) + .siblings() + .text(); + + novel.genre = $('div.info > div') + .filter(function () { + return $(this).find('h3').text().trim() === 'Genre:'; + }) + .text() + .replace('Genre:', '') + .replace(/\s/g, ''); + + novel.artist = null; + + novel.status = $('div.info > div') + .filter(function () { + return $(this).find('h3').text().trim() === 'Status:'; + }) + .text() + .replace('Status:', '') + .replace(/\s/g, ''); + + const novelId = $('#rating').attr('data-novel-id'); + + const getChapters = async novelId => { + const chapterListUrl = baseUrl + 'ajax/chapter-option?novelId=' + novelId; + + const data = await fetch(chapterListUrl); + const chapters = await data.text(); + + $ = cheerio.load(chapters); + + let novelChapters = []; + + $('select > option').each(function (result) { + let chapterName = $(this).text(); + let releaseDate = null; + let chapterUrl = $(this).attr('value'); + chapterUrl = chapterUrl.replace(baseUrl, ''); + + novelChapters.push({ + chapterName, + releaseDate, + chapterUrl, + }); + }); + return novelChapters; + }; + + novel.chapters = await getChapters(novelId); + + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - chapterUrl = encodeURI(chapterUrl); + chapterUrl = encodeURI(chapterUrl); - const url = `${baseUrl}${chapterUrl}`; + const url = `${baseUrl}${chapterUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - const chapterName = $(".chr-title").attr("title"); - let chapterText = $("#chr-content").html(); - const chapter = { - sourceId: 20, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapterName = $('.chr-title').attr('title'); + let chapterText = $('#chr-content').html(); + const chapter = { + sourceId: 20, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const searchUrl = `http://wuxiaworld.cloud/search?keyword=`; +const searchNovels = async searchTerm => { + const searchUrl = `http://wuxiaworld.cloud/search?keyword=`; - const url = `${searchUrl}${searchTerm}`; + const url = `${searchUrl}${searchTerm}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $("div.col-novel-main > div.list-novel > .row").each(function (result) { - let novelUrl = $(this) - .find("h3.novel-title > a") - .attr("href") - .replace(baseUrl + "novel/", ""); - novelUrl = `${novelUrl}/`; + $('div.col-novel-main > div.list-novel > .row').each(function (result) { + let novelUrl = $(this) + .find('h3.novel-title > a') + .attr('href') + .replace(baseUrl + 'novel/', ''); + novelUrl = `${novelUrl}/`; - const novelName = $(this).find("h3.novel-title > a").text(); - const novelCover = $(this).find("img").attr("src"); + const novelName = $(this).find('h3.novel-title > a').text(); + const novelCover = $(this).find('img').attr('src'); - const novel = { - sourceId: 20, - novelUrl, - novelName, - novelCover, - }; + const novel = { + sourceId: 20, + novelUrl, + novelName, + novelCover, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const WuxiaWorldCloudScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default WuxiaWorldCloudScraper; diff --git a/src/sources/en/wuxiaworldco.js b/src/sources/en/wuxiaworldco.js index 1bfd7ebb..17207f7f 100644 --- a/src/sources/en/wuxiaworldco.js +++ b/src/sources/en/wuxiaworldco.js @@ -1,142 +1,142 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -const baseUrl = "https://www.wuxiaworld.co/"; +const baseUrl = 'https://www.wuxiaworld.co/'; -const popularNovels = async (page) => { - let totalPages = 1; - const result = await fetch(baseUrl); - const body = await result.text(); +const popularNovels = async page => { + let totalPages = 1; + const result = await fetch(baseUrl); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".section-item").each(function (result) { - const novelName = $(this).find(".book-name").text(); - const novelCover = $(this).find("img").attr("src"); + $('.section-item').each(function (result) { + const novelName = $(this).find('.book-name').text(); + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this).find("a").attr("href").slice(1); + let novelUrl = $(this).find('a').attr('href').slice(1); - const novel = { - sourceId: 16, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 16, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}${novelUrl}/`; +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}${novelUrl}/`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = {}; + let novel = {}; - novel.sourceId = 16; + novel.sourceId = 16; - novel.sourceName = "WuxiaWorldCo"; + novel.sourceName = 'WuxiaWorldCo'; - novel.url = url; + novel.url = url; - novel.novelUrl = novelUrl; + novel.novelUrl = novelUrl; - novel.novelName = $(".book-name").text(); + novel.novelName = $('.book-name').text(); - novel.novelCover = $("div.book-img > img").attr("src"); + novel.novelCover = $('div.book-img > img').attr('src'); - novel.genre = $("div.book-catalog > span.txt").text(); + novel.genre = $('div.book-catalog > span.txt').text(); - novel.status = $("div.book-state > span.txt").text(); + novel.status = $('div.book-state > span.txt').text(); - novel.author = $("div.author > span.name").text(); + novel.author = $('div.author > span.name').text(); - novelSummary = $("div.content > p.desc").html(); - novel.summary = novelSummary.trim(); + novelSummary = $('div.content > p.desc').html(); + novel.summary = novelSummary.trim(); - let novelChapters = []; + let novelChapters = []; - $(".chapter-item").each(function (result) { - const chapterName = $(this).find(".chapter-name").text(); - const releaseDate = null; - const chapterUrl = $(this).attr("href").split("/")[2]; + $('.chapter-item').each(function (result) { + const chapterName = $(this).find('.chapter-name').text(); + const releaseDate = null; + const chapterUrl = $(this).attr('href').split('/')[2]; - novelChapters.push({ - chapterName, - releaseDate, - chapterUrl, - }); + novelChapters.push({ + chapterName, + releaseDate, + chapterUrl, }); + }); - novel.chapters = novelChapters; + novel.chapters = novelChapters; - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}${novelUrl}/${chapterUrl}`; + const url = `${baseUrl}${novelUrl}/${chapterUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - const chapterName = $("h1.chapter-title").text(); - let chapterText = $("div.chapter-entity").html(); - const chapter = { - sourceId: 16, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapterName = $('h1.chapter-title').text(); + let chapterText = $('div.chapter-entity').html(); + const chapter = { + sourceId: 16, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = `${baseUrl}search/${searchTerm}/1`; +const searchNovels = async searchTerm => { + const url = `${baseUrl}search/${searchTerm}/1`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".list-item").each(function (result) { - $(this).find("font").remove(); + $('.list-item').each(function (result) { + $(this).find('font').remove(); - const novelName = $(this).find(".book-name").text(); - const novelCover = $(this).find("img").attr("src"); + const novelName = $(this).find('.book-name').text(); + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this).find("a").attr("href").slice(1); + let novelUrl = $(this).find('a').attr('href').slice(1); - const novel = { - sourceId: 16, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 16, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const WuxiaWorldCoScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default WuxiaWorldCoScraper; diff --git a/src/sources/en/wuxiaworldsite.js b/src/sources/en/wuxiaworldsite.js index 3d10c097..ac72f53e 100644 --- a/src/sources/en/wuxiaworldsite.js +++ b/src/sources/en/wuxiaworldsite.js @@ -1,186 +1,186 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -const baseUrl = "https://wuxiaworldsite.co/"; -const searchUrl = "https://wuxiaworldsite.co/search/"; +const baseUrl = 'https://wuxiaworldsite.co/'; +const searchUrl = 'https://wuxiaworldsite.co/search/'; -const popularNovels = async (page) => { - let totalPages = 222; - const url = `https://wuxiaworldsite.co/ajax-story-power.ajax`; +const popularNovels = async page => { + let totalPages = 222; + const url = `https://wuxiaworldsite.co/ajax-story-power.ajax`; - const formData = new FormData(); - formData.append("page", page); - formData.append("keyword", ""); - formData.append("count", 18); - formData.append("genres_include", ""); - formData.append("limit", 18); - formData.append("order_type", "DESC"); - formData.append("order_by", "views"); + const formData = new FormData(); + formData.append('page', page); + formData.append('keyword', ''); + formData.append('count', 18); + formData.append('genres_include', ''); + formData.append('limit', 18); + formData.append('order_type', 'DESC'); + formData.append('order_by', 'views'); - const result = await fetch(url, { method: "POST", body: formData }); - const body = await result.text(); + const result = await fetch(url, {method: 'POST', body: formData}); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".a_item").each((i, el) => { - const novelName = $(el).find("a").attr("title"); - const novelCover = baseUrl + $(el).find("a > img").attr("src"); + $('.a_item').each((i, el) => { + const novelName = $(el).find('a').attr('title'); + const novelCover = baseUrl + $(el).find('a > img').attr('src'); - let novelUrl = $(el).find(".name_views > a").attr("href"); - novelId = novelUrl.split("/"); - novelUrl = novelId[2] + "/"; + let novelUrl = $(el).find('.name_views > a').attr('href'); + novelId = novelUrl.split('/'); + novelUrl = novelId[2] + '/'; - const novel = { - sourceId: 12, - novelName, - novelCover, - novelUrl, - }; - - novels.push(novel); - }); - - return { totalPages, novels }; -}; - -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}${novelUrl}`; - - const result = await fetch(url); - const body = await result.text(); - - $ = cheerio.load(body); - - $(".category_list").remove(); - - let novel = {}; - - novel.sourceId = 12; - - novel.sourceName = "WuxiaWorldSite"; - - novel.url = url; - - novel.novelUrl = novelUrl; - - novel.novelName = $(".content-reading > h1").text().trim(); - - novel.novelCover = baseUrl + $(".img-read> img").attr("src"); - - novel.summary = $(".story-introduction-content").text(); - - novel.author = $(".content-reading > p").text().trim(); - - novel.artist = null; - - novel.genre = ""; - - $(".a_tag_item").each((i, el) => { - novel.genre += $(el).text() + ","; - }); - - novel.genre = novel.genre.split(","); - novel.genre.pop(); - - novel.status = novel.genre.pop(); - - novel.genre = novel.genre.join(","); - - const novelID = $(".show-more-list").attr("data-id"); - - const getChapters = async (novelID) => { - const chapterListUrl = baseUrl + "/get-full-list.ajax?id=" + novelID; - - const data = await fetch(chapterListUrl); - const chapters = await data.text(); - - $ = cheerio.load(chapters); - - let novelChapters = []; - - $(".new-update-content").each((i, el) => { - let chapterName = $(el).text().split(/\t+/); - const releaseDate = chapterName.pop(); - chapterName = chapterName[0]; - let chapterUrl = $(el).attr("href"); - chapterUrl = chapterUrl.split("/").pop(); - - const novel = { - chapterName, - releaseDate, - chapterUrl, - }; - novelChapters.push(novel); - }); - return novelChapters; + const novel = { + sourceId: 12, + novelName, + novelCover, + novelUrl, }; - novel.chapters = await getChapters(novelID); + novels.push(novel); + }); - return novel; + return {totalPages, novels}; +}; + +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}${novelUrl}`; + + const result = await fetch(url); + const body = await result.text(); + + $ = cheerio.load(body); + + $('.category_list').remove(); + + let novel = {}; + + novel.sourceId = 12; + + novel.sourceName = 'WuxiaWorldSite'; + + novel.url = url; + + novel.novelUrl = novelUrl; + + novel.novelName = $('.content-reading > h1').text().trim(); + + novel.novelCover = baseUrl + $('.img-read> img').attr('src'); + + novel.summary = $('.story-introduction-content').text(); + + novel.author = $('.content-reading > p').text().trim(); + + novel.artist = null; + + novel.genre = ''; + + $('.a_tag_item').each((i, el) => { + novel.genre += $(el).text() + ','; + }); + + novel.genre = novel.genre.split(','); + novel.genre.pop(); + + novel.status = novel.genre.pop(); + + novel.genre = novel.genre.join(','); + + const novelID = $('.show-more-list').attr('data-id'); + + const getChapters = async novelID => { + const chapterListUrl = baseUrl + '/get-full-list.ajax?id=' + novelID; + + const data = await fetch(chapterListUrl); + const chapters = await data.text(); + + $ = cheerio.load(chapters); + + let novelChapters = []; + + $('.new-update-content').each((i, el) => { + let chapterName = $(el).text().split(/\t+/); + const releaseDate = chapterName.pop(); + chapterName = chapterName[0]; + let chapterUrl = $(el).attr('href'); + chapterUrl = chapterUrl.split('/').pop(); + + const novel = { + chapterName, + releaseDate, + chapterUrl, + }; + novelChapters.push(novel); + }); + return novelChapters; + }; + + novel.chapters = await getChapters(novelID); + + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}/${novelUrl}/${chapterUrl}`; + const url = `${baseUrl}/${novelUrl}/${chapterUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let chapterName = $("h1.text-center.heading_read").text(); - let chapterText = $(".content-story").html(); + let chapterName = $('h1.text-center.heading_read').text(); + let chapterText = $('.content-story').html(); - novelUrl += "/"; - chapterUrl += "/"; + novelUrl += '/'; + chapterUrl += '/'; - const chapter = { - sourceId: 12, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId: 12, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = `${searchUrl}${searchTerm}`; +const searchNovels = async searchTerm => { + const url = `${searchUrl}${searchTerm}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".a_item").each((i, el) => { - const novelName = $(el).find(".name_views > a").attr("title"); - const novelCover = baseUrl + $(el).find("a > img").attr("src"); - let novelUrl = $(el).find(".name_views > a").attr("href"); - novelId = novelUrl.split("/"); - novelUrl = novelId[2] + "/"; + $('.a_item').each((i, el) => { + const novelName = $(el).find('.name_views > a').attr('title'); + const novelCover = baseUrl + $(el).find('a > img').attr('src'); + let novelUrl = $(el).find('.name_views > a').attr('href'); + novelId = novelUrl.split('/'); + novelUrl = novelId[2] + '/'; - const novel = { - sourceId: 12, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 12, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const WuxiaWorldSiteScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default WuxiaWorldSiteScraper; diff --git a/src/sources/es/einherjarproject.js b/src/sources/es/einherjarproject.js index b363fdb2..e60cd2f2 100644 --- a/src/sources/es/einherjarproject.js +++ b/src/sources/es/einherjarproject.js @@ -1,194 +1,176 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -const baseUrl = "https://einherjarproject.net/"; +const baseUrl = 'https://einherjarproject.net/'; -const popularNovels = async (page) => { - let totalPages = 1; - let url = baseUrl + "proyectos-activos/"; +const popularNovels = async page => { + let totalPages = 1; + let url = baseUrl + 'proyectos-activos/'; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".wp-block-media-text").each(function (result) { - const novelName = $(this).find("a").text(); - const novelCover = $(this).find("img").attr("src"); + $('.wp-block-media-text').each(function (result) { + const novelName = $(this).find('a').text(); + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this) - .find(".wp-block-media-text__content") - .find("a") - .attr("href"); - novelUrl = novelUrl.replace(baseUrl, ""); + let novelUrl = $(this) + .find('.wp-block-media-text__content') + .find('a') + .attr('href'); + novelUrl = novelUrl.replace(baseUrl, ''); - const novel = { - sourceId: 25, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 25, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = baseUrl + novelUrl; +const parseNovelAndChapters = async novelUrl => { + const url = baseUrl + novelUrl; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = {}; + let novel = {}; - novel.sourceId = 25; + novel.sourceId = 25; - novel.sourceName = "Einherjar Project"; + novel.sourceName = 'Einherjar Project'; - novel.url = url; + novel.url = url; - novel.novelUrl = novelUrl; + novel.novelUrl = novelUrl; - novel.novelName = $("h1").text(); + novel.novelName = $('h1').text(); - novel.novelCover = $("img").attr("src"); + novel.novelCover = $('img').attr('src'); - $(".wp-block-columns") - .find("li") - .each(function (result) { - if ($(this).text().includes("Autor:")) { - novel.author = $(this) - .text() - .replace("Autor:", "") - .slice(0, -1); - } - if ($(this).text().includes("Ilustrador: ")) { - novel.artist = $(this) - .text() - .replace("Ilustrador: ", "") - .slice(0, -1); - } - if ($(this).text().includes("Estado: ")) { - novel.status = $(this) - .text() - .replace("Estado: ", "") - .slice(0, -1); - } - }); + $('.wp-block-columns') + .find('li') + .each(function (result) { + if ($(this).text().includes('Autor:')) { + novel.author = $(this).text().replace('Autor:', '').slice(0, -1); + } + if ($(this).text().includes('Ilustrador: ')) { + novel.artist = $(this).text().replace('Ilustrador: ', '').slice(0, -1); + } + if ($(this).text().includes('Estado: ')) { + novel.status = $(this).text().replace('Estado: ', '').slice(0, -1); + } + }); - novel.genre = $(".post-content > h6") - .text() - .replace(/GÉNEROS: /, "") - .replace(/,\s/g, ","); + novel.genre = $('.post-content > h6') + .text() + .replace(/GÉNEROS: /, '') + .replace(/,\s/g, ','); - let novelSummary = $(".post-content > .has-text-align-center").html(); + let novelSummary = $('.post-content > .has-text-align-center').html(); - novel.summary = novelSummary.trim(); + novel.summary = novelSummary.trim(); - let novelChapters = []; + let novelChapters = []; - $(".wp-block-media-text") - .find("p") - .each(function (result) { - if ($(this).find("a").text()) { - const chapterName = $(this).text(); - const releaseDate = null; - let chapterUrl = $(this) - .find("a") - .attr("href") - .replace(baseUrl, ""); - if (chapterUrl.includes(novelUrl + "/")) - chapterUrl = chapterUrl.replace(novelUrl + "/", ""); + $('.wp-block-media-text') + .find('p') + .each(function (result) { + if ($(this).find('a').text()) { + const chapterName = $(this).text(); + const releaseDate = null; + let chapterUrl = $(this).find('a').attr('href').replace(baseUrl, ''); + if (chapterUrl.includes(novelUrl + '/')) + chapterUrl = chapterUrl.replace(novelUrl + '/', ''); - const chapter = { chapterName, releaseDate, chapterUrl }; + const chapter = {chapterName, releaseDate, chapterUrl}; - novelChapters.push(chapter); - } - }); + novelChapters.push(chapter); + } + }); - novel.chapters = novelChapters; + novel.chapters = novelChapters; - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = baseUrl + chapterUrl; + const url = baseUrl + chapterUrl; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let chapterName = $("h1.post-title").text(); + let chapterName = $('h1.post-title').text(); - let chapterText = $(".post-content").html(); - novelUrl = novelUrl + "/"; - chapterUrl = chapterUrl + "/"; + let chapterText = $('.post-content').html(); + novelUrl = novelUrl + '/'; + chapterUrl = chapterUrl + '/'; - const chapter = { - sourceId: 25, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId: 25, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = baseUrl + "?s=" + searchTerm; +const searchNovels = async searchTerm => { + const url = baseUrl + '?s=' + searchTerm; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".post-container") - .find("div.type-page") - .each(function (result) { - const novelName = $(this) - .find(".post-header") - .text() - .replace(/\n/g, ""); - if ( - !novelName.includes("EPUBs") && - !novelName.includes("Proyectos Activos") && - !novelName.includes("Chapter") - ) { - const novelCover = $(this).find("img").attr("src"); + $('.post-container') + .find('div.type-page') + .each(function (result) { + const novelName = $(this).find('.post-header').text().replace(/\n/g, ''); + if ( + !novelName.includes('EPUBs') && + !novelName.includes('Proyectos Activos') && + !novelName.includes('Chapter') + ) { + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this) - .find("a") - .attr("href") - .replace(baseUrl, ""); + let novelUrl = $(this).find('a').attr('href').replace(baseUrl, ''); - const novel = { - sourceId: 25, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 25, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - } - }); + novels.push(novel); + } + }); - return novels; + return novels; }; const EinharjarProjectScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default EinharjarProjectScraper; diff --git a/src/sources/es/hasutl.js b/src/sources/es/hasutl.js index 5889d419..0df9fec2 100644 --- a/src/sources/es/hasutl.js +++ b/src/sources/es/hasutl.js @@ -1,170 +1,170 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -const baseUrl = "https://hasutl.wordpress.com/"; +const baseUrl = 'https://hasutl.wordpress.com/'; -const popularNovels = async (page) => { - let totalPages = 1; - let url = baseUrl + "light-novels-activas/"; +const popularNovels = async page => { + let totalPages = 1; + let url = baseUrl + 'light-novels-activas/'; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $("div.wp-block-columns").each(function (result) { - const novelName = $(this).find(".wp-block-button").text(); - const novelCover = $(this).find("img").attr("src"); + $('div.wp-block-columns').each(function (result) { + const novelName = $(this).find('.wp-block-button').text(); + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this).find(".wp-block-button > a").attr("href"); - novelUrl = novelUrl.replace(baseUrl, ""); + let novelUrl = $(this).find('.wp-block-button > a').attr('href'); + novelUrl = novelUrl.replace(baseUrl, ''); - const novel = { - sourceId: 29, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 29, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}/${novelUrl}/`; +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}/${novelUrl}/`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = {}; + let novel = {}; - novel.sourceId = 29; + novel.sourceId = 29; - novel.sourceName = "Hasu Translations"; + novel.sourceName = 'Hasu Translations'; - novel.url = url; + novel.url = url; - novel.novelUrl = novelUrl; + novel.novelUrl = novelUrl; - novel.novelName = $(".post-header").text(); + novel.novelName = $('.post-header').text(); - novel.novelCover = $(".featured-media > img").attr("src"); + novel.novelCover = $('.featured-media > img').attr('src'); - let details = $(".post-content").find("p").html(); + let details = $('.post-content').find('p').html(); - detailName = details.match(/(.|\n)*?<\/strong>/g); - details = details.match(/<\/strong>(.|\n)*?
/g); - details = details.map((detail) => detail.replace(/<\/strong>|
/g, "")); + detailName = details.match(/(.|\n)*?<\/strong>/g); + details = details.match(/<\/strong>(.|\n)*?
/g); + details = details.map(detail => detail.replace(/<\/strong>|
/g, '')); - novel.genre = ""; + novel.genre = ''; - detailName.map((detail, index) => { - if (detail.includes("Autor")) { - novel.author = details[index]; - } - if (detail.includes("Géneros")) { - novel.genre = details[index].replace(/\s/g, ""); - } - if (detail.includes("Artista")) { - novel.artist = details[index]; - } + detailName.map((detail, index) => { + if (detail.includes('Autor')) { + novel.author = details[index]; + } + if (detail.includes('Géneros')) { + novel.genre = details[index].replace(/\s/g, ''); + } + if (detail.includes('Artista')) { + novel.artist = details[index]; + } + }); + + let novelSummary = $('.post-content').find('p').html(); + novel.summary = novelSummary; + + let novelChapters = []; + + $('.wp-block-media-text__content') + .find('a') + .each(function (result) { + const chapterName = $(this).text().trim(); + + const releaseDate = null; + + let chapterUrl = $(this).attr('href').split('/'); + chapterUrl = chapterUrl[chapterUrl.length - 2]; + + const chapter = {chapterName, releaseDate, chapterUrl}; + + novelChapters.push(chapter); }); - let novelSummary = $(".post-content").find("p").html(); - novel.summary = novelSummary; + novel.chapters = novelChapters; - let novelChapters = []; - - $(".wp-block-media-text__content") - .find("a") - .each(function (result) { - const chapterName = $(this).text().trim(); - - const releaseDate = null; - - let chapterUrl = $(this).attr("href").split("/"); - chapterUrl = chapterUrl[chapterUrl.length - 2]; - - const chapter = { chapterName, releaseDate, chapterUrl }; - - novelChapters.push(chapter); - }); - - novel.chapters = novelChapters; - - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}/${novelUrl}/${chapterUrl}`; + const url = `${baseUrl}/${novelUrl}/${chapterUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let chapterName = $(".post-title").text(); + let chapterName = $('.post-title').text(); - let chapterText = $(".post-content").html(); - novelUrl = novelUrl + "/"; - chapterUrl = chapterUrl; + let chapterText = $('.post-content').html(); + novelUrl = novelUrl + '/'; + chapterUrl = chapterUrl; - const chapter = { - sourceId: 29, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId: 29, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = `${baseUrl}?s=${searchTerm}&post_type=wp-manga`; +const searchNovels = async searchTerm => { + const url = `${baseUrl}?s=${searchTerm}&post_type=wp-manga`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".post-container ").each(function (result) { - const novelName = $(this).find(".post-header").text(); - if ( - !novelName.includes("Cap") && - !novelName.includes("Vol") && - !novelName.includes("Light Novels") - ) { - const novelCover = $(this).find("img").attr("src"); + $('.post-container ').each(function (result) { + const novelName = $(this).find('.post-header').text(); + if ( + !novelName.includes('Cap') && + !novelName.includes('Vol') && + !novelName.includes('Light Novels') + ) { + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this).find("a").attr("href"); - novelUrl = novelUrl.replace(baseUrl, ""); + let novelUrl = $(this).find('a').attr('href'); + novelUrl = novelUrl.replace(baseUrl, ''); - const novel = { - sourceId: 29, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 29, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - } - }); + novels.push(novel); + } + }); - return novels; + return novels; }; const HasuTlScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default HasuTlScraper; diff --git a/src/sources/es/novelasligera.js b/src/sources/es/novelasligera.js index 5e9c0fb5..ca3657bd 100644 --- a/src/sources/es/novelasligera.js +++ b/src/sources/es/novelasligera.js @@ -1,188 +1,188 @@ -import cheerio from "react-native-cheerio"; -import { htmlToText } from "../helpers/htmlToText"; +import cheerio from 'react-native-cheerio'; +import {htmlToText} from '../helpers/htmlToText'; -const baseUrl = "https://novelasligera.com/"; +const baseUrl = 'https://novelasligera.com/'; -const popularNovels = async (page) => { - let totalPages = 1; - let url = baseUrl; +const popularNovels = async page => { + let totalPages = 1; + let url = baseUrl; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".elementor-column").each(function (result) { - const novelName = $(this) - .find(".widget-image-caption.wp-caption-text") - .text(); - if (novelName) { - const novelCover = $(this).find("img").attr("src"); + $('.elementor-column').each(function (result) { + const novelName = $(this) + .find('.widget-image-caption.wp-caption-text') + .text(); + if (novelName) { + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this).find("a").attr("href"); - novelUrl = novelUrl.replace(baseUrl, ""); - novelUrl = novelUrl.replace("novela/", ""); + let novelUrl = $(this).find('a').attr('href'); + novelUrl = novelUrl.replace(baseUrl, ''); + novelUrl = novelUrl.replace('novela/', ''); - const novel = { - sourceId: 26, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 26, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - } - }); + novels.push(novel); + } + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = baseUrl + "novela/" + novelUrl; +const parseNovelAndChapters = async novelUrl => { + const url = baseUrl + 'novela/' + novelUrl; - console.log(url); + console.log(url); - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = {}; + let novel = {}; - novel.sourceId = 26; + novel.sourceId = 26; - novel.sourceName = "Novelas Ligera"; + novel.sourceName = 'Novelas Ligera'; - novel.url = url; + novel.url = url; - novel.novelUrl = novelUrl; + novel.novelUrl = novelUrl; - novel.novelName = $("h1").text(); + novel.novelName = $('h1').text(); - novel.novelCover = $(".elementor-widget-container").find("img").attr("src"); + novel.novelCover = $('.elementor-widget-container').find('img').attr('src'); - $(".elementor-row") - .find("p") - .each(function (result) { - if ($(this).text().includes("Autor:")) { - novel.author = $(this).text().replace("Autor:", "").trim(); - } - if ($(this).text().includes("Estado:")) { - novel.status = $(this).text().replace("Estado: ", "").trim(); - } + $('.elementor-row') + .find('p') + .each(function (result) { + if ($(this).text().includes('Autor:')) { + novel.author = $(this).text().replace('Autor:', '').trim(); + } + if ($(this).text().includes('Estado:')) { + novel.status = $(this).text().replace('Estado: ', '').trim(); + } - if ($(this).text().includes("Género:")) { - $(this).find("span").remove(); - novel.genre = $(this).text().replace(/,\s/g, ","); - } - }); + if ($(this).text().includes('Género:')) { + $(this).find('span').remove(); + novel.genre = $(this).text().replace(/,\s/g, ','); + } + }); - novel.artist = null; + novel.artist = null; - novel.novelSummary = $(".elementor-text-editor.elementor-clearfix").text(); + novel.novelSummary = $('.elementor-text-editor.elementor-clearfix').text(); - let novelChapters = []; + let novelChapters = []; - $(".elementor-accordion-item").remove(); + $('.elementor-accordion-item').remove(); - $(".elementor-tab-content") - .find("li") - .each(function (result) { - const chapterName = $(this).text(); - const releaseDate = null; - const chapterUrl = $(this) - .find("a") - .attr("href") - .replace(baseUrl + "novela/", ""); + $('.elementor-tab-content') + .find('li') + .each(function (result) { + const chapterName = $(this).text(); + const releaseDate = null; + const chapterUrl = $(this) + .find('a') + .attr('href') + .replace(baseUrl + 'novela/', ''); - const chapter = { chapterName, releaseDate, chapterUrl }; + const chapter = {chapterName, releaseDate, chapterUrl}; - novelChapters.push(chapter); - }); + novelChapters.push(chapter); + }); - novel.chapters = novelChapters; + novel.chapters = novelChapters; - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = baseUrl + "novela/" + chapterUrl; - console.log(url); + const url = baseUrl + 'novela/' + chapterUrl; + console.log(url); - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let chapterName = $("h1.entry-title").text(); + let chapterName = $('h1.entry-title').text(); - $(".osny-nightmode.osny-nightmode--left").remove(); - $(".code-block.code-block-1").remove(); - $(".adsb30").remove(); - $(".saboxplugin-wrap").remove(); - $(".wp-post-navigation").remove(); + $('.osny-nightmode.osny-nightmode--left').remove(); + $('.code-block.code-block-1').remove(); + $('.adsb30').remove(); + $('.saboxplugin-wrap').remove(); + $('.wp-post-navigation').remove(); - let chapterText = $(".entry-content").html(); - chapterText = htmlToText(chapterText, { preserveNewlines: true }); + let chapterText = $('.entry-content').html(); + chapterText = htmlToText(chapterText, {preserveNewlines: true}); - const chapter = { - sourceId: 26, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId: 26, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = baseUrl + "?s=" + searchTerm + "&post_type=wp-manga"; - console.log(url); +const searchNovels = async searchTerm => { + const url = baseUrl + '?s=' + searchTerm + '&post_type=wp-manga'; + console.log(url); - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".inside-article").each(function (result) { - const novelCover = $(this).find("img").attr("src"); - let novelUrl = $(this).find("a").attr("href").split("/")[4]; + $('.inside-article').each(function (result) { + const novelCover = $(this).find('img').attr('src'); + let novelUrl = $(this).find('a').attr('href').split('/')[4]; - let novelName; + let novelName; - if (novelUrl) { - novelName = novelUrl.replace(/-/g, " ").replace(/^./, function (x) { - return x.toUpperCase(); - }); - } + if (novelUrl) { + novelName = novelUrl.replace(/-/g, ' ').replace(/^./, function (x) { + return x.toUpperCase(); + }); + } - novelUrl += "/"; + novelUrl += '/'; - const novel = { - sourceId: 26, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 26, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - novels = [{ ...novels[1] }]; + novels = [{...novels[1]}]; - return novels; + return novels; }; const NovelasLigeraScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default NovelasLigeraScraper; diff --git a/src/sources/es/novelawuxia.js b/src/sources/es/novelawuxia.js index 9c12e96e..50ce8594 100644 --- a/src/sources/es/novelawuxia.js +++ b/src/sources/es/novelawuxia.js @@ -1,225 +1,216 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -const baseUrl = "http://www.novelawuxia.com/"; +const baseUrl = 'http://www.novelawuxia.com/'; function getNovelName(y) { - return y.replace(/-/g, " ").replace(/(?:^|\s)\S/g, (a) => a.toUpperCase()); + return y.replace(/-/g, ' ').replace(/(?:^|\s)\S/g, a => a.toUpperCase()); } -const popularNovels = async (page) => { - let totalPages = 1; - let url = baseUrl + "p/todas-las-novelas.html"; +const popularNovels = async page => { + let totalPages = 1; + let url = baseUrl + 'p/todas-las-novelas.html'; - let headers = new Headers({ - "User-Agent": - "'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", + let headers = new Headers({ + 'User-Agent': + "'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", + }); + + const result = await fetch(url, { + method: 'GET', + headers: headers, + }); + const body = await result.text(); + + $ = cheerio.load(body); + + let novels = []; + + $('.post-body.entry-content') + .find('a') + .each(function (result) { + let novelName = $(this) + .attr('href') + .split('/') + .pop() + .replace('.html', ''); + novelName = getNovelName(novelName); + const novelCover = $(this).find('img').attr('src'); + + let novelUrl = $(this).attr('href'); + novelUrl = novelUrl.replace(`${baseUrl}p/`, '') + '/'; + + const novel = { + sourceId: 31, + novelName, + novelCover, + novelUrl, + }; + + novels.push(novel); }); - const result = await fetch(url, { - method: "GET", - headers: headers, - }); - const body = await result.text(); - - $ = cheerio.load(body); - - let novels = []; - - $(".post-body.entry-content") - .find("a") - .each(function (result) { - let novelName = $(this) - .attr("href") - .split("/") - .pop() - .replace(".html", ""); - novelName = getNovelName(novelName); - const novelCover = $(this).find("img").attr("src"); - - let novelUrl = $(this).attr("href"); - novelUrl = novelUrl.replace(`${baseUrl}p/`, "") + "/"; - - const novel = { - sourceId: 31, - novelName, - novelCover, - novelUrl, - }; - - novels.push(novel); - }); - - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}p/${novelUrl.replace("/", "")}`; +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}p/${novelUrl.replace('/', '')}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = {}; + let novel = {}; - novel.sourceId = 31; + novel.sourceId = 31; - novel.sourceName = "Novela Wuxia"; + novel.sourceName = 'Novela Wuxia'; - novel.url = url; + novel.url = url; - novel.novelUrl = novelUrl; + novel.novelUrl = novelUrl; - novel.novelName = $("h1.post-title").text().trim(); + novel.novelName = $('h1.post-title').text().trim(); - novel.novelCover = $("div.separator").find("a").attr("href"); + novel.novelCover = $('div.separator').find('a').attr('href'); - novel.artist = ""; - novel.status = ""; + novel.artist = ''; + novel.status = ''; - $("div > b").each(function (result) { - const detailName = $(this).text(); - let detail = $(this)[0].nextSibling; + $('div > b').each(function (result) { + const detailName = $(this).text(); + let detail = $(this)[0].nextSibling; - if (detailName && detail) { - detail = detail.nodeValue; + if (detailName && detail) { + detail = detail.nodeValue; - if (detailName.includes("Autor")) { - novel.author = detail.replace("Autor:", ""); - } + if (detailName.includes('Autor')) { + novel.author = detail.replace('Autor:', ''); + } - if (detailName.includes("Estatus")) { - novel.status = detail.replace("Estatus: ", ""); - } - if (detailName.includes("Géneros:")) { - novel.genre = detail - .replace("Géneros: ", "") - .replace(/,\s/g, ","); - } - } - }); + if (detailName.includes('Estatus')) { + novel.status = detail.replace('Estatus: ', ''); + } + if (detailName.includes('Géneros:')) { + novel.genre = detail.replace('Géneros: ', '').replace(/,\s/g, ','); + } + } + }); - let novelChapters = []; + let novelChapters = []; - $("div").each(function (result) { - const detailName = $(this).text(); - if (detailName.includes("Sinopsis")) { - novel.summary = - $(this).next().text() !== "" - ? $(this).next().text().replace("Sinopsis", "").trim() - : $(this) - .next() - .next() - .text() - .replace("Sinopsis", "") - .trim(); - } + $('div').each(function (result) { + const detailName = $(this).text(); + if (detailName.includes('Sinopsis')) { + novel.summary = + $(this).next().text() !== '' + ? $(this).next().text().replace('Sinopsis', '').trim() + : $(this).next().next().text().replace('Sinopsis', '').trim(); + } - if (detailName.includes("Lista de Capítulos")) { - $(this) - .find("a") - .each(function (res) { - const chapterName = $(this).text(); - let chapterUrl = $(this).attr("href"); - const releaseDate = null; + if (detailName.includes('Lista de Capítulos')) { + $(this) + .find('a') + .each(function (res) { + const chapterName = $(this).text(); + let chapterUrl = $(this).attr('href'); + const releaseDate = null; - if ( - chapterName && - chapterUrl && - chapterUrl.includes(novelUrl.replace(".html", "")) && - !novelChapters.some( - (chap) => chap.chapterName === chapterName - ) - ) { - chapterUrl = chapterUrl.replace(baseUrl, ""); + if ( + chapterName && + chapterUrl && + chapterUrl.includes(novelUrl.replace('.html', '')) && + !novelChapters.some(chap => chap.chapterName === chapterName) + ) { + chapterUrl = chapterUrl.replace(baseUrl, ''); - const chapter = { - chapterName, - releaseDate, - chapterUrl, - }; + const chapter = { + chapterName, + releaseDate, + chapterUrl, + }; - novelChapters.push(chapter); - } - }); - } - }); + novelChapters.push(chapter); + } + }); + } + }); - novel.chapters = novelChapters; + novel.chapters = novelChapters; - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}${year}/${month}/${chapterUrl}`; + const url = `${baseUrl}${year}/${month}/${chapterUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let chapterName = $("h1.post-title").text().trim(); + let chapterName = $('h1.post-title').text().trim(); - let chapterText = $(".post-body.entry-content").html(); - novelUrl = novelUrl + "/"; - chapterUrl = chapterUrl + "/"; + let chapterText = $('.post-body.entry-content').html(); + novelUrl = novelUrl + '/'; + chapterUrl = chapterUrl + '/'; - const chapter = { - sourceId: 31, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId: 31, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = `${baseUrl}search?q=${searchTerm}`; +const searchNovels = async searchTerm => { + const url = `${baseUrl}search?q=${searchTerm}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".date-outer").each(function (result) { - let novelName = $(this) - .find("a") - .attr("href") - .split("/") - .pop() - .replace(/-capitulo(.*?).html/, ""); + $('.date-outer').each(function (result) { + let novelName = $(this) + .find('a') + .attr('href') + .split('/') + .pop() + .replace(/-capitulo(.*?).html/, ''); - const novelUrl = novelName + ".html/"; + const novelUrl = novelName + '.html/'; - novelName = getNovelName(novelName); + novelName = getNovelName(novelName); - const exists = novels.some((novel) => novel.novelName === novelName); + const exists = novels.some(novel => novel.novelName === novelName); - if (!exists) { - const novelCover = null; - const novel = { - sourceId: 31, - novelName, - novelCover, - novelUrl, - }; + if (!exists) { + const novelCover = null; + const novel = { + sourceId: 31, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - } - }); + novels.push(novel); + } + }); - return novels; + return novels; }; const NovelaWuxiaScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default NovelaWuxiaScraper; diff --git a/src/sources/es/oasistranslations.js b/src/sources/es/oasistranslations.js index 432925ac..46030ea2 100644 --- a/src/sources/es/oasistranslations.js +++ b/src/sources/es/oasistranslations.js @@ -1,205 +1,205 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -const baseUrl = "https://oasistranslations.wordpress.com/"; +const baseUrl = 'https://oasistranslations.wordpress.com/'; -const popularNovels = async (page) => { - let url = baseUrl; +const popularNovels = async page => { + let url = baseUrl; - let totalPages = 1; + let totalPages = 1; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".menu-item-1819") - .find(".sub-menu > li") - .each(function (result) { - const novelName = $(this).text(); - if (!novelName.match(/Activas|Finalizadas|Dropeadas/)) { - const novelCover = $(this).find("img").attr("src"); + $('.menu-item-1819') + .find('.sub-menu > li') + .each(function (result) { + const novelName = $(this).text(); + if (!novelName.match(/Activas|Finalizadas|Dropeadas/)) { + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this).find("a").attr("href"); - novelUrl = novelUrl.split("/"); - novelUrl = novelUrl[novelUrl.length - 2] + "/"; + let novelUrl = $(this).find('a').attr('href'); + novelUrl = novelUrl.split('/'); + novelUrl = novelUrl[novelUrl.length - 2] + '/'; - const novel = { - sourceId: 30, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 30, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - } - }); - - return { totalPages, novels }; -}; - -const parseNovelAndChapters = async (novelUrl) => { - const url = baseUrl + novelUrl + "/"; - - const result = await fetch(url); - const body = await result.text(); - - $ = cheerio.load(body); - - let novel = {}; - - novel.sourceId = 30; - - novel.sourceName = "Oasis Translations"; - - novel.url = url; - - novel.novelUrl = novelUrl; - - novel.novelName = $("h1.entry-title") - .text() - .replace(/[\t\n]/g, "") - .trim(); - - novel.novelCover = $('img[loading="lazy"]').attr("src"); - - $(".entry-content > p").each(function (res) { - if ($(this).text().includes("Autor")) { - let details = $(this).html(); - details = details.match(/<\/strong>(.|\n)*?
/g); - details = details.map((detail) => - detail.replace(/|<\/strong>|
|:\s/g, "") - ); - - novel.genre = ""; - - novel.author = details[2]; - novel.genre = details[4].replace(/\s| /g, ""); - novel.artist = details[3]; - } + novels.push(novel); + } }); - // let novelSummary = $(this).next().html(); - novel.summary = ""; + return {totalPages, novels}; +}; - let novelChapters = []; +const parseNovelAndChapters = async novelUrl => { + const url = baseUrl + novelUrl + '/'; - // if ($(".entry-content").find("li").length) { - $(".entry-content") - .find("a") - .each(function (result) { - let chapterUrl = $(this).attr("href"); + const result = await fetch(url); + const body = await result.text(); - if (chapterUrl && chapterUrl.includes(baseUrl)) { - const chapterName = $(this).text(); - const releaseDate = null; + $ = cheerio.load(body); - chapterUrl = chapterUrl.split("/"); - chapterUrl = chapterUrl[chapterUrl.length - 2] + "/"; + let novel = {}; - const chapter = { chapterName, releaseDate, chapterUrl }; + novel.sourceId = 30; - novelChapters.push(chapter); - } - }); - // } else { - // $(".entry-content") - // .find("p") - // .each(function (result) { - // let chapterUrl = $(this).find("a").attr("href"); + novel.sourceName = 'Oasis Translations'; - // if (chapterUrl && chapterUrl.includes(baseUrl)) { - // const chapterName = $(this).text(); - // const releaseDate = null; + novel.url = url; - // chapterUrl = chapterUrl.split("/"); - // chapterUrl = chapterUrl[chapterUrl.length - 2] + "/"; + novel.novelUrl = novelUrl; - // const chapter = { chapterName, releaseDate, chapterUrl }; + novel.novelName = $('h1.entry-title') + .text() + .replace(/[\t\n]/g, '') + .trim(); - // novelChapters.push(chapter); - // } - // }); - // } + novel.novelCover = $('img[loading="lazy"]').attr('src'); - novel.chapters = novelChapters; + $('.entry-content > p').each(function (res) { + if ($(this).text().includes('Autor')) { + let details = $(this).html(); + details = details.match(/<\/strong>(.|\n)*?
/g); + details = details.map(detail => + detail.replace(/|<\/strong>|
|:\s/g, ''), + ); - return novel; + novel.genre = ''; + + novel.author = details[2]; + novel.genre = details[4].replace(/\s| /g, ''); + novel.artist = details[3]; + } + }); + + // let novelSummary = $(this).next().html(); + novel.summary = ''; + + let novelChapters = []; + + // if ($(".entry-content").find("li").length) { + $('.entry-content') + .find('a') + .each(function (result) { + let chapterUrl = $(this).attr('href'); + + if (chapterUrl && chapterUrl.includes(baseUrl)) { + const chapterName = $(this).text(); + const releaseDate = null; + + chapterUrl = chapterUrl.split('/'); + chapterUrl = chapterUrl[chapterUrl.length - 2] + '/'; + + const chapter = {chapterName, releaseDate, chapterUrl}; + + novelChapters.push(chapter); + } + }); + // } else { + // $(".entry-content") + // .find("p") + // .each(function (result) { + // let chapterUrl = $(this).find("a").attr("href"); + + // if (chapterUrl && chapterUrl.includes(baseUrl)) { + // const chapterName = $(this).text(); + // const releaseDate = null; + + // chapterUrl = chapterUrl.split("/"); + // chapterUrl = chapterUrl[chapterUrl.length - 2] + "/"; + + // const chapter = { chapterName, releaseDate, chapterUrl }; + + // novelChapters.push(chapter); + // } + // }); + // } + + novel.chapters = novelChapters; + + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}/${novelUrl}/${chapterUrl}`; + const url = `${baseUrl}/${novelUrl}/${chapterUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let chapterName = $("h1.entry-title").text(); + let chapterName = $('h1.entry-title').text(); - $("div#jp-post-flair").remove(); + $('div#jp-post-flair').remove(); - let chapterText = $(".entry-content").html(); - novelUrl = novelUrl + "/"; - chapterUrl = chapterUrl + "/"; + let chapterText = $('.entry-content').html(); + novelUrl = novelUrl + '/'; + chapterUrl = chapterUrl + '/'; - const chapter = { - sourceId: 30, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId: 30, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - searchTerm = searchTerm.toLowerCase(); +const searchNovels = async searchTerm => { + searchTerm = searchTerm.toLowerCase(); - let url = baseUrl; + let url = baseUrl; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; - $(".menu-item-1819") - .find(".sub-menu > li") - .each(function (result) { - const novelName = $(this).text(); - if (!novelName.match(/Activas|Finalizadas|Dropeadas/)) { - const novelCover = $(this).find("img").attr("src"); + let novels = []; + $('.menu-item-1819') + .find('.sub-menu > li') + .each(function (result) { + const novelName = $(this).text(); + if (!novelName.match(/Activas|Finalizadas|Dropeadas/)) { + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this).find("a").attr("href"); - novelUrl = novelUrl.split("/"); - novelUrl = novelUrl[novelUrl.length - 2] + "/"; + let novelUrl = $(this).find('a').attr('href'); + novelUrl = novelUrl.split('/'); + novelUrl = novelUrl[novelUrl.length - 2] + '/'; - const novel = { - sourceId: 30, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 30, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - } - }); + novels.push(novel); + } + }); - novels = novels.filter((novel) => - novel.novelName.toLowerCase().includes(searchTerm) - ); + novels = novels.filter(novel => + novel.novelName.toLowerCase().includes(searchTerm), + ); - return novels; + return novels; }; const OasisTranslationsScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default OasisTranslationsScraper; diff --git a/src/sources/es/skynovels.js b/src/sources/es/skynovels.js index 232f70fc..5b7905ca 100644 --- a/src/sources/es/skynovels.js +++ b/src/sources/es/skynovels.js @@ -1,148 +1,141 @@ -const baseUrl = "https://www.skynovels.net/"; +const baseUrl = 'https://www.skynovels.net/'; -const popularNovels = async (page) => { - let totalPages = 1; - const url = "https://api.skynovels.net/api/novels?&q"; +const popularNovels = async page => { + let totalPages = 1; + const url = 'https://api.skynovels.net/api/novels?&q'; - const result = await fetch(url); - const body = await result.json(); + const result = await fetch(url); + const body = await result.json(); - const novels = []; + const novels = []; - body.novels.map((res) => { - const novelName = res.nvl_title; - const novelCover = - "https://api.skynovels.net/api/get-image/" + - res.image + - "/novels/false"; - const novelUrl = res.id + "/" + res.nvl_name + "/"; + body.novels.map(res => { + const novelName = res.nvl_title; + const novelCover = + 'https://api.skynovels.net/api/get-image/' + res.image + '/novels/false'; + const novelUrl = res.id + '/' + res.nvl_name + '/'; - const novel = { sourceId: 24, novelName, novelUrl, novelCover }; + const novel = {sourceId: 24, novelName, novelUrl, novelCover}; - novels.push(novel); - }); + novels.push(novel); + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novUrl) => { - let novelId = novUrl.split("/")[0]; - let novelUrl = novUrl[1]; - const url = - "https://api.skynovels.net/api/novel/" + novelId + "/reading?&q"; +const parseNovelAndChapters = async novUrl => { + let novelId = novUrl.split('/')[0]; + let novelUrl = novUrl[1]; + const url = 'https://api.skynovels.net/api/novel/' + novelId + '/reading?&q'; - const result = await fetch(url); - const body = await result.json(); + const result = await fetch(url); + const body = await result.json(); - const item = body.novel[0]; + const item = body.novel[0]; - let novel = {}; + let novel = {}; - novel.sourceId = 24; + novel.sourceId = 24; - novel.sourceName = "SkyNovels"; + novel.sourceName = 'SkyNovels'; - novel.url = baseUrl + "novelas/" + novelId + "/" + novelUrl; + novel.url = baseUrl + 'novelas/' + novelId + '/' + novelUrl; - novel.novelUrl = novUrl; + novel.novelUrl = novUrl; - novel.novelName = item.nvl_title; + novel.novelName = item.nvl_title; - novel.novelCover = - "https://api.skynovels.net/api/get-image/" + - item.image + - "/novels/false"; + novel.novelCover = + 'https://api.skynovels.net/api/get-image/' + item.image + '/novels/false'; - let genres = []; - item.genres.map((genre) => genres.push(genre.genre_name)); - novel.genre = genres.join(","); - novel.author = item.nvl_writer; - novel.summary = item.nvl_content; - novel.status = item.nvl_status; + let genres = []; + item.genres.map(genre => genres.push(genre.genre_name)); + novel.genre = genres.join(','); + novel.author = item.nvl_writer; + novel.summary = item.nvl_content; + novel.status = item.nvl_status; - let novelChapters = []; + let novelChapters = []; - item.volumes.map((volume) => { - volume.chapters.map((chapter) => { - const chapterName = chapter.chp_index_title; - const releaseDate = new Date(chapter.createdAt).toDateString(); - const chapterUrl = chapter.id + "/" + chapter.chp_name; + item.volumes.map(volume => { + volume.chapters.map(chapter => { + const chapterName = chapter.chp_index_title; + const releaseDate = new Date(chapter.createdAt).toDateString(); + const chapterUrl = chapter.id + '/' + chapter.chp_name; - const chap = { chapterName, releaseDate, chapterUrl }; + const chap = {chapterName, releaseDate, chapterUrl}; - novelChapters.push(chap); - }); + novelChapters.push(chap); }); + }); - novel.chapters = novelChapters; + novel.chapters = novelChapters; - return novel; + return novel; }; const parseChapter = async (novUrl, chapUrl) => { - let novelId = novUrl.split("/")[0]; - let novelUrl = novUrl[1]; - let chapterId = chapUrl.split("/")[0]; - let chapterUrl = chapUrl[1]; - const url = `https://api.skynovels.net/api/novel-chapter/${chapterId}`; + let novelId = novUrl.split('/')[0]; + let novelUrl = novUrl[1]; + let chapterId = chapUrl.split('/')[0]; + let chapterUrl = chapUrl[1]; + const url = `https://api.skynovels.net/api/novel-chapter/${chapterId}`; - const result = await fetch(url); - const body = await result.json(); + const result = await fetch(url); + const body = await result.json(); - const item = body.chapter[0]; + const item = body.chapter[0]; - let chapterName = item.chp_index_title; + let chapterName = item.chp_index_title; - let chapterText = item.chp_content; + let chapterText = item.chp_content; - novelUrl = novelId + "/" + novelUrl + "/"; - chapterUrl = item.id + "/" + item.chp_name; + novelUrl = novelId + '/' + novelUrl + '/'; + chapterUrl = item.id + '/' + item.chp_name; - const chapter = { - sourceId: 24, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId: 24, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - searchTerm = searchTerm.toLowerCase(); - const url = "https://api.skynovels.net/api/novels?&q"; +const searchNovels = async searchTerm => { + searchTerm = searchTerm.toLowerCase(); + const url = 'https://api.skynovels.net/api/novels?&q'; - const result = await fetch(url); - const body = await result.json(); + const result = await fetch(url); + const body = await result.json(); - let results = body.novels.filter((novel) => - novel.nvl_title.toLowerCase().includes(searchTerm) - ); + let results = body.novels.filter(novel => + novel.nvl_title.toLowerCase().includes(searchTerm), + ); - const novels = []; + const novels = []; - results.map((res) => { - const novelName = res.nvl_title; - const novelCover = - "https://api.skynovels.net/api/get-image/" + - res.image + - "/novels/false"; - const novelUrl = res.id + "/" + res.nvl_name + "/"; + results.map(res => { + const novelName = res.nvl_title; + const novelCover = + 'https://api.skynovels.net/api/get-image/' + res.image + '/novels/false'; + const novelUrl = res.id + '/' + res.nvl_name + '/'; - const novel = { sourceId: 24, novelName, novelUrl, novelCover }; + const novel = {sourceId: 24, novelName, novelUrl, novelCover}; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const SkyNovelsScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default SkyNovelsScraper; diff --git a/src/sources/es/tunovelaligera.js b/src/sources/es/tunovelaligera.js index 282bdddc..d0efb636 100644 --- a/src/sources/es/tunovelaligera.js +++ b/src/sources/es/tunovelaligera.js @@ -1,190 +1,188 @@ -import cheerio from "react-native-cheerio"; -import { defaultCoverUri, Status } from "../helpers/constants"; +import cheerio from 'react-native-cheerio'; +import {defaultCoverUri, Status} from '../helpers/constants'; const sourceId = 23; -const sourceName = "TuNovelaLigera"; +const sourceName = 'TuNovelaLigera'; -const baseUrl = "https://tunovelaligera.com/"; +const baseUrl = 'https://tunovelaligera.com/'; -const popularNovels = async (page) => { - let totalPages = 62; - let url = baseUrl + "novelas/page/" + page + "/?m_orderby=rating"; +const popularNovels = async page => { + let totalPages = 62; + let url = baseUrl + 'novelas/page/' + page + '/?m_orderby=rating'; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".page-item-detail").each(function () { - const novelName = $(this).find(".h5 > a").text(); - const novelCover = $(this).find("img").attr("src"); + $('.page-item-detail').each(function () { + const novelName = $(this).find('.h5 > a').text(); + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this).find(".h5 > a").attr("href").split("/")[4]; - novelUrl += "/"; + let novelUrl = $(this).find('.h5 > a').attr('href').split('/')[4]; + novelUrl += '/'; - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}novelas/${novelUrl}`; +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}novelas/${novelUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = { sourceId, sourceName, url }; + let novel = {sourceId, sourceName, url}; - novel.novelUrl = novelUrl; + novel.novelUrl = novelUrl; - $(".manga-title-badges").remove(); + $('.manga-title-badges').remove(); - novel.novelName = $(".post-title > h1").text().trim(); + novel.novelName = $('.post-title > h1').text().trim(); - novelCover = $(".summary_image > a > img"); + novelCover = $('.summary_image > a > img'); - novel.novelCover = - novelCover.attr("data-src") || - novelCover.attr("src") || - defaultCoverUri; + novel.novelCover = + novelCover.attr('data-src') || novelCover.attr('src') || defaultCoverUri; - $(".post-content_item").each(function () { - const detailName = $(this).find(".summary-heading > h5").text().trim(); - const detail = $(this).find(".summary-content").text().trim(); + $('.post-content_item').each(function () { + const detailName = $(this).find('.summary-heading > h5').text().trim(); + const detail = $(this).find('.summary-content').text().trim(); - switch (detailName) { - case "Generos": - novel.genre = detail.replace(/, /g, ","); - break; - case "Autores": - novel.author = detail; - break; - case "Estado": - novel.status = - detail.includes("OnGoing") || detail.includes("Updating") - ? Status.ONGOING - : Status.COMPLETED; - break; - } - }); + switch (detailName) { + case 'Generos': + novel.genre = detail.replace(/, /g, ','); + break; + case 'Autores': + novel.author = detail; + break; + case 'Estado': + novel.status = + detail.includes('OnGoing') || detail.includes('Updating') + ? Status.ONGOING + : Status.COMPLETED; + break; + } + }); - novel.summary = $("div.summary__content > p").text().trim(); + novel.summary = $('div.summary__content > p').text().trim(); - let novelChapters = []; + let novelChapters = []; - const novelId = - $(".rating-post-id").attr("value") || - $("#manga-chapters-holder").attr("data-id"); + const novelId = + $('.rating-post-id').attr('value') || + $('#manga-chapters-holder').attr('data-id'); - let formData = new FormData(); - formData.append("action", "manga_get_chapters"); - formData.append("manga", novelId); + let formData = new FormData(); + formData.append('action', 'manga_get_chapters'); + formData.append('manga', novelId); - const data = await fetch( - "https://tunovelaligera.com/wp-admin/admin-ajax.php", - { - method: "POST", - body: formData, - } - ); - const text = await data.text(); + const data = await fetch( + 'https://tunovelaligera.com/wp-admin/admin-ajax.php', + { + method: 'POST', + body: formData, + }, + ); + const text = await data.text(); - $ = cheerio.load(text); + $ = cheerio.load(text); - $(".wp-manga-chapter").each(function (result) { - chapterName = $(this) - .find("a") - .text() - .replace(/[\t\n]/g, "") - .trim(); + $('.wp-manga-chapter').each(function (result) { + chapterName = $(this) + .find('a') + .text() + .replace(/[\t\n]/g, '') + .trim(); - releaseDate = $(this).find("span").text().trim(); + releaseDate = $(this).find('span').text().trim(); - chapterUrl = $(this).find("a").attr("href").split("/"); + chapterUrl = $(this).find('a').attr('href').split('/'); - chapterUrl[6] - ? (chapterUrl = chapterUrl[5] + "/" + chapterUrl[6]) - : (chapterUrl = chapterUrl[5]); + chapterUrl[6] + ? (chapterUrl = chapterUrl[5] + '/' + chapterUrl[6]) + : (chapterUrl = chapterUrl[5]); - novelChapters.push({ chapterName, releaseDate, chapterUrl }); - }); + novelChapters.push({chapterName, releaseDate, chapterUrl}); + }); - novel.chapters = novelChapters.reverse(); + novel.chapters = novelChapters.reverse(); - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}novelas/${novelUrl}/${chapterUrl}`; + const url = `${baseUrl}novelas/${novelUrl}/${chapterUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let chapterName = $("h1#chapter-heading").text(); + let chapterName = $('h1#chapter-heading').text(); - let chapterText = $(".text-left").html(); - novelUrl = novelUrl + "/"; + let chapterText = $('.text-left').html(); + novelUrl = novelUrl + '/'; - const chapter = { - sourceId, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = `${baseUrl}?s=${searchTerm}&post_type=wp-manga`; +const searchNovels = async searchTerm => { + const url = `${baseUrl}?s=${searchTerm}&post_type=wp-manga`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".c-tabs-item__content").each(function (result) { - const novelName = $(this).find(".h4 > a").text(); - const novelCover = $(this).find("img").attr("src"); + $('.c-tabs-item__content').each(function (result) { + const novelName = $(this).find('.h4 > a').text(); + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this).find(".h4 > a").attr("href"); - novelUrl = novelUrl.replace(`${baseUrl}novelas/`, ""); + let novelUrl = $(this).find('.h4 > a').attr('href'); + novelUrl = novelUrl.replace(`${baseUrl}novelas/`, ''); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const TuNovelaLigeraScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default TuNovelaLigeraScraper; diff --git a/src/sources/es/yuukitls.js b/src/sources/es/yuukitls.js index 1db606bc..4f1e4eca 100644 --- a/src/sources/es/yuukitls.js +++ b/src/sources/es/yuukitls.js @@ -1,204 +1,201 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -const baseUrl = "https://yuukitls.com/"; +const baseUrl = 'https://yuukitls.com/'; -const popularNovels = async (page) => { - let totalPages = 1; - let url = baseUrl; +const popularNovels = async page => { + let totalPages = 1; + let url = baseUrl; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".menu-item-2869") - .find(".menu-item.menu-item-type-post_type.menu-item-object-post") - .each(function (result) { - const novelName = $(this).text(); - const novelCover = $(this).find("img").attr("src"); + $('.menu-item-2869') + .find('.menu-item.menu-item-type-post_type.menu-item-object-post') + .each(function (result) { + const novelName = $(this).text(); + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this).find("a").attr("href"); - novelUrl = novelUrl.split("/"); - novelUrl = novelUrl[novelUrl.length - 2] + "/"; + let novelUrl = $(this).find('a').attr('href'); + novelUrl = novelUrl.split('/'); + novelUrl = novelUrl[novelUrl.length - 2] + '/'; - const novel = { - sourceId: 28, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 28, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { totalPages, novels }; + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = `${baseUrl}${novelUrl}/`; +const parseNovelAndChapters = async novelUrl => { + const url = `${baseUrl}${novelUrl}/`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = {}; + let novel = {}; - novel.sourceId = 28; + novel.sourceId = 28; - novel.sourceName = "YuukiTls"; + novel.sourceName = 'YuukiTls'; - novel.url = url; + novel.url = url; - novel.novelUrl = novelUrl; + novel.novelUrl = novelUrl; - novel.novelName = $("h1.entry-title") - .text() - .replace(/[\t\n]/g, "") - .trim(); + novel.novelName = $('h1.entry-title') + .text() + .replace(/[\t\n]/g, '') + .trim(); - novel.novelCover = $('img[loading="lazy"]').attr("src"); + novel.novelCover = $('img[loading="lazy"]').attr('src'); - $(".entry-content") - .find("div") - .each(function (result) { - if ($(this).text().includes("Escritor:")) { - novel.author = $(this).text().replace("Escritor: ", "").trim(); - } - if ($(this).text().includes("Ilustrador:")) { - novel.artist = $(this) - .text() - .replace("Ilustrador: ", "") - .trim(); - } + $('.entry-content') + .find('div') + .each(function (result) { + if ($(this).text().includes('Escritor:')) { + novel.author = $(this).text().replace('Escritor: ', '').trim(); + } + if ($(this).text().includes('Ilustrador:')) { + novel.artist = $(this).text().replace('Ilustrador: ', '').trim(); + } - if ($(this).text().includes("Género:")) { - novel.genre = $(this) - .text() - .replace(/Género: |\s/g, ""); - } + if ($(this).text().includes('Género:')) { + novel.genre = $(this) + .text() + .replace(/Género: |\s/g, ''); + } - if ($(this).text().includes("Sinopsis:")) { - novel.summary = $(this).next().text(); - } - }); + if ($(this).text().includes('Sinopsis:')) { + novel.summary = $(this).next().text(); + } + }); - let novelChapters = []; + let novelChapters = []; - if ($(".entry-content").find("li").length) { - $(".entry-content") - .find("li") - .each(function (result) { - let chapterUrl = $(this).find("a").attr("href"); + if ($('.entry-content').find('li').length) { + $('.entry-content') + .find('li') + .each(function (result) { + let chapterUrl = $(this).find('a').attr('href'); - if (chapterUrl && chapterUrl.includes(baseUrl)) { - const chapterName = $(this).text(); - const releaseDate = null; + if (chapterUrl && chapterUrl.includes(baseUrl)) { + const chapterName = $(this).text(); + const releaseDate = null; - chapterUrl = chapterUrl.split("/"); - chapterUrl = chapterUrl[chapterUrl.length - 2] + "/"; + chapterUrl = chapterUrl.split('/'); + chapterUrl = chapterUrl[chapterUrl.length - 2] + '/'; - const chapter = { chapterName, releaseDate, chapterUrl }; + const chapter = {chapterName, releaseDate, chapterUrl}; - novelChapters.push(chapter); - } - }); - } else { - $(".entry-content") - .find("p") - .each(function (result) { - let chapterUrl = $(this).find("a").attr("href"); + novelChapters.push(chapter); + } + }); + } else { + $('.entry-content') + .find('p') + .each(function (result) { + let chapterUrl = $(this).find('a').attr('href'); - if (chapterUrl && chapterUrl.includes(baseUrl)) { - const chapterName = $(this).text(); - const releaseDate = null; + if (chapterUrl && chapterUrl.includes(baseUrl)) { + const chapterName = $(this).text(); + const releaseDate = null; - chapterUrl = chapterUrl.split("/"); - chapterUrl = chapterUrl[chapterUrl.length - 2] + "/"; + chapterUrl = chapterUrl.split('/'); + chapterUrl = chapterUrl[chapterUrl.length - 2] + '/'; - const chapter = { chapterName, releaseDate, chapterUrl }; + const chapter = {chapterName, releaseDate, chapterUrl}; - novelChapters.push(chapter); - } - }); - } + novelChapters.push(chapter); + } + }); + } - novel.chapters = novelChapters; + novel.chapters = novelChapters; - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = `${baseUrl}/${novelUrl}/${chapterUrl}`; + const url = `${baseUrl}/${novelUrl}/${chapterUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let chapterName = $("h3").text(); + let chapterName = $('h3').text(); - let chapterText = $(".entry-content").html(); - novelUrl = novelUrl + "/"; - chapterUrl = chapterUrl + "/"; + let chapterText = $('.entry-content').html(); + novelUrl = novelUrl + '/'; + chapterUrl = chapterUrl + '/'; - const chapter = { - sourceId: 28, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId: 28, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - searchTerm = searchTerm.toLowerCase(); +const searchNovels = async searchTerm => { + searchTerm = searchTerm.toLowerCase(); - let url = baseUrl; + let url = baseUrl; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $(".menu-item-2869") - .find(".menu-item.menu-item-type-post_type.menu-item-object-post") - .each(function (result) { - const novelName = $(this).text(); - const novelCover = $(this).find("img").attr("src"); + $('.menu-item-2869') + .find('.menu-item.menu-item-type-post_type.menu-item-object-post') + .each(function (result) { + const novelName = $(this).text(); + const novelCover = $(this).find('img').attr('src'); - let novelUrl = $(this).find("a").attr("href"); - novelUrl = novelUrl.split("/"); - novelUrl = novelUrl[novelUrl.length - 2] + "/"; + let novelUrl = $(this).find('a').attr('href'); + novelUrl = novelUrl.split('/'); + novelUrl = novelUrl[novelUrl.length - 2] + '/'; - const novel = { - sourceId: 28, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId: 28, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - novels = novels.filter((novel) => - novel.novelName.toLowerCase().includes(searchTerm) - ); + novels = novels.filter(novel => + novel.novelName.toLowerCase().includes(searchTerm), + ); - return novels; + return novels; }; const YuukiTlsScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default YuukiTlsScraper; diff --git a/src/sources/fr/noveldeglace.js b/src/sources/fr/noveldeglace.js index a733fb22..105fa0b9 100644 --- a/src/sources/fr/noveldeglace.js +++ b/src/sources/fr/noveldeglace.js @@ -1,151 +1,148 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; const sourceId = 77; -const sourceName = "NovelDeGlace"; +const sourceName = 'NovelDeGlace'; -const baseUrl = "https://noveldeglace.com/"; +const baseUrl = 'https://noveldeglace.com/'; -const popularNovels = async (page) => { - const totalPages = 1; +const popularNovels = async page => { + const totalPages = 1; - let url = baseUrl + "roman"; + let url = baseUrl + 'roman'; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $("article").each(function () { - const novelName = $(this).find("h2").text().trim(); - const novelCover = $(this).find("img").attr("src"); - const novelUrl = $(this).find("h2 > a").attr("href").split("/")[4]; + $('article').each(function () { + const novelName = $(this).find('h2').text().trim(); + const novelCover = $(this).find('img').attr('src'); + const novelUrl = $(this).find('h2 > a').attr('href').split('/')[4]; - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { novels, totalPages }; + return {novels, totalPages}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = baseUrl + "roman/" + novelUrl; +const parseNovelAndChapters = async novelUrl => { + const url = baseUrl + 'roman/' + novelUrl; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = { sourceId, sourceName, url, novelUrl }; + let novel = {sourceId, sourceName, url, novelUrl}; - novel.novelName = $( - "div.entry-content > div > strong" - )[0].nextSibling.nodeValue.trim(); + novel.novelName = $( + 'div.entry-content > div > strong', + )[0].nextSibling.nodeValue.trim(); - novel.novelCover = $(".su-row > div > div > img").attr("src"); + novel.novelCover = $('.su-row > div > div > img').attr('src'); - novel.summary = $("div[data-title=Synopsis]").text(); + novel.summary = $('div[data-title=Synopsis]').text(); - author = $( - "div.romans > div.project-large > div.su-row > div.su-column.su-column-size-3-4 > div > div:nth-child(3) > strong" - )[0]; + author = $( + 'div.romans > div.project-large > div.su-row > div.su-column.su-column-size-3-4 > div > div:nth-child(3) > strong', + )[0]; - novel.author = author ? author.nextSibling.nodeValue.trim() : null; + novel.author = author ? author.nextSibling.nodeValue.trim() : null; - novel.genre = $(".genre") - .text() - .replace("Genre : ", "") - .replace(/, /g, ","); + novel.genre = $('.genre').text().replace('Genre : ', '').replace(/, /g, ','); - let novelChapters = []; + let novelChapters = []; - $(".chpt").each(function () { - const chapterName = $(this).find("a").text().trim(); - const releaseDate = null; - const chapterUrl = $(this).find("a").attr("href"); + $('.chpt').each(function () { + const chapterName = $(this).find('a').text().trim(); + const releaseDate = null; + const chapterUrl = $(this).find('a').attr('href'); - const novel = { - sourceId, - chapterName, - releaseDate, - chapterUrl, - }; + const novel = { + sourceId, + chapterName, + releaseDate, + chapterUrl, + }; - novelChapters.push(novel); - }); + novelChapters.push(novel); + }); - novel.chapters = novelChapters; + novel.chapters = novelChapters; - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = chapterUrl; + const url = chapterUrl; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let chapterName = $("h2.western").text(); - let chapterText = $(".chapter-content").html(); + let chapterName = $('h2.western').text(); + let chapterText = $('.chapter-content').html(); - const chapter = { - sourceId, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - let url = baseUrl + "roman"; +const searchNovels = async searchTerm => { + let url = baseUrl + 'roman'; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $("article").each(function () { - const novelName = $(this).find("h2").text().trim(); - const novelCover = $(this).find("img").attr("src"); - const novelUrl = $(this).find("h2 > a").attr("href").split("/")[4]; + $('article').each(function () { + const novelName = $(this).find('h2').text().trim(); + const novelCover = $(this).find('img').attr('src'); + const novelUrl = $(this).find('h2 > a').attr('href').split('/')[4]; - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - novels = novels.filter((novel) => - novel.novelName.toLowerCase().includes(searchTerm.toLowerCase()) - ); + novels = novels.filter(novel => + novel.novelName.toLowerCase().includes(searchTerm.toLowerCase()), + ); - return novels; + return novels; }; const NovelDeGlaceScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default NovelDeGlaceScraper; diff --git a/src/sources/helpers/cleanHtml.js b/src/sources/helpers/cleanHtml.js index 84735e07..5429d30c 100644 --- a/src/sources/helpers/cleanHtml.js +++ b/src/sources/helpers/cleanHtml.js @@ -1,36 +1,36 @@ -export const cleanHtml = (html) => { - let text = html; +export const cleanHtml = html => { + let text = html; - if (!text) { - return "Chapter is empty.\n\nReport if it's available in webview."; - } + if (!text) { + return "Chapter is empty.\n\nReport if it's available in webview."; + } - text = text - /** - * Remove inline styles - */ - .replace( - /style="((?:font-family|line-height|font-size|text-align).*?)"/gi, - "" - ) - .replace(/class=".*?"/gi, "") - .replace(/id=".*?"/gi, "") + text = text + /** + * Remove inline styles + */ + .replace( + /style="((?:font-family|line-height|font-size|text-align).*?)"/gi, + '', + ) + .replace(/class=".*?"/gi, '') + .replace(/id=".*?"/gi, '') - /** - * Remove comments - */ - .replace(//gim, "") - .replace(/<\s*script[^>]*>[\s\S]*?<\/script>/gim, "") - .replace(/<\s*noscript[^>]*>[\s\S]*?<\/noscript>/gim, "") - .replace(/<\s*form[^>]*>[\s\S]*?<\/form>/gim, "") - /** - * Remove relative links - */ - .replace( - /<\s*a[^>]*href=['"](\/.*?)['"][^>]*>([\s\S]*?)<\/\s*a\s*>/gi, - "$2" - ) - .trim(); + /** + * Remove comments + */ + .replace(//gim, '') + .replace(/<\s*script[^>]*>[\s\S]*?<\/script>/gim, '') + .replace(/<\s*noscript[^>]*>[\s\S]*?<\/noscript>/gim, '') + .replace(/<\s*form[^>]*>[\s\S]*?<\/form>/gim, '') + /** + * Remove relative links + */ + .replace( + /<\s*a[^>]*href=['"](\/.*?)['"][^>]*>([\s\S]*?)<\/\s*a\s*>/gi, + '$2', + ) + .trim(); - return text; + return text; }; diff --git a/src/sources/helpers/constants.js b/src/sources/helpers/constants.js index 7397d401..fd8d112f 100644 --- a/src/sources/helpers/constants.js +++ b/src/sources/helpers/constants.js @@ -1,8 +1,8 @@ export const defaultCoverUri = - "https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true"; + 'https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true'; export const Status = { - ONGOING: "Ongoing", - COMPLETED: "Completed", - UNKNOWN: "Unknown", + ONGOING: 'Ongoing', + COMPLETED: 'Completed', + UNKNOWN: 'Unknown', }; diff --git a/src/sources/helpers/htmlToText.js b/src/sources/helpers/htmlToText.js index e02f7023..c189bbfd 100644 --- a/src/sources/helpers/htmlToText.js +++ b/src/sources/helpers/htmlToText.js @@ -1,266 +1,266 @@ const htmlToText = (html, options = {}) => { - const { removeLineBreaks = true } = options; + const {removeLineBreaks = true} = options; - if (!html) { - return "Chapter is empty.\n\nReport if it's available in webview."; - } + if (!html) { + return "Chapter is empty.\n\nReport if it's available in webview."; + } - html = html.trim(); + html = html.trim(); - text = removeLineBreaks && html.replace(/(?:\n|\r\n|\r)/gi, ""); + text = removeLineBreaks && html.replace(/(?:\n|\r\n|\r)/gi, ''); - text = html - /** - *
-> \n - */ + text = html + /** + *
-> \n + */ - .replace(/<\s*br[^>]*>/gi, "\n") + .replace(/<\s*br[^>]*>/gi, '\n') - /** - *
-> [hr]() - */ + /** + *
-> [hr]() + */ - .replace(/<\s*hr[^>]*>/gi, "") + .replace(/<\s*hr[^>]*>/gi, '') - /** - *
  • -> \n - */ - .replace(/<\s*\/li[^>]*>/gi, "\n") + /** + *
  • -> \n + */ + .replace(/<\s*\/li[^>]*>/gi, '\n') - /** - *

    -> \n\n - */ + /** + *

    -> \n\n + */ - .replace(/<\s*p[^>]*>/gi, "\n\n") + .replace(/<\s*p[^>]*>/gi, '\n\n') - /** - * Remove script and noscript tags - */ - .replace(/<\s*script[^>]*>[\s\S]*?<\/script>/gim, "") - .replace(/<\s*noscript[^>]*>[\s\S]*?<\/noscript>/gim, "") + /** + * Remove script and noscript tags + */ + .replace(/<\s*script[^>]*>[\s\S]*?<\/script>/gim, '') + .replace(/<\s*noscript[^>]*>[\s\S]*?<\/noscript>/gim, '') - /** - * Remove style tags - */ + /** + * Remove style tags + */ - .replace(/<\s*style[^>]*>[\s\S]*?<\/style>/gim, "") + .replace(/<\s*style[^>]*>[\s\S]*?<\/style>/gim, '') - /** - * Remove comments - */ + /** + * Remove comments + */ - .replace(//gim, "") + .replace(//gim, '') - /** - * Text -> [Text](link) - */ + /** + * Text -> [Text](link) + */ - .replace( - /<\s*a[^>]*href=['"](http.*?)['"][^>]*>([\s\S]*?)<\/\s*a\s*>/gi, - "$2" - ) - // .replace( - // /<\s*a[^>]*href=['"](http.*?)['"][^>]*>([\s\S]*?)<\/\s*a\s*>/gi, - // "[$2]($1)" - // ) - /** - * -> [img](src) - */ + .replace( + /<\s*a[^>]*href=['"](http.*?)['"][^>]*>([\s\S]*?)<\/\s*a\s*>/gi, + '$2', + ) + // .replace( + // /<\s*a[^>]*href=['"](http.*?)['"][^>]*>([\s\S]*?)<\/\s*a\s*>/gi, + // "[$2]($1)" + // ) + /** + * -> [img](src) + */ - .replace( - /<\s*img[^>]*[src|data-src]=['"](.*?)['"][^>]*>/gi, - "[Image]($1)\n" - ) + .replace( + /<\s*img[^>]*[src|data-src]=['"](.*?)['"][^>]*>/gi, + '[Image]($1)\n', + ) - /** - * Remove remaining tags - */ + /** + * Remove remaining tags + */ - .replace(/(<([^>]+)>)/gi, "") + .replace(/(<([^>]+)>)/gi, '') - /** - * Remove tabs. - */ + /** + * Remove tabs. + */ - .replace(/\t/g, "") + .replace(/\t/g, '') - /** - * Remove newlines at the beginning of the text. - */ + /** + * Remove newlines at the beginning of the text. + */ - .replace(/^\n+/m, "") + .replace(/^\n+/m, '') - /** - * Replace multiple spaces with a single space. - */ + /** + * Replace multiple spaces with a single space. + */ - .replace(/ {2,}/g, " ") + .replace(/ {2,}/g, ' ') - /** - * Make sure there are never more than two consecutive linebreaks. - */ + /** + * Make sure there are never more than two consecutive linebreaks. + */ - .replace(/\n{2,}/g, "\n\n") + .replace(/\n{2,}/g, '\n\n') - /** - * Decode HTML entities. - */ + /** + * Decode HTML entities. + */ - .replace(/&([^;]+);/g, decodeHtmlEntity) + .replace(/&([^;]+);/g, decodeHtmlEntity) - .trim(); + .trim(); - return text; + return text; }; const decodeHtmlEntity = (m, n) => { - let code; + let code; - if (n.substr(0, 1) == "#") { - if (n.substr(1, 1) == "x") { - code = parseInt(n.substr(2), 16); - } else { - code = parseInt(n.substr(1), 10); - } + if (n.substr(0, 1) == '#') { + if (n.substr(1, 1) == 'x') { + code = parseInt(n.substr(2), 16); } else { - code = ENTITIES_MAP[n]; + code = parseInt(n.substr(1), 10); } + } else { + code = ENTITIES_MAP[n]; + } - return code === undefined || code === NaN - ? "&" + n + ";" - : String.fromCharCode(code); + return code === undefined || code === NaN + ? '&' + n + ';' + : String.fromCharCode(code); }; let ENTITIES_MAP = { - nbsp: 160, - iexcl: 161, - cent: 162, - pound: 163, - curren: 164, - yen: 165, - brvbar: 166, - sect: 167, - uml: 168, - copy: 169, - ordf: 170, - laquo: 171, - not: 172, - shy: 173, - reg: 174, - macr: 175, - deg: 176, - plusmn: 177, - sup2: 178, - sup3: 179, - acute: 180, - micro: 181, - para: 182, - middot: 183, - cedil: 184, - sup1: 185, - ordm: 186, - raquo: 187, - frac14: 188, - frac12: 189, - frac34: 190, - iquest: 191, - Agrave: 192, - Aacute: 193, - Acirc: 194, - Atilde: 195, - Auml: 196, - Aring: 197, - AElig: 198, - Ccedil: 199, - Egrave: 200, - Eacute: 201, - Ecirc: 202, - Euml: 203, - Igrave: 204, - Iacute: 205, - Icirc: 206, - Iuml: 207, - ETH: 208, - Ntilde: 209, - Ograve: 210, - Oacute: 211, - Ocirc: 212, - Otilde: 213, - Ouml: 214, - times: 215, - Oslash: 216, - Ugrave: 217, - Uacute: 218, - Ucirc: 219, - Uuml: 220, - Yacute: 221, - THORN: 222, - szlig: 223, - agrave: 224, - aacute: 225, - acirc: 226, - atilde: 227, - auml: 228, - aring: 229, - aelig: 230, - ccedil: 231, - egrave: 232, - eacute: 233, - ecirc: 234, - euml: 235, - igrave: 236, - iacute: 237, - icirc: 238, - iuml: 239, - eth: 240, - ntilde: 241, - ograve: 242, - oacute: 243, - ocirc: 244, - otilde: 245, - ouml: 246, - divide: 247, - oslash: 248, - ugrave: 249, - uacute: 250, - ucirc: 251, - uuml: 252, - yacute: 253, - thorn: 254, - yuml: 255, - quot: 34, - amp: 38, - lt: 60, - gt: 62, - OElig: 338, - oelig: 339, - Scaron: 352, - scaron: 353, - Yuml: 376, - circ: 710, - tilde: 732, - ensp: 8194, - emsp: 8195, - thinsp: 8201, - zwnj: 8204, - zwj: 8205, - lrm: 8206, - rlm: 8207, - ndash: 8211, - mdash: 8212, - lsquo: 8216, - rsquo: 8217, - sbquo: 8218, - ldquo: 8220, - rdquo: 8221, - bdquo: 8222, - dagger: 8224, - Dagger: 8225, - permil: 8240, - lsaquo: 8249, - rsaquo: 8250, - euro: 8364, - apos: 39, + nbsp: 160, + iexcl: 161, + cent: 162, + pound: 163, + curren: 164, + yen: 165, + brvbar: 166, + sect: 167, + uml: 168, + copy: 169, + ordf: 170, + laquo: 171, + not: 172, + shy: 173, + reg: 174, + macr: 175, + deg: 176, + plusmn: 177, + sup2: 178, + sup3: 179, + acute: 180, + micro: 181, + para: 182, + middot: 183, + cedil: 184, + sup1: 185, + ordm: 186, + raquo: 187, + frac14: 188, + frac12: 189, + frac34: 190, + iquest: 191, + Agrave: 192, + Aacute: 193, + Acirc: 194, + Atilde: 195, + Auml: 196, + Aring: 197, + AElig: 198, + Ccedil: 199, + Egrave: 200, + Eacute: 201, + Ecirc: 202, + Euml: 203, + Igrave: 204, + Iacute: 205, + Icirc: 206, + Iuml: 207, + ETH: 208, + Ntilde: 209, + Ograve: 210, + Oacute: 211, + Ocirc: 212, + Otilde: 213, + Ouml: 214, + times: 215, + Oslash: 216, + Ugrave: 217, + Uacute: 218, + Ucirc: 219, + Uuml: 220, + Yacute: 221, + THORN: 222, + szlig: 223, + agrave: 224, + aacute: 225, + acirc: 226, + atilde: 227, + auml: 228, + aring: 229, + aelig: 230, + ccedil: 231, + egrave: 232, + eacute: 233, + ecirc: 234, + euml: 235, + igrave: 236, + iacute: 237, + icirc: 238, + iuml: 239, + eth: 240, + ntilde: 241, + ograve: 242, + oacute: 243, + ocirc: 244, + otilde: 245, + ouml: 246, + divide: 247, + oslash: 248, + ugrave: 249, + uacute: 250, + ucirc: 251, + uuml: 252, + yacute: 253, + thorn: 254, + yuml: 255, + quot: 34, + amp: 38, + lt: 60, + gt: 62, + OElig: 338, + oelig: 339, + Scaron: 352, + scaron: 353, + Yuml: 376, + circ: 710, + tilde: 732, + ensp: 8194, + emsp: 8195, + thinsp: 8201, + zwnj: 8204, + zwj: 8205, + lrm: 8206, + rlm: 8207, + ndash: 8211, + mdash: 8212, + lsquo: 8216, + rsquo: 8217, + sbquo: 8218, + ldquo: 8220, + rdquo: 8221, + bdquo: 8222, + dagger: 8224, + Dagger: 8225, + permil: 8240, + lsaquo: 8249, + rsaquo: 8250, + euro: 8364, + apos: 39, }; -export { htmlToText }; +export {htmlToText}; diff --git a/src/sources/helpers/parseDate.js b/src/sources/helpers/parseDate.js index b8bf19a4..778e5c28 100644 --- a/src/sources/helpers/parseDate.js +++ b/src/sources/helpers/parseDate.js @@ -1,28 +1,28 @@ -import moment from "moment"; +import moment from 'moment'; -export const parseMadaraDate = (date) => { - let releaseDate = date; +export const parseMadaraDate = date => { + let releaseDate = date; - if (date.includes("ago")) { - let timeAgo = date; - releaseDate = new Date(); + if (date.includes('ago')) { + let timeAgo = date; + releaseDate = new Date(); - timeAgo = timeAgo.match(/\d+/)[0]; + timeAgo = timeAgo.match(/\d+/)[0]; - if (timeAgo.includes("hours ago") || timeAgo.includes("hour ago")) { - releaseDate.setHours(releaseDate.getHours() - timeAgo); - } - - if (timeAgo.includes("days ago") || timeAgo.includes("day ago")) { - releaseDate.setDate(releaseDate.getDate() - timeAgo); - } - - if (timeAgo.includes("months ago") || timeAgo.includes("month ago")) { - releaseDate.setMonth(releaseDate.getMonth() - timeAgo); - } - - releaseDate = moment(releaseDate).format("MMMM DD, YYYY"); + if (timeAgo.includes('hours ago') || timeAgo.includes('hour ago')) { + releaseDate.setHours(releaseDate.getHours() - timeAgo); } - return releaseDate; + if (timeAgo.includes('days ago') || timeAgo.includes('day ago')) { + releaseDate.setDate(releaseDate.getDate() - timeAgo); + } + + if (timeAgo.includes('months ago') || timeAgo.includes('month ago')) { + releaseDate.setMonth(releaseDate.getMonth() - timeAgo); + } + + releaseDate = moment(releaseDate).format('MMMM DD, YYYY'); + } + + return releaseDate; }; diff --git a/src/sources/jp/syosetu.js b/src/sources/jp/syosetu.js index f2b5fc17..5603cfb7 100644 --- a/src/sources/jp/syosetu.js +++ b/src/sources/jp/syosetu.js @@ -1,261 +1,259 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; -import moment from "moment"; +import moment from 'moment'; -const baseUrl = "https://syosetu.com"; // base url for syosetu.com +const baseUrl = 'https://syosetu.com'; // base url for syosetu.com // get given page of search (if pagenum is 0 or >100 (max possible on site) see first page) const searchUrl = (pagenum, order) => { - return `https://yomou.syosetu.com/search.php?order=${order || "hyoka"}${ - !isNaN((pagenum = parseInt(pagenum))) // check if pagenum is a number - ? `&p=${pagenum <= 1 || pagenum > 100 ? "1" : pagenum}` // check if pagenum is between 1 and 100 - : "" // if isn't don't set ?p - }`; + return `https://yomou.syosetu.com/search.php?order=${order || 'hyoka'}${ + !isNaN((pagenum = parseInt(pagenum))) // check if pagenum is a number + ? `&p=${pagenum <= 1 || pagenum > 100 ? '1' : pagenum}` // check if pagenum is between 1 and 100 + : '' // if isn't don't set ?p + }`; }; // get the Syosetu ID of the chapter -const getLastPartOfUrl = (url) => - (ex = /.*(?=\/)(.{2,})$/.exec(url)) ? ex[1].replace(/\//g, "") : null; +const getLastPartOfUrl = url => + (ex = /.*(?=\/)(.{2,})$/.exec(url)) ? ex[1].replace(/\//g, '') : null; // get novelUrl from Syosetu ID -const getNovelUrl = (id) => `https://ncode.syosetu.com/${id}`; +const getNovelUrl = id => `https://ncode.syosetu.com/${id}`; // get chapterUrl from Syosetu ID and chapter ID const getChapterUrl = (id, chn) => - `https://ncode.syosetu.com/${id}${chn === "oneshot" ? "" : `/${chn}`}`; + `https://ncode.syosetu.com/${id}${chn === 'oneshot' ? '' : `/${chn}`}`; // Because syosetu does not have any covers, I did a replacement for them const novelCover = - "https://raw.githubusercontent.com/skillgg/lnreader-sources/main/src/jp/syosetu/not_found.png"; + 'https://raw.githubusercontent.com/skillgg/lnreader-sources/main/src/jp/syosetu/not_found.png'; // ID of this extension const sourceId = 36; // Name of this extension -const sourceName = "Syosetu"; +const sourceName = 'Syosetu'; // there are 20 mangas per page // this is number of pages loaded in the first "batch" of loads // TOOD: in-app dynamic loading on scroll const maxPageLoad = 3; -const popularNovels = async (page) => { - const totalPages = 100; - // array of all the novels - let novels = []; - // returns list of novels from given page - let getNovelsFromPage = async (pagenumber) => { - // load page - const result = await fetch(searchUrl(pagenumber || null)); - const body = await result.text(); - // Cheerio it! - const cheerioQuery = cheerio.load(body, { decodeEntities: false }); +const popularNovels = async page => { + const totalPages = 100; + // array of all the novels + let novels = []; + // returns list of novels from given page + let getNovelsFromPage = async pagenumber => { + // load page + const result = await fetch(searchUrl(pagenumber || null)); + const body = await result.text(); + // Cheerio it! + const cheerioQuery = cheerio.load(body, {decodeEntities: false}); - let pageNovels = []; - // find class=searchkekka_box - cheerioQuery(".searchkekka_box").each(function (i, e) { - // get div with link and name - const novelDIV = cheerioQuery(this).find(".novel_h"); - // get link element - const novelA = novelDIV.children()[0]; - // add new novel to array - pageNovels.push({ - novelName: novelDIV.text(), // get the name - novelUrl: getLastPartOfUrl(novelA.attribs.href), // get last part of the link - sourceId, - novelCover, // TODO: IDK what to do about covers... On Syo they don't have them - }); - }); - // return all novels from this page - return pageNovels; - }; + let pageNovels = []; + // find class=searchkekka_box + cheerioQuery('.searchkekka_box').each(function (i, e) { + // get div with link and name + const novelDIV = cheerioQuery(this).find('.novel_h'); + // get link element + const novelA = novelDIV.children()[0]; + // add new novel to array + pageNovels.push({ + novelName: novelDIV.text(), // get the name + novelUrl: getLastPartOfUrl(novelA.attribs.href), // get last part of the link + sourceId, + novelCover, // TODO: IDK what to do about covers... On Syo they don't have them + }); + }); + // return all novels from this page + return pageNovels; + }; - novels = await getNovelsFromPage(page); - /** Use - * novels.push(...(await getNovelsFromPage(pageNumber))) - * if you want to load more - */ + novels = await getNovelsFromPage(page); + /** Use + * novels.push(...(await getNovelsFromPage(pageNumber))) + * if you want to load more + */ - // respond with novels! - return { totalPages, novels }; + // respond with novels! + return {totalPages, novels}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = getNovelUrl(novelUrl); +const parseNovelAndChapters = async novelUrl => { + const url = getNovelUrl(novelUrl); - let chapters = []; + let chapters = []; - const result = await fetch(url); + const result = await fetch(url); + const body = await result.text(); + const cheerioQuery = cheerio.load(body, {decodeEntities: false}); + + // create novel object + let novel = { + sourceId, + sourceName, + url: url, + novelUrl, + novelName: cheerioQuery('.novel_title').text(), + author: cheerioQuery('.novel_writername').text().replace('作者:', ''), + novelCover, + }; + + // Get all the chapters + const cqGetChapters = cheerioQuery('.novel_sublist2'); + if (cqGetChapters.length !== 0) { + // has more than 1 chapter + novel.summary = cheerioQuery('#novel_ex') + .text() + .replace(/<\s*br.*?>/g, '\n'); + cqGetChapters.each(function (i, e) { + const chapterA = cheerioQuery(this).find('a'); + const [chapterName, releaseDate, chapterUrl] = [ + // set the variables + chapterA.text(), + cheerioQuery(this) + .find('dt') // get title + .text() // get text + .replace(/(.)/g, '') // remove "(edited)" mark + .trim(), // trim spaces + getLastPartOfUrl(chapterA.attr('href')), + ]; + chapters.push({chapterName, releaseDate, chapterUrl}); + }); + } else { + /** + * Because there are oneshots on the site, they have to be treated with special care + * that's what pisses me off in Shosetsu app. They have this extension, + * but every oneshot is set as "there are no chapters" and all contents are thrown into the description!! + */ + // get summary for oneshot chapter + + const result = await fetch(searchUrl() + `&word=${novel.novelName}`); const body = await result.text(); - const cheerioQuery = cheerio.load(body, { decodeEntities: false }); + const summaryQuery = cheerio.load(body, {decodeEntities: false}); + const foundText = summaryQuery('.searchkekka_box') + .first() + .find('.ex') + .text() + .replace(/\s{2,}/g, '\n'); + novel.summary = foundText; - // create novel object - let novel = { - sourceId, - sourceName, - url: url, - novelUrl, - novelName: cheerioQuery(".novel_title").text(), - author: cheerioQuery(".novel_writername").text().replace("作者:", ""), - novelCover, - }; + // add single chapter + chapters.push({ + chapterName: 'Oneshot', + releaseDate: cheerioQuery('head') + .find("meta[name='WWWC']") + .attr('content'), // get date from metadata + chapterUrl: 'oneshot', // set chapterUrl to oneshot so that chapterScraper knows it's a one-shot + }); + } + novel.chapters = chapters; - // Get all the chapters - const cqGetChapters = cheerioQuery(".novel_sublist2"); - if (cqGetChapters.length !== 0) { - // has more than 1 chapter - novel.summary = cheerioQuery("#novel_ex") - .text() - .replace(/<\s*br.*?>/g, "\n"); - cqGetChapters.each(function (i, e) { - const chapterA = cheerioQuery(this).find("a"); - const [chapterName, releaseDate, chapterUrl] = [ - // set the variables - chapterA.text(), - cheerioQuery(this) - .find("dt") // get title - .text() // get text - .replace(/(.)/g, "") // remove "(edited)" mark - .trim(), // trim spaces - getLastPartOfUrl(chapterA.attr("href")), - ]; - chapters.push({ chapterName, releaseDate, chapterUrl }); - }); - } else { - /** - * Because there are oneshots on the site, they have to be treated with special care - * that's what pisses me off in Shosetsu app. They have this extension, - * but every oneshot is set as "there are no chapters" and all contents are thrown into the description!! - */ - // get summary for oneshot chapter - - const result = await fetch(searchUrl() + `&word=${novel.novelName}`); - const body = await result.text(); - const summaryQuery = cheerio.load(body, { decodeEntities: false }); - const foundText = summaryQuery(".searchkekka_box") - .first() - .find(".ex") - .text() - .replace(/\s{2,}/g, "\n"); - novel.summary = foundText; - - // add single chapter - chapters.push({ - chapterName: "Oneshot", - releaseDate: cheerioQuery("head") - .find("meta[name='WWWC']") - .attr("content"), // get date from metadata - chapterUrl: "oneshot", // set chapterUrl to oneshot so that chapterScraper knows it's a one-shot - }); - } - novel.chapters = chapters; - - return novel; + return novel; }; let parseChapter = async (novelUrl, chapterUrl) => { - const url = getChapterUrl(novelUrl, chapterUrl); // get Url + const url = getChapterUrl(novelUrl, chapterUrl); // get Url - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - // create cheerioQuery - const cheerioQuery = cheerio.load(body, { - decodeEntities: false, - }); + // create cheerioQuery + const cheerioQuery = cheerio.load(body, { + decodeEntities: false, + }); - let chapterText = cheerioQuery("#novel_honbun") // get chapter text - .html(); - // create chapter data structure - let chapter = { - sourceId: 36, - novelUrl, - chapterUrl, - chapterName: "", - chapterText, - }; + let chapterText = cheerioQuery('#novel_honbun') // get chapter text + .html(); + // create chapter data structure + let chapter = { + sourceId: 36, + novelUrl, + chapterUrl, + chapterName: '', + chapterText, + }; - if (chapterUrl === "oneshot") - // oneshot get name - chapter.chapterName = cheerioQuery("#novel_title").text(); - else { - // single chapter + if (chapterUrl === 'oneshot') + // oneshot get name + chapter.chapterName = cheerioQuery('#novel_title').text(); + else { + // single chapter - // get name - chapter.chapterName = cheerioQuery(".novel_subtitle").first().text(); + // get name + chapter.chapterName = cheerioQuery('.novel_subtitle').first().text(); - // get next/prev buttons - const chapterButtons = cheerioQuery( - "#novel_contents .novel_bn" - ).first(); - } + // get next/prev buttons + const chapterButtons = cheerioQuery('#novel_contents .novel_bn').first(); + } - return chapter; + return chapter; }; -let searchNovels = async (searchTerm) => { - // const orderBy = req.query.o; +let searchNovels = async searchTerm => { + // const orderBy = req.query.o; - // array of all the novels - let novels = []; + // array of all the novels + let novels = []; - let isNext = true; + let isNext = true; - // returns list of novels from given page - let getNovelsFromPage = async (pagenumber) => { - // load page - const result = await fetch( - searchUrl(pagenumber || null, null) + `&word=${searchTerm}` - ); - const body = await result.text(); - // Cheerio it! - const cheerioQuery = cheerio.load(body, { decodeEntities: false }); + // returns list of novels from given page + let getNovelsFromPage = async pagenumber => { + // load page + const result = await fetch( + searchUrl(pagenumber || null, null) + `&word=${searchTerm}`, + ); + const body = await result.text(); + // Cheerio it! + const cheerioQuery = cheerio.load(body, {decodeEntities: false}); - if (cheerioQuery(".nextlink").length === 0) isNext = false; + if (cheerioQuery('.nextlink').length === 0) isNext = false; - let pageNovels = []; - // find class=searchkekka_box - cheerioQuery(".searchkekka_box").each(function (i, e) { - // get div with link and name - const novelDIV = cheerioQuery(this).find(".novel_h"); - // get link element - const novelA = novelDIV.children()[0]; - // add new novel to array - pageNovels.push({ - novelName: novelDIV.text(), // get the name - novelUrl: getLastPartOfUrl(novelA.attribs.href), // get last part of the link - sourceId, - novelCover, // TODO: IDK what to do about covers... On Syo they don't have them - }); - }); - // return all novels from this page - return pageNovels; - }; + let pageNovels = []; + // find class=searchkekka_box + cheerioQuery('.searchkekka_box').each(function (i, e) { + // get div with link and name + const novelDIV = cheerioQuery(this).find('.novel_h'); + // get link element + const novelA = novelDIV.children()[0]; + // add new novel to array + pageNovels.push({ + novelName: novelDIV.text(), // get the name + novelUrl: getLastPartOfUrl(novelA.attribs.href), // get last part of the link + sourceId, + novelCover, // TODO: IDK what to do about covers... On Syo they don't have them + }); + }); + // return all novels from this page + return pageNovels; + }; - // counter of loaded pages - // let pagesLoaded = 0; - // do { - // // always load first one - // novels.push(...(await getNovelsFromPage(pagesLoaded + 1))); - // pagesLoaded++; - // } while (pagesLoaded < maxPageLoad && isNext); // check if we should load more + // counter of loaded pages + // let pagesLoaded = 0; + // do { + // // always load first one + // novels.push(...(await getNovelsFromPage(pagesLoaded + 1))); + // pagesLoaded++; + // } while (pagesLoaded < maxPageLoad && isNext); // check if we should load more - novels = await getNovelsFromPage(1); + novels = await getNovelsFromPage(1); - /** Use - * novels.push(...(await getNovelsFromPage(pageNumber))) - * if you want to load more - */ + /** Use + * novels.push(...(await getNovelsFromPage(pageNumber))) + * if you want to load more + */ - // respond with novels! - return novels; + // respond with novels! + return novels; }; const SyosetuScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default SyosetuScraper; diff --git a/src/sources/multisrc/madara/MadaraGenerator.js b/src/sources/multisrc/madara/MadaraGenerator.js index 9ff1484e..6b8deacf 100644 --- a/src/sources/multisrc/madara/MadaraGenerator.js +++ b/src/sources/multisrc/madara/MadaraGenerator.js @@ -1,189 +1,189 @@ -import MadaraScraper from "./MadaraScraper"; +import MadaraScraper from './MadaraScraper'; -const getPath = (extensionId) => { - const path = { - 38: { novels: "manga", novel: "manga", chapter: "manga" }, - 39: { novels: "series", novel: "series", chapter: "series" }, - 40: { novels: "novels", novel: "novel", chapter: "novel" }, - 41: { novels: "manga", novel: "manga", chapter: "manga" }, - 42: { novels: "all-novels", novel: "manga", chapter: "manga" }, - 43: { novels: "series", novel: "series", chapter: "series" }, - 44: { novels: "series", novel: "series", chapter: "series" }, - 45: { novels: "novel", novel: "novel", chapter: "novel" }, - 46: { novels: "novel", novel: "novel", chapter: "novel" }, - 47: { novels: "novel-list", novel: "novel", chapter: "novel" }, - 55: { novels: "manga", novel: "manga", chapter: "manga" }, - 56: { novels: "novel", novel: "novel", chapter: "novel" }, - 57: { novels: "series", novel: "series", chapter: "series" }, - 58: { novels: "novel", novel: "novel", chapter: "novel" }, - 59: { novels: "novel", novel: "novels", chapter: "novel" }, - 60: { novels: "novel", novel: "novel", chapter: "novel" }, - 61: { novels: "novel", novel: "novel", chapter: "novel" }, - 62: { novels: "novel", novel: "novel", chapter: "novel" }, - 63: { novels: "novel", novel: "novel", chapter: "novel" }, - 75: { novels: "series", novel: "series", chapter: "series" }, - 80: { novels: "manga", novel: "manga", chapter: "manga" }, - }; +const getPath = extensionId => { + const path = { + 38: {novels: 'manga', novel: 'manga', chapter: 'manga'}, + 39: {novels: 'series', novel: 'series', chapter: 'series'}, + 40: {novels: 'novels', novel: 'novel', chapter: 'novel'}, + 41: {novels: 'manga', novel: 'manga', chapter: 'manga'}, + 42: {novels: 'all-novels', novel: 'manga', chapter: 'manga'}, + 43: {novels: 'series', novel: 'series', chapter: 'series'}, + 44: {novels: 'series', novel: 'series', chapter: 'series'}, + 45: {novels: 'novel', novel: 'novel', chapter: 'novel'}, + 46: {novels: 'novel', novel: 'novel', chapter: 'novel'}, + 47: {novels: 'novel-list', novel: 'novel', chapter: 'novel'}, + 55: {novels: 'manga', novel: 'manga', chapter: 'manga'}, + 56: {novels: 'novel', novel: 'novel', chapter: 'novel'}, + 57: {novels: 'series', novel: 'series', chapter: 'series'}, + 58: {novels: 'novel', novel: 'novel', chapter: 'novel'}, + 59: {novels: 'novel', novel: 'novels', chapter: 'novel'}, + 60: {novels: 'novel', novel: 'novel', chapter: 'novel'}, + 61: {novels: 'novel', novel: 'novel', chapter: 'novel'}, + 62: {novels: 'novel', novel: 'novel', chapter: 'novel'}, + 63: {novels: 'novel', novel: 'novel', chapter: 'novel'}, + 75: {novels: 'series', novel: 'series', chapter: 'series'}, + 80: {novels: 'manga', novel: 'manga', chapter: 'manga'}, + }; - return ( - path[extensionId] ?? { - novels: "novel", - novel: "novel", - chapter: "novel", - } - ); + return ( + path[extensionId] ?? { + novels: 'novel', + novel: 'novel', + chapter: 'novel', + } + ); }; export const SkyNovelScraper = new MadaraScraper( - 38, - "https://skynovel.org/", - "SkyNovel", - getPath(38) + 38, + 'https://skynovel.org/', + 'SkyNovel', + getPath(38), ); export const NovelCakeScraper = new MadaraScraper( - 39, - "https://novelcake.com/", - "NovelCake", - getPath(39) + 39, + 'https://novelcake.com/', + 'NovelCake', + getPath(39), ); export const NovelsRockScraper = new MadaraScraper( - 40, - "https://novelsrock.com/", - "NovelsRock", - getPath(40) + 40, + 'https://novelsrock.com/', + 'NovelsRock', + getPath(40), ); export const ZinnNovelScraper = new MadaraScraper( - 41, - "https://zinnovel.com/", - "ZinnNovel", - getPath(41) + 41, + 'https://zinnovel.com/', + 'ZinnNovel', + getPath(41), ); export const NovelTranslateScraper = new MadaraScraper( - 42, - "https://noveltranslate.com/", - "NovelTranslate", - getPath(42) + 42, + 'https://noveltranslate.com/', + 'NovelTranslate', + getPath(42), ); export const LunarLettersScraper = new MadaraScraper( - 43, - "https://www.lunarletters.com/", - "LunarLetters", - getPath(43) + 43, + 'https://www.lunarletters.com/', + 'LunarLetters', + getPath(43), ); export const SleepyTranslationsScraper = new MadaraScraper( - 44, - "https://sleepytranslations.com/", - "SleepyTranslations", - getPath(44) + 44, + 'https://sleepytranslations.com/', + 'SleepyTranslations', + getPath(44), ); export const FreeNovelScraper = new MadaraScraper( - 45, - "https://freenovel.me/", - "FreeNovelMe", - getPath(45) + 45, + 'https://freenovel.me/', + 'FreeNovelMe', + getPath(45), ); export const FirstKissNovelScraper = new MadaraScraper( - 46, - "https://1stkissnovel.love/", - "1stKissNovel", - getPath(46) + 46, + 'https://1stkissnovel.love/', + '1stKissNovel', + getPath(46), ); export const DaoNovelScraper = new MadaraScraper( - 47, - "https://daonovel.com/", - "DaoNovel", - getPath(47) + 47, + 'https://daonovel.com/', + 'DaoNovel', + getPath(47), ); export const MostNovelScraper = new MadaraScraper( - 55, - "https://mostnovel.com/", - "MostNovel", - getPath(55) + 55, + 'https://mostnovel.com/', + 'MostNovel', + getPath(55), ); export const NovelMultiverseScraper = new MadaraScraper( - 56, - "https://www.novelmultiverse.com/", - "NovelMultiverse", - getPath(56) + 56, + 'https://www.novelmultiverse.com/', + 'NovelMultiverse', + getPath(56), ); export const LightNovelHeavenScraper = new MadaraScraper( - 57, - "https://lightnovelheaven.com/", - "LightNovelHeaven", - getPath(57) + 57, + 'https://lightnovelheaven.com/', + 'LightNovelHeaven', + getPath(57), ); export const LightNovelsHubScraper = new MadaraScraper( - 58, - "https://lightnovelshub.com/", - "LightNovelsHub", - getPath(58) + 58, + 'https://lightnovelshub.com/', + 'LightNovelsHub', + getPath(58), ); export const MeionNovelScraper = new MadaraScraper( - 60, - "https://meionovel.id/", - "MeionNovel", - getPath(60) + 60, + 'https://meionovel.id/', + 'MeionNovel', + getPath(60), ); export const WebNovelLoverScraper = new MadaraScraper( - 61, - "https://www.webnovelover.com/", - "WebNovelLover", - getPath(61) + 61, + 'https://www.webnovelover.com/', + 'WebNovelLover', + getPath(61), ); export const BoxNovelOnlineScraper = new MadaraScraper( - 63, - "https://boxnovel.online/", - "BoxNovel.online", - getPath(63) + 63, + 'https://boxnovel.online/', + 'BoxNovel.online', + getPath(63), ); export const ClickNovelScraper = new MadaraScraper( - 64, - "https://clicknovel.net/", - "ClickNovel", - getPath(64) + 64, + 'https://clicknovel.net/', + 'ClickNovel', + getPath(64), ); export const ReadWebNovelsScraper = new MadaraScraper( - 65, - "https://readwebnovels.net/", - "ReadWebNovels", - getPath(65) + 65, + 'https://readwebnovels.net/', + 'ReadWebNovels', + getPath(65), ); export const WBNovelScraper = new MadaraScraper( - 66, - "https://wbnovel.com/", - "WBNovel", - getPath(66) + 66, + 'https://wbnovel.com/', + 'WBNovel', + getPath(66), ); export const WuxiaWorldDotSiteScraper = new MadaraScraper( - 74, - "https://wuxiaworld.site/", - "WuxiaWorld.Site", - getPath(74) + 74, + 'https://wuxiaworld.site/', + 'WuxiaWorld.Site', + getPath(74), ); export const MysticalSeriesScraper = new MadaraScraper( - 75, - "https://mysticalmerries.com/", - "MysticalSeries", - getPath(75) + 75, + 'https://mysticalmerries.com/', + 'MysticalSeries', + getPath(75), ); diff --git a/src/sources/multisrc/madara/MadaraScraper.js b/src/sources/multisrc/madara/MadaraScraper.js index 6d9a67d4..c521b3bf 100644 --- a/src/sources/multisrc/madara/MadaraScraper.js +++ b/src/sources/multisrc/madara/MadaraScraper.js @@ -1,224 +1,213 @@ -import moment from "moment"; -import cheerio from "react-native-cheerio"; -import { Status } from "../../helpers/constants"; -import { parseMadaraDate } from "../../helpers/parseDate"; +import moment from 'moment'; +import cheerio from 'react-native-cheerio'; +import {Status} from '../../helpers/constants'; +import {parseMadaraDate} from '../../helpers/parseDate'; class MadaraScraper { - constructor(sourceId, baseUrl, sourceName, path) { - this.sourceId = sourceId; - this.baseUrl = baseUrl; - this.sourceName = sourceName; - this.path = path; + constructor(sourceId, baseUrl, sourceName, path) { + this.sourceId = sourceId; + this.baseUrl = baseUrl; + this.sourceName = sourceName; + this.path = path; + } + + async popularNovels(page) { + const totalPages = 100; + let url = + this.baseUrl + this.path.novels + '/page/' + page + '/?m_orderby=rating'; + let sourceId = this.sourceId; + + const result = await fetch(url); + const body = await result.text(); + + const $ = cheerio.load(body); + + let novels = []; + + $('.manga-title-badges').remove(); + + $('.page-item-detail').each(function () { + const novelName = $(this).find('.post-title').text().trim(); + let image = $(this).find('img'); + const novelCover = image.attr('data-src') || image.attr('src'); + + let novelUrl = $(this) + .find('.post-title') + .find('a') + .attr('href') + .split('/')[4]; + + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; + + novels.push(novel); + }); + + return {totalPages, novels}; + } + + async parseNovelAndChapters(novelUrl) { + const url = `${this.baseUrl}${this.path.novel}/${novelUrl}/`; + + const result = await fetch(url); + const body = await result.text(); + + let $ = cheerio.load(body); + + let novel = {}; + + novel.sourceId = this.sourceId; + + novel.sourceName = this.sourceName; + + novel.url = url; + + novel.novelUrl = novelUrl; + + $('.manga-title-badges').remove(); + + novel.novelName = $('.post-title > h1').text().trim(); + + novel.novelCover = + $('.summary_image > a > img').attr('data-src') || + $('.summary_image > a > img').attr('src') || + 'https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true'; + + $('.post-content_item').each(function () { + const detailName = $(this).find('.summary-heading > h5').text().trim(); + const detail = $(this).find('.summary-content').text().trim(); + + switch (detailName) { + case 'Genre(s)': + novel.genre = detail.replace(/[\t\n]/g, ','); + break; + case 'Author(s)': + novel.author = detail; + break; + case 'Status': + novel.status = detail.includes('OnGoing') + ? Status.ONGOING + : Status.COMPLETED; + break; + } + }); + + novel.summary = $('div.summary__content').text().trim(); + + let novelChapters = []; + + const novelId = + $('.rating-post-id').attr('value') || + $('#manga-chapters-holder').attr('data-id'); + + let formData = new FormData(); + formData.append('action', 'manga_get_chapters'); + formData.append('manga', novelId); + + const data = await fetch(this.baseUrl + 'wp-admin/admin-ajax.php', { + method: 'POST', + body: formData, + }); + const text = await data.text(); + + if (text !== '0') { + $ = cheerio.load(text); } - async popularNovels(page) { - const totalPages = 100; - let url = - this.baseUrl + - this.path.novels + - "/page/" + - page + - "/?m_orderby=rating"; - let sourceId = this.sourceId; + $('.wp-manga-chapter').each(function () { + const chapterName = $(this) + .find('a') + .text() + .replace(/[\t\n]/g, '') + .trim(); - const result = await fetch(url); - const body = await result.text(); + let releaseDate = null; + releaseDate = $(this).find('span.chapter-release-date').text().trim(); - const $ = cheerio.load(body); + if (releaseDate) { + releaseDate = parseMadaraDate(releaseDate); + } else { + /** + * Insert current date + */ - let novels = []; + releaseDate = moment().format('MMMM DD, YYYY'); + } - $(".manga-title-badges").remove(); + const chapterUrl = $(this).find('a').attr('href').split('/')[5]; - $(".page-item-detail").each(function () { - const novelName = $(this).find(".post-title").text().trim(); - let image = $(this).find("img"); - const novelCover = image.attr("data-src") || image.attr("src"); + novelChapters.push({chapterName, releaseDate, chapterUrl}); + }); - let novelUrl = $(this) - .find(".post-title") - .find("a") - .attr("href") - .split("/")[4]; + novel.chapters = novelChapters.reverse(); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + return novel; + } - novels.push(novel); - }); + async parseChapter(novelUrl, chapterUrl) { + let sourceId = this.sourceId; - return { totalPages, novels }; - } + const url = `${this.baseUrl}${this.path.chapter}/${novelUrl}/${chapterUrl}`; - async parseNovelAndChapters(novelUrl) { - const url = `${this.baseUrl}${this.path.novel}/${novelUrl}/`; + const result = await fetch(url); + const body = await result.text(); - const result = await fetch(url); - const body = await result.text(); + const $ = cheerio.load(body); - let $ = cheerio.load(body); + let chapterName = $('.text-center').text() || $('#chapter-heading').text(); - let novel = {}; + let chapterText = $('.text-left').html(); - novel.sourceId = this.sourceId; + const chapter = { + sourceId, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - novel.sourceName = this.sourceName; + return chapter; + } - novel.url = url; + async searchNovels(searchTerm) { + const url = `${this.baseUrl}?s=${searchTerm}&post_type=wp-manga`; - novel.novelUrl = novelUrl; + const result = await fetch(url); + const body = await result.text(); - $(".manga-title-badges").remove(); + const $ = cheerio.load(body); - novel.novelName = $(".post-title > h1").text().trim(); + let novels = []; + let sourceId = this.sourceId; - novel.novelCover = - $(".summary_image > a > img").attr("data-src") || - $(".summary_image > a > img").attr("src") || - "https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true"; + $('.c-tabs-item__content').each(function () { + const novelName = $(this).find('.post-title').text().trim(); - $(".post-content_item").each(function () { - const detailName = $(this) - .find(".summary-heading > h5") - .text() - .trim(); - const detail = $(this).find(".summary-content").text().trim(); + let image = $(this).find('img'); + const novelCover = image.attr('data-src') || image.attr('src'); - switch (detailName) { - case "Genre(s)": - novel.genre = detail.replace(/[\t\n]/g, ","); - break; - case "Author(s)": - novel.author = detail; - break; - case "Status": - novel.status = detail.includes("OnGoing") - ? Status.ONGOING - : Status.COMPLETED; - break; - } - }); + let novelUrl = $(this) + .find('.post-title') + .find('a') + .attr('href') + .split('/')[4]; - novel.summary = $("div.summary__content").text().trim(); + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - let novelChapters = []; + novels.push(novel); + }); - const novelId = - $(".rating-post-id").attr("value") || - $("#manga-chapters-holder").attr("data-id"); - - let formData = new FormData(); - formData.append("action", "manga_get_chapters"); - formData.append("manga", novelId); - - const data = await fetch(this.baseUrl + "wp-admin/admin-ajax.php", { - method: "POST", - body: formData, - }); - const text = await data.text(); - - if (text !== "0") { - $ = cheerio.load(text); - } - - $(".wp-manga-chapter").each(function () { - const chapterName = $(this) - .find("a") - .text() - .replace(/[\t\n]/g, "") - .trim(); - - let releaseDate = null; - releaseDate = $(this) - .find("span.chapter-release-date") - .text() - .trim(); - - if (releaseDate) { - releaseDate = parseMadaraDate(releaseDate); - } else { - /** - * Insert current date - */ - - releaseDate = moment().format("MMMM DD, YYYY"); - } - - const chapterUrl = $(this).find("a").attr("href").split("/")[5]; - - novelChapters.push({ chapterName, releaseDate, chapterUrl }); - }); - - novel.chapters = novelChapters.reverse(); - - return novel; - } - - async parseChapter(novelUrl, chapterUrl) { - let sourceId = this.sourceId; - - const url = `${this.baseUrl}${this.path.chapter}/${novelUrl}/${chapterUrl}`; - - const result = await fetch(url); - const body = await result.text(); - - const $ = cheerio.load(body); - - let chapterName = - $(".text-center").text() || $("#chapter-heading").text(); - - let chapterText = $(".text-left").html(); - - const chapter = { - sourceId, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; - - return chapter; - } - - async searchNovels(searchTerm) { - const url = `${this.baseUrl}?s=${searchTerm}&post_type=wp-manga`; - - const result = await fetch(url); - const body = await result.text(); - - const $ = cheerio.load(body); - - let novels = []; - let sourceId = this.sourceId; - - $(".c-tabs-item__content").each(function () { - const novelName = $(this).find(".post-title").text().trim(); - - let image = $(this).find("img"); - const novelCover = image.attr("data-src") || image.attr("src"); - - let novelUrl = $(this) - .find(".post-title") - .find("a") - .attr("href") - .split("/")[4]; - - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; - - novels.push(novel); - }); - - return novels; - } + return novels; + } } export default MadaraScraper; diff --git a/src/sources/multisrc/wpmangastream/WPMangaStreamGenerator.js b/src/sources/multisrc/wpmangastream/WPMangaStreamGenerator.js index 8139632a..aa019b6d 100644 --- a/src/sources/multisrc/wpmangastream/WPMangaStreamGenerator.js +++ b/src/sources/multisrc/wpmangastream/WPMangaStreamGenerator.js @@ -1,13 +1,13 @@ -import WPMangaStreamScraper from "./WPMangaStreamScraper"; +import WPMangaStreamScraper from './WPMangaStreamScraper'; export const KolNovelScraper = new WPMangaStreamScraper( - 53, - "https://kolnovel.com/", - "KolNovel" + 53, + 'https://kolnovel.com/', + 'KolNovel', ); export const RewayatArScraper = new WPMangaStreamScraper( - 54, - "https://rewayat-ar.site/", - "RewayatAr" + 54, + 'https://rewayat-ar.site/', + 'RewayatAr', ); diff --git a/src/sources/multisrc/wpmangastream/WPMangaStreamScraper.js b/src/sources/multisrc/wpmangastream/WPMangaStreamScraper.js index 7a67b553..049777b7 100644 --- a/src/sources/multisrc/wpmangastream/WPMangaStreamScraper.js +++ b/src/sources/multisrc/wpmangastream/WPMangaStreamScraper.js @@ -1,162 +1,161 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; class WPMangaStreamScraper { - constructor(sourceId, baseUrl, sourceName) { - this.sourceId = sourceId; - this.baseUrl = baseUrl; - this.sourceName = sourceName; - } + constructor(sourceId, baseUrl, sourceName) { + this.sourceId = sourceId; + this.baseUrl = baseUrl; + this.sourceName = sourceName; + } - async popularNovels(page) { - let totalPages = 100; - let url = - this.baseUrl + "series/?page=" + page + "&status=&order=popular"; - let sourceId = this.sourceId; + async popularNovels(page) { + let totalPages = 100; + let url = this.baseUrl + 'series/?page=' + page + '&status=&order=popular'; + let sourceId = this.sourceId; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - const $ = cheerio.load(body); + const $ = cheerio.load(body); - let novels = []; + let novels = []; - $("article.bs").each(function () { - const novelName = $(this).find(".ntitle").text().trim(); - let image = $(this).find("img"); - const novelCover = image.attr("src"); + $('article.bs').each(function () { + const novelName = $(this).find('.ntitle').text().trim(); + let image = $(this).find('img'); + const novelCover = image.attr('src'); - let novelUrl = $(this).find("a").attr("href").split("/")[4]; + let novelUrl = $(this).find('a').attr('href').split('/')[4]; - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return { totalPages, novels }; - } + return {totalPages, novels}; + } - async parseNovelAndChapters(novelUrl) { - const url = `${this.baseUrl}series/${novelUrl}/`; + async parseNovelAndChapters(novelUrl) { + const url = `${this.baseUrl}series/${novelUrl}/`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - let $ = cheerio.load(body); + let $ = cheerio.load(body); - let novel = {}; + let novel = {}; - novel.sourceId = this.sourceId; + novel.sourceId = this.sourceId; - novel.sourceName = this.sourceName; + novel.sourceName = this.sourceName; - novel.url = url; + novel.url = url; - novel.novelUrl = novelUrl; + novel.novelUrl = novelUrl; - novel.novelName = $(".entry-title").text(); + novel.novelName = $('.entry-title').text(); - novel.novelCover = $("img.wp-post-image").attr("src"); + novel.novelCover = $('img.wp-post-image').attr('src'); - $("div.spe > span").each(function () { - const detailName = $(this).find("b").text().trim(); - const detail = $(this).find("b").next().text().trim(); + $('div.spe > span').each(function () { + const detailName = $(this).find('b').text().trim(); + const detail = $(this).find('b').next().text().trim(); - if ($(this).text().includes("الحالة:")) { - novel.status = $(this).text().replace("الحالة: ", ""); - } + if ($(this).text().includes('الحالة:')) { + novel.status = $(this).text().replace('الحالة: ', ''); + } - switch (detailName) { - case "المؤلف:": - novel.auhtor = detail; - break; - } - }); + switch (detailName) { + case 'المؤلف:': + novel.auhtor = detail; + break; + } + }); - novel.genre = $(".genxed").text().replace(/\s/g, ","); + novel.genre = $('.genxed').text().replace(/\s/g, ','); - novel.summary = $('div[itemprop="description"]').text().trim(); + novel.summary = $('div[itemprop="description"]').text().trim(); - let novelChapters = []; + let novelChapters = []; - $(".eplister") - .find("li") - .each(function () { - const chapterName = - $(this).find(".epl-num").text() + - " - " + - $(this).find(".epl-title").text(); + $('.eplister') + .find('li') + .each(function () { + const chapterName = + $(this).find('.epl-num').text() + + ' - ' + + $(this).find('.epl-title').text(); - const releaseDate = $(this).find(".epl-date").text().trim(); + const releaseDate = $(this).find('.epl-date').text().trim(); - const chapterUrl = $(this).find("a").attr("href").split("/")[3]; + const chapterUrl = $(this).find('a').attr('href').split('/')[3]; - novelChapters.push({ chapterName, releaseDate, chapterUrl }); - }); + novelChapters.push({chapterName, releaseDate, chapterUrl}); + }); - novel.chapters = novelChapters.reverse(); + novel.chapters = novelChapters.reverse(); - return novel; - } + return novel; + } - async parseChapter(novelUrl, chapterUrl) { - let sourceId = this.sourceId; + async parseChapter(novelUrl, chapterUrl) { + let sourceId = this.sourceId; - const url = `${this.baseUrl}${chapterUrl}`; + const url = `${this.baseUrl}${chapterUrl}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - const $ = cheerio.load(body); + const $ = cheerio.load(body); - let chapterName = $(".entry-title").text(); - let chapterText = $("div.epcontent").html(); + let chapterName = $('.entry-title').text(); + let chapterText = $('div.epcontent').html(); - const chapter = { - sourceId, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; - } + return chapter; + } - async searchNovels(searchTerm) { - const url = `${this.baseUrl}?s=${searchTerm}`; + async searchNovels(searchTerm) { + const url = `${this.baseUrl}?s=${searchTerm}`; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - const $ = cheerio.load(body); + const $ = cheerio.load(body); - let novels = []; - let sourceId = this.sourceId; + let novels = []; + let sourceId = this.sourceId; - $("article.bs").each(function () { - const novelName = $(this).find(".ntitle").text().trim(); - let image = $(this).find("img"); - const novelCover = image.attr("src"); + $('article.bs').each(function () { + const novelName = $(this).find('.ntitle').text().trim(); + let image = $(this).find('img'); + const novelCover = image.attr('src'); - let novelUrl = $(this).find("a").attr("href").split("/")[4]; + let novelUrl = $(this).find('a').attr('href').split('/')[4]; - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; - } + return novels; + } } module.exports = WPMangaStreamScraper; diff --git a/src/sources/ru/ranobehub.js b/src/sources/ru/ranobehub.js index da987316..0fbfe7a9 100644 --- a/src/sources/ru/ranobehub.js +++ b/src/sources/ru/ranobehub.js @@ -1,152 +1,152 @@ -import cheerio from "react-native-cheerio"; -import { Status } from "../helpers/constants"; +import cheerio from 'react-native-cheerio'; +import {Status} from '../helpers/constants'; const sourceId = 69; -const sourceName = "RanobeHub"; +const sourceName = 'RanobeHub'; -const baseUrl = "https://ranobehub.org/"; +const baseUrl = 'https://ranobehub.org/'; -const popularNovels = async (page) => { - let url = - baseUrl + "api/search?page=" + page + "&sort=computed_rating&take=40"; - const totalPages = 69; +const popularNovels = async page => { + let url = + baseUrl + 'api/search?page=' + page + '&sort=computed_rating&take=40'; + const totalPages = 69; - const result = await fetch(url); - const body = await result.json(); + const result = await fetch(url); + const body = await result.json(); - let novels = []; + let novels = []; - body.resource.forEach((novel) => { - const novelName = novel.names.rus; - const novelCover = novel.poster.medium; - const novelUrl = novel.url.split("/").pop(); + body.resource.forEach(novel => { + const novelName = novel.names.rus; + const novelCover = novel.poster.medium; + const novelUrl = novel.url.split('/').pop(); - novels.push({ - sourceId, - novelName, - novelCover, - novelUrl, - }); + novels.push({ + sourceId, + novelName, + novelCover, + novelUrl, }); + }); - return { novels, totalPages }; + return {novels, totalPages}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = baseUrl + "ranobe/" + novelUrl; +const parseNovelAndChapters = async novelUrl => { + const url = baseUrl + 'ranobe/' + novelUrl; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = { sourceId, sourceName, url, novelUrl }; + let novel = {sourceId, sourceName, url, novelUrl}; - novel.novelName = $("h1").text(); + novel.novelName = $('h1').text(); - novel.novelCover = $("img.__posterbox ").attr("data-src"); + novel.novelCover = $('img.__posterbox ').attr('data-src'); - novel.summary = $(".book-description__text").text().trim(); + novel.summary = $('.book-description__text').text().trim(); - novel.genre = ""; + novel.genre = ''; - novel.status = Status.UNKNOWN; + novel.status = Status.UNKNOWN; - novel.author = $(".book-author").text().trim(); + novel.author = $('.book-author').text().trim(); - let novelChapters = []; + let novelChapters = []; - const novelId = novelUrl.split("-")[0]; - const fetchChaptersUrl = `https://ranobehub.org/api/ranobe/${novelId}/contents`; + const novelId = novelUrl.split('-')[0]; + const fetchChaptersUrl = `https://ranobehub.org/api/ranobe/${novelId}/contents`; - const chaptersRaw = await fetch(fetchChaptersUrl); - const chaptersJSON = await chaptersRaw.json(); + const chaptersRaw = await fetch(fetchChaptersUrl); + const chaptersJSON = await chaptersRaw.json(); - chaptersJSON.volumes.map((volume) => - volume.chapters.map((chapter) => - novelChapters.push({ - chapterName: chapter.name, - chapterUrl: chapter.url, - releaseDate: null, - }) - ) - ); + chaptersJSON.volumes.map(volume => + volume.chapters.map(chapter => + novelChapters.push({ + chapterName: chapter.name, + chapterUrl: chapter.url, + releaseDate: null, + }), + ), + ); - novel.chapters = novelChapters; + novel.chapters = novelChapters; - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = chapterUrl; - const chapterId = chapterUrl.split("/")[4]; + const url = chapterUrl; + const chapterId = chapterUrl.split('/')[4]; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let chapterName = $( - "body > div.pusher.container_main > div:nth-child(5) > div:nth-child(1) > div.title-wrapper > h1" - ).text(); - let chapterText = $( - "body > div.pusher.container_main > div:nth-child(5) > div:nth-child(1)" - ).html(); + let chapterName = $( + 'body > div.pusher.container_main > div:nth-child(5) > div:nth-child(1) > div.title-wrapper > h1', + ).text(); + let chapterText = $( + 'body > div.pusher.container_main > div:nth-child(5) > div:nth-child(1)', + ).html(); - if (chapterText) { - /** - * Convert relative url to absolute - */ + if (chapterText) { + /** + * Convert relative url to absolute + */ - chapterText = chapterText - .replace(/<\s*script[^>]*>[\s\S]*?<\/script>/gim, "") - .replace( - /data-src="(.*)"/g, - `src="https://ranobehub.org/img/ranobe/content/${chapterId}/$1.jpg"` - ); - } + chapterText = chapterText + .replace(/<\s*script[^>]*>[\s\S]*?<\/script>/gim, '') + .replace( + /data-src="(.*)"/g, + `src="https://ranobehub.org/img/ranobe/content/${chapterId}/$1.jpg"`, + ); + } - console.log(chapterText); + console.log(chapterText); - const chapter = { - sourceId, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = "https://ranobehub.org/api/fulltext/ranobe?query=" + searchTerm; +const searchNovels = async searchTerm => { + const url = 'https://ranobehub.org/api/fulltext/ranobe?query=' + searchTerm; - const result = await fetch(url); - const data = await result.json(); + const result = await fetch(url); + const data = await result.json(); - let novels = []; + let novels = []; - data.data.map((novel) => - novels.push({ - sourceId, - novelName: novel.names.rus, - novelUrl: novel.url.match( - /https:\/\/ranobehub\.org\/ranobe\/(.*?)\?utm_source=search_name&utm_medium=search&utm_campaign=search_using/ - )[1], - novelCover: novel.image, - }) - ); + data.data.map(novel => + novels.push({ + sourceId, + novelName: novel.names.rus, + novelUrl: novel.url.match( + /https:\/\/ranobehub\.org\/ranobe\/(.*?)\?utm_source=search_name&utm_medium=search&utm_campaign=search_using/, + )[1], + novelCover: novel.image, + }), + ); - return novels; + return novels; }; const RanobeHubScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default RanobeHubScraper; diff --git a/src/sources/sources.js b/src/sources/sources.js index be00063e..3c7ead7a 100644 --- a/src/sources/sources.js +++ b/src/sources/sources.js @@ -1,169 +1,169 @@ -import ComradeMaoScraper from "./en/comrademao"; -import ReadLightNovelScraper from "./en/readlightnovel"; -import BoxNovelScraper from "./en/boxnovel"; -import fastNovelScraper from "./en/fastnovel"; -import readNovelFullScraper from "./en/readnovelfull"; -import mtlNovelScraper from "./en/mtlnovel"; -import novelhallScraper from "./en/novelhall"; -import WuxiaWorldScraper from "./en/wuxiaworld"; -import novelFullScraper from "./en/novelfull"; -import novelTrenchScraper from "./en/noveltrench"; -import vipNovelScraper from "./en/vipnovel"; -import kissLightNovelScraper from "./en/kisslightnovels"; -import WuxiaWorldSiteScraper from "./en/wuxiaworldsite"; -import FreeWebNovelScraper from "./en/freewebnovel"; -import JPMTLScraper from "./en/jpmtl"; -import lightNovelPubScraper from "./en/lightnovelpub"; -import WuxiaWorldCoScraper from "./en/wuxiaworldco"; -import novelUpdatesCcScraper from "./en/novelupdatescc"; -import readLightNovelCcScraper from "./en/readlightnovelcc"; -import tapReadScraper from "./en/tapread"; -import WuxiaWorldCloudScraper from "./en/wuxiaworldcloud"; -import WoopReadScraper from "./en/woopread"; -import FoxaHolicScraper from "./en/foxaholic"; -import EinharjarProjectScraper from "./es/einherjarproject"; -import TuNovelaLigeraScraper from "./es/tunovelaligera"; -import SkyNovelsScraper from "./es/skynovels"; -import NovelasLigeraScraper from "./es/novelasligera"; -import YuukiTlsScraper from "./es/yuukitls"; -import NovelaWuxiaScraper from "./es/novelawuxia"; -import OasisTranslationsScraper from "./es/oasistranslations"; -import HasuTlScraper from "./es/hasutl"; -import NovelPassionScraper from "./en/novelpassion"; -import RoyalRoadScraper from "./en/royalroad"; -import ScribbleHubScraper from "./en/scribblehub"; -import SyosetuScraper from "./jp/syosetu"; -import LNMTLScraper from "./en/lnmtl"; +import ComradeMaoScraper from './en/comrademao'; +import ReadLightNovelScraper from './en/readlightnovel'; +import BoxNovelScraper from './en/boxnovel'; +import fastNovelScraper from './en/fastnovel'; +import readNovelFullScraper from './en/readnovelfull'; +import mtlNovelScraper from './en/mtlnovel'; +import novelhallScraper from './en/novelhall'; +import WuxiaWorldScraper from './en/wuxiaworld'; +import novelFullScraper from './en/novelfull'; +import novelTrenchScraper from './en/noveltrench'; +import vipNovelScraper from './en/vipnovel'; +import kissLightNovelScraper from './en/kisslightnovels'; +import WuxiaWorldSiteScraper from './en/wuxiaworldsite'; +import FreeWebNovelScraper from './en/freewebnovel'; +import JPMTLScraper from './en/jpmtl'; +import lightNovelPubScraper from './en/lightnovelpub'; +import WuxiaWorldCoScraper from './en/wuxiaworldco'; +import novelUpdatesCcScraper from './en/novelupdatescc'; +import readLightNovelCcScraper from './en/readlightnovelcc'; +import tapReadScraper from './en/tapread'; +import WuxiaWorldCloudScraper from './en/wuxiaworldcloud'; +import WoopReadScraper from './en/woopread'; +import FoxaHolicScraper from './en/foxaholic'; +import EinharjarProjectScraper from './es/einherjarproject'; +import TuNovelaLigeraScraper from './es/tunovelaligera'; +import SkyNovelsScraper from './es/skynovels'; +import NovelasLigeraScraper from './es/novelasligera'; +import YuukiTlsScraper from './es/yuukitls'; +import NovelaWuxiaScraper from './es/novelawuxia'; +import OasisTranslationsScraper from './es/oasistranslations'; +import HasuTlScraper from './es/hasutl'; +import NovelPassionScraper from './en/novelpassion'; +import RoyalRoadScraper from './en/royalroad'; +import ScribbleHubScraper from './en/scribblehub'; +import SyosetuScraper from './jp/syosetu'; +import LNMTLScraper from './en/lnmtl'; import { - BoxNovelOnlineScraper, - ClickNovelScraper, - DaoNovelScraper, - FirstKissNovelScraper, - FreeNovelScraper, - LightNovelHeavenScraper, - LightNovelsHubScraper, - LunarLettersScraper, - MeionNovelScraper, - MostNovelScraper, - MysticalSeriesScraper, - NovelCakeScraper, - NovelMultiverseScraper, - NovelsRockScraper, - NovelTranslateScraper, - ReadWebNovelsScraper, - SkyNovelScraper, - SleepyTranslationsScraper, - WBNovelScraper, - WebNovelLoverScraper, - WuxiaWorldDotSiteScraper, - ZinnNovelScraper, -} from "./multisrc/madara/MadaraGenerator"; -import WuxiaBlogScraper from "./en/wuxiablog"; -import WuxiaCityScraper from "./en/wuxiacity"; -import NovelUpdatesScraper from "./en/novelupdates"; -import RanobesScraper from "./en/ranobes"; -import YushuboScraper from "./ch/yushubo"; + BoxNovelOnlineScraper, + ClickNovelScraper, + DaoNovelScraper, + FirstKissNovelScraper, + FreeNovelScraper, + LightNovelHeavenScraper, + LightNovelsHubScraper, + LunarLettersScraper, + MeionNovelScraper, + MostNovelScraper, + MysticalSeriesScraper, + NovelCakeScraper, + NovelMultiverseScraper, + NovelsRockScraper, + NovelTranslateScraper, + ReadWebNovelsScraper, + SkyNovelScraper, + SleepyTranslationsScraper, + WBNovelScraper, + WebNovelLoverScraper, + WuxiaWorldDotSiteScraper, + ZinnNovelScraper, +} from './multisrc/madara/MadaraGenerator'; +import WuxiaBlogScraper from './en/wuxiablog'; +import WuxiaCityScraper from './en/wuxiacity'; +import NovelUpdatesScraper from './en/novelupdates'; +import RanobesScraper from './en/ranobes'; +import YushuboScraper from './ch/yushubo'; import { - KolNovelScraper, - RewayatArScraper, -} from "./multisrc/wpmangastream/WPMangaStreamGenerator"; -import WLNUpdatesScraper from "./en/wlnupdates"; -import ReaperScansScraper from "./en/reaperscans"; -import ReadwnScraper from "./en/readwn"; -import RanobeHubScraper from "./ru/ranobehub"; -import ArNovelScraper from "./ar/arnovel"; -import DivineDaoLibraryScraper from "./en/divinedaolibrary"; -import NovelOnlineFullScraper from "./en/novelonlinefull"; -import LightNovelUpdatesScraper from "./en/lightnovelupdates"; -import EpikNovelScraper from "./tr/epiknovel"; -import TravisTranslationsScraper from "./en/travistranslations"; -import NovelDeGlaceScraper from "./fr/noveldeglace"; -import RainOfSnowScraper from "./en/rainofsnow"; -import ReaperScansBrScraper from "./br/ReaperScansBr"; -import ArthurScansScraper from "./br/ArthurScans"; + KolNovelScraper, + RewayatArScraper, +} from './multisrc/wpmangastream/WPMangaStreamGenerator'; +import WLNUpdatesScraper from './en/wlnupdates'; +import ReaperScansScraper from './en/reaperscans'; +import ReadwnScraper from './en/readwn'; +import RanobeHubScraper from './ru/ranobehub'; +import ArNovelScraper from './ar/arnovel'; +import DivineDaoLibraryScraper from './en/divinedaolibrary'; +import NovelOnlineFullScraper from './en/novelonlinefull'; +import LightNovelUpdatesScraper from './en/lightnovelupdates'; +import EpikNovelScraper from './tr/epiknovel'; +import TravisTranslationsScraper from './en/travistranslations'; +import NovelDeGlaceScraper from './fr/noveldeglace'; +import RainOfSnowScraper from './en/rainofsnow'; +import ReaperScansBrScraper from './br/ReaperScansBr'; +import ArthurScansScraper from './br/ArthurScans'; -export const getSource = (sourceId) => { - const scrapers = { - 1: BoxNovelScraper, - 2: ReadLightNovelScraper, - 3: fastNovelScraper, - 4: readNovelFullScraper, - 5: mtlNovelScraper, - 6: novelhallScraper, - 7: WuxiaWorldScraper, - 8: novelFullScraper, - 9: novelTrenchScraper, - 10: vipNovelScraper, - 11: kissLightNovelScraper, - 12: WuxiaWorldSiteScraper, - 13: FreeWebNovelScraper, - 14: JPMTLScraper, - 15: lightNovelPubScraper, - 16: WuxiaWorldCoScraper, - 17: tapReadScraper, - 18: novelUpdatesCcScraper, - 19: readLightNovelCcScraper, - 20: WuxiaWorldCloudScraper, - 21: WoopReadScraper, - 22: FoxaHolicScraper, - 23: TuNovelaLigeraScraper, - 24: SkyNovelsScraper, - 25: EinharjarProjectScraper, - 26: NovelasLigeraScraper, - 27: ComradeMaoScraper, - 28: YuukiTlsScraper, - 29: HasuTlScraper, - 30: OasisTranslationsScraper, - 31: NovelaWuxiaScraper, - 33: NovelPassionScraper, - 34: RoyalRoadScraper, - 35: ScribbleHubScraper, - 36: SyosetuScraper, - 37: LNMTLScraper, - 38: SkyNovelScraper, - 39: NovelCakeScraper, - 40: NovelsRockScraper, - 41: ZinnNovelScraper, - 42: NovelTranslateScraper, - 43: LunarLettersScraper, - 44: SleepyTranslationsScraper, - 45: FreeNovelScraper, - 46: FirstKissNovelScraper, - 47: DaoNovelScraper, - 48: WuxiaBlogScraper, - 49: WuxiaCityScraper, - 50: NovelUpdatesScraper, - 51: RanobesScraper, - 52: YushuboScraper, - 53: KolNovelScraper, - 54: RewayatArScraper, - 55: MostNovelScraper, - 56: NovelMultiverseScraper, - 57: LightNovelHeavenScraper, - 58: LightNovelsHubScraper, - 59: ArNovelScraper, - 60: MeionNovelScraper, - 61: WebNovelLoverScraper, - 62: WLNUpdatesScraper, - 63: BoxNovelOnlineScraper, - 64: ClickNovelScraper, - 65: ReadWebNovelsScraper, - 66: WBNovelScraper, - 67: ReaperScansScraper, - 68: ReadwnScraper, - 69: RanobeHubScraper, - 70: DivineDaoLibraryScraper, - 71: NovelOnlineFullScraper, - 72: LightNovelUpdatesScraper, - 73: EpikNovelScraper, - 74: WuxiaWorldDotSiteScraper, - 75: MysticalSeriesScraper, - 76: TravisTranslationsScraper, - 77: NovelDeGlaceScraper, - 78: RainOfSnowScraper, - 79: ReaperScansBrScraper, - 80: ArthurScansScraper, - }; +export const getSource = sourceId => { + const scrapers = { + 1: BoxNovelScraper, + 2: ReadLightNovelScraper, + 3: fastNovelScraper, + 4: readNovelFullScraper, + 5: mtlNovelScraper, + 6: novelhallScraper, + 7: WuxiaWorldScraper, + 8: novelFullScraper, + 9: novelTrenchScraper, + 10: vipNovelScraper, + 11: kissLightNovelScraper, + 12: WuxiaWorldSiteScraper, + 13: FreeWebNovelScraper, + 14: JPMTLScraper, + 15: lightNovelPubScraper, + 16: WuxiaWorldCoScraper, + 17: tapReadScraper, + 18: novelUpdatesCcScraper, + 19: readLightNovelCcScraper, + 20: WuxiaWorldCloudScraper, + 21: WoopReadScraper, + 22: FoxaHolicScraper, + 23: TuNovelaLigeraScraper, + 24: SkyNovelsScraper, + 25: EinharjarProjectScraper, + 26: NovelasLigeraScraper, + 27: ComradeMaoScraper, + 28: YuukiTlsScraper, + 29: HasuTlScraper, + 30: OasisTranslationsScraper, + 31: NovelaWuxiaScraper, + 33: NovelPassionScraper, + 34: RoyalRoadScraper, + 35: ScribbleHubScraper, + 36: SyosetuScraper, + 37: LNMTLScraper, + 38: SkyNovelScraper, + 39: NovelCakeScraper, + 40: NovelsRockScraper, + 41: ZinnNovelScraper, + 42: NovelTranslateScraper, + 43: LunarLettersScraper, + 44: SleepyTranslationsScraper, + 45: FreeNovelScraper, + 46: FirstKissNovelScraper, + 47: DaoNovelScraper, + 48: WuxiaBlogScraper, + 49: WuxiaCityScraper, + 50: NovelUpdatesScraper, + 51: RanobesScraper, + 52: YushuboScraper, + 53: KolNovelScraper, + 54: RewayatArScraper, + 55: MostNovelScraper, + 56: NovelMultiverseScraper, + 57: LightNovelHeavenScraper, + 58: LightNovelsHubScraper, + 59: ArNovelScraper, + 60: MeionNovelScraper, + 61: WebNovelLoverScraper, + 62: WLNUpdatesScraper, + 63: BoxNovelOnlineScraper, + 64: ClickNovelScraper, + 65: ReadWebNovelsScraper, + 66: WBNovelScraper, + 67: ReaperScansScraper, + 68: ReadwnScraper, + 69: RanobeHubScraper, + 70: DivineDaoLibraryScraper, + 71: NovelOnlineFullScraper, + 72: LightNovelUpdatesScraper, + 73: EpikNovelScraper, + 74: WuxiaWorldDotSiteScraper, + 75: MysticalSeriesScraper, + 76: TravisTranslationsScraper, + 77: NovelDeGlaceScraper, + 78: RainOfSnowScraper, + 79: ReaperScansBrScraper, + 80: ArthurScansScraper, + }; - return scrapers[sourceId]; + return scrapers[sourceId]; }; diff --git a/src/sources/sources.json b/src/sources/sources.json index f75ab95a..d73e252e 100644 --- a/src/sources/sources.json +++ b/src/sources/sources.json @@ -1,555 +1,555 @@ -[ - { - "sourceId": 1, - "url": "https://boxnovel.com/", - "sourceName": "BoxNovel", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/boxnovel/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 2, - "sourceName": "ReadLightNovel", - "url": "https://www.readlightnovel.org", - "lang": "English", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/readlightnovel/icon.png?raw=true" - }, - { - "sourceId": 3, - "url": "https://fastnovel.net/", - "sourceName": "FastNovel", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/fastnovel/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 4, - "url": "https://readnovelfull.com/", - "sourceName": "ReadNovelFull", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/readnovelfull/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 5, - "url": "https://www.mtlnovel.com/", - "sourceName": "MTLNovel", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/mtlnovel/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 6, - "url": "https://www.novelhall.com/", - "sourceName": "NovelHall", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/novelhall/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 7, - "url": "https://www.wuxiaworld.com/", - "sourceName": "WuxiaWorld", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/wuxiaworld/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 8, - "url": "https://novelfull.com/", - "sourceName": "NovelFull", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/novelfull/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 9, - "url": "https://noveltrench.com/", - "sourceName": "NovelTrench", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/noveltrench/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 10, - "url": "https://vipnovel.com/", - "sourceName": "VipNovel", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/vipnovel/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 11, - "url": "https://kisslightnovels.info/", - "sourceName": "KissLightNovels", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/kisslightnovels/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 12, - "url": "https://wuxiaworldsite.co/", - "sourceName": "WuxiaWorldSite", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/wuxiaworldsite/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 13, - "url": "https://freewebnovel.com/", - "sourceName": "FreeWebNovel", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/freewebnovel/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 14, - "url": "https://jpmtl.com/", - "sourceName": "JPMTL", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/jpmtl/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 15, - "url": "https://www.lightnovelpub.com/", - "sourceName": "LightNovelPub", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/lightnovelpub/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 16, - "url": "https://www.wuxiaworld.co/", - "sourceName": "WuxiaWorld.co", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/wuxiaworldco/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 17, - "url": "http://www.tapread.com/", - "sourceName": "TapRead", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/tapread/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 18, - "url": "https://www.novelupdates.cc/", - "sourceName": "NovelUpdates.cc", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/novelupdatescc/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 19, - "url": "https://m.readlightnovel.cc/", - "sourceName": "ReadLightNovel.cc", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/readlightnovelcc/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 20, - "url": "http://wuxiaworld.cloud/", - "sourceName": "WuxiaWorld.cloud", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/wuxiaworldcloud/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 21, - "url": "https://woopread.com/", - "sourceName": "WoopRead", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/woopread/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 22, - "url": "https://foxaholic.com/", - "sourceName": "Foxaholic", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/foxaholic/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 23, - "url": "https://tunovelaligera.com/", - "sourceName": "TuNovelaLigera", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/es/tunovelaligera/icon.png?raw=true", - "lang": "Spanish" - }, - { - "sourceId": 24, - "url": "https://www.skynovels.net/", - "sourceName": "SkyNovels", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/es/skynovels/icon.png?raw=true", - "lang": "Spanish" - }, - { - "sourceId": 25, - "url": "https://einherjarproject.net/", - "sourceName": "EinherjarProject", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/es/einherjarproject/icon.png?raw=true", - "lang": "Spanish" - }, - { - "sourceId": 26, - "url": "https://novelasligera.com/", - "sourceName": "NovelasLigera", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/es/novelasligera/icon.png?raw=true", - "lang": "Spanish" - }, - { - "sourceId": 27, - "url": "https://comrademao.com/", - "sourceName": "ComradeMao", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/comrademao/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 28, - "url": "https://yuukitls.com/", - "sourceName": "YuukiTls", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/es/yuukitls/icon.png?raw=true", - "lang": "Spanish" - }, - { - "sourceId": 29, - "url": "https://hasutl.wordpress.com/", - "sourceName": "Hasu Translations", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/es/hasutl/icon.png?raw=true", - "lang": "Spanish" - }, - { - "sourceId": 30, - "url": "https://oasistranslations.wordpress.com/", - "sourceName": "Oasis Translations", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/es/oasistranslations/icon.png?raw=true", - "lang": "Spanish" - }, - { - "sourceId": 31, - "url": "http://www.novelawuxia.com/", - "sourceName": "Novela Wuxia", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/es/novelawuxia/icon.png?raw=true", - "lang": "Spanish" - }, - { - "sourceId": 33, - "url": "https://www.novelpassion.com/", - "sourceName": "NovelPassion", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/novelpassion/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 34, - "url": "https://www.royalroad.com/", - "sourceName": "Royal Road", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/royalroad/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 35, - "url": "https://www.scribblehub.com/", - "sourceName": "Scribble Hub", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/scribblehub/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 36, - "url": "https://syosetu.com", - "sourceName": "Syosetu", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/jp/syosetu/icon.png?raw=true", - "lang": "Japanese" - }, - { - "sourceId": 37, - "url": "https://lnmtl.com/", - "sourceName": "LNMTL", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/lnmtl/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 38, - "url": "https://skynovel.org/", - "sourceName": "SkyNovel", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/skynovel.png?raw=true", - "lang": "English" - }, - { - "sourceId": 39, - "url": "https://novelcake.com/", - "sourceName": "NovelCake", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/novelcake.png?raw=true", - "lang": "English" - }, - { - "sourceId": 40, - "url": "https://novelsrock.com/", - "sourceName": "NovelsRock", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/novelsrock.png?raw=true", - "lang": "English" - }, - { - "sourceId": 41, - "url": "https://zinnovel.com/", - "sourceName": "ZinnNovel", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/zinnovel.png?raw=true", - "lang": "English" - }, - { - "sourceId": 42, - "url": "https://noveltranslate.com/", - "sourceName": "NovelTranslate", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/noveltranslate.png?raw=true", - "lang": "English" - }, - { - "sourceId": 43, - "url": "https://www.lunarletters.com/", - "sourceName": "LunarLetters", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/lunarletters.png?raw=true", - "lang": "English" - }, - { - "sourceId": 44, - "url": "https://sleepytranslations.com/", - "sourceName": "SleepyTranslations", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/sleepytranslations.png?raw=true", - "lang": "English" - }, - { - "sourceId": 45, - "url": "https://freenovel.me/", - "sourceName": "FreeNovelMe", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/freenovel.png?raw=true", - "lang": "English" - }, - { - "sourceId": 46, - "url": "https://1stkissnovel.love/", - "sourceName": "1stKissNovel", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/1stkissnovel.png?raw=true", - "lang": "English" - }, - { - "sourceId": 47, - "url": "https://daonovel.com/", - "sourceName": "DaoNovel", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/daonovel.png?raw=true", - "lang": "English" - }, - { - "sourceId": 48, - "url": "https://www.wuxia.blog/", - "sourceName": "Wuxia.Blog", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/wuxiablog/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 49, - "url": "https://wuxia.city/", - "sourceName": "Wuxia.City", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/wuxiacity/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 50, - "url": "https://www.novelupdates.com/", - "sourceName": "Novel Updates", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/novelupdates/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 51, - "url": "https://ranobes.net/", - "sourceName": "Ranobes", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/ranobes/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 52, - "url": "https://m.yushubo.com", - "sourceName": "Yushubo", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/ch/yushubo/icon.png?raw=true", - "lang": "Chinese" - }, - { - "sourceId": 53, - "url": "https://kolnovel.com/", - "sourceName": "KolNovel", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/wpmangastream/icons/kolnovel.png?raw=true", - "lang": "Arabic" - }, - { - "sourceId": 54, - "url": "https://rewayat-ar.site/", - "sourceName": "RewayatAr", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/wpmangastream/icons/rewayatar.png?raw=true", - "lang": "Arabic" - }, - { - "sourceId": 55, - "url": "https://mostnovel.com/", - "sourceName": "MostNovel", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/mostnovel.png?raw=true", - "lang": "English" - }, - { - "sourceId": 56, - "url": "https://www.novelmultiverse.com/", - "sourceName": "NovelMultiverse", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/novelmultiverse.png?raw=true", - "lang": "English" - }, - { - "sourceId": 57, - "url": "https://lightnovelheaven.com/", - "sourceName": "LightNovelHeaven", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/lightnovelheaven.png?raw=true", - "lang": "English" - }, - { - "sourceId": 58, - "url": "https://lightnovelshub.com/", - "sourceName": "LightNovelsHub", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/lightnovelshub.png?raw=true", - "lang": "English" - }, - { - "sourceId": 59, - "url": "https://arnovel.me/", - "sourceName": "ArNovel", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/arnovel.png?raw=true", - "lang": "Arabic" - }, - { - "sourceId": 60, - "url": "https://meionovel.id/", - "sourceName": "MeioNovel", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/meionovel.png?raw=true", - "lang": "Indonesian" - }, - { - "sourceId": 61, - "url": "https://www.webnovelover.com/", - "sourceName": "WebNovelLover", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/webnovellover.png?raw=true", - "lang": "English" - }, - { - "sourceId": 62, - "url": "https://www.wlnupdates.com/", - "sourceName": "WLNUpdates", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/wlnupdates/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 63, - "url": "https://boxnovel.online/", - "sourceName": "BoxNovel.online", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/boxnovel.online.png?raw=true", - "lang": "English" - }, - { - "sourceId": 64, - "url": "https://clicknovel.net/", - "sourceName": "ClickNovel", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/clicknovel.png?raw=true", - "lang": "English" - }, - { - "sourceId": 65, - "url": "https://readwebnovels.net/", - "sourceName": "ReadWebNovels", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/readwebnovels.png?raw=true", - "lang": "English" - }, - { - "sourceId": 66, - "url": "https://wbnovel.com/", - "sourceName": "WBNovel", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/wbnovel.png?raw=true", - "lang": "English" - }, - { - "sourceId": 67, - "url": "https://reaperscans.com/all-series/novels/", - "sourceName": "ReaperScans", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/reaperscans/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 68, - "url": "https://www.readwn.com/", - "sourceName": "Readwn.com", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/readwn/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 69, - "url": "https://ranobehub.org/", - "sourceName": "Ranobehub", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/ru/ranobehub/icon.png?raw=true", - "lang": "Russian" - }, - { - "sourceId": 70, - "url": "https://divinedaolibrary.com/", - "sourceName": "Divine Dao Library", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/divinedaolibrary/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 71, - "url": "https://novelonlinefull.com/", - "sourceName": "NovelOnlineFull.com", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/novelonlinefull/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 72, - "url": "https://www.lightnovelupdates.com/", - "sourceName": "LightNovelUpdates", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/lightnovelupdates/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 73, - "url": "https://www.epiknovel.com/", - "sourceName": "EpikNovel", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/tr/epiknovel/icon.png?raw=true", - "lang": "Turkish" - }, - { - "sourceId": 74, - "url": "https://wuxiaworld.site/", - "sourceName": "WuxiaWorld.Site", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/wuxiaworldsite.png?raw=true", - "lang": "English" - }, - { - "sourceId": 75, - "url": "https://mysticalmerries.com/", - "sourceName": "MysticalSeries", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/mysticalseries.png?raw=true", - "lang": "English" - }, - { - "sourceId": 76, - "url": "https://travistranslations.com/", - "sourceName": "TravisTranslations", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/travistranslations/icon.png?raw=true", - "lang": "English" - }, - { - "sourceId": 77, - "url": "https://noveldeglace.com/", - "sourceName": "NovelDeGlace", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/fr/noveldeglace/icon.png?raw=true", - "lang": "French" - }, - { - "sourceId": 78, - "url": "https://rainofsnow.com/", - "sourceName": "RainOfSnow", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/rainofsnow/icon.png?raw=true", - "lang": "French" - }, - { - "sourceId": 79, - "url": "https://reaperscans.com.br/", - "sourceName": "ReaperScans (Br)", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/reaperscans/icon.png?raw=true", - "lang": "Portuguese (Brazil)" - }, - { - "sourceId": 80, - "url": "https://arthurscan.xyz/", - "sourceName": "ArthurScans (Br)", - "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/arthurscans.png?raw=true", - "lang": "Portuguese (Brazil)" - } -] +[ + { + "sourceId": 1, + "url": "https://boxnovel.com/", + "sourceName": "BoxNovel", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/boxnovel/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 2, + "sourceName": "ReadLightNovel", + "url": "https://www.readlightnovel.org", + "lang": "English", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/readlightnovel/icon.png?raw=true" + }, + { + "sourceId": 3, + "url": "https://fastnovel.net/", + "sourceName": "FastNovel", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/fastnovel/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 4, + "url": "https://readnovelfull.com/", + "sourceName": "ReadNovelFull", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/readnovelfull/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 5, + "url": "https://www.mtlnovel.com/", + "sourceName": "MTLNovel", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/mtlnovel/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 6, + "url": "https://www.novelhall.com/", + "sourceName": "NovelHall", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/novelhall/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 7, + "url": "https://www.wuxiaworld.com/", + "sourceName": "WuxiaWorld", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/wuxiaworld/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 8, + "url": "https://novelfull.com/", + "sourceName": "NovelFull", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/novelfull/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 9, + "url": "https://noveltrench.com/", + "sourceName": "NovelTrench", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/noveltrench/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 10, + "url": "https://vipnovel.com/", + "sourceName": "VipNovel", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/vipnovel/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 11, + "url": "https://kisslightnovels.info/", + "sourceName": "KissLightNovels", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/kisslightnovels/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 12, + "url": "https://wuxiaworldsite.co/", + "sourceName": "WuxiaWorldSite", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/wuxiaworldsite/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 13, + "url": "https://freewebnovel.com/", + "sourceName": "FreeWebNovel", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/freewebnovel/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 14, + "url": "https://jpmtl.com/", + "sourceName": "JPMTL", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/jpmtl/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 15, + "url": "https://www.lightnovelpub.com/", + "sourceName": "LightNovelPub", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/lightnovelpub/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 16, + "url": "https://www.wuxiaworld.co/", + "sourceName": "WuxiaWorld.co", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/wuxiaworldco/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 17, + "url": "http://www.tapread.com/", + "sourceName": "TapRead", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/tapread/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 18, + "url": "https://www.novelupdates.cc/", + "sourceName": "NovelUpdates.cc", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/novelupdatescc/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 19, + "url": "https://m.readlightnovel.cc/", + "sourceName": "ReadLightNovel.cc", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/readlightnovelcc/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 20, + "url": "http://wuxiaworld.cloud/", + "sourceName": "WuxiaWorld.cloud", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/wuxiaworldcloud/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 21, + "url": "https://woopread.com/", + "sourceName": "WoopRead", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/woopread/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 22, + "url": "https://foxaholic.com/", + "sourceName": "Foxaholic", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/foxaholic/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 23, + "url": "https://tunovelaligera.com/", + "sourceName": "TuNovelaLigera", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/es/tunovelaligera/icon.png?raw=true", + "lang": "Spanish" + }, + { + "sourceId": 24, + "url": "https://www.skynovels.net/", + "sourceName": "SkyNovels", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/es/skynovels/icon.png?raw=true", + "lang": "Spanish" + }, + { + "sourceId": 25, + "url": "https://einherjarproject.net/", + "sourceName": "EinherjarProject", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/es/einherjarproject/icon.png?raw=true", + "lang": "Spanish" + }, + { + "sourceId": 26, + "url": "https://novelasligera.com/", + "sourceName": "NovelasLigera", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/es/novelasligera/icon.png?raw=true", + "lang": "Spanish" + }, + { + "sourceId": 27, + "url": "https://comrademao.com/", + "sourceName": "ComradeMao", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/comrademao/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 28, + "url": "https://yuukitls.com/", + "sourceName": "YuukiTls", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/es/yuukitls/icon.png?raw=true", + "lang": "Spanish" + }, + { + "sourceId": 29, + "url": "https://hasutl.wordpress.com/", + "sourceName": "Hasu Translations", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/es/hasutl/icon.png?raw=true", + "lang": "Spanish" + }, + { + "sourceId": 30, + "url": "https://oasistranslations.wordpress.com/", + "sourceName": "Oasis Translations", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/es/oasistranslations/icon.png?raw=true", + "lang": "Spanish" + }, + { + "sourceId": 31, + "url": "http://www.novelawuxia.com/", + "sourceName": "Novela Wuxia", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/es/novelawuxia/icon.png?raw=true", + "lang": "Spanish" + }, + { + "sourceId": 33, + "url": "https://www.novelpassion.com/", + "sourceName": "NovelPassion", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/novelpassion/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 34, + "url": "https://www.royalroad.com/", + "sourceName": "Royal Road", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/royalroad/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 35, + "url": "https://www.scribblehub.com/", + "sourceName": "Scribble Hub", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/scribblehub/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 36, + "url": "https://syosetu.com", + "sourceName": "Syosetu", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/jp/syosetu/icon.png?raw=true", + "lang": "Japanese" + }, + { + "sourceId": 37, + "url": "https://lnmtl.com/", + "sourceName": "LNMTL", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/lnmtl/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 38, + "url": "https://skynovel.org/", + "sourceName": "SkyNovel", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/skynovel.png?raw=true", + "lang": "English" + }, + { + "sourceId": 39, + "url": "https://novelcake.com/", + "sourceName": "NovelCake", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/novelcake.png?raw=true", + "lang": "English" + }, + { + "sourceId": 40, + "url": "https://novelsrock.com/", + "sourceName": "NovelsRock", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/novelsrock.png?raw=true", + "lang": "English" + }, + { + "sourceId": 41, + "url": "https://zinnovel.com/", + "sourceName": "ZinnNovel", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/zinnovel.png?raw=true", + "lang": "English" + }, + { + "sourceId": 42, + "url": "https://noveltranslate.com/", + "sourceName": "NovelTranslate", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/noveltranslate.png?raw=true", + "lang": "English" + }, + { + "sourceId": 43, + "url": "https://www.lunarletters.com/", + "sourceName": "LunarLetters", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/lunarletters.png?raw=true", + "lang": "English" + }, + { + "sourceId": 44, + "url": "https://sleepytranslations.com/", + "sourceName": "SleepyTranslations", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/sleepytranslations.png?raw=true", + "lang": "English" + }, + { + "sourceId": 45, + "url": "https://freenovel.me/", + "sourceName": "FreeNovelMe", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/freenovel.png?raw=true", + "lang": "English" + }, + { + "sourceId": 46, + "url": "https://1stkissnovel.love/", + "sourceName": "1stKissNovel", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/1stkissnovel.png?raw=true", + "lang": "English" + }, + { + "sourceId": 47, + "url": "https://daonovel.com/", + "sourceName": "DaoNovel", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/daonovel.png?raw=true", + "lang": "English" + }, + { + "sourceId": 48, + "url": "https://www.wuxia.blog/", + "sourceName": "Wuxia.Blog", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/wuxiablog/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 49, + "url": "https://wuxia.city/", + "sourceName": "Wuxia.City", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/wuxiacity/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 50, + "url": "https://www.novelupdates.com/", + "sourceName": "Novel Updates", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/novelupdates/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 51, + "url": "https://ranobes.net/", + "sourceName": "Ranobes", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/ranobes/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 52, + "url": "https://m.yushubo.com", + "sourceName": "Yushubo", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/ch/yushubo/icon.png?raw=true", + "lang": "Chinese" + }, + { + "sourceId": 53, + "url": "https://kolnovel.com/", + "sourceName": "KolNovel", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/wpmangastream/icons/kolnovel.png?raw=true", + "lang": "Arabic" + }, + { + "sourceId": 54, + "url": "https://rewayat-ar.site/", + "sourceName": "RewayatAr", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/wpmangastream/icons/rewayatar.png?raw=true", + "lang": "Arabic" + }, + { + "sourceId": 55, + "url": "https://mostnovel.com/", + "sourceName": "MostNovel", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/mostnovel.png?raw=true", + "lang": "English" + }, + { + "sourceId": 56, + "url": "https://www.novelmultiverse.com/", + "sourceName": "NovelMultiverse", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/novelmultiverse.png?raw=true", + "lang": "English" + }, + { + "sourceId": 57, + "url": "https://lightnovelheaven.com/", + "sourceName": "LightNovelHeaven", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/lightnovelheaven.png?raw=true", + "lang": "English" + }, + { + "sourceId": 58, + "url": "https://lightnovelshub.com/", + "sourceName": "LightNovelsHub", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/lightnovelshub.png?raw=true", + "lang": "English" + }, + { + "sourceId": 59, + "url": "https://arnovel.me/", + "sourceName": "ArNovel", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/arnovel.png?raw=true", + "lang": "Arabic" + }, + { + "sourceId": 60, + "url": "https://meionovel.id/", + "sourceName": "MeioNovel", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/meionovel.png?raw=true", + "lang": "Indonesian" + }, + { + "sourceId": 61, + "url": "https://www.webnovelover.com/", + "sourceName": "WebNovelLover", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/webnovellover.png?raw=true", + "lang": "English" + }, + { + "sourceId": 62, + "url": "https://www.wlnupdates.com/", + "sourceName": "WLNUpdates", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/wlnupdates/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 63, + "url": "https://boxnovel.online/", + "sourceName": "BoxNovel.online", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/boxnovel.online.png?raw=true", + "lang": "English" + }, + { + "sourceId": 64, + "url": "https://clicknovel.net/", + "sourceName": "ClickNovel", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/clicknovel.png?raw=true", + "lang": "English" + }, + { + "sourceId": 65, + "url": "https://readwebnovels.net/", + "sourceName": "ReadWebNovels", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/readwebnovels.png?raw=true", + "lang": "English" + }, + { + "sourceId": 66, + "url": "https://wbnovel.com/", + "sourceName": "WBNovel", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/wbnovel.png?raw=true", + "lang": "English" + }, + { + "sourceId": 67, + "url": "https://reaperscans.com/all-series/novels/", + "sourceName": "ReaperScans", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/reaperscans/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 68, + "url": "https://www.readwn.com/", + "sourceName": "Readwn.com", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/readwn/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 69, + "url": "https://ranobehub.org/", + "sourceName": "Ranobehub", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/ru/ranobehub/icon.png?raw=true", + "lang": "Russian" + }, + { + "sourceId": 70, + "url": "https://divinedaolibrary.com/", + "sourceName": "Divine Dao Library", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/divinedaolibrary/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 71, + "url": "https://novelonlinefull.com/", + "sourceName": "NovelOnlineFull.com", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/novelonlinefull/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 72, + "url": "https://www.lightnovelupdates.com/", + "sourceName": "LightNovelUpdates", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/lightnovelupdates/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 73, + "url": "https://www.epiknovel.com/", + "sourceName": "EpikNovel", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/tr/epiknovel/icon.png?raw=true", + "lang": "Turkish" + }, + { + "sourceId": 74, + "url": "https://wuxiaworld.site/", + "sourceName": "WuxiaWorld.Site", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/wuxiaworldsite.png?raw=true", + "lang": "English" + }, + { + "sourceId": 75, + "url": "https://mysticalmerries.com/", + "sourceName": "MysticalSeries", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/mysticalseries.png?raw=true", + "lang": "English" + }, + { + "sourceId": 76, + "url": "https://travistranslations.com/", + "sourceName": "TravisTranslations", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/travistranslations/icon.png?raw=true", + "lang": "English" + }, + { + "sourceId": 77, + "url": "https://noveldeglace.com/", + "sourceName": "NovelDeGlace", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/fr/noveldeglace/icon.png?raw=true", + "lang": "French" + }, + { + "sourceId": 78, + "url": "https://rainofsnow.com/", + "sourceName": "RainOfSnow", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/rainofsnow/icon.png?raw=true", + "lang": "French" + }, + { + "sourceId": 79, + "url": "https://reaperscans.com.br/", + "sourceName": "ReaperScans (Br)", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/src/en/reaperscans/icon.png?raw=true", + "lang": "Portuguese (Brazil)" + }, + { + "sourceId": 80, + "url": "https://arthurscan.xyz/", + "sourceName": "ArthurScans (Br)", + "icon": "https://github.com/LNReader/lnreader-sources/blob/main/multisrc/madara/icons/arthurscans.png?raw=true", + "lang": "Portuguese (Brazil)" + } +] diff --git a/src/sources/tr/epiknovel.js b/src/sources/tr/epiknovel.js index 2c22126b..34e5a7d5 100644 --- a/src/sources/tr/epiknovel.js +++ b/src/sources/tr/epiknovel.js @@ -1,170 +1,168 @@ -import cheerio from "react-native-cheerio"; +import cheerio from 'react-native-cheerio'; const sourceId = 73; -const sourceName = "EpikNovel"; +const sourceName = 'EpikNovel'; -const baseUrl = "https://www.epiknovel.com/"; +const baseUrl = 'https://www.epiknovel.com/'; -const popularNovels = async (page) => { - let url = baseUrl + "seri-listesi?Sayfa=" + page; - const totalPages = 5; +const popularNovels = async page => { + let url = baseUrl + 'seri-listesi?Sayfa=' + page; + const totalPages = 5; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $("div.col-lg-12.col-md-12").each(function () { - const novelName = $(this).find("h3").text(); - const novelCover = $(this).find("img").attr("data-src"); - const novelUrl = $(this).find("h3 > a").attr("href"); + $('div.col-lg-12.col-md-12').each(function () { + const novelName = $(this).find('h3').text(); + const novelCover = $(this).find('img').attr('data-src'); + const novelUrl = $(this).find('h3 > a').attr('href'); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - console.log(novels); + console.log(novels); - return { novels, totalPages }; + return {novels, totalPages}; }; -const parseNovelAndChapters = async (novelUrl) => { - const url = novelUrl; - console.log(url); +const parseNovelAndChapters = async novelUrl => { + const url = novelUrl; + console.log(url); - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novel = { sourceId, sourceName, url, novelUrl }; + let novel = {sourceId, sourceName, url, novelUrl}; - novel.novelName = $("h1#tables").text().trim(); + novel.novelName = $('h1#tables').text().trim(); - novel.novelCover = $("img.manga-cover").attr("src"); + novel.novelCover = $('img.manga-cover').attr('src'); - novel.summary = $( - "#wrapper > div.row > div.col-md-9 > div:nth-child(6) > p:nth-child(3)" - ) - .text() - .trim(); + novel.summary = $( + '#wrapper > div.row > div.col-md-9 > div:nth-child(6) > p:nth-child(3)', + ) + .text() + .trim(); - novel.status = $( - "#wrapper > div.row > div.col-md-9 > div.row > div.col-md-9 > h4:nth-child(3) > a" - ) - .text() - .trim(); + novel.status = $( + '#wrapper > div.row > div.col-md-9 > div.row > div.col-md-9 > h4:nth-child(3) > a', + ) + .text() + .trim(); - novel.author = $("#NovelInfo > p:nth-child(4)") - .text() - .replace(/Publisher:|\s/g, "") - .trim(); + novel.author = $('#NovelInfo > p:nth-child(4)') + .text() + .replace(/Publisher:|\s/g, '') + .trim(); - let novelChapters = []; + let novelChapters = []; - $("table").find("tr").first().remove(); + $('table').find('tr').first().remove(); - $("table") - .find("tr") - .each(function () { - const releaseDate = $(this).find("td:nth-child(3)").text(); + $('table') + .find('tr') + .each(function () { + const releaseDate = $(this).find('td:nth-child(3)').text(); - let chapterName = $(this).find("td:nth-child(1) > a").text(); + let chapterName = $(this).find('td:nth-child(1) > a').text(); - if ($(this).find("td:nth-child(1) > span").length > 0) { - chapterName = "🔒 " + chapterName; - } + if ($(this).find('td:nth-child(1) > span').length > 0) { + chapterName = '🔒 ' + chapterName; + } - const chapterUrl = $(this) - .find(" td:nth-child(1) > a") - .attr("href"); + const chapterUrl = $(this).find(' td:nth-child(1) > a').attr('href'); - novelChapters.push({ - chapterName, - chapterUrl, - releaseDate, - }); - }); + novelChapters.push({ + chapterName, + chapterUrl, + releaseDate, + }); + }); - novel.chapters = novelChapters; - console.log(novel); + novel.chapters = novelChapters; + console.log(novel); - return novel; + return novel; }; const parseChapter = async (novelUrl, chapterUrl) => { - const url = chapterUrl; + const url = chapterUrl; - console.log(url); + console.log(url); - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let chapterName, chapterText; + let chapterName, chapterText; - if (result.url == "https://www.epiknovel.com/login") { - chapterName = ""; - chapterText = "Premium Chapter"; - } else { - chapterName = $("#icerik > center > h4 > b").text(); - chapterText = $("div#icerik").html(); - } + if (result.url == 'https://www.epiknovel.com/login') { + chapterName = ''; + chapterText = 'Premium Chapter'; + } else { + chapterName = $('#icerik > center > h4 > b').text(); + chapterText = $('div#icerik').html(); + } - const chapter = { - sourceId, - novelUrl, - chapterUrl, - chapterName, - chapterText, - }; + const chapter = { + sourceId, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; - return chapter; + return chapter; }; -const searchNovels = async (searchTerm) => { - const url = baseUrl + "seri-listesi?q=" + searchTerm; +const searchNovels = async searchTerm => { + const url = baseUrl + 'seri-listesi?q=' + searchTerm; - const result = await fetch(url); - const body = await result.text(); + const result = await fetch(url); + const body = await result.text(); - $ = cheerio.load(body); + $ = cheerio.load(body); - let novels = []; + let novels = []; - $("div.col-lg-12.col-md-12").each(function () { - const novelName = $(this).find("h3").text(); - const novelCover = $(this).find("img").attr("data-src"); - const novelUrl = $(this).find("h3 > a").attr("href"); + $('div.col-lg-12.col-md-12').each(function () { + const novelName = $(this).find('h3').text(); + const novelCover = $(this).find('img').attr('data-src'); + const novelUrl = $(this).find('h3 > a').attr('href'); - const novel = { - sourceId, - novelName, - novelCover, - novelUrl, - }; + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; - novels.push(novel); - }); + novels.push(novel); + }); - return novels; + return novels; }; const EpikNovelScraper = { - popularNovels, - parseNovelAndChapters, - parseChapter, - searchNovels, + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, }; export default EpikNovelScraper; diff --git a/src/theme/colors.js b/src/theme/colors.js index ba166292..59fd4047 100644 --- a/src/theme/colors.js +++ b/src/theme/colors.js @@ -1,103 +1,103 @@ const AccentColors = { - default: "#2979FF", - defaultDark: "#3399FF", - midnightDusk: "#F02475", - greenApple: "#48E484", - strawberryDaiquiri: "#ED4A65", - irisBlue: "#00adb5", - hotPink: "#FF3399", - tako: "#F3B375", - yinYang: "#FFFFFF", - yang: "#000000", - springBlossom: "#c43c97", - oceanic: "#009688", - yotsuba: "#FC8C5C", - tako_light: "#66577E", + default: '#2979FF', + defaultDark: '#3399FF', + midnightDusk: '#F02475', + greenApple: '#48E484', + strawberryDaiquiri: '#ED4A65', + irisBlue: '#00adb5', + hotPink: '#FF3399', + tako: '#F3B375', + yinYang: '#FFFFFF', + yang: '#000000', + springBlossom: '#c43c97', + oceanic: '#009688', + yotsuba: '#FC8C5C', + tako_light: '#66577E', }; const RippleColors = { - default: "rgba(41,121,255,0.12)", - midnightDusk: "rgba(240,36,117,0.12)", - greenApple: "rgba(72,228,132,0.12)", - strawberryDaiquiri: "rgba(237,74,101,0.12)", - irisBlue: "rgba(0,173,181,0.12)", - hotPink: "rgba(255,51,153,0.12)", - tako: "rgba(243,179,117,0.12)", - yinYang: "rgba(255,255,255,0.12)", - yang: "rgba(0,0,0,0.12)", - springBlossom: "rgba(196,60,151,0.12)", - oceanic: "rgba(0, 150, 136,0.12)", - yotsuba: "rgba(252, 140, 92,0.12)", - tako_light: "rgba(102, 87, 126,0.12)", + default: 'rgba(41,121,255,0.12)', + midnightDusk: 'rgba(240,36,117,0.12)', + greenApple: 'rgba(72,228,132,0.12)', + strawberryDaiquiri: 'rgba(237,74,101,0.12)', + irisBlue: 'rgba(0,173,181,0.12)', + hotPink: 'rgba(255,51,153,0.12)', + tako: 'rgba(243,179,117,0.12)', + yinYang: 'rgba(255,255,255,0.12)', + yang: 'rgba(0,0,0,0.12)', + springBlossom: 'rgba(196,60,151,0.12)', + oceanic: 'rgba(0, 150, 136,0.12)', + yotsuba: 'rgba(252, 140, 92,0.12)', + tako_light: 'rgba(102, 87, 126,0.12)', }; const StatusBarStyle = { - LIGHT: "light-content", - DARK: "dark-content", + LIGHT: 'light-content', + DARK: 'dark-content', }; const TextColors = { - light: { - textColorPrimary: "#000000", - textColorSecondary: "rgba(0,0,0,0.54)", - textColorHint: "rgba(0,0,0,0.38)", - }, - dark: { - textColorPrimary: "#FFFFFF", - textColorSecondary: "rgba(255,255,255,0.7)", - textColorHint: "rgba(255,255,255,0.5)", - }, + light: { + textColorPrimary: '#000000', + textColorSecondary: 'rgba(0,0,0,0.54)', + textColorHint: 'rgba(0,0,0,0.38)', + }, + dark: { + textColorPrimary: '#FFFFFF', + textColorSecondary: 'rgba(255,255,255,0.7)', + textColorHint: 'rgba(255,255,255,0.5)', + }, }; const PrimaryColors = { - light: { - colorPrimary: "#FFFFFF", - colorPrimaryDark: "#FAFAFA", - }, - dark: { - colorPrimary: "#242529", - colorPrimaryDark: "#202125", - }, - amoled: { - colorPrimary: "#000000", - colorPrimaryDark: "#000000", - }, - midnightDusk: { - colorPrimary: "#201F27", - colorPrimaryDark: "#16151D", - }, - irisBlue: { - colorPrimary: "#393e46", - colorPrimaryDark: "#222831", - }, - tako: { - colorPrimary: "#2A2A3C", - colorPrimaryDark: "#21212E", - }, - springBlossom: { - colorPrimary: "#efe3f3", - colorPrimaryDark: "#f7f4f8", - }, - oceanic: { - colorPrimary: "#32424A", - colorPrimaryDark: "#263238", - }, - tako_light: { - colorPrimary: "#F7F5FF", - colorPrimaryDark: "#F2EDF7", - }, + light: { + colorPrimary: '#FFFFFF', + colorPrimaryDark: '#FAFAFA', + }, + dark: { + colorPrimary: '#242529', + colorPrimaryDark: '#202125', + }, + amoled: { + colorPrimary: '#000000', + colorPrimaryDark: '#000000', + }, + midnightDusk: { + colorPrimary: '#201F27', + colorPrimaryDark: '#16151D', + }, + irisBlue: { + colorPrimary: '#393e46', + colorPrimaryDark: '#222831', + }, + tako: { + colorPrimary: '#2A2A3C', + colorPrimaryDark: '#21212E', + }, + springBlossom: { + colorPrimary: '#efe3f3', + colorPrimaryDark: '#f7f4f8', + }, + oceanic: { + colorPrimary: '#32424A', + colorPrimaryDark: '#263238', + }, + tako_light: { + colorPrimary: '#F7F5FF', + colorPrimaryDark: '#F2EDF7', + }, }; const DividerColors = { - LIGHT: "rgba(0,0,0,0.12)", - DARK: "rgba(255,255,255,0.12)", + LIGHT: 'rgba(0,0,0,0.12)', + DARK: 'rgba(255,255,255,0.12)', }; export { - AccentColors, - RippleColors, - StatusBarStyle, - TextColors, - PrimaryColors, - DividerColors, + AccentColors, + RippleColors, + StatusBarStyle, + TextColors, + PrimaryColors, + DividerColors, }; diff --git a/src/theme/fonts.js b/src/theme/fonts.js index 9a0debc9..9301e060 100644 --- a/src/theme/fonts.js +++ b/src/theme/fonts.js @@ -3,13 +3,13 @@ */ export const fonts = { - "pt-sans-bold": require("../../android/app/src/main/assets/fonts/pt-sans-bold.ttf"), - "arbutus-slab": require("../../android/app/src/main/assets/fonts/arbutus-slab.ttf"), - domine: require("../../android/app/src/main/assets/fonts/domine.ttf"), - lato: require("../../android/app/src/main/assets/fonts/lato.ttf"), - "noto-sans": require("../../android/app/src/main/assets/fonts/noto-sans.ttf"), - "open-sans": require("../../android/app/src/main/assets/fonts/open-sans.ttf"), - "pt-serif": require("../../android/app/src/main/assets/fonts/pt-serif.ttf"), - lora: require("../../android/app/src/main/assets/fonts/lora.ttf"), - nunito: require("../../android/app/src/main/assets/fonts/nunito.ttf"), + 'pt-sans-bold': require('../../android/app/src/main/assets/fonts/pt-sans-bold.ttf'), + 'arbutus-slab': require('../../android/app/src/main/assets/fonts/arbutus-slab.ttf'), + domine: require('../../android/app/src/main/assets/fonts/domine.ttf'), + lato: require('../../android/app/src/main/assets/fonts/lato.ttf'), + 'noto-sans': require('../../android/app/src/main/assets/fonts/noto-sans.ttf'), + 'open-sans': require('../../android/app/src/main/assets/fonts/open-sans.ttf'), + 'pt-serif': require('../../android/app/src/main/assets/fonts/pt-serif.ttf'), + lora: require('../../android/app/src/main/assets/fonts/lora.ttf'), + nunito: require('../../android/app/src/main/assets/fonts/nunito.ttf'), }; diff --git a/src/theme/theme.js b/src/theme/theme.js index 7d4c701a..9715e5a0 100644 --- a/src/theme/theme.js +++ b/src/theme/theme.js @@ -1,67 +1,67 @@ import { - AccentColors, - DividerColors, - PrimaryColors, - RippleColors, - StatusBarStyle, - TextColors, -} from "./colors"; + AccentColors, + DividerColors, + PrimaryColors, + RippleColors, + StatusBarStyle, + TextColors, +} from './colors'; /** * Light */ export const lightTheme = { - id: 1, - name: "Light", - ...PrimaryColors.light, - ...TextColors.light, - colorAccent: AccentColors.default, - rippleColor: RippleColors.default, - searchBarColor: "#FFFFFF", - menuColor: "#FFFFFF", - dividerColor: DividerColors.LIGHT, - filterColor: "#FFC107", - colorDisabled: "rgba(220,220,220,255)", - colorButtonText: "#FFFFFF", - statusBar: StatusBarStyle.DARK, + id: 1, + name: 'Light', + ...PrimaryColors.light, + ...TextColors.light, + colorAccent: AccentColors.default, + rippleColor: RippleColors.default, + searchBarColor: '#FFFFFF', + menuColor: '#FFFFFF', + dividerColor: DividerColors.LIGHT, + filterColor: '#FFC107', + colorDisabled: 'rgba(220,220,220,255)', + colorButtonText: '#FFFFFF', + statusBar: StatusBarStyle.DARK, }; /** * Dark */ export const darkTheme = { - id: 2, - name: "Dark", - ...PrimaryColors.dark, - ...TextColors.dark, - colorAccent: AccentColors.defaultDark, - rippleColor: RippleColors.default, - searchBarColor: "#303135", - menuColor: "#242529", - filterColor: "#FFEB3B", - dividerColor: DividerColors.DARK, - colorDisabled: PrimaryColors.dark.colorPrimary, - colorButtonText: "#FFFFFF", - statusBar: StatusBarStyle.LIGHT, + id: 2, + name: 'Dark', + ...PrimaryColors.dark, + ...TextColors.dark, + colorAccent: AccentColors.defaultDark, + rippleColor: RippleColors.default, + searchBarColor: '#303135', + menuColor: '#242529', + filterColor: '#FFEB3B', + dividerColor: DividerColors.DARK, + colorDisabled: PrimaryColors.dark.colorPrimary, + colorButtonText: '#FFFFFF', + statusBar: StatusBarStyle.LIGHT, }; /** * Midnight Dusk */ export const midnightDuskTheme = { - id: 3, - name: "Midnight Dusk", - ...PrimaryColors.midnightDusk, - colorAccent: AccentColors.midnightDusk, - rippleColor: RippleColors.midnightDusk, - searchBarColor: "#201F27", - menuColor: "#201F27", - filterColor: "#FFEB3B", - dividerColor: DividerColors.DARK, - colorDisabled: "#201F27", - colorButtonText: "#FFFFFF", - statusBar: StatusBarStyle.LIGHT, - ...TextColors.dark, + id: 3, + name: 'Midnight Dusk', + ...PrimaryColors.midnightDusk, + colorAccent: AccentColors.midnightDusk, + rippleColor: RippleColors.midnightDusk, + searchBarColor: '#201F27', + menuColor: '#201F27', + filterColor: '#FFEB3B', + dividerColor: DividerColors.DARK, + colorDisabled: '#201F27', + colorButtonText: '#FFFFFF', + statusBar: StatusBarStyle.LIGHT, + ...TextColors.dark, }; /** @@ -69,19 +69,19 @@ export const midnightDuskTheme = { */ export const greenAppleTheme = { - id: 4, - name: "Green Apple", - ...PrimaryColors.dark, - ...TextColors.dark, - colorAccent: AccentColors.greenApple, - rippleColor: RippleColors.greenApple, - searchBarColor: "#303135", - menuColor: "#242529", - filterColor: "#FFEB3B", - dividerColor: DividerColors.DARK, - colorDisabled: "rgba(57,57,57,255)", - colorButtonText: "#000000", - statusBar: StatusBarStyle.LIGHT, + id: 4, + name: 'Green Apple', + ...PrimaryColors.dark, + ...TextColors.dark, + colorAccent: AccentColors.greenApple, + rippleColor: RippleColors.greenApple, + searchBarColor: '#303135', + menuColor: '#242529', + filterColor: '#FFEB3B', + dividerColor: DividerColors.DARK, + colorDisabled: 'rgba(57,57,57,255)', + colorButtonText: '#000000', + statusBar: StatusBarStyle.LIGHT, }; /** @@ -89,35 +89,35 @@ export const greenAppleTheme = { */ export const strawberryDaiquiri = { - id: 7, - name: "Strawberry Daiquiri", - ...PrimaryColors.dark, - colorAccent: AccentColors.strawberryDaiquiri, - rippleColor: RippleColors.strawberryDaiquiri, - searchBarColor: "#303135", - menuColor: "#242529", - filterColor: "#FFEB3B", - dividerColor: DividerColors.DARK, - colorDisabled: "rgba(57,57,57,255)", - colorButtonText: "#FFFFFF", - statusBar: StatusBarStyle.LIGHT, - ...TextColors.dark, + id: 7, + name: 'Strawberry Daiquiri', + ...PrimaryColors.dark, + colorAccent: AccentColors.strawberryDaiquiri, + rippleColor: RippleColors.strawberryDaiquiri, + searchBarColor: '#303135', + menuColor: '#242529', + filterColor: '#FFEB3B', + dividerColor: DividerColors.DARK, + colorDisabled: 'rgba(57,57,57,255)', + colorButtonText: '#FFFFFF', + statusBar: StatusBarStyle.LIGHT, + ...TextColors.dark, }; export const irisBlueTheme = { - id: 5, - name: "Iris Blue", - ...PrimaryColors.irisBlue, - ...TextColors.dark, - colorAccent: AccentColors.irisBlue, - rippleColor: RippleColors.irisBlue, - searchBarColor: "#393e46", - menuColor: "#393e46", - filterColor: "#FFEB3B", - dividerColor: DividerColors.DARK, - colorDisabled: "#393e46", - colorButtonText: "#16151D", - statusBar: StatusBarStyle.LIGHT, + id: 5, + name: 'Iris Blue', + ...PrimaryColors.irisBlue, + ...TextColors.dark, + colorAccent: AccentColors.irisBlue, + rippleColor: RippleColors.irisBlue, + searchBarColor: '#393e46', + menuColor: '#393e46', + filterColor: '#FFEB3B', + dividerColor: DividerColors.DARK, + colorDisabled: '#393e46', + colorButtonText: '#16151D', + statusBar: StatusBarStyle.LIGHT, }; /** @@ -125,19 +125,19 @@ export const irisBlueTheme = { */ export const takoTheme = { - id: 8, - name: "Tako", - ...PrimaryColors.tako, - colorAccent: AccentColors.tako, - rippleColor: RippleColors.tako, - searchBarColor: "#2A2A3C", - menuColor: "#484861", - filterColor: "#FFEB3B", - dividerColor: DividerColors.DARK, - colorDisabled: "#484861", - colorButtonText: PrimaryColors.tako.colorPrimaryDark, - statusBar: StatusBarStyle.LIGHT, - ...TextColors.dark, + id: 8, + name: 'Tako', + ...PrimaryColors.tako, + colorAccent: AccentColors.tako, + rippleColor: RippleColors.tako, + searchBarColor: '#2A2A3C', + menuColor: '#484861', + filterColor: '#FFEB3B', + dividerColor: DividerColors.DARK, + colorDisabled: '#484861', + colorButtonText: PrimaryColors.tako.colorPrimaryDark, + statusBar: StatusBarStyle.LIGHT, + ...TextColors.dark, }; /** @@ -145,115 +145,115 @@ export const takoTheme = { */ export const yinYangTheme = { - id: 9, - name: "Yin", - ...PrimaryColors.dark, - colorAccent: AccentColors.yinYang, - rippleColor: RippleColors.yinYang, - searchBarColor: "#303135", - menuColor: "#484861", - filterColor: "#FFEB3B", - dividerColor: DividerColors.DARK, - colorDisabled: PrimaryColors.dark.colorPrimary, - colorButtonText: "#000000", - statusBar: StatusBarStyle.LIGHT, - ...TextColors.dark, + id: 9, + name: 'Yin', + ...PrimaryColors.dark, + colorAccent: AccentColors.yinYang, + rippleColor: RippleColors.yinYang, + searchBarColor: '#303135', + menuColor: '#484861', + filterColor: '#FFEB3B', + dividerColor: DividerColors.DARK, + colorDisabled: PrimaryColors.dark.colorPrimary, + colorButtonText: '#000000', + statusBar: StatusBarStyle.LIGHT, + ...TextColors.dark, }; export const yangTheme = { - id: 11, - name: "Yang", - ...PrimaryColors.light, - colorAccent: AccentColors.yang, - rippleColor: RippleColors.yang, - searchBarColor: "#FFFFFF", - menuColor: "#484861", - filterColor: "#FFEB3B", - dividerColor: DividerColors.LIGHT, - colorDisabled: PrimaryColors.light.colorPrimary, - colorButtonText: "#FFFFFF", - statusBar: StatusBarStyle.DARK, - ...TextColors.light, + id: 11, + name: 'Yang', + ...PrimaryColors.light, + colorAccent: AccentColors.yang, + rippleColor: RippleColors.yang, + searchBarColor: '#FFFFFF', + menuColor: '#484861', + filterColor: '#FFEB3B', + dividerColor: DividerColors.LIGHT, + colorDisabled: PrimaryColors.light.colorPrimary, + colorButtonText: '#FFFFFF', + statusBar: StatusBarStyle.DARK, + ...TextColors.light, }; /** * Yin & Yang */ export const oceanicTheme = { - id: 6, - name: "Oceanic", - ...PrimaryColors.oceanic, - colorAccent: AccentColors.oceanic, - rippleColor: RippleColors.oceanic, - searchBarColor: "#32424A", - menuColor: "#32424A", - filterColor: "#FFEB3B", - dividerColor: DividerColors.DARK, - colorDisabled: PrimaryColors.oceanic.colorPrimary, - colorButtonText: "#FFFFFF", - statusBar: StatusBarStyle.LIGHT, - ...TextColors.dark, + id: 6, + name: 'Oceanic', + ...PrimaryColors.oceanic, + colorAccent: AccentColors.oceanic, + rippleColor: RippleColors.oceanic, + searchBarColor: '#32424A', + menuColor: '#32424A', + filterColor: '#FFEB3B', + dividerColor: DividerColors.DARK, + colorDisabled: PrimaryColors.oceanic.colorPrimary, + colorButtonText: '#FFFFFF', + statusBar: StatusBarStyle.LIGHT, + ...TextColors.dark, }; /** * Spring Blossom */ export const springBlossomTheme = { - id: 10, - name: "Spring Blossom", - ...PrimaryColors.springBlossom, - ...TextColors.light, - colorAccent: AccentColors.springBlossom, - rippleColor: RippleColors.springBlossom, - searchBarColor: PrimaryColors.springBlossom.colorPrimary, - menuColor: "#FFFFFF", - dividerColor: DividerColors.LIGHT, - filterColor: "#FFC107", - colorDisabled: PrimaryColors.springBlossom.colorPrimary, - colorButtonText: "#FFFFFF", - statusBar: StatusBarStyle.DARK, + id: 10, + name: 'Spring Blossom', + ...PrimaryColors.springBlossom, + ...TextColors.light, + colorAccent: AccentColors.springBlossom, + rippleColor: RippleColors.springBlossom, + searchBarColor: PrimaryColors.springBlossom.colorPrimary, + menuColor: '#FFFFFF', + dividerColor: DividerColors.LIGHT, + filterColor: '#FFC107', + colorDisabled: PrimaryColors.springBlossom.colorPrimary, + colorButtonText: '#FFFFFF', + statusBar: StatusBarStyle.DARK, }; export const yotsubaTheme = { - id: 12, - name: "Yotsuba", - ...PrimaryColors.light, - ...TextColors.light, - colorAccent: AccentColors.yotsuba, - rippleColor: RippleColors.yotsuba, - searchBarColor: PrimaryColors.light.colorPrimary, - menuColor: "#FFFFFF", - dividerColor: DividerColors.LIGHT, - filterColor: "#FFC107", - colorDisabled: PrimaryColors.light.colorPrimary, - colorButtonText: "#FFFFFF", - statusBar: StatusBarStyle.DARK, + id: 12, + name: 'Yotsuba', + ...PrimaryColors.light, + ...TextColors.light, + colorAccent: AccentColors.yotsuba, + rippleColor: RippleColors.yotsuba, + searchBarColor: PrimaryColors.light.colorPrimary, + menuColor: '#FFFFFF', + dividerColor: DividerColors.LIGHT, + filterColor: '#FFC107', + colorDisabled: PrimaryColors.light.colorPrimary, + colorButtonText: '#FFFFFF', + statusBar: StatusBarStyle.DARK, }; export const takoLightTheme = { - id: 13, - name: "Tako", - ...PrimaryColors.tako_light, - ...TextColors.light, - colorAccent: AccentColors.tako_light, - rippleColor: RippleColors.tako_light, - searchBarColor: PrimaryColors.tako_light.colorPrimary, - menuColor: "#FFFFFF", - dividerColor: DividerColors.LIGHT, - filterColor: "#FFC107", - colorDisabled: PrimaryColors.tako_light.colorPrimary, - colorButtonText: "#F3B375", - statusBar: StatusBarStyle.DARK, + id: 13, + name: 'Tako', + ...PrimaryColors.tako_light, + ...TextColors.light, + colorAccent: AccentColors.tako_light, + rippleColor: RippleColors.tako_light, + searchBarColor: PrimaryColors.tako_light.colorPrimary, + menuColor: '#FFFFFF', + dividerColor: DividerColors.LIGHT, + filterColor: '#FFC107', + colorDisabled: PrimaryColors.tako_light.colorPrimary, + colorButtonText: '#F3B375', + statusBar: StatusBarStyle.DARK, }; export const colorsAmoled = { - ...PrimaryColors.amoled, - ...TextColors.dark, - statusBar: StatusBarStyle.LIGHT, - searchBarColor: "#000000", - menuColor: "#242529", - filterColor: "#FFEB3B", - dividerColor: "rgba(255,255,255,0.15)", - colorDisabled: "rgba(33,33,33,255)", - colorButtonText: "#FFFFFF", + ...PrimaryColors.amoled, + ...TextColors.dark, + statusBar: StatusBarStyle.LIGHT, + searchBarColor: '#000000', + menuColor: '#242529', + filterColor: '#FFEB3B', + dividerColor: 'rgba(255,255,255,0.15)', + colorDisabled: 'rgba(33,33,33,255)', + colorButtonText: '#FFFFFF', }; diff --git a/src/theme/utils/setBarColor.js b/src/theme/utils/setBarColor.js index cb629632..a1eb5b69 100644 --- a/src/theme/utils/setBarColor.js +++ b/src/theme/utils/setBarColor.js @@ -1,4 +1,4 @@ -import { StatusBar } from "react-native"; +import {StatusBar} from 'react-native'; /** * Sets status and navigation bar color. @@ -6,4 +6,4 @@ import { StatusBar } from "react-native"; * @param theme */ -export const setBarColor = (theme) => StatusBar.setBarStyle(theme.statusBar); +export const setBarColor = theme => StatusBar.setBarStyle(theme.statusBar);