diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index 726c0a6d..00000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1,10 +0,0 @@ -# These are supported funding model platforms - -github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] -patreon: streetwriters -open_collective: # Replace with a single Open Collective username -tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 4ec272a6..00000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: "[Bug]" -labels: '' -assignees: '' - ---- - -**Describe the bug** -A clear and concise description of what the bug is. - -**To Reproduce** -Steps to reproduce the behavior: -1. Go to '...' -2. Click on '....' -3. Scroll down to '....' -4. See error - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**Screenshots** -If applicable, add screenshots to help explain your problem. - -**Platform Information:** - - OS: [e.g. iOS/Android] - - React Native Version [e.g. 0.64] - - Library Version [e.g. 0.5.8] - -**Additional context** -Add any other context about the problem here. diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml deleted file mode 100644 index dd08d893..00000000 --- a/.github/workflows/ios.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: iOS -on: - push: - branches: - - master - - fix-ci - pull_request: - paths: - - '.github/workflows/ios.yml' - - 'src/**' - - 'ios/**' - - 'MMKV/**' -jobs: - build: - runs-on: macos-latest - steps: - - uses: actions/checkout@v2 - - - run: npm ci --legacy-peer-deps - - run: npm run build - - - run: yarn - working-directory: example - - - run: xcode-select -p - - - run: pod install - working-directory: example/ios - name: Install pod dependencies - - name: Build iOS (debug) - working-directory: example/ios - run: "xcodebuild \ - -workspace example.xcworkspace \ - -scheme example \ - clean archive \ - -sdk iphonesimulator \ - -configuration Debug \ - -UseModernBuildSystem=YES \ - CODE_SIGNING_ALLOWED=NO" diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 38301807..00000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,57 +0,0 @@ -name: Android - -on: - push: - branches: - - master - - fix-ci - pull_request: - paths: - - '.github/workflows/main.yml' - - 'src/**' - - 'android/**' - - 'MMKV/**' - -jobs: - build: - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - include: - - version: '0.75.x' - folder: 'rn75' - - steps: - - uses: actions/checkout@v2 - - - run: printenv - - - name: Get yarn cache directory path - id: yarn-cache-dir-path - run: echo "::set-output name=dir::$(yarn cache dir)" - - - uses: actions/cache@v2 - id: yarn-cache - with: - path: ${{ steps.yarn-cache-dir-path.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ matrix.version }} - restore-keys: | - ${{ runner.os }}-yarn- - - - name: Build Android apk (release & debug) - env: - RN_VERSION: ${{ matrix.version }} - RN_FOLDER: ${{ matrix.folder }} - ANDROID_NDK_HOME: /usr/local/lib/android/sdk/ndk/26.1.10909125 - run: | - echo $RN_VERSION $RN_FOLDER $ANDROID_NDK_HOME - [[ "$RN_VERSION" == "reanimated-2" ]] && git clone --depth=1 https://github.com/software-mansion-labs/reanimated-2-playground.git "$RN_FOLDER" || npx react-native init "$RN_FOLDER" --version "$RN_VERSION" - npm ci --legacy-peer-deps - npm run build - rm -rf node_modules - cd "$RN_FOLDER" - yarn add file:.. - cd ./android - ./gradlew assembleRelease - ./gradlew assembleDebug diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml deleted file mode 100644 index 8cf67097..00000000 --- a/.github/workflows/npm-publish.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: NPM Publish - -on: - release: - types: [published] - -jobs: - publish-npm: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 - with: - node-version: 16 - registry-url: https://registry.npmjs.org/ - - run: npm ci --legacy-peer-deps - - run: npm run build - - run: npm publish - env: - NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} diff --git a/.gitignore b/.gitignore deleted file mode 100644 index fc33f4a7..00000000 --- a/.gitignore +++ /dev/null @@ -1,48 +0,0 @@ - -# OSX -# -.DS_Store - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -project.xcworkspace - - -# Android/IntelliJ -# -*.aar -build/ -.cxx -.idea -.gradle -local.properties -*.iml - -# BUCK -buck-out/ -\.buckd/ -*.keystore -dist \ No newline at end of file diff --git a/.npmignore b/.npmignore deleted file mode 100644 index 187c844a..00000000 --- a/.npmignore +++ /dev/null @@ -1,66 +0,0 @@ -src/ -!dist/src -!android/src -.github -.vscode -.yarn -index.ts -tsconfig.json -jest/tsconfig.json - -jest/memoryStore.ts - -# OSX -# -.DS_Store - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -project.xcworkspace - - -# Docs -docs/ - -# Android/IntelliJ -# -build/ -.idea -.gradle -local.properties -*.iml -.cxx -android/build - -# BUCK -buck-out/ -\.buckd/ -*.keystore - -# Other - -example/ - \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 8ac87f2a..00000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "cmake.sourceDirectory": "/Users/ammarahmed/Repos/react-native/react-native-mmkv-storage/MMKV/Core" -} diff --git a/README.md b/README.md index 5fea89d3..b50d4b57 100644 --- a/README.md +++ b/README.md @@ -1,198 +1,13 @@ -
- -
+# @react-native-oh-tpl/react-native-mmkv-storage -# +本项目基于 [react-native-mmkv-storage](https://github.com/ammarahm-ed/react-native-mmkv-storage) -
-

-License: MIT - -Android -iOS

+## 文档地址 / Documentation URL -
+[中文 / Chinese](https://gitee.com/react-native-oh-library/usage-docs/blob/master/zh-cn/react-native-mmkv-storage.md) -
-

Install the library

-
npm install react-native-mmkv-storage
-
+[英文 / English](https://gitee.com/react-native-oh-library/usage-docs/blob/master/zh-en/react-native-mmkv-storage.md) -
-

For expo bare workflow

-
expo prebuild
-
+## 请悉知 / Acknowledgements -
- -

Get Started with Documentation

- -
- -## What it is - -This library aims to provide a fast & reliable solution for you data storage needs in react-native apps. It uses [MMKV](https://github.com/Tencent/MMKV) by Tencent under the hood on Android and iOS both that is used by their WeChat app(more than 1 Billion users). Unlike other storage solutions for React Native, this library lets you store any kind of data type, in any number of database instances, with or without encryption in a very fast and efficient way. Read about it on this blog post I wrote on [dev.to](https://dev.to/ammarahmed/best-data-storage-option-for-react-native-apps-42k) - -> Learn how to build your own module with JSI on my [blog](https://blog.notesnook.com/getting-started-react-native-jsi/) - -## 0.9.0 Breaking change - -Works only with react native 0.71.0 and above. If you are on older version of react native, keep using 0.8.x. - -## Features - -### **Written in C++ using JSI** - -Starting from `v0.5.0` the library has been rewritten in C++ on Android and iOS both. It employs React Native JSI making it the fastest storage option for React Native. - -### **Simple and lightweight** - -(~ 50K Android/30K iOS) and even smaller when packaged. - -### **Fast and Efficient (0.0002s Read/Write Speed)** - -MMKV uses mmap to keep memory synced with file, and protobuf to encode/decode values to achieve best performance. -You can see the benchmarks here: [Android](https://github.com/Tencent/MMKV/wiki/android_benchmark) & [iOS](https://github.com/Tencent/MMKV/wiki/iOS_benchmark) - -### **Reactive using `useMMKVStorage` & `useIndex` Hooks** - -Hooks let's the storage update your app when a change takes place in storage. - -#### `useMMKVStorage` hook - -Starting from `v0.5.5`, thanks to the power of JSI, we now have our very own `useMMKVStorage` Hook. Think of it like a persisted state that will always write every change in storage and update your app UI instantly. It doesn't matter if you reload the app or restart it. - -```js -import { MMKVLoader, useMMKVStorage } from 'react-native-mmkv-storage'; - -const storage = new MMKVLoader().initialize(); -const App = () => { - const [user, setUser] = useMMKVStorage('user', storage, 'robert'); - const [age, setAge] = useMMKVStorage('age', storage, 24); - - return ( - - - I am {user} and I am {age} years old. - - - ); -}; -``` - -Learn more about `useMMKVStorage` hook it in the [docs](https://rnmmkv.vercel.app/#/usemmkvstorage). - -#### `useIndex` hook - -A hook that will take an array of keys and returns an array of values for those keys. This is supposed to work in combination with Transactions. When you have build your custom index, you will need an easy and quick way to load values for your index. useIndex hook actively listens to all read/write changes and updates the values accordingly. - -```js -const App = () => { - // Get list of all post ids - const postsIndex = useMMKVStorage("postsIndex",storage,[]); // ['post123','post234']; - // Get the posts based on those ids. - const [posts,update,remove] = useIndex(postsIndex,"object" storage); - - return - - - -} -``` - -Learn more about `useIndex` hook it in the [docs](https://rnmmkv.vercel.app/#/useindex). - -### **Lifecycle Control with Transaction Manager** - -Listen to a value's lifecycle and mutate it on the go. Transactions lets you register lifecycle functions with your storage instance such as Read, Write and Delete. This allows for a better and more managed control over the storage and also let's you **build custom indexes** with a few lines of code. - -```js -MMKV.transactions.register('object', 'beforewrite', ({ key, value }) => { - if (key.startsWith('post.')) { - // Call this only when the key has the post prefix. - let indexForTag = MMKV.getArray(`${value.tag}-index`) || []; - MMKV.setArray(indexForTag.push(key)); - } -}); -``` - -Learn more about how to use Transactions in [docs](https://rnmmkv.vercel.app/#/transactionmanager) - -### **Multi-Process Support** - -MMKV supports concurrent read-read and read-write access between processes. This means that you can use MMKV for various extensions and widgets and your app. - -### **Create unlimited Database instances** - -You can create many database instances. This helps greatly if you have separate logics/modules in the same app that use data differently, It also helps in better performance since each database instance is small instead of a single bulky database which makes things slower as it grows. - -```js -const userStorage = new MMKVLoader().withEncryption().withInstanceID('userdata').initialize(); - -const settingsStorage = new MMKVLoader().withInstanceID('settings').initialize(); -``` - -### **Full encryption support** - -The library supports full encryption (AES CFB-128) on Android and iOS. You can choose to store your encryption key securely for continuious usage. The library uses Keychain on iOS and Android Keystore on android (API 23 and above). Encrypting an instance is simple: - -```js -const storage = new MMKVLoader() - .withEncryption() // Generates a random key and stores it securely in Keychain - .initialize(); -``` - -And that's it. - -### **Simple indexer and data querying** - -For each database instance, there is one global key index and then there are indexes of each type of data. So querying is easy and fast. - -### **Supports redux-persist** - -Support for redux persist is also added starting from v0.3.2. - -### **Supports expo** - -You can use this library with expo [bare workflow](https://docs.expo.dev/workflow/customizing/). - -### **Flipper plugin** - -Thanks to [pnthach95](https://github.com/pnthach95/flipper-plugin-react-native-mmkv-storage/commits?author=pnthach95) Flipper plugin is finally here. https://github.com/pnthach95/flipper-plugin-react-native-mmkv-storage. It supports logging and manipulating storage values on the fly. - -## Consider supporting with a ⭐️ [star on GitHub](https://github.com/ammarahm-ed/react-native-mmkv-storage/) - -If you are using the library in one of your projects, consider supporting with a star. It takes a lot of time and effort to keep this maintained and address issues and bugs. Thank you. - -## Contact & Support - -- Create a GitHub issue for bug reports, feature requests, or questions -- Follow [@ammarahm-ed](https://github.com/ammarahm-ed) - -## I want to contribute - -That is awesome news! There is a lot happening at a very fast pace in this library right now. Every little help is precious. You can contribute in many ways: - -- Suggest code improvements on native iOS and Android -- If you have suggestion or idea you want to discuss, open an issue. -- [Open an issue](https://github.com/ammarahm-ed/react-native-mmkv-storage/issues/) if you want to make a pull request, and tell me what you want to improve or add so we can discuss -- I am always open to new ideas - -## Special thanks to - -- [ospfranco](https://github.com/ospfranco) and his work on [react-native-quick-sqlite](https://github.com/ospfranco/react-native-quick-sqlite) library which inspired async read/write. - -## License - -This library is licensed under the [MIT license](https://github.com/ammarahm-ed/react-native-mmkv-storage/blob/master/LICENSE). - -Copyright © Ammar Ahmed ([@ammarahm-ed](https://github.com/ammarahm-ed)) - -# - - -Notesnook Logo - +本项目基于 [The MIT License (MIT)](https://github.com/ammarahm-ed/react-native-mmkv-storage/blob/master/LICENSE) ,请自由地享受和参与开源。 \ No newline at end of file diff --git a/android/.classpath b/android/.classpath deleted file mode 100644 index 8d8d85f1..00000000 --- a/android/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/android/.project b/android/.project deleted file mode 100644 index 3865e0fa..00000000 --- a/android/.project +++ /dev/null @@ -1,23 +0,0 @@ - - - android - Project android created by Buildship. - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.buildship.core.gradleprojectbuilder - - - - - - org.eclipse.jdt.core.javanature - org.eclipse.buildship.core.gradleprojectnature - - diff --git a/android/build.gradle b/android/build.gradle deleted file mode 100644 index f000c0d4..00000000 --- a/android/build.gradle +++ /dev/null @@ -1,108 +0,0 @@ -buildscript { - repositories { - maven { - url "https://plugins.gradle.org/m2/" - } - mavenCentral() - google() - } - dependencies { - classpath 'com.android.tools.build:gradle:7.2.2' - } -} - -def resolveBuildType() { - Gradle gradle = getGradle() - String tskReqStr = gradle.getStartParameter().getTaskRequests()['args'].toString() - - return tskReqStr.contains('Release') ? 'release' : 'debug' -} - -apply plugin: 'com.android.library' - -def safeExtGet(prop, fallback) { - rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback -} - -def reactNativeArchitectures() { - def value = project.getProperties().get("reactNativeArchitectures") - return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"] -} - -def isNewArchitectureEnabled() { - return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true" -} - -def USE_HERMES = rootProject.ext.hermesEnabled - -repositories { - mavenCentral() -} - -android { - compileSdkVersion safeExtGet("compileSdkVersion", 31) - - def agpVersion = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION - if (agpVersion.tokenize('.')[0].toInteger() >= 7) { - namespace "com.ammarahmed.mmkv" - } - - if (rootProject.hasProperty("ndkPath")) { - ndkPath rootProject.ext.ndkPath - } - if (rootProject.hasProperty("ndkVersion")) { - ndkVersion rootProject.ext.ndkVersion - } - - buildFeatures { - prefab true - buildConfig true - } - - - - defaultConfig { - minSdkVersion safeExtGet('minSdkVersion', 19) - targetSdkVersion safeExtGet('targetSdkVersion', 31) - buildConfigField("boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()) - var appProject = rootProject.allprojects.find {it.plugins.hasPlugin('com.android.application')} - externalNativeBuild { - cmake { - cppFlags "-O2 -frtti -fexceptions -Wall -Wno-unused-variable -fstack-protector-all" - arguments "-DANDROID_STL=c++_shared" - abiFilters (*reactNativeArchitectures()) - } - } - packagingOptions { - doNotStrip resolveBuildType() == 'debug' ? "**/**/*.so" : '' - excludes = [ - "META-INF", - "META-INF/**", - "**/libfbjni.so", - "**/libjsi.so", - "**/libreact_nativemodule_core.so", - "**/libturbomodulejsijni.so", - "**/libc++_shared.so" - ] - } - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - externalNativeBuild { - cmake { - path "./src/main/rnmmkv/CMakeLists.txt" - } - } -} - -dependencies { - //noinspection GradleDynamicVersion - implementation 'com.facebook.react:react-android:+' - implementation "androidx.security:security-crypto:1.1.0-alpha03" - implementation 'com.google.code.gson:gson:2.8.6' -} - diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar deleted file mode 100755 index f6b961fd..00000000 Binary files a/android/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100755 index 0d37ed4d..00000000 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Mon Mar 09 09:56:54 PKT 2020 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip diff --git a/android/gradlew b/android/gradlew deleted file mode 100755 index cccdd3d5..00000000 --- a/android/gradlew +++ /dev/null @@ -1,172 +0,0 @@ -#!/usr/bin/env sh - -############################################################################## -## -## 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="" - -# 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, switch paths to Windows format before running java -if $cygwin ; 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=$((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" - -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - -exec "$JAVACMD" "$@" diff --git a/android/gradlew.bat b/android/gradlew.bat deleted file mode 100755 index e95643d6..00000000 --- a/android/gradlew.bat +++ /dev/null @@ -1,84 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml deleted file mode 100644 index 09c8481f..00000000 --- a/android/src/main/AndroidManifest.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - \ No newline at end of file diff --git a/android/src/main/java/com/ammarahmed/mmkv/Constants.java b/android/src/main/java/com/ammarahmed/mmkv/Constants.java deleted file mode 100644 index 0e336d96..00000000 --- a/android/src/main/java/com/ammarahmed/mmkv/Constants.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.ammarahmed.mmkv; - -public class Constants { - - // Key Store - public static final String KEYSTORE_PROVIDER_1 = "AndroidKeyStore"; - public static final String KEYSTORE_PROVIDER_2 = "AndroidKeyStoreBCWorkaround"; - public static final String KEYSTORE_PROVIDER_3 = "AndroidOpenSSL"; - - public static final String RSA_ALGORITHM = "RSA/ECB/PKCS1Padding"; - public static final String AES_ALGORITHM = "AES/ECB/PKCS5Padding"; - - public static final String TAG = "RNSecureStorage"; - - // Internal storage file - public static final String SKS_KEY_FILENAME = "SKS_KEY_FILE"; - public static final String SKS_DATA_FILENAME = "SKS_DATA_FILE"; - - - public static final int DATA_TYPE_STRING = 1; - public static final int DATA_TYPE_INT = 2; - public static final int DATA_TYPE_BOOL = 3; - public static final int DATA_TYPE_MAP = 4; - public static final int DATA_TYPE_ARRAY = 5; - -} diff --git a/android/src/main/java/com/ammarahmed/mmkv/MMKV.java b/android/src/main/java/com/ammarahmed/mmkv/MMKV.java deleted file mode 100644 index 0eefe5ae..00000000 --- a/android/src/main/java/com/ammarahmed/mmkv/MMKV.java +++ /dev/null @@ -1,261 +0,0 @@ -package com.ammarahmed.mmkv; - -import android.content.Context; -import android.os.Parcel; -import android.os.Parcelable; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import java.lang.reflect.Field; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Set; - -public class MMKV { - - static public final int SINGLE_PROCESS_MODE = 0x1; - static public final int MULTI_PROCESS_MODE = 0x2; - private long nativeHandle; - private static final Set checkedHandleSet; - private String rootDir; - - static { - checkedHandleSet = Collections.synchronizedSet(new HashSet()); - } - - // call on program start - public static String initialize(Context context) { - String root = context.getFilesDir().getAbsolutePath() + "/mmkv"; - return initialize(root); - } - - public static String initialize(String rootDir) { - - jniInitialize(rootDir, 0); - rootDir = rootDir; - return rootDir; - } - - private static native void jniInitialize(String rootDir, int level); - - - @Nullable - public static MMKV mmkvWithID(String mmapID) { - - long handle = getMMKVWithID(mmapID, SINGLE_PROCESS_MODE, null, null); - return checkProcessMode(handle, mmapID, SINGLE_PROCESS_MODE); - } - - @Nullable - public static MMKV mmkvWithID(String mmapID, int mode, @Nullable String cryptKey) { - - long handle = getMMKVWithID(mmapID, mode, cryptKey, null); - return checkProcessMode(handle, mmapID, mode); - } - - @Nullable - public static MMKV mmkvWithID(String mmapID, int mode) { - - - long handle = getMMKVWithID(mmapID, mode, null, null); - return checkProcessMode(handle, mmapID, mode); - } - - private native static long - getMMKVWithID(String mmapID, int mode, @Nullable String cryptKey, @Nullable String rootPath); - - - @Nullable - private static MMKV checkProcessMode(long handle, String mmapID, int mode) { - if (handle == 0) { - return null; - } - if (!checkedHandleSet.contains(handle)) { - if (!checkProcessMode(handle)) { - String message; - if (mode == SINGLE_PROCESS_MODE) { - message = "Opening a multi-process MMKV instance [" + mmapID + "] with SINGLE_PROCESS_MODE!"; - } else { - message = "Opening a MMKV instance [" + mmapID + "] with MULTI_PROCESS_MODE, "; - message += "while it's already been opened with SINGLE_PROCESS_MODE by someone somewhere else!"; - } - throw new IllegalArgumentException(message); - } - checkedHandleSet.add(handle); - } - - return new MMKV(handle); - - } - - private MMKV(long handle) { - nativeHandle = handle; - } - - private static native boolean checkProcessMode(long handle); - - public boolean containsKey(String key) { - return containsKey(nativeHandle, key); - } - private native boolean containsKey(long handle, String key); - - @SuppressWarnings("unchecked") - @Nullable - public T decodeParcelable(String key, Class tClass) { - return decodeParcelable(key, tClass, null); - } - - @SuppressWarnings("unchecked") - @Nullable - public T decodeParcelable(String key, Class tClass, @Nullable T defaultValue) { - if (tClass == null) { - return defaultValue; - } - - byte[] bytes = decodeBytes(nativeHandle, key); - if (bytes == null) { - return defaultValue; - } - - Parcel source = Parcel.obtain(); - source.unmarshall(bytes, 0, bytes.length); - source.setDataPosition(0); - - try { - String name = tClass.toString(); - Parcelable.Creator creator; - synchronized (mCreators) { - creator = (Parcelable.Creator) mCreators.get(name); - if (creator == null) { - Field f = tClass.getField("CREATOR"); - creator = (Parcelable.Creator) f.get(null); - if (creator != null) { - mCreators.put(name, creator); - } - } - } - if (creator != null) { - return creator.createFromParcel(source); - } else { - throw new Exception("Parcelable protocol requires a " - + "non-null static Parcelable.Creator object called " - + "CREATOR on class " + name); - } - } catch (Exception e) { - - } finally { - source.recycle(); - } - return defaultValue; - } - - private static final HashMap> mCreators = new HashMap<>(); - - @Nullable - private native byte[] decodeBytes(long handle, String key); - - public void removeValueForKey(String key) { - removeValueForKey(nativeHandle, key); - } - - private native void removeValueForKey(long handle, String key); - - @Nullable - public Set decodeStringSet(String key) { - return decodeStringSet(key, null); - } - - @Nullable - public Set decodeStringSet(String key, @Nullable Set defaultValue) { - return decodeStringSet(key, defaultValue, HashSet.class); - } - - @Nullable - private native String[] decodeStringSet(long handle, String key); - - @SuppressWarnings("unchecked") - @Nullable - public Set decodeStringSet(String key, @Nullable Set defaultValue, Class cls) { - String[] result = decodeStringSet(nativeHandle, key); - if (result == null) { - return defaultValue; - } - Set a; - try { - a = cls.newInstance(); - } catch (IllegalAccessException e) { - return defaultValue; - } catch (InstantiationException e) { - return defaultValue; - } - a.addAll(Arrays.asList(result)); - return a; - } - - public int decodeInt(String key) { - return decodeInt(nativeHandle, key, 0); - } - - public int decodeInt(String key, int defaultValue) { - return decodeInt(nativeHandle, key, defaultValue); - } - - private native int decodeInt(long handle, String key, int defaultValue); - - public double decodeDouble(String key) { - return decodeDouble(nativeHandle, key, 0); - } - - public double decodeDouble(String key, double defaultValue) { - return decodeDouble(nativeHandle, key, defaultValue); - } - - private native double decodeDouble(long handle, String key, double defaultValue); - - public boolean encode(String key, @Nullable String value) { - return encodeString(nativeHandle, key, value); - } - - private native boolean encodeString(long handle, String key, @Nullable String value); - - public boolean encode(String key, double value) { - return encodeDouble(nativeHandle, key, value); - } - - private native boolean encodeDouble(long handle, String key, double value); - - public boolean encode(String key, int value) { - return encodeInt(nativeHandle, key, value); - } - - private native boolean encodeInt(long handle, String key, int value); - - public boolean encode(String key, @Nullable Set value) { - return encodeSet(nativeHandle, key, (value == null) ? null : value.toArray(new String[0])); - } - - private native boolean encodeSet(long handle, String key, @Nullable String[] value); - - @Nullable - public native String[] getAllKeys(long handle); - - @NonNull - public Set getAllKeys() { - String[] result = getAllKeys(nativeHandle); - - if(result == null) { - return Collections.emptySet(); - } - - return new HashSet<>(Arrays.asList(result)); - } - - @Nullable - private native String decodeString(long handle, String key, String defaultValue); - - @Nullable - public String decodeString(String key, @Nullable String defaultValue) { - return decodeString(nativeHandle, key, defaultValue); - } -} diff --git a/android/src/main/java/com/ammarahmed/mmkv/RNMMKVModule.java b/android/src/main/java/com/ammarahmed/mmkv/RNMMKVModule.java deleted file mode 100644 index 80f3fdb7..00000000 --- a/android/src/main/java/com/ammarahmed/mmkv/RNMMKVModule.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.ammarahmed.mmkv; - -import android.os.Bundle; -import android.os.Parcel; -import android.os.Parcelable; -import android.util.Log; - -import androidx.annotation.Nullable; - -import com.facebook.react.bridge.Arguments; -import com.facebook.react.bridge.Callback; -import com.facebook.react.bridge.JavaScriptContextHolder; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; -import com.facebook.react.bridge.ReactMethod; -import com.facebook.react.bridge.ReadableMap; -import com.facebook.react.bridge.WritableArray; -import com.facebook.react.bridge.WritableMap; -import com.facebook.react.module.annotations.ReactModule; -import com.facebook.react.turbomodule.core.CallInvokerHolderImpl; -import com.google.gson.Gson; -import com.ammarahmed.mmkv.MMKV; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -@ReactModule(name = RNMMKVModule.NAME) -public class RNMMKVModule extends ReactContextBaseJavaModule { - - public static final String NAME = "MMKVNative"; - - private final ReactApplicationContext reactContext; - private SecureKeystore secureKeystore; - - static { - System.loadLibrary("rnmmkv"); - } - - private native void nativeInstall(long jsi, String rootPath); - - private native void destroy(); - - public RNMMKVModule(ReactApplicationContext reactContext) { - super(reactContext); - this.reactContext = reactContext; - secureKeystore = new SecureKeystore(reactContext); - } - - public void installLib(JavaScriptContextHolder reactContext, String rootPath) {} - - // Installing JSI Bindings as done by - // https://github.com/mrousavy/react-native-mmkv - @ReactMethod(isBlockingSynchronousMethod = true) - public boolean install() { - - String rootPath = reactContext.getFilesDir().getAbsolutePath() + "/mmkv"; - JavaScriptContextHolder jsContext = getReactApplicationContext().getJavaScriptContextHolder(); - CallInvokerHolderImpl jsCallInvokerHolder = (CallInvokerHolderImpl)reactContext.getCatalystInstance().getJSCallInvokerHolder(); - - if (jsContext.get() != 0) { - migrate(); - this.nativeInstall( - jsContext.get(), - rootPath - ); - return true; - } else { - Log.e("RNMMKVModule","JSI Runtime is not available in debug mode"); - return false; - } - - } - - @Override - public void initialize() { - super.initialize(); - } - - public void migrate() { - MMKV.initialize(reactContext); - MMKV kv = MMKV.mmkvWithID("mmkvIDStore"); - boolean hasKey = kv.containsKey("mmkvIdStore"); - HashMap IdStore = new HashMap<>(); - if (hasKey) { - Bundle mmkvIdStore = kv.decodeParcelable("mmkvIdStore", Bundle.class); - IdStore = (HashMap) mmkvIdStore.getSerializable("mmkvIdStore"); - Set keys = IdStore.keySet(); - for (String key : keys) { - HashMap child = (HashMap) IdStore.get(key); - - boolean isEncrypted = false; - if (child.containsKey("encrypted")) { - isEncrypted = (boolean) child.get("encrypted"); - } - if (isEncrypted && !child.containsKey("alias")) { - Set storeKeys = child.keySet(); - String alias = (String) child.get("alias"); - for (String storeKey: storeKeys) { - if (storeKey == null) continue; - if (!storeKey.equals("ID") && !storeKey.equals("encrypted")) { - alias = (String) child.get(storeKey); - } - } - child.put("alias",alias); - } - Gson gson = new Gson(); - String json = gson.toJson(child); - kv.encode(key, json); - - if (isEncrypted) { - String alias = (String) child.get("alias"); - if (secureKeystore.secureKeyExists(alias)) { - String cKey = secureKeystore.getSecureKey(alias); - MMKV kvv = MMKV.mmkvWithID(key, MMKV.SINGLE_PROCESS_MODE, cKey); - writeToJSON(kvv); - } - } else { - MMKV kvv = MMKV.mmkvWithID(key, MMKV.SINGLE_PROCESS_MODE); - writeToJSON(kvv); - } - - } - kv.removeValueForKey("mmkvIdStore"); - } - } - - public void writeToJSON(MMKV kvv) { - Gson gson = new Gson(); - Set mapIndex = new HashSet<>(); - mapIndex = kvv.decodeStringSet("mapIndex", mapIndex); - if (mapIndex != null) { - for (String string : mapIndex) { - Bundle bundle = kvv.decodeParcelable(string, Bundle.class); - if (bundle != null) { - WritableMap map = Arguments.fromBundle(bundle); - String obj = gson.toJson(map.toHashMap()); - kvv.encode(string, obj); - } - - } - } - Set arrayIndex = new HashSet<>(); - arrayIndex = kvv.decodeStringSet("arrayIndex", arrayIndex); - if (arrayIndex != null) { - for (String string : arrayIndex) { - Bundle bundle = kvv.decodeParcelable(string, Bundle.class); - if (bundle != null) { - WritableMap map = Arguments.fromBundle(bundle); - if (map.getArray(string) != null) { - ArrayList list = map.getArray(string).toArrayList(); - String obj = gson.toJson(list); - kvv.encode(string, obj); - } - - } - - } - } - - - Set intIndex = new HashSet<>(); - if (intIndex != null) { - intIndex = kvv.decodeStringSet("intIndex", intIndex); - for (String key : intIndex) { - int val = kvv.decodeInt(key); - double d = val; - kvv.encode(key, d); - } - kvv.encode("numberIndex", intIndex); - } - - - } - - @Override - public String getName() { - return "MMKVNative"; - } - - public boolean secureKeyExists(String key) { - return secureKeystore.secureKeyExists(key); - } - - public void removeSecureKey(String key) { - secureKeystore.removeSecureKey(key); - } - - public void setSecureKey(String key, String value) { - secureKeystore.setSecureKey(key, value); - } - - public String getSecureKey(String key) { - return secureKeystore.getSecureKey(key); - } - -} \ No newline at end of file diff --git a/android/src/main/java/com/ammarahmed/mmkv/RNMMKVPackage.java b/android/src/main/java/com/ammarahmed/mmkv/RNMMKVPackage.java deleted file mode 100644 index 4f6481b6..00000000 --- a/android/src/main/java/com/ammarahmed/mmkv/RNMMKVPackage.java +++ /dev/null @@ -1,74 +0,0 @@ - -package com.ammarahmed.mmkv; - -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.HashMap; - -import androidx.annotation.Nullable; - -import com.facebook.react.ReactPackage; -import com.facebook.react.bridge.NativeModule; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.uimanager.ViewManager; -import com.facebook.react.bridge.JavaScriptModule; -import com.facebook.react.TurboReactPackage; -import com.facebook.react.module.annotations.ReactModule; -import com.facebook.react.module.model.ReactModuleInfo; -import com.facebook.react.module.model.ReactModuleInfoProvider; - -public class RNMMKVPackage extends TurboReactPackage implements ReactPackage { - - @Nullable - @Override - public NativeModule getModule(String name, ReactApplicationContext reactContext) { - return new RNMMKVModule(reactContext); - } - - @Override - public ReactModuleInfoProvider getReactModuleInfoProvider() { - Class[] moduleList = new Class[] { - RNMMKVModule.class - }; - - final Map reactModuleInfoMap = new HashMap<>(); - for (Class moduleClass : moduleList) { - ReactModule reactModule = moduleClass.getAnnotation(ReactModule.class); - - reactModuleInfoMap.put( - reactModule.name(), - new ReactModuleInfo( - reactModule.name(), - moduleClass.getName(), - true, - reactModule.needsEagerInit(), - reactModule.hasConstants(), - reactModule.isCxxModule(), - BuildConfig.IS_NEW_ARCHITECTURE_ENABLED)); - } - - return new ReactModuleInfoProvider() { - @Override - public Map getReactModuleInfos() { - return reactModuleInfoMap; - } - }; - } - - @Override - public List createNativeModules(ReactApplicationContext reactContext) { - return Arrays.asList(new RNMMKVModule(reactContext)); - } - - // Deprecated from RN 0.47 - public List> createJSModules() { - return Collections.emptyList(); - } - - @Override - public List createViewManagers(ReactApplicationContext reactContext) { - return Collections.emptyList(); - } -} \ No newline at end of file diff --git a/android/src/main/java/com/ammarahmed/mmkv/SecureKeystore.java b/android/src/main/java/com/ammarahmed/mmkv/SecureKeystore.java deleted file mode 100644 index a307e825..00000000 --- a/android/src/main/java/com/ammarahmed/mmkv/SecureKeystore.java +++ /dev/null @@ -1,337 +0,0 @@ -package com.ammarahmed.mmkv; - -import android.content.Context; -import android.content.SharedPreferences; -import android.os.Build; -import android.security.KeyPairGeneratorSpec; -import android.util.Log; - -import androidx.security.crypto.EncryptedSharedPreferences; -import androidx.security.crypto.MasterKey; - -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.uimanager.IllegalViewOperationException; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.math.BigInteger; -import java.security.GeneralSecurityException; -import java.security.KeyPairGenerator; -import java.security.KeyStore; -import java.security.PrivateKey; -import java.security.PublicKey; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Locale; - -import javax.crypto.Cipher; -import javax.crypto.CipherInputStream; -import javax.crypto.CipherOutputStream; -import javax.crypto.KeyGenerator; -import javax.crypto.SecretKey; -import javax.crypto.spec.SecretKeySpec; -import javax.security.auth.x500.X500Principal; - -public class SecureKeystore { - - private SharedPreferences prefs; - private ReactApplicationContext reactContext; - private final String SharedPrefFileName = "rnmmkv.shareprefs"; - - private boolean useKeystore() { - return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M; - } - - public SecureKeystore(ReactApplicationContext reactApplicationContext) { - - reactContext = reactApplicationContext; - if (!useKeystore()) { - try { - MasterKey key = new MasterKey.Builder(reactContext) - .setKeyScheme(MasterKey.KeyScheme.AES256_GCM) - .build(); - - prefs = EncryptedSharedPreferences.create( - reactContext, - "e4b001df9a082298dd090bb7455c45d92fbd5dda.xml", - key, - EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV, - EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM); - } catch (GeneralSecurityException | IOException | RuntimeException e) { - Log.e("RNMMKV:SecureKeystore", "Failed to create encrypted shared preferences! Failing back to standard SharedPreferences",e); - prefs = reactContext.getSharedPreferences(SharedPrefFileName, Context.MODE_PRIVATE); - } - - } - } - - public static boolean isRTL(Locale locale) { - - final int directionality = Character.getDirectionality(locale.getDisplayName().charAt(0)); - return directionality == Character.DIRECTIONALITY_RIGHT_TO_LEFT || - directionality == Character.DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC; - } - - - public void setSecureKey(String key, String value) { - - - if (useKeystore()) { - - try { - Locale initialLocale = Locale.getDefault(); - if (isRTL(initialLocale)) { - Locale.setDefault(Locale.ENGLISH); - setCipherText(reactContext, key, value); - Locale.setDefault(initialLocale); - } else { - setCipherText(reactContext, key, value); - } - } catch (Exception e) { - } - - } else { - try { - SharedPreferences.Editor editor = prefs.edit(); - editor.putString(key, value); - editor.apply(); - } catch (Exception e) { - } - } - } - - - public String getSecureKey(String key) { - if (useKeystore()) { - try { - String value = getPlainText(reactContext, key); - - - return value; - - - } catch (FileNotFoundException fnfe) { - - - return null; - - - } catch (Exception e) { - - - return null; - - } - } else { - try { - String value = prefs.getString(key, null); - - - return value; - - } catch (IllegalViewOperationException e) { - - - return null; - } - } - } - - public boolean secureKeyExists(String key) { - if (useKeystore()) { - try { - - boolean exists = exists(reactContext, key); - - return exists; - - - } catch (Exception e) { - - return false; - - } - } else { - try { - boolean exists = prefs.contains(key); - - return exists; - - - } catch (IllegalViewOperationException e) { - - return false; - } - } - } - - - public void removeSecureKey(String key) { - ArrayList fileDeleted = new ArrayList(); - if (useKeystore()) { - try { - for (String filename : new String[]{ - Constants.SKS_DATA_FILENAME + key, - Constants.SKS_KEY_FILENAME + key, - }) { - fileDeleted.add(reactContext.deleteFile(filename)); - } - - } catch (Exception e) { - - } - } else { - try { - if (prefs.getString(key, null) == null) { - - } else { - SharedPreferences.Editor editor = prefs.edit(); - editor.remove(key).apply(); - - } - } catch (Exception e) { - - } - } - } - - - private PublicKey getOrCreatePublicKey(Context context, String alias) throws GeneralSecurityException, IOException { - KeyStore keyStore = KeyStore.getInstance(getKeyStore()); - keyStore.load(null); - - if (!keyStore.containsAlias(alias) || keyStore.getCertificate(alias) == null) { - Log.i(Constants.TAG, "no existing asymmetric keys for alias"); - - Calendar start = Calendar.getInstance(); - Calendar end = Calendar.getInstance(); - end.add(Calendar.YEAR, 50); - KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(context) - .setAlias(alias) - .setSubject(new X500Principal("CN=" + alias)) - .setSerialNumber(BigInteger.ONE) - .setStartDate(start.getTime()) - .setEndDate(end.getTime()) - .build(); - - KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", getKeyStore()); - generator.initialize(spec); - generator.generateKeyPair(); - - Log.i(Constants.TAG, "created new asymmetric keys for alias"); - } - - return keyStore.getCertificate(alias).getPublicKey(); - } - - private byte[] encryptRsaPlainText(PublicKey publicKey, byte[] plainTextBytes) throws GeneralSecurityException, IOException { - Cipher cipher = Cipher.getInstance(Constants.RSA_ALGORITHM); - cipher.init(Cipher.ENCRYPT_MODE, publicKey); - return encryptCipherText(cipher, plainTextBytes); - } - - private byte[] encryptAesPlainText(SecretKey secretKey, String plainText) throws GeneralSecurityException, IOException { - Cipher cipher = Cipher.getInstance(Constants.AES_ALGORITHM); - cipher.init(Cipher.ENCRYPT_MODE, secretKey); - return encryptCipherText(cipher, plainText); - } - - private byte[] encryptCipherText(Cipher cipher, String plainText) throws GeneralSecurityException, IOException { - return encryptCipherText(cipher, plainText.getBytes("UTF-8")); - } - - private byte[] encryptCipherText(Cipher cipher, byte[] plainTextBytes) throws GeneralSecurityException, IOException { - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - CipherOutputStream cipherOutputStream = new CipherOutputStream(outputStream, cipher); - cipherOutputStream.write(plainTextBytes); - cipherOutputStream.close(); - return outputStream.toByteArray(); - } - - private SecretKey getOrCreateSecretKey(Context context, String alias) throws GeneralSecurityException, IOException { - try { - return getSymmetricKey(context, alias); - } catch (FileNotFoundException fnfe) { - Log.i(Constants.TAG, "no existing symmetric key for alias"); - - KeyGenerator keyGenerator = KeyGenerator.getInstance("AES"); - //32bytes / 256bits AES key - keyGenerator.init(256); - SecretKey secretKey = keyGenerator.generateKey(); - PublicKey publicKey = getOrCreatePublicKey(context, alias); - Storage.writeValues(context, Constants.SKS_KEY_FILENAME + alias, - encryptRsaPlainText(publicKey, secretKey.getEncoded())); - - Log.i(Constants.TAG, "created new symmetric keys for alias"); - return secretKey; - } - } - - public void setCipherText(Context context, String alias, String input) throws GeneralSecurityException, IOException { - Storage.writeValues(context, Constants.SKS_DATA_FILENAME + alias, - encryptAesPlainText(getOrCreateSecretKey(context, alias), input)); - } - - private PrivateKey getPrivateKey(String alias) throws GeneralSecurityException, IOException { - KeyStore keyStore = KeyStore.getInstance(getKeyStore()); - keyStore.load(null); - return (PrivateKey) keyStore.getKey(alias, null); - } - - private byte[] decryptRsaCipherText(PrivateKey privateKey, byte[] cipherTextBytes) throws GeneralSecurityException, IOException { - Cipher cipher = Cipher.getInstance(Constants.RSA_ALGORITHM); - cipher.init(Cipher.DECRYPT_MODE, privateKey); - return decryptCipherText(cipher, cipherTextBytes); - } - - private byte[] decryptAesCipherText(SecretKey secretKey, byte[] cipherTextBytes) throws GeneralSecurityException, IOException { - Cipher cipher = Cipher.getInstance(Constants.AES_ALGORITHM); - cipher.init(Cipher.DECRYPT_MODE, secretKey); - return decryptCipherText(cipher, cipherTextBytes); - } - - private byte[] decryptCipherText(Cipher cipher, byte[] cipherTextBytes) throws IOException { - ByteArrayInputStream bais = new ByteArrayInputStream(cipherTextBytes); - CipherInputStream cipherInputStream = new CipherInputStream(bais, cipher); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - byte[] buffer = new byte[256]; - int bytesRead = cipherInputStream.read(buffer); - while (bytesRead != -1) { - baos.write(buffer, 0, bytesRead); - bytesRead = cipherInputStream.read(buffer); - } - return baos.toByteArray(); - } - - private SecretKey getSymmetricKey(Context context, String alias) throws GeneralSecurityException, IOException { - byte[] cipherTextBytes = Storage.readValues(context, Constants.SKS_KEY_FILENAME + alias); - return new SecretKeySpec(decryptRsaCipherText(getPrivateKey(alias), cipherTextBytes), Constants.AES_ALGORITHM); - } - - public String getPlainText(Context context, String alias) throws GeneralSecurityException, IOException { - SecretKey secretKey = getSymmetricKey(context, alias); - byte[] cipherTextBytes = Storage.readValues(context, Constants.SKS_DATA_FILENAME + alias); - return new String(decryptAesCipherText(secretKey, cipherTextBytes), "UTF-8"); - } - - public boolean exists(Context context, String alias) throws IOException { - return Storage.exists(context, Constants.SKS_DATA_FILENAME + alias); - } - - - private String getKeyStore() { - try { - KeyStore.getInstance(Constants.KEYSTORE_PROVIDER_1); - return Constants.KEYSTORE_PROVIDER_1; - } catch (Exception err) { - try { - KeyStore.getInstance(Constants.KEYSTORE_PROVIDER_2); - return Constants.KEYSTORE_PROVIDER_2; - } catch (Exception e) { - return Constants.KEYSTORE_PROVIDER_3; - } - } - } -} \ No newline at end of file diff --git a/android/src/main/java/com/ammarahmed/mmkv/Storage.java b/android/src/main/java/com/ammarahmed/mmkv/Storage.java deleted file mode 100644 index 4a292837..00000000 --- a/android/src/main/java/com/ammarahmed/mmkv/Storage.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.ammarahmed.mmkv; - -import android.content.Context; - -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; - -public final class Storage { - - public static void writeValues(Context context, String filename, byte[] bytes) throws IOException { - FileOutputStream fos = context.openFileOutput(filename, Context.MODE_PRIVATE); - fos.write(bytes); - fos.close(); - } - - public static byte[] readValues(Context context, String filename) throws IOException { - FileInputStream fis = context.openFileInput(filename); - ByteArrayOutputStream baos = new ByteArrayOutputStream(1024); - byte[] buffer = new byte[1024]; - int bytesRead = fis.read(buffer); - while(bytesRead != -1) { - baos.write(buffer, 0, bytesRead); - bytesRead = fis.read(buffer); - } - return baos.toByteArray(); - } - - public static boolean exists(Context context, String filename) throws IOException { - File file = context.getFileStreamPath(filename); - return file != null && file.exists(); - } - - public static void resetValues(Context context, String[] filenames) { - for(String filename : filenames) { - context.deleteFile(filename); - } - } -} \ No newline at end of file diff --git a/android/src/main/rnmmkv/CMakeLists.txt b/android/src/main/rnmmkv/CMakeLists.txt deleted file mode 100644 index a61f56ab..00000000 --- a/android/src/main/rnmmkv/CMakeLists.txt +++ /dev/null @@ -1,37 +0,0 @@ -cmake_minimum_required(VERSION 3.9.0) - -set (PACKAGE_NAME "rnmmkv") -project(PACKAGE_NAME) -set (BUILD_DIR ../../../) -set(CMAKE_VERBOSE_MAKEFILE ON) -set(CMAKE_CXX_STANDARD 17) - -add_subdirectory(../../../../MMKV/Core core) - -add_library( - ${PACKAGE_NAME} - SHARED - ./rnmmkv-adapter.cpp -) - -set_target_properties( - ${PACKAGE_NAME} PROPERTIES - CXX_STANDARD 17 - CXX_EXTENSIONS OFF - POSITION_INDEPENDENT_CODE ON -) - -find_package(ReactAndroid REQUIRED CONFIG) -find_library(log-lib log) -find_package(fbjni REQUIRED CONFIG) - -target_link_libraries( - ${PACKAGE_NAME} - core - ${log-lib} - fbjni::fbjni - ReactAndroid::jsi - ReactAndroid::turbomodulejsijni - ReactAndroid::react_nativemodule_core - android -) diff --git a/android/src/main/rnmmkv/rnmmkv-adapter.cpp b/android/src/main/rnmmkv/rnmmkv-adapter.cpp deleted file mode 100644 index 628287c1..00000000 --- a/android/src/main/rnmmkv/rnmmkv-adapter.cpp +++ /dev/null @@ -1,1059 +0,0 @@ -#include -#include -#include -#include -#include "MMKV.h" -#include "MMKVPredef.h" -#include "MMBuffer.h" -#include - -using namespace facebook; -using namespace jsi; -using namespace std; - -static vector mmkvInstances; - -static string rPath = ""; -static JavaVM *vm; -static jclass mmkvclass; -static jobject mmkvobject; - -static string jstring2string(JNIEnv *env, jstring str) -{ - string result; - if (!str) - return result; - - const char *kstr = env->GetStringUTFChars(str, nullptr); - if (kstr) - { - string result(kstr); - env->ReleaseStringUTFChars(str, kstr); - return result; - } - return result; -} - -static std::string j_string_to_string(JNIEnv *env, jstring jStr) -{ - if (!jStr) - return {}; - - const auto stringClass = env->GetObjectClass(jStr); - const auto getBytes = env->GetMethodID(stringClass, "getBytes", "(Ljava/lang/String;)[B"); - const auto stringJbytes = (jbyteArray)env->CallObjectMethod(jStr, getBytes, - env->NewStringUTF("UTF-8")); - - jsize length = (size_t)env->GetArrayLength(stringJbytes); - jbyte *pBytes = env->GetByteArrayElements(stringJbytes, nullptr); - - std::string ret = std::string(reinterpret_cast(pBytes), length); - env->ReleaseByteArrayElements(stringJbytes, pBytes, JNI_ABORT); - - env->DeleteLocalRef(stringJbytes); - env->DeleteLocalRef(stringClass); - return ret; -} - -static jstring string2jstring(JNIEnv *env, const string &str) -{ - return (*env).NewStringUTF(str.c_str()); -} - -static jobjectArray vector2jarray(JNIEnv *env, const vector &arr) -{ - if (!arr.empty()) - { - jobjectArray result = env->NewObjectArray(arr.size(), env->FindClass("java/lang/String"), - nullptr); - if (result) - { - for (size_t index = 0; index < arr.size(); index++) - { - jstring value = string2jstring(env, arr[index]); - env->SetObjectArrayElement(result, index, value); - env->DeleteLocalRef(value); - } - } - return result; - } - return nullptr; -} - -static vector jarray2vector(JNIEnv *env, jobjectArray array) -{ - vector keys; - if (!array) - return keys; - - jsize size = env->GetArrayLength(array); - keys.reserve(size); - for (jsize i = 0; i < size; i++) - { - jstring str = (jstring)env->GetObjectArrayElement(array, i); - if (str) - { - keys.push_back(jstring2string(env, str)); - env->DeleteLocalRef(str); - } - } - return keys; -} - -static MMKV *getInstance(const string &ID) -{ - auto kv = std::find_if(mmkvInstances.begin(), mmkvInstances.end(), [&ID](MMKV *inst) - { return inst->mmapID() == ID; }); - - if (kv == mmkvInstances.end()) - { - return nullptr; - } - return *kv; -} - -static MMKV *createInstance(const string &ID, MMKVMode mode, string key, string path) -{ - auto it = find_if(mmkvInstances.begin(), mmkvInstances.end(), [&ID](MMKV *inst) - { return inst->mmapID() == ID; }); - if (it != mmkvInstances.end()) - mmkvInstances.erase(it); - - MMKV *kv = MMKV::mmkvWithID(ID, mmkv::DEFAULT_MMAP_SIZE, mode, - key.empty() ? nullptr : &key, - path.empty() ? nullptr : &path); - - mmkvInstances.push_back(kv); - return kv; -} - -// Function to sort a vector -void sortVector(std::vector &vec) -{ - std::sort(vec.begin(), vec.end()); -} - -// Function to add a value to the vector while maintaining sorting order -void addValue(std::vector &vec, std::string value) -{ - auto insertPosition = std::lower_bound(vec.begin(), vec.end(), value); - vec.insert(insertPosition, value); -} - -// Function to remove a value from the vector -void removeValue(std::vector &vec, std::string value) -{ - auto position = std::lower_bound(vec.begin(), vec.end(), value); - if (position != vec.end() && *position == value) - { - vec.erase(position); - } -} - -// Function to search for a value in the vector -bool hasValue(const std::vector &vec, std::string value) -{ - return std::binary_search(vec.begin(), vec.end(), value); -} - -std::unordered_map indexing_enabled = {}; -std::unordered_map>> index_cache = {}; - -static vector getIndex(MMKV *kv, const string &type) -{ - if (!indexing_enabled[kv->mmapID()]) - return {}; - - auto kvIndex = index_cache[kv->mmapID()]; - - if (kvIndex.count(type) == 0) - { - auto exists = kv->getVector(type, kvIndex[type]); - if (!exists) - { - kvIndex[type] = std::vector(); - } - else - { - sortVector(kvIndex[type]); - } - } - - return kvIndex[type]; -} - -static const string dataTypes[] = { - "stringIndex", - "numberIndex", - "boolIndex", - "mapIndex", - "arrayIndex", -}; - -static void removeFromIndex(MMKV *kv, const string &key) -{ - if (!indexing_enabled[kv->mmapID()]) - return; - for (const auto &idx : dataTypes) - { - auto index = getIndex(kv, idx); - if (hasValue(index, key)) - { - removeValue(index, key); - kv->set(index, idx); - return; - } - } -} - -static void removeKeysFromIndex(MMKV *kv, const vector &arrKeys) -{ - if (!indexing_enabled[kv->mmapID()]) - return; - - auto strings = false; - auto objects = false; - auto arrays = false; - auto numbers = false; - auto booleans = false; - - for (const auto &key : arrKeys) { - auto removed = false; - for (const auto &idx : dataTypes) - { - if (removed) continue; - - auto index = getIndex(kv, idx); - if (hasValue(index, key)) - { - removeValue(index, key); - - if (idx == "stringIndex") strings = true; - if (idx == "numberIndex") numbers = true; - if (idx == "boolIndex") booleans = true; - if (idx == "mapIndex") objects = true; - if (idx == "arrayIndex") arrays = true; - removed = true; - } - } - } - - if (strings) kv->set(getIndex(kv, "stringIndex"), "stringIndex"); - if (objects) kv->set(getIndex(kv, "mapIndex"), "mapIndex"); - if (arrays) kv->set(getIndex(kv, "arrayIndex"), "arrayIndex"); - if (numbers) kv->set(getIndex(kv, "numberIndex"), "numberIndex"); - if (booleans) kv->set(getIndex(kv, "boolIndex"), "boolIndex"); - -} - -static void setIndex(MMKV *kv, const string &type, const string &key) -{ - if (!indexing_enabled[kv->mmapID()]) - return; - auto index = getIndex(kv, type); - if (!hasValue(index, key)) - { - addValue(index, key); - kv->set(index, type); - } -} - -static void setIndexes(MMKV *kv, const string &type, const std::vector keys[]) -{ - if (!indexing_enabled[kv->mmapID()]) - return; - auto index = getIndex(kv, type); - int size = keys->size(); - for (int i = 0; i < size; i++) - { - addValue(index, keys->at(i)); - } - kv->set(index, type); -} - -template -static void createFunc(Runtime &jsiRuntime, const char *prop, int paramCount, NativeFunc &&func) -{ - auto f = Function::createFromHostFunction(jsiRuntime, - PropNameID::forAscii(jsiRuntime, prop), - paramCount, - std::forward(func)); - jsiRuntime.global().setProperty(jsiRuntime, prop, std::move(f)); -} - -#define CREATE_FUNCTION(prop, paramCount, block) \ - createFunc(jsiRuntime, prop, paramCount, [](Runtime &runtime, const Value &thisValue, const Value *arguments, size_t count) -> Value { block }) - -#define CREATE_FUNCTION_CAPTURE(prop, paramCount, block) \ - createFunc(jsiRuntime, prop, paramCount, [=](Runtime &runtime, const Value &thisValue, const Value *arguments, size_t count) -> Value { block }) - -#define std_string(arg) \ - arg.getString(runtime).utf8(runtime) - -#define CALLBACK(returnValue) \ - invoker->invokeAsync([&runtime, cbref] { cbref->call(runtime, returnValue); }); - -#define HOSTFN(name, basecount) \ -jsi::Function::createFromHostFunction( \ -runtime, \ -jsi::PropNameID::forAscii(runtime, name), \ -basecount, \ -[=](jsi::Runtime &runtime, const jsi::Value &thisValue, const jsi::Value *args, size_t count) -> jsi::Value - -void initIndexForId(std::string id) -{ - index_cache[id] = unordered_map>(); -} - -void installBindings(Runtime &jsiRuntime) -{ - - CREATE_FUNCTION("initializeMMKV", 0, { - MMKV::initializeMMKV(rPath); - return Value::undefined(); - }); - - CREATE_FUNCTION("setupMMKVInstance", 5, { - string id = std_string(arguments[0]); - auto mode = (MMKVMode)(int)arguments[1].getNumber(); - string cryptKey = std_string(arguments[2]); - MMKVPath_t path = std_string(arguments[3]); - createInstance(id, mode, cryptKey, path); - - indexing_enabled[id] = arguments[4].getBool(); - initIndexForId(id); - - return Value(true); - }); - - CREATE_FUNCTION("getSecureKey", 1, { - string alias = std_string(arguments[0]); - - JNIEnv *env; - bool attached = vm->AttachCurrentThread(&env, NULL); - mmkvclass = env->GetObjectClass(mmkvobject); - - jstring jstr1 = string2jstring(env, alias); - jvalue params[1]; - params[0].l = jstr1; - jmethodID getSecureKey = env->GetMethodID(mmkvclass, "getSecureKey", - "(Ljava/lang/String;)Ljava/lang/String;"); - jobject result = env->CallObjectMethodA(mmkvobject, getSecureKey, params); - const char *str = env->GetStringUTFChars((jstring)result, NULL); - string cryptKey = j_string_to_string(env, env->NewStringUTF(str)); - if (attached) - { - vm->DetachCurrentThread(); - } - return Value(runtime, String::createFromUtf8(runtime, cryptKey)); - }); - - CREATE_FUNCTION("setSecureKey", 2, { - string alias = std_string(arguments[0]); - string key = std_string(arguments[1]); - - JNIEnv *env; - bool attached = vm->AttachCurrentThread(&env, NULL); - mmkvclass = env->GetObjectClass(mmkvobject); - - jstring jstr1 = string2jstring(env, alias); - jstring jstr2 = string2jstring(env, key); - - jvalue params[2]; - params[0].l = jstr1; - params[1].l = jstr2; - - jmethodID setSecureKey = env->GetMethodID(mmkvclass, "setSecureKey", - "(Ljava/lang/String;Ljava/lang/String;)V"); - env->CallVoidMethodA(mmkvobject, setSecureKey, params); - if (attached) - { - vm->DetachCurrentThread(); - } - - return Value(true); - }); - - CREATE_FUNCTION("secureKeyExists", 1, { - string alias = std_string(arguments[0]); - - JNIEnv *env; - bool attached = vm->AttachCurrentThread(&env, NULL); - mmkvclass = env->GetObjectClass(mmkvobject); - - jstring jstr1 = string2jstring(env, alias); - jvalue params[1]; - params[0].l = jstr1; - - jmethodID secureKeyExists = env->GetMethodID(mmkvclass, "secureKeyExists", - "(Ljava/lang/String;)Z"); - bool exists = env->CallBooleanMethodA(mmkvobject, secureKeyExists, params); - if (attached) - { - vm->DetachCurrentThread(); - } - return Value(exists); - }); - - CREATE_FUNCTION("removeSecureKey", 1, { - string alias = std_string(arguments[0]); - - JNIEnv *env; - bool attached = vm->AttachCurrentThread(&env, NULL); - mmkvclass = env->GetObjectClass(mmkvobject); - - jstring jstr1 = string2jstring(env, alias); - jvalue params[1]; - params[0].l = jstr1; - - jmethodID removeSecureKey = env->GetMethodID(mmkvclass, "removeSecureKey", - "(Ljava/lang/String;)V"); - env->CallVoidMethodA(mmkvobject, removeSecureKey, params); - if (attached) - { - vm->DetachCurrentThread(); - } - return Value(true); - }); - - CREATE_FUNCTION("setStringMMKV", 3, { - MMKV *kv = getInstance(std_string(arguments[2])); - if (!kv) - { - return Value::undefined(); - } - - string key = std_string(arguments[0]); - setIndex(kv, "stringIndex", key); - kv->set(std_string(arguments[1]), key); - return Value(true); - }); - - CREATE_FUNCTION("setMultiMMKV", 4, { - auto keys = arguments[0].getObject(runtime).asArray(runtime); - auto values = arguments[1].getObject(runtime).asArray(runtime); - auto dataType = std_string(arguments[2]); - auto kvName = std_string(arguments[3]); - auto kv = getInstance(kvName); - auto size = keys.length(runtime); - - std::vector keysArray = {}; - std::vector keysToRemove = {}; - - for (int i = 0; i < size; i++) - { - auto key = std_string(keys.getValueAtIndex(runtime, i)); - keysArray.push_back(key); - if (values.getValueAtIndex(runtime, i).isString()) - { - auto value = std_string(values.getValueAtIndex(runtime, i)); - kv->set(value, key); - } - else - { - if (kv->containsKey(key)) - { - keysToRemove.push_back(key); - } - } - } - kv->removeValuesForKeys(keysToRemove); - removeKeysFromIndex(kv, keysToRemove); - setIndexes(kv, dataType, &keysArray); - return jsi::Value(true); - }); - - CREATE_FUNCTION("getStringMMKV", 2, { - MMKV *kv = getInstance(std_string(arguments[1])); - if (!kv) - { - return Value::undefined(); - } - - string result; - bool exists = kv->getString(std_string(arguments[0]), result); - if (!exists) - { - return Value::null(); - } - return Value(runtime, String::createFromUtf8(runtime, result)); - }); - - CREATE_FUNCTION("getMultiMMKV", 2, { - auto keys = arguments[0].getObject(runtime).asArray(runtime); - auto kvName = std_string(arguments[1]); - auto kv = getInstance(kvName); - auto size = keys.length(runtime); - - jsi::Array values = jsi::Array(runtime, size); - - for (int i = 0; i < size; i++) - { - auto key = std_string(keys.getValueAtIndex(runtime, i)); - if (kv->containsKey(key)) - { - std::string result; - kv->getString(key, result); - values.setValueAtIndex(runtime, i, String::createFromUtf8(runtime, result)); - } - else - { - values.setValueAtIndex(runtime, i, jsi::Value::null()); - } - } - - return values; - }); - - CREATE_FUNCTION("setMapMMKV", 3, { - MMKV *kv = getInstance(std_string(arguments[2])); - if (!kv) - { - return Value::undefined(); - } - - string key = std_string(arguments[0]); - - setIndex(kv, "mapIndex", key); - kv->set(std_string(arguments[1]), key); - return Value(true); - }); - - CREATE_FUNCTION("getMapMMKV", 2, { - MMKV *kv = getInstance(std_string(arguments[1])); - if (!kv) - { - return Value::undefined(); - } - - string result; - bool exists = kv->getString(std_string(arguments[0]), result); - if (!exists) - { - return Value::null(); - } - return Value(runtime, String::createFromUtf8(runtime, result)); - }); - - CREATE_FUNCTION("setArrayMMKV", 3, { - MMKV *kv = getInstance(std_string(arguments[2])); - if (!kv) - { - return Value::undefined(); - } - - string key = std_string(arguments[0]); - - setIndex(kv, "arrayIndex", key); - kv->set(std_string(arguments[1]), key); - return Value(true); - }); - - CREATE_FUNCTION("getArrayMMKV", 2, { - MMKV *kv = getInstance(std_string(arguments[1])); - - if (!kv) - { - return Value::undefined(); - } - - string result; - bool exists = kv->getString(std_string(arguments[0]), result); - if (!exists) - { - return Value::null(); - } - return Value(runtime, String::createFromUtf8(runtime, result)); - }); - - CREATE_FUNCTION("setNumberMMKV", 3, { - MMKV *kv = getInstance(std_string(arguments[2])); - if (!kv) - { - return Value::undefined(); - } - string key = std_string(arguments[0]); - setIndex(kv, "numberIndex", key); - kv->set(arguments[1].getNumber(), key); - return Value(true); - }); - - CREATE_FUNCTION("getNumberMMKV", 2, { - MMKV *kv = getInstance(std_string(arguments[1])); - if (!kv) - { - return Value::undefined(); - } - string key = std_string(arguments[0]); - string result; - bool exists = kv->containsKey(key); - if (!exists) - { - return Value::null(); - } - return Value(kv->getDouble(key)); - }); - - CREATE_FUNCTION("setBoolMMKV", 3, { - MMKV *kv = getInstance(std_string(arguments[2])); - if (!kv) - { - return Value::undefined(); - } - string key = std_string(arguments[0]); - setIndex(kv, "boolIndex", key); - kv->set(arguments[1].getBool(), key); - return Value(true); - }); - - CREATE_FUNCTION("getBoolMMKV", 2, { - MMKV *kv = getInstance(std_string(arguments[1])); - if (!kv) - { - return Value::undefined(); - } - - string key = std_string(arguments[0]); - string result; - bool exists = kv->containsKey(key); - if (!exists) - { - return Value::null(); - } - return Value(kv->getBool(key)); - }); - - CREATE_FUNCTION("removeValueMMKV", 2, { - MMKV *kv = getInstance(std_string(arguments[1])); - if (!kv) - { - return Value::undefined(); - } - - string key = std_string(arguments[0]); - - kv->removeValueForKey(key); - removeFromIndex(kv, key); - - return Value(true); - }); - - CREATE_FUNCTION("removeValuesMMKV", 2, { - MMKV *kv = getInstance(std_string(arguments[1])); - auto keys = arguments[0].getObject(runtime).asArray(runtime); - - if (!kv) - { - return Value::undefined(); - } - - std::vector keys_vec = {}; - auto size = keys.length(runtime); - for (int i = 0; i < size; i++) - { - auto key = std_string(keys.getValueAtIndex(runtime, i)); - keys_vec.push_back(key); - } - - kv->removeValuesForKeys(keys_vec); - removeKeysFromIndex(kv, keys_vec); - - return Value(true); - }); - - CREATE_FUNCTION("getAllKeysMMKV", 1, { - MMKV *kv = getInstance(std_string(arguments[0])); - if (!kv) - { - return Value::undefined(); - } - auto keys = kv->allKeys(); - - auto array = jsi::Array(runtime, keys.size()); - auto size = keys.size(); - for (int i = 0; i < size; i++) - { - auto string = jsi::String::createFromUtf8(runtime, keys[i]); - array.setValueAtIndex(runtime, i, string); - } - return array; - }); - - CREATE_FUNCTION("getIndexMMKV", 2, { - MMKV *kv = getInstance(std_string(arguments[1])); - if (!kv) - { - return Value::undefined(); - } - - auto keys = getIndex(kv, std_string(arguments[0])); - auto size = keys.size(); - auto array = jsi::Array(runtime, size); - for (int i = 0; i < size; i++) - { - auto string = jsi::String::createFromUtf8(runtime, keys[i]); - array.setValueAtIndex(runtime, i, string); - } - return array; - }); - - CREATE_FUNCTION("containsKeyMMKV", 2, { - MMKV *kv = getInstance(std_string(arguments[1])); - if (!kv) - { - return Value::undefined(); - } - return Value(kv->containsKey(std_string(arguments[0]))); - }); - - CREATE_FUNCTION("clearMMKV", 1, { - MMKV *kv = getInstance(std_string(arguments[0])); - if (!kv) - { - return Value::undefined(); - } - kv->clearAll(); - initIndexForId(kv->mmapID()); - - return Value(true); - }); - - CREATE_FUNCTION("clearMemoryCache", 1, { - MMKV *kv = getInstance(std_string(arguments[0])); - if (!kv) - { - return Value::undefined(); - } - kv->clearMemoryCache(); - return Value(true); - }); - - CREATE_FUNCTION("encryptMMKV", 2, { - MMKV *kv = getInstance(std_string(arguments[1])); - if (!kv) - { - return Value::undefined(); - } - - string cryptKey = std_string(arguments[0]); - bool result = kv->reKey(cryptKey); - return Value(result); - }); - - CREATE_FUNCTION("decryptMMKV", 1, { - MMKV *kv = getInstance(std_string(arguments[0])); - if (!kv) - { - return Value::undefined(); - } - kv->reKey(""); - return Value(true); - }); -} - -extern "C" JNIEXPORT jlong JNICALL -Java_com_ammarahmed_mmkv_MMKV_getMMKVWithID(JNIEnv *env, jclass clazz, jstring mmapID, jint mode, - jstring cryptKey, jstring rootPath) -{ - MMKV *kv = nullptr; - if (!mmapID) - { - return (jlong)kv; - } - string str = jstring2string(env, mmapID); - - bool done = false; - if (cryptKey) - { - string crypt = jstring2string(env, cryptKey); - if (crypt.length() > 0) - { - if (rootPath) - { - string path = jstring2string(env, rootPath); - kv = MMKV::mmkvWithID(str, mmkv::DEFAULT_MMAP_SIZE, (MMKVMode)mode, &crypt, &path); - } - else - { - kv = MMKV::mmkvWithID(str, mmkv::DEFAULT_MMAP_SIZE, (MMKVMode)mode, &crypt, - nullptr); - } - done = true; - } - } - if (!done) - { - if (rootPath) - { - string path = jstring2string(env, rootPath); - kv = MMKV::mmkvWithID(str, mmkv::DEFAULT_MMAP_SIZE, (MMKVMode)mode, nullptr, &path); - } - else - { - kv = MMKV::mmkvWithID(str, mmkv::DEFAULT_MMAP_SIZE, (MMKVMode)mode, nullptr, nullptr); - } - } - - return (jlong)kv; -} - -extern "C" JNIEXPORT jboolean JNICALL -Java_com_ammarahmed_mmkv_MMKV_containsKey(JNIEnv *env, jobject instance, jlong handle, - jstring oKey) -{ - MMKV *kv = reinterpret_cast(handle); - if (kv && oKey) - { - string key = jstring2string(env, oKey); - return (jboolean)kv->containsKey(key); - } - return (jboolean) false; -} - -extern "C" JNIEXPORT jbyteArray JNICALL -Java_com_ammarahmed_mmkv_MMKV_decodeBytes(JNIEnv *env, jobject obj, jlong handle, jstring oKey) -{ - MMKV *kv = reinterpret_cast(handle); - if (kv && oKey) - { - string key = jstring2string(env, oKey); - mmkv::MMBuffer value = kv->getBytes(key); - if (value.length() > 0) - { - jbyteArray result = env->NewByteArray(value.length()); - env->SetByteArrayRegion(result, 0, value.length(), (const jbyte *)value.getPtr()); - return result; - } - } - return nullptr; -} - -extern "C" JNIEXPORT void JNICALL -Java_com_ammarahmed_mmkv_MMKV_removeValueForKey(JNIEnv *env, jobject instance, jlong handle, - jstring oKey) -{ - MMKV *kv = reinterpret_cast(handle); - if (kv && oKey) - { - string key = jstring2string(env, oKey); - kv->removeValueForKey(key); - } -} - -extern "C" -JNIEXPORT jstring JNICALL -Java_com_ammarahmed_mmkv_MMKV_decodeString(JNIEnv *env, jobject obj, jlong handle, jstring oKey, - jstring default_value) { - MMKV *kv = reinterpret_cast(handle); - if (kv && oKey) { - string key = jstring2string(env, oKey); - string value; - if (kv->getString(key, value)) { - return string2jstring(env, value); - } - } - return default_value; -} - -extern "C" JNIEXPORT jobjectArray JNICALL -Java_com_ammarahmed_mmkv_MMKV_decodeStringSet(JNIEnv *env, jobject, jlong handle, jstring oKey) -{ - MMKV *kv = reinterpret_cast(handle); - if (kv && oKey) - { - string key = jstring2string(env, oKey); - vector value; - bool hasValue = kv->getVector(key, value); - if (hasValue) - { - return vector2jarray(env, value); - } - } - return nullptr; -} - -extern "C" JNIEXPORT jint JNICALL -Java_com_ammarahmed_mmkv_MMKV_decodeInt(JNIEnv *env, jobject obj, jlong handle, jstring oKey, - jint defaultValue) -{ - MMKV *kv = reinterpret_cast(handle); - if (kv && oKey) - { - string key = jstring2string(env, oKey); - return (jint)kv->getInt32(key, defaultValue); - } - return defaultValue; -} - -extern "C" -JNIEXPORT jdouble JNICALL -Java_com_ammarahmed_mmkv_MMKV_decodeDouble(JNIEnv *env, jobject obj, jlong handle, jstring oKey, - jdouble default_value) { - MMKV *kv = reinterpret_cast(handle); - if (kv && oKey) { - string key = jstring2string(env, oKey); - bool hasValue; - double value = kv->getDouble(key, 0, &hasValue); - - if (hasValue) { - return value; - } - } - return default_value; -} - - -extern "C" JNIEXPORT jboolean JNICALL -Java_com_ammarahmed_mmkv_MMKV_checkProcessMode(JNIEnv *env, jclass clazz, jlong handle) -{ - MMKV *kv = reinterpret_cast(handle); - if (kv) - { - return kv->checkProcessMode(); - } - return false; -} - -extern "C" JNIEXPORT jboolean JNICALL -Java_com_ammarahmed_mmkv_MMKV_encodeString(JNIEnv *env, jobject thiz, jlong handle, jstring oKey, - jstring oValue) -{ - MMKV *kv = reinterpret_cast(handle); - if (kv && oKey) - { - string key = jstring2string(env, oKey); - if (oValue) - { - string value = jstring2string(env, oValue); - return (jboolean)kv->set(value, key); - } - else - { - kv->removeValueForKey(key); - return (jboolean) true; - } - } - return (jboolean) false; -} - -extern "C" JNIEXPORT jboolean JNICALL -Java_com_ammarahmed_mmkv_MMKV_encodeDouble(JNIEnv *env, jobject thiz, jlong handle, jstring oKey, - jdouble value) -{ - MMKV *kv = reinterpret_cast(handle); - if (kv && oKey) - { - string key = jstring2string(env, oKey); - return (jboolean)kv->set((double)value, key); - } - return (jboolean) false; -} - -extern "C" -JNIEXPORT jboolean JNICALL -Java_com_ammarahmed_mmkv_MMKV_encodeInt(JNIEnv *env, jobject thiz, jlong handle, jstring oKey, jint value) { - MMKV *kv = reinterpret_cast(handle); - if (kv && oKey) { - string key = jstring2string(env, oKey); - return (jboolean) kv->set((int) value, key); - } - return (jboolean) false; -} - -extern "C" JNIEXPORT jboolean JNICALL -Java_com_ammarahmed_mmkv_MMKV_encodeSet(JNIEnv *env, jobject thiz, jlong handle, jstring oKey, - jobjectArray arrStr) -{ - MMKV *kv = reinterpret_cast(handle); - if (kv && oKey) - { - string key = jstring2string(env, oKey); - if (arrStr) - { - vector value = jarray2vector(env, arrStr); - return (jboolean)kv->set(value, key); - } - else - { - kv->removeValueForKey(key); - return (jboolean) true; - } - } - return (jboolean) false; -} - -extern "C" -JNIEXPORT jobjectArray JNICALL -Java_com_ammarahmed_mmkv_MMKV_getAllKeys(JNIEnv *env, jobject obj, jlong handle) { - MMKV *kv = reinterpret_cast(handle); - if (!kv) { - return nullptr; - } - auto keys = kv->allKeys(); - - return vector2jarray(env, keys); -} - -extern "C" JNIEXPORT void JNICALL -Java_com_ammarahmed_mmkv_MMKV_jniInitialize(JNIEnv *env, jclass clazz, jstring rootDir, - jint logLevel) -{ - if (!rootDir) - { - return; - } - - const char *kstr = env->GetStringUTFChars(rootDir, nullptr); - if (kstr) - { - MMKV::initializeMMKV(kstr, (MMKVLogLevel)logLevel); - env->ReleaseStringUTFChars(rootDir, kstr); - } -} - -extern "C" JNIEXPORT void JNICALL -Java_com_ammarahmed_mmkv_RNMMKVModule_destroy(JNIEnv *env, jobject thiz) -{ - env->DeleteGlobalRef(mmkvobject); - vm = nullptr; -} - -struct RNMMKVModule : jni::JavaClass -{ - static constexpr auto kJavaDescriptor = "Lcom/ammarahmed/mmkv/RNMMKVModule;"; - - static void registerNatives() - { - javaClassStatic()->registerNatives( - {// initialization for JSI - makeNativeMethod("nativeInstall", - RNMMKVModule::install)}); - } - -private: - static void install( - jni::alias_ref thiz, jlong jsi, - jni::alias_ref rootPath) - { - - rPath = rootPath->toStdString(); - - MMKV::initializeMMKV(rPath); - - jni::Environment::current()->GetJavaVM(&vm); - auto runtime = reinterpret_cast(jsi); - - mmkvobject = jni::Environment::current()->NewGlobalRef(thiz.get()); - if (runtime) - { - installBindings(*runtime); - } - createInstance("mmkvIDStore", MMKV_SINGLE_PROCESS, "", ""); - } -}; - -JNIEXPORT jint JNI_OnLoad(JavaVM *jvm, void *) -{ - return jni::initialize(vm, [] - { RNMMKVModule::registerNatives(); }); -} diff --git a/dist/index.d.ts b/dist/index.d.ts new file mode 100644 index 00000000..b43319fa --- /dev/null +++ b/dist/index.d.ts @@ -0,0 +1,57 @@ +import MMKVInstance from './src/mmkvinstance'; +import { useIndex } from './src/hooks/useIndex'; +import { create, useMMKVStorage } from './src/hooks/useMMKV'; +import { createMMKVRefHookForStorage, useMMKVRef } from './src/hooks/useMMKVRef'; +import { getCurrentMMKVInstanceIDs } from './src/initializer'; +import MMKVLoader from './src/mmkvloader'; +import { init, isLoaded } from './src/mmkv/init'; +import { IOSAccessibleStates, ProcessingModes } from './src/utils'; +declare const MMKVStorage: { + /** + * @deprecated Use `import {MMKVLoader} from "react-native-mmkv-storage`" + */ + Loader: typeof MMKVLoader; + /** + * @deprecated Use `import {MMKVInstance} from "react-native-mmkv-storage`" + */ + API: typeof MMKVInstance; + /** + * @deprecated Use `import {ProcessingModes} from "react-native-mmkv-storage`" + */ + MODES: { + SINGLE_PROCESS: number; + MULTI_PROCESS: number; + }; + /** + * @deprecated Use `import {IOSAccessibleStates} from "react-native-mmkv-storage`" + */ + ACCESSIBLE: { + WHEN_UNLOCKED: string; + AFTER_FIRST_UNLOCK: string; + ALWAYS: string; + WHEN_PASSCODE_SET_THIS_DEVICE_ONLY: string; + WHEN_UNLOCKED_THIS_DEVICE_ONLY: string; + AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY: string; + ALWAYS_THIS_DEVICE_ONLY: string; + }; + /** + * @deprecated Use `import {getAllMMKVInstanceIDs} from "react-native-mmkv-storage`" + */ + getAllMMKVInstanceIDs: () => string[]; + /** + * @deprecated Use `import {getCurrentMMKVInstanceIDs} from "react-native-mmkv-storage`" + */ + getCurrentMMKVInstanceIDs: typeof getCurrentMMKVInstanceIDs; + /** + * @deprecated Use `import {IDSTORE_ID} from "react-native-mmkv-storage`" + */ + IDSTORE_ID: string; + _jsiModule: import("./src/types").MMKVJsiModule; + _bridgeModule: { + install: () => boolean; + }; +}; +export default MMKVStorage; +declare const getAllMMKVInstanceIDs: () => string[], IDSTORE_ID: string; +export { useMMKVStorage, create, useIndex, isLoaded, init, MMKVInstance, MMKVLoader, ProcessingModes, IOSAccessibleStates, getCurrentMMKVInstanceIDs, getAllMMKVInstanceIDs, IDSTORE_ID, createMMKVRefHookForStorage, useMMKVRef }; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/dist/index.d.ts.map b/dist/index.d.ts.map new file mode 100644 index 00000000..554e82ea --- /dev/null +++ b/dist/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,2BAA2B,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnE,QAAA,MAAM,WAAW;IACf;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;;;;IAEH;;OAEG;;;;;;;;;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;;;;;CAIJ,CAAC;AAEF,eAAe,WAAW,CAAC;AAE3B,QAAA,MAAQ,qBAAqB,kBAAY,UAAU,QAAY,CAAC;AAEhE,OAAO,EACL,cAAc,EACd,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,eAAe,EACf,mBAAmB,EACnB,yBAAyB,EACzB,qBAAqB,EACrB,UAAU,EACV,2BAA2B,EAC3B,UAAU,EACX,CAAC"} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js new file mode 100644 index 00000000..987f1e3e --- /dev/null +++ b/dist/index.js @@ -0,0 +1,87 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.useMMKVRef = exports.createMMKVRefHookForStorage = exports.IDSTORE_ID = exports.getAllMMKVInstanceIDs = exports.getCurrentMMKVInstanceIDs = exports.IOSAccessibleStates = exports.ProcessingModes = exports.MMKVLoader = exports.MMKVInstance = exports.init = exports.isLoaded = exports.useIndex = exports.create = exports.useMMKVStorage = void 0; +const mmkvinstance_1 = __importDefault(require("./src/mmkvinstance")); +exports.MMKVInstance = mmkvinstance_1.default; +const useIndex_1 = require("./src/hooks/useIndex"); +Object.defineProperty(exports, "useIndex", { enumerable: true, get: function () { return useIndex_1.useIndex; } }); +const useMMKV_1 = require("./src/hooks/useMMKV"); +Object.defineProperty(exports, "create", { enumerable: true, get: function () { return useMMKV_1.create; } }); +Object.defineProperty(exports, "useMMKVStorage", { enumerable: true, get: function () { return useMMKV_1.useMMKVStorage; } }); +const useMMKVRef_1 = require("./src/hooks/useMMKVRef"); +Object.defineProperty(exports, "createMMKVRefHookForStorage", { enumerable: true, get: function () { return useMMKVRef_1.createMMKVRefHookForStorage; } }); +Object.defineProperty(exports, "useMMKVRef", { enumerable: true, get: function () { return useMMKVRef_1.useMMKVRef; } }); +const initializer_1 = require("./src/initializer"); +Object.defineProperty(exports, "getCurrentMMKVInstanceIDs", { enumerable: true, get: function () { return initializer_1.getCurrentMMKVInstanceIDs; } }); +const mmkvloader_1 = __importDefault(require("./src/mmkvloader")); +exports.MMKVLoader = mmkvloader_1.default; +const IDStore_1 = __importDefault(require("./src/mmkv/IDStore")); +const init_1 = require("./src/mmkv/init"); +Object.defineProperty(exports, "init", { enumerable: true, get: function () { return init_1.init; } }); +Object.defineProperty(exports, "isLoaded", { enumerable: true, get: function () { return init_1.isLoaded; } }); +const module_1 = __importStar(require("./src/module")); +const utils_1 = require("./src/utils"); +Object.defineProperty(exports, "IOSAccessibleStates", { enumerable: true, get: function () { return utils_1.IOSAccessibleStates; } }); +Object.defineProperty(exports, "ProcessingModes", { enumerable: true, get: function () { return utils_1.ProcessingModes; } }); +const MMKVStorage = { + /** + * @deprecated Use `import {MMKVLoader} from "react-native-mmkv-storage`" + */ + Loader: mmkvloader_1.default, + /** + * @deprecated Use `import {MMKVInstance} from "react-native-mmkv-storage`" + */ + API: mmkvinstance_1.default, + /** + * @deprecated Use `import {ProcessingModes} from "react-native-mmkv-storage`" + */ + MODES: utils_1.ProcessingModes, + /** + * @deprecated Use `import {IOSAccessibleStates} from "react-native-mmkv-storage`" + */ + ACCESSIBLE: utils_1.IOSAccessibleStates, + /** + * @deprecated Use `import {getAllMMKVInstanceIDs} from "react-native-mmkv-storage`" + */ + getAllMMKVInstanceIDs: IDStore_1.default.getAllMMKVInstanceIDs, + /** + * @deprecated Use `import {getCurrentMMKVInstanceIDs} from "react-native-mmkv-storage`" + */ + getCurrentMMKVInstanceIDs: initializer_1.getCurrentMMKVInstanceIDs, + /** + * @deprecated Use `import {IDSTORE_ID} from "react-native-mmkv-storage`" + */ + IDSTORE_ID: IDStore_1.default.STORE_ID, + _jsiModule: module_1.default, + _bridgeModule: module_1.mmkvBridgeModule +}; +exports.default = MMKVStorage; +const { getAllMMKVInstanceIDs, STORE_ID: IDSTORE_ID } = IDStore_1.default; +exports.getAllMMKVInstanceIDs = getAllMMKVInstanceIDs; +exports.IDSTORE_ID = IDSTORE_ID; diff --git a/dist/src/encryption.d.ts b/dist/src/encryption.d.ts new file mode 100644 index 00000000..dc3a3299 --- /dev/null +++ b/dist/src/encryption.d.ts @@ -0,0 +1,40 @@ +export default class encryption { + instanceID: string; + alias: string | null; + aliasPrefix: string; + key: string | null; + accessibleMode: string; + initialized: boolean; + constructor(id: string); + /** + * You can encrypt an MMKV instance anytime, even after it is created. + * + * Calling this without a key will generate a key itself & store it in secure storage. + * If no parameters are provided, a key is generated and securely stored in the storage with the default alias for later use. + * + * Note that you don't need to use this method if you use `withEncryption()` at initialization. + * This is only used for encrypting an unencrypted instance at runtime. + * + * @param key; Provide a custom key to encrypt the storage. + * @param secureKeyStorage Store the key in secure storage. + * @param alias Provide a custom alias to store the key with in secure storage + * @param accessibleMode Set accessible mode for secure storage on ios devices + * @returns An object with alias and key + */ + encrypt(key?: string, secureKeyStorage?: boolean, alias?: string, accessibleMode?: string): boolean; + /** + * You can decrypt an encrypted MMKV instance anytime, even after it is created. + * Decrypting the storage will delete the key you encrypted it with + * + */ + decrypt(): boolean; + /** + * Change the encryption key incase the old one has been compromised. + * @param key; Provide a custom key to encrypt the storage. + * @param secureKeyStorage Store the key in secure storage. + * @param alias Provide a custom alias to store the key with in secure storage + * @param accessibleMode Set accessible mode for secure storage on ios devices + */ + changeEncryptionKey(key: string, secureKeyStorage?: boolean, alias?: string, accessibleMode?: string): boolean; +} +//# sourceMappingURL=encryption.d.ts.map \ No newline at end of file diff --git a/dist/src/encryption.d.ts.map b/dist/src/encryption.d.ts.map new file mode 100644 index 00000000..4049da4c --- /dev/null +++ b/dist/src/encryption.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../../src/encryption.ts"],"names":[],"mappings":"AA4BA,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;gBAET,EAAE,EAAE,MAAM;IAWtB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,gBAAgB,UAAO,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM;IA6BtF;;;;OAIG;IACH,OAAO;IAOP;;;;;;OAMG;IACH,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,gBAAgB,UAAO,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM;CAGlG"} \ No newline at end of file diff --git a/dist/src/encryption.js b/dist/src/encryption.js new file mode 100644 index 00000000..6a0ba117 --- /dev/null +++ b/dist/src/encryption.js @@ -0,0 +1,90 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const initializer_1 = require("./initializer"); +const keygen_1 = __importDefault(require("./keygen")); +const utils_1 = require("./utils"); +const handlers_1 = require("./handlers"); +const IDStore_1 = __importDefault(require("./mmkv/IDStore")); +const module_1 = __importDefault(require("./module")); +function encryptStorage(id, key, secureKeyStorage = true, alias, accessibleMode) { + if (secureKeyStorage) { + module_1.default.setSecureKey(alias, key, accessibleMode); + module_1.default.encryptMMKV(key, id); + module_1.default.setBoolMMKV(id, true, id); + IDStore_1.default.add(id, true, alias); + } + else { + module_1.default.encryptMMKV(key, id); + module_1.default.setBoolMMKV(id, true, id); + IDStore_1.default.add(id, true, null); + } + return true; +} +class encryption { + constructor(id) { + let opts = utils_1.options[id]; + this.instanceID = opts.instanceID; + this.alias = opts.alias; + this.aliasPrefix = opts.aliasPrefix; + this.key = opts.key; + this.accessibleMode = opts.accessibleMode; + this.initialized = opts.initialized; + } + /** + * You can encrypt an MMKV instance anytime, even after it is created. + * + * Calling this without a key will generate a key itself & store it in secure storage. + * If no parameters are provided, a key is generated and securely stored in the storage with the default alias for later use. + * + * Note that you don't need to use this method if you use `withEncryption()` at initialization. + * This is only used for encrypting an unencrypted instance at runtime. + * + * @param key; Provide a custom key to encrypt the storage. + * @param secureKeyStorage Store the key in secure storage. + * @param alias Provide a custom alias to store the key with in secure storage + * @param accessibleMode Set accessible mode for secure storage on ios devices + * @returns An object with alias and key + */ + encrypt(key, secureKeyStorage = true, alias, accessibleMode) { + if (accessibleMode) { + this.accessibleMode = accessibleMode; + } + this.alias = (0, utils_1.stringToHex)(this.aliasPrefix + this.instanceID); + this.key = key || (0, keygen_1.default)(); + utils_1.options[this.instanceID].key = this.key; + if (secureKeyStorage) { + this.alias = (0, utils_1.stringToHex)(alias ? this.aliasPrefix + alias : this.aliasPrefix + this.instanceID); + } + utils_1.options[this.instanceID].alias = this.alias; + if (!initializer_1.currentInstancesStatus[this.instanceID]) { + (0, initializer_1.initialize)(this.instanceID); + initializer_1.currentInstancesStatus[this.instanceID] = true; + } + return encryptStorage(this.instanceID, this.key, secureKeyStorage, this.alias, this.accessibleMode); + } + /** + * You can decrypt an encrypted MMKV instance anytime, even after it is created. + * Decrypting the storage will delete the key you encrypted it with + * + */ + decrypt() { + (0, handlers_1.handleAction)(module_1.default.decryptMMKV, this.instanceID); + module_1.default.setBoolMMKV(this.instanceID, true, this.instanceID); + IDStore_1.default.add(this.instanceID, false, null); + return true; + } + /** + * Change the encryption key incase the old one has been compromised. + * @param key; Provide a custom key to encrypt the storage. + * @param secureKeyStorage Store the key in secure storage. + * @param alias Provide a custom alias to store the key with in secure storage + * @param accessibleMode Set accessible mode for secure storage on ios devices + */ + changeEncryptionKey(key, secureKeyStorage = true, alias, accessibleMode) { + return this.encrypt(key, secureKeyStorage, alias, accessibleMode); + } +} +exports.default = encryption; diff --git a/dist/src/eventmanager.d.ts b/dist/src/eventmanager.d.ts new file mode 100644 index 00000000..a5c99e99 --- /dev/null +++ b/dist/src/eventmanager.d.ts @@ -0,0 +1,14 @@ +declare class EventManager { + _registry: { + [name: string]: Function[]; + }; + constructor(); + unsubscribeAll(): void; + subscribeMulti(names: string[], handler: Function): void; + subscribe(name: string, handler: Function): void; + unsubscribe(name: string, handler: Function): void; + publish(name: string, ...args: any[]): void; + publishWithResult(name: string, ...args: any[]): Promise; +} +export default EventManager; +//# sourceMappingURL=eventmanager.d.ts.map \ No newline at end of file diff --git a/dist/src/eventmanager.d.ts.map b/dist/src/eventmanager.d.ts.map new file mode 100644 index 00000000..2ddf02bd --- /dev/null +++ b/dist/src/eventmanager.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"eventmanager.d.ts","sourceRoot":"","sources":["../../src/eventmanager.ts"],"names":[],"mappings":"AAAA,cAAM,YAAY;IAChB,SAAS,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,CAAA;KAAE,CAAC;;IAK1C,cAAc;IAId,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,QAAQ;IAMjD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ;IAMzC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ;IAO3C,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;IAQ9B,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;CAMrD;AAED,eAAe,YAAY,CAAC"} \ No newline at end of file diff --git a/dist/src/eventmanager.js b/dist/src/eventmanager.js new file mode 100644 index 00000000..90869bf1 --- /dev/null +++ b/dist/src/eventmanager.js @@ -0,0 +1,58 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +class EventManager { + constructor() { + this._registry = {}; + } + unsubscribeAll() { + this._registry = {}; + } + subscribeMulti(names, handler) { + names.forEach(name => { + this.subscribe(name, handler); + }); + } + subscribe(name, handler) { + if (!name || !handler) + throw new Error('name and handler are required.'); + if (!this._registry[name]) + this._registry[name] = []; + this._registry[name].push(handler); + } + unsubscribe(name, handler) { + if (!this._registry[name]) + return; + const index = this._registry[name].indexOf(handler); + if (index <= -1) + return; + this._registry[name].splice(index, 1); + } + publish(name, ...args) { + if (!this._registry[name]) + return; + const handlers = this._registry[name]; + handlers.forEach(handler => { + handler(...args); + }); + } + publishWithResult(name, ...args) { + return __awaiter(this, void 0, void 0, function* () { + if (!this._registry[name]) + return true; + const handlers = this._registry[name]; + if (handlers.length <= 0) + return true; + return yield Promise.all(handlers.map(handler => handler(...args))); + }); + } +} +exports.default = EventManager; diff --git a/dist/src/handlers.d.ts b/dist/src/handlers.d.ts new file mode 100644 index 00000000..d3e5a3f4 --- /dev/null +++ b/dist/src/handlers.d.ts @@ -0,0 +1,28 @@ +/** + * + * A handler function used to handle all the + * calls made to native code. The purpose is + * to make sure that the storage is initialized + * before any read/write requests are sent to the + * MMKV instance. + * + * + * @param action The native function that will be called + * @param args Arguments for the native function + */ +export declare function handleAction any | undefined | null>(action: T, ...args: any[]): ReturnType | undefined; +/** + * + * A handler function used to handle all the + * calls made to native code. The purpose is + * to make sure that the storage is initialized + * before any read/write requests are sent to the + * MMKV instance. + * + * + * @param action The native function that will be called + * @param args Arguments for the native function + */ +export declare function handleActionAsync any | undefined | null>(action: T, ...args: any[]): Promise | undefined | null>; +export declare function handlePromise any | undefined | null>(action: T, ...args: any[]): Promise | undefined>; +//# sourceMappingURL=handlers.d.ts.map \ No newline at end of file diff --git a/dist/src/handlers.d.ts.map b/dist/src/handlers.d.ts.map new file mode 100644 index 00000000..285f47ec --- /dev/null +++ b/dist/src/handlers.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/handlers.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,SAAS,GAAG,IAAI,EAC/E,MAAM,EAAE,CAAC,EACT,GAAG,IAAI,EAAE,GAAG,EAAE,GACb,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,CAW3B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,SAAS,GAAG,IAAI,EAC1F,MAAM,EAAE,CAAC,EACT,GAAG,IAAI,EAAE,GAAG,EAAE,GACb,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,CAY3C;AAED,wBAAsB,aAAa,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,SAAS,GAAG,IAAI,EACtF,MAAM,EAAE,CAAC,EACT,GAAG,IAAI,EAAE,GAAG,EAAE,GACb,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAWpC"} \ No newline at end of file diff --git a/dist/src/handlers.js b/dist/src/handlers.js new file mode 100644 index 00000000..84cf20e1 --- /dev/null +++ b/dist/src/handlers.js @@ -0,0 +1,87 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.handlePromise = exports.handleActionAsync = exports.handleAction = void 0; +const initializer_1 = require("./initializer"); +/** + * + * A handler function used to handle all the + * calls made to native code. The purpose is + * to make sure that the storage is initialized + * before any read/write requests are sent to the + * MMKV instance. + * + * + * @param action The native function that will be called + * @param args Arguments for the native function + */ +function handleAction(action, ...args) { + // The last argument is always the instance id. + let id = args[args.length - 1]; + if (!initializer_1.currentInstancesStatus[id]) { + initializer_1.currentInstancesStatus[id] = (0, initializer_1.initialize)(id); + } + if (!action) + return undefined; + let result = action(...args); + if (result === undefined) + initializer_1.currentInstancesStatus[id] = (0, initializer_1.initialize)(id); + result = action(...args); + return result; +} +exports.handleAction = handleAction; +/** + * + * A handler function used to handle all the + * calls made to native code. The purpose is + * to make sure that the storage is initialized + * before any read/write requests are sent to the + * MMKV instance. + * + * + * @param action The native function that will be called + * @param args Arguments for the native function + */ +function handleActionAsync(action, ...args) { + return __awaiter(this, void 0, void 0, function* () { + let id = args[args.length - 1]; + return new Promise(resolve => { + if (!initializer_1.currentInstancesStatus[id]) { + initializer_1.currentInstancesStatus[id] = (0, initializer_1.initialize)(id); + } + if (!action) + return resolve(undefined); + let result = action(...args); + if (result === undefined) + initializer_1.currentInstancesStatus[id] = (0, initializer_1.initialize)(id); + result = action(...args); + resolve(result); + }); + }); +} +exports.handleActionAsync = handleActionAsync; +function handlePromise(action, ...args) { + return __awaiter(this, void 0, void 0, function* () { + // The last argument is always the instance id. + let id = args[args.length - 1]; + if (!initializer_1.currentInstancesStatus[id]) { + initializer_1.currentInstancesStatus[id] = (0, initializer_1.initialize)(id); + } + if (!action) + return undefined; + let result = yield action(...args); + if (result === undefined) + initializer_1.currentInstancesStatus[id] = (0, initializer_1.initialize)(id); + result = yield action(...args); + return result; + }); +} +exports.handlePromise = handlePromise; diff --git a/dist/src/hooks/constants.d.ts b/dist/src/hooks/constants.d.ts new file mode 100644 index 00000000..3c7889b7 --- /dev/null +++ b/dist/src/hooks/constants.d.ts @@ -0,0 +1,34 @@ +export declare const types: string[]; +export declare const methods: { + string: { + indexer: string; + get: string; + set: string; + copy: (value: string) => string; + }; + number: { + indexer: string; + get: string; + set: string; + copy: (value: number) => number; + }; + boolean: { + indexer: string; + get: string; + set: string; + copy: (value: boolean) => boolean; + }; + object: { + indexer: string; + get: string; + set: string; + copy: (value: object) => {}; + }; + array: { + indexer: string; + get: string; + set: string; + copy: (value: any[]) => any[]; + }; +}; +//# sourceMappingURL=constants.d.ts.map \ No newline at end of file diff --git a/dist/src/hooks/constants.d.ts.map b/dist/src/hooks/constants.d.ts.map new file mode 100644 index 00000000..a5caba53 --- /dev/null +++ b/dist/src/hooks/constants.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/hooks/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,UAAqD,CAAC;AAExE,eAAO,MAAM,OAAO;;;;;sBAKF,MAAM;;;;;;sBAQN,MAAM;;;;;;sBAQN,OAAO;;;;;;sBAQP,MAAM;;;;;;sBAQN,GAAG,EAAE;;CAItB,CAAC"} \ No newline at end of file diff --git a/dist/src/hooks/constants.js b/dist/src/hooks/constants.js new file mode 100644 index 00000000..da35f34c --- /dev/null +++ b/dist/src/hooks/constants.js @@ -0,0 +1,46 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.methods = exports.types = void 0; +exports.types = ['string', 'number', 'boolean', 'object', 'array']; +exports.methods = { + string: { + indexer: 'strings', + get: 'getString', + set: 'setString', + copy: (value) => { + return value; + } + }, + number: { + indexer: 'numbers', + get: 'getInt', + set: 'setInt', + copy: (value) => { + return value; + } + }, + boolean: { + indexer: 'booleans', + get: 'getBool', + set: 'setBool', + copy: (value) => { + return value; + } + }, + object: { + indexer: 'maps', + get: 'getMap', + set: 'setMap', + copy: (value) => { + return Object.assign({}, value); + } + }, + array: { + indexer: 'arrays', + get: 'getArray', + set: 'setArray', + copy: (value) => { + return [...value]; + } + } +}; diff --git a/dist/src/hooks/functions.d.ts b/dist/src/hooks/functions.d.ts new file mode 100644 index 00000000..6412723f --- /dev/null +++ b/dist/src/hooks/functions.d.ts @@ -0,0 +1,4 @@ +import MMKVInstance from '../mmkvinstance'; +export declare const getDataType: (value: any) => string; +export declare const getInitialValue: (key: string, storage: MMKVInstance, initialValueType: 'type' | 'value') => () => any; +//# sourceMappingURL=functions.d.ts.map \ No newline at end of file diff --git a/dist/src/hooks/functions.d.ts.map b/dist/src/hooks/functions.d.ts.map new file mode 100644 index 00000000..32024009 --- /dev/null +++ b/dist/src/hooks/functions.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../src/hooks/functions.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAE3C,eAAO,MAAM,WAAW,UAAW,GAAG,WAIrC,CAAC;AAEF,eAAO,MAAM,eAAe,QACpB,MAAM,WAAW,YAAY,oBAAoB,MAAM,GAAG,OAAO,cAqBtE,CAAC"} \ No newline at end of file diff --git a/dist/src/hooks/functions.js b/dist/src/hooks/functions.js new file mode 100644 index 00000000..23e2ff8b --- /dev/null +++ b/dist/src/hooks/functions.js @@ -0,0 +1,34 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getInitialValue = exports.getDataType = void 0; +const constants_1 = require("./constants"); +const getDataType = (value) => { + if (value === null || value === undefined) + return null; + let type = Array.isArray(value) ? 'array' : typeof value; + return type; +}; +exports.getDataType = getDataType; +const getInitialValue = (key, storage, initialValueType) => () => { + if (!(storage === null || storage === void 0 ? void 0 : storage.indexer)) { + return null; + } + let indexer = storage.indexer; + if (indexer.hasKey(key)) { + for (let i = 0; i < constants_1.types.length; i++) { + let type = constants_1.types[i]; + //@ts-ignore + if (indexer[constants_1.methods[type].indexer].hasKey(key)) { + if (initialValueType === 'value') { + //@ts-ignore + return storage[constants_1.methods[type]['get']](key); + } + if (initialValueType === 'type') { + return type; + } + } + } + } + return null; +}; +exports.getInitialValue = getInitialValue; diff --git a/dist/src/hooks/useIndex.d.ts b/dist/src/hooks/useIndex.d.ts new file mode 100644 index 00000000..d94c2f88 --- /dev/null +++ b/dist/src/hooks/useIndex.d.ts @@ -0,0 +1,37 @@ +import MMKVInstance from '../mmkvinstance'; +import { DataType } from '../types'; +/** + * A hook that will take an array of keys and returns an array of values for those keys. + * This is supposed to work in combination with `Transactions`s. When you have build your custom index, + * you will need an easy and quick way to load values for your index. useIndex hook actively listens + * to all read/write changes and updates the values accordingly. + * + * ```tsx + * import MMKVStorage from "react-native-mmkv-storage" + * + * const storage = new MMKVStorage.Loader().initialize(); + * + * const App = () => { + const postsIndex = useMMKVStorage("postsIndex",MMKV,[]); + const [posts] = useIndex(postsIndex,"object" MMKV); + + return + + + +} + * ``` + * + * Documentation: https://rnmmkv.vercel.app/#/useindex + * + * @param keys Array of keys against which the hook should load values + * @param type Type of values + * @param storage The storage instance + * + * @returns `[values, update, remove]` + */ +export declare const useIndex: (keys: string[], type: DataType, storage: MMKVInstance) => [values: T[], update: (key: string, value: T) => void, remove: (key: string) => void]; +//# sourceMappingURL=useIndex.d.ts.map \ No newline at end of file diff --git a/dist/src/hooks/useIndex.d.ts.map b/dist/src/hooks/useIndex.d.ts.map new file mode 100644 index 00000000..54aecb42 --- /dev/null +++ b/dist/src/hooks/useIndex.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"useIndex.d.ts","sourceRoot":"","sources":["../../../src/hooks/useIndex.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAKpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,QAAQ,YACb,MAAM,EAAE,QACR,QAAQ,WACL,YAAY,iCAGP,MAAM,eAAe,IAAI,gBACzB,MAAM,KAAK,IAAI,CAgD9B,CAAC"} \ No newline at end of file diff --git a/dist/src/hooks/useIndex.js b/dist/src/hooks/useIndex.js new file mode 100644 index 00000000..31fe59d1 --- /dev/null +++ b/dist/src/hooks/useIndex.js @@ -0,0 +1,82 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.useIndex = void 0; +const react_1 = require("react"); +const constants_1 = require("./constants"); +/** + * A hook that will take an array of keys and returns an array of values for those keys. + * This is supposed to work in combination with `Transactions`s. When you have build your custom index, + * you will need an easy and quick way to load values for your index. useIndex hook actively listens + * to all read/write changes and updates the values accordingly. + * + * ```tsx + * import MMKVStorage from "react-native-mmkv-storage" + * + * const storage = new MMKVStorage.Loader().initialize(); + * + * const App = () => { + const postsIndex = useMMKVStorage("postsIndex",MMKV,[]); + const [posts] = useIndex(postsIndex,"object" MMKV); + + return + + + +} + * ``` + * + * Documentation: https://rnmmkv.vercel.app/#/useindex + * + * @param keys Array of keys against which the hook should load values + * @param type Type of values + * @param storage The storage instance + * + * @returns `[values, update, remove]` + */ +const useIndex = (keys, type, storage) => { + const [values, setValues] = (0, react_1.useState)(storage.getMultipleItems(keys || [], type)); + const onChange = (0, react_1.useCallback)(({ key }) => { + setValues(values => { + let index = values.findIndex(v => v[0] === key); + //@ts-ignore + let value = storage[constants_1.methods[type]['get']](key); + if (value) { + if (index !== -1) { + values[index][1] = value; + } + else { + storage.getMultipleItemsAsync(keys || [], type).then(data => { + setValues(data); + }); + } + } + else { + values.splice(index); + } + return [...values]; + }); + }, []); + (0, react_1.useEffect)(() => { + let names = keys.map(v => `${v}:onwrite`); + storage.ev.subscribeMulti(names, onChange); + return () => { + names.forEach(name => { + storage.ev.unsubscribe(name, onChange); + }); + }; + }, [keys, type]); + const update = (0, react_1.useCallback)((key, value) => { + if (!value) + return remove(key); + //@ts-ignore + storage[constants_1.methods[type]['set']](key, value); + }, []); + const remove = (0, react_1.useCallback)(key => { + storage.removeItem(key); + }, []); + return [values.map(v => v[1]).filter(v => v !== null), update, remove]; +}; +exports.useIndex = useIndex; diff --git a/dist/src/hooks/useMMKV.d.ts b/dist/src/hooks/useMMKV.d.ts new file mode 100644 index 00000000..47c7b74b --- /dev/null +++ b/dist/src/hooks/useMMKV.d.ts @@ -0,0 +1,83 @@ +import MMKVInstance from '../mmkvinstance'; +/** + * A helper function which returns `useMMKVStorage` hook with a storage instance set. + * + * ```tsx + * import MMKVStorage, {create} from "react-native-mmkv-storage" + * + * const storage = new MMKVStorage.Loader().initialize(); + * const useStorage = create(storage); + * + * // Then later in your component + * const App = () => { + * const [value, setValue] = useStorage("key"); + * + * ... + * } + * ``` + * Documentation: https://rnmmkv.vercel.app/#/usemmkvstorage + * + * @param storage The storage instance + * @returns `useMMKVStorage` hook + */ +export declare const create: CreateType; +/** + * Types curried function to return differently based on the + * absence of the `defaultValue` parameter. + * @see {@link UseMMKVStorageType} + */ +type CreateType = (storage: MMKVInstance) => { + (key: string): [ + value: T | undefined, + setValue: (value: (T | undefined) | ((prevValue: T | undefined) => T | undefined)) => void + ]; + (key: string, defaultValue: T): [ + value: T, + setValue: (value: T | ((prevValue: T) => T)) => void + ]; + (key: string, defaultValue: T, equalityFn?: (prev: T | undefined, next: T | undefined) => boolean): [value: T, setValue: (value: T | ((prevValue: T) => T)) => void]; +}; +/** + * + * useMMKVStorage Hook is like a persisted state that will always write every change in storage and update your app UI instantly. + * It doesn’t matter if you reload the app or restart it. Everything will be in place on app load. + * + * ```tsx + * import MMKVStorage from "react-native-mmkv-storage" + * + * const MMKV = new MMKVStorage.Loader().initialize(); + * + * // Then later in your component + * const App = () => { + * const [user, setUser] = useMMKVStorage("user", MMKV, "robert"); + * + * ... + * }; + * ``` + * Documentation: https://rnmmkv.vercel.app/#/usemmkvstorage + * + * @param key The key against which the hook should update + * @param storage The storage instance + * @param defaultValue Default value if any + * @param equalityFn Provide a custom function to handle state update if value has changed. + * + * @returns `[value,setValue]` + */ +export declare const useMMKVStorage: UseMMKVStorageType; +/** + * Uses typescript's {@link https://www.typescriptlang.org/docs/handbook/interfaces.html#function-types anonymous function overloading} + * to mimic React's `useState` typing. + */ +type UseMMKVStorageType = { + (key: string, storage: MMKVInstance): [ + value: T | undefined, + setValue: (value: (T | undefined) | ((prevValue: T | undefined) => T | undefined)) => void + ]; + (key: string, storage: MMKVInstance, defaultValue: T | undefined): [ + value: T, + setValue: (value: T | ((prevValue: T) => T)) => void + ]; + (key: string, storage: MMKVInstance, defaultValue: T | undefined, equalityFn?: (prev: T | undefined, next: T | undefined) => boolean): [value: T, setValue: (value: T | ((prevValue: T) => T)) => void]; +}; +export {}; +//# sourceMappingURL=useMMKV.d.ts.map \ No newline at end of file diff --git a/dist/src/hooks/useMMKV.d.ts.map b/dist/src/hooks/useMMKV.d.ts.map new file mode 100644 index 00000000..10c590e7 --- /dev/null +++ b/dist/src/hooks/useMMKV.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"useMMKV.d.ts","sourceRoot":"","sources":["../../../src/hooks/useMMKV.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAI3C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,MAAM,EAAE,UAWlB,CAAC;AAEJ;;;;GAIG;AACH,KAAK,UAAU,GAAG,CAAC,OAAO,EAAE,YAAY,KAAK;IAC3C,CAAC,CAAC,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG;QAC5B,KAAK,EAAE,CAAC,GAAG,SAAS;QACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,GAAG,SAAS,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,IAAI;KAC3F,CAAC;IACF,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG;QACjC,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI;KACrD,CAAC;IACF,CAAC,CAAC,EACA,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,CAAC,EACf,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC,GAAG,SAAS,KAAK,OAAO,GACjE,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;CACrE,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,cAAc,EAAE,kBAmG5B,CAAC;AAYF;;;GAGG;AACH,KAAK,kBAAkB,GAAG;IACxB,CAAC,CAAC,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG;QACnD,KAAK,EAAE,CAAC,GAAG,SAAS;QACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,GAAG,SAAS,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,IAAI;KAC3F,CAAC;IACF,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,GAAG,SAAS,GAAG;QACpE,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI;KACrD,CAAC;IACF,CAAC,CAAC,EACA,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,YAAY,EACrB,YAAY,EAAE,CAAC,GAAG,SAAS,EAC3B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC,GAAG,SAAS,KAAK,OAAO,GACjE,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;CACrE,CAAC"} \ No newline at end of file diff --git a/dist/src/hooks/useMMKV.js b/dist/src/hooks/useMMKV.js new file mode 100644 index 00000000..75a60657 --- /dev/null +++ b/dist/src/hooks/useMMKV.js @@ -0,0 +1,153 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.useMMKVStorage = exports.create = void 0; +const react_1 = require("react"); +const constants_1 = require("./constants"); +const functions_1 = require("./functions"); +/** + * A helper function which returns `useMMKVStorage` hook with a storage instance set. + * + * ```tsx + * import MMKVStorage, {create} from "react-native-mmkv-storage" + * + * const storage = new MMKVStorage.Loader().initialize(); + * const useStorage = create(storage); + * + * // Then later in your component + * const App = () => { + * const [value, setValue] = useStorage("key"); + * + * ... + * } + * ``` + * Documentation: https://rnmmkv.vercel.app/#/usemmkvstorage + * + * @param storage The storage instance + * @returns `useMMKVStorage` hook + */ +const create = (storage) => (key, defaultValue, equalityFn) => { + if (!key || typeof key !== 'string' || !storage) + throw new Error('Key and Storage are required parameters.'); + return (0, exports.useMMKVStorage)(key, storage, defaultValue, equalityFn); +}; +exports.create = create; +/** + * + * useMMKVStorage Hook is like a persisted state that will always write every change in storage and update your app UI instantly. + * It doesn’t matter if you reload the app or restart it. Everything will be in place on app load. + * + * ```tsx + * import MMKVStorage from "react-native-mmkv-storage" + * + * const MMKV = new MMKVStorage.Loader().initialize(); + * + * // Then later in your component + * const App = () => { + * const [user, setUser] = useMMKVStorage("user", MMKV, "robert"); + * + * ... + * }; + * ``` + * Documentation: https://rnmmkv.vercel.app/#/usemmkvstorage + * + * @param key The key against which the hook should update + * @param storage The storage instance + * @param defaultValue Default value if any + * @param equalityFn Provide a custom function to handle state update if value has changed. + * + * @returns `[value,setValue]` + */ +const useMMKVStorage = (key, storage, defaultValue, equalityFn) => { + const getValue = (0, react_1.useCallback)((0, functions_1.getInitialValue)(key, storage, 'value'), [key, storage]); + const getValueType = (0, react_1.useCallback)((0, functions_1.getInitialValue)(key, storage, 'type'), [key, storage]); + const [value, setValue] = (0, react_1.useState)(getValue); + const [valueType, setValueType] = (0, react_1.useState)(getValueType); + const prevKey = usePrevious(key); + const prevStorage = usePrevious(storage); + const prevValue = (0, react_1.useRef)(value); + (0, react_1.useEffect)(() => { + prevValue.current = value; + if (storage.options.persistDefaults && + defaultValue !== undefined && + defaultValue !== null && + (value === null || value === undefined)) { + setNewValue(defaultValue); + } + }, [value]); + (0, react_1.useEffect)(() => { + if (storage !== null) { + // This check prevents getInitialValue from being called twice when this hook intially loads + if (prevKey !== key || prevStorage !== storage) { + setValue(getValue); + setValueType(getValueType); + } + storage.ev.subscribe(`${key}:onwrite`, updateValue); + } + return () => { + if (storage != null) { + storage.ev.unsubscribe(`${key}:onwrite`, updateValue); + } + }; + }, [prevKey, key, prevStorage, storage, getValue, getValueType]); + const updateValue = (0, react_1.useCallback)(event => { + let type = (0, functions_1.getDataType)(event.value); + //@ts-ignore + let _value = event.value ? constants_1.methods[type]['copy'](event.value) : event.value; + if (prevValue.current === _value || (equalityFn === null || equalityFn === void 0 ? void 0 : equalityFn(prevValue.current, _value))) + return; + setValue(_value); + setValueType(type); + }, []); + const setNewValue = (0, react_1.useCallback)((nextValue) => __awaiter(void 0, void 0, void 0, function* () { + let updatedValue = nextValue; + if (typeof nextValue === 'function') { + if (nextValue.constructor.name === 'AsyncFunction') { + __DEV__ && + console.warn(`Attempting to use an async function as state setter is not allowed.`); + return; + } + updatedValue = nextValue(prevValue.current || defaultValue); + } + let _value; + let _valueType = valueType; + if (updatedValue === null || updatedValue === undefined) { + storage.removeItem(key); + _valueType = null; + } + else { + let _dataType = (0, functions_1.getDataType)(updatedValue); + if (_valueType && _dataType !== valueType) { + __DEV__ && + console.warn(`Trying to set a ${_dataType} value to hook for type ${_valueType} is not allowed.`); + return; + } + if (!valueType) { + _valueType = _dataType; + } + _value = updatedValue; + //@ts-ignore + storage[constants_1.methods[_valueType]['set']](key, _value); + } + }), [key, storage, valueType]); + return [ + valueType === 'boolean' || valueType === 'number' ? value : value || defaultValue, + setNewValue + ]; +}; +exports.useMMKVStorage = useMMKVStorage; +function usePrevious(value) { + const ref = (0, react_1.useRef)(value); + (0, react_1.useEffect)(() => { + ref.current = value; + }, [value]); + return ref.current; +} diff --git a/dist/src/hooks/useMMKVRef.d.ts b/dist/src/hooks/useMMKVRef.d.ts new file mode 100644 index 00000000..fc367599 --- /dev/null +++ b/dist/src/hooks/useMMKVRef.d.ts @@ -0,0 +1,10 @@ +import MMKVInstance from '../mmkvinstance'; +export declare function useMMKVRef(key: string, storage: MMKVInstance, defaultValue: T): { + current: T; + reset(): void; +}; +export declare const createMMKVRefHookForStorage: (storage: MMKVInstance) => (key: string, defaultValue?: T) => { + current: T; + reset(): void; +}; +//# sourceMappingURL=useMMKVRef.d.ts.map \ No newline at end of file diff --git a/dist/src/hooks/useMMKVRef.d.ts.map b/dist/src/hooks/useMMKVRef.d.ts.map new file mode 100644 index 00000000..ac3b1c55 --- /dev/null +++ b/dist/src/hooks/useMMKVRef.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"useMMKVRef.d.ts","sourceRoot":"","sources":["../../../src/hooks/useMMKVRef.ts"],"names":[],"mappings":"AAmBA,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAE3C,wBAAgB,UAAU,CAAC,CAAC,EAC1B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,YAAY,EACrB,YAAY,EAAE,CAAC,GACd;IACD,OAAO,EAAE,CAAC,CAAC;IACX,KAAK,IAAI,IAAI,CAAC;CACf,CAoCA;AAED,eAAO,MAAM,2BAA2B,YAC5B,YAAY,cACb,MAAM;;aAzCN,IAAI;CA8CZ,CAAC"} \ No newline at end of file diff --git a/dist/src/hooks/useMMKVRef.js b/dist/src/hooks/useMMKVRef.js new file mode 100644 index 00000000..d89e57eb --- /dev/null +++ b/dist/src/hooks/useMMKVRef.js @@ -0,0 +1,65 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createMMKVRefHookForStorage = exports.useMMKVRef = void 0; +/* +This file is part of the Notesnook project (https://notesnook.com/) + +Copyright (C) 2023 Streetwriters (Private) Limited + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ +const react_1 = require("react"); +function useMMKVRef(key, storage, defaultValue) { + var _a; + const refKey = `__mmkvref:${key}`; + const value = (0, react_1.useRef)(((_a = storage.getMap(refKey)) === null || _a === void 0 ? void 0 : _a.current) || defaultValue); + const frameRef = (0, react_1.useRef)(0); + (0, react_1.useEffect)(() => { + const onWrite = event => { + value.current = event.value; + }; + if (storage !== null) { + storage.ev.subscribe(`${key}:onwrite`, onWrite); + } + return () => { + if (storage != null) { + storage.ev.unsubscribe(`${key}:onwrite`, onWrite); + } + }; + }, [key, storage]); + return { + get current() { + return value.current; + }, + set current(next) { + value.current = next; + cancelAnimationFrame(frameRef.current); + frameRef.current = requestAnimationFrame(() => { + storage.setMap(refKey, { + current: value.current + }); + }); + }, + reset() { + storage.removeItem(refKey); + } + }; +} +exports.useMMKVRef = useMMKVRef; +const createMMKVRefHookForStorage = (storage) => (key, defaultValue) => { + if (!key || typeof key !== 'string' || !storage) + throw new Error('Key and Storage are required parameters.'); + return useMMKVRef(key, storage, defaultValue); +}; +exports.createMMKVRefHookForStorage = createMMKVRefHookForStorage; diff --git a/dist/src/indexer/arrays.d.ts b/dist/src/indexer/arrays.d.ts new file mode 100644 index 00000000..197ca8bd --- /dev/null +++ b/dist/src/indexer/arrays.d.ts @@ -0,0 +1,21 @@ +/** + * Index of all array values stored in storage + */ +export default class arrayIndex { + instanceID: string; + constructor(id: string); + /** + * + * Get all keys + */ + getKeys(): Promise; + /** + * Check if a key exists. + */ + hasKey(key: string): boolean; + /** + * Get all arrays from storage. + */ + getAll(): Promise; +} +//# sourceMappingURL=arrays.d.ts.map \ No newline at end of file diff --git a/dist/src/indexer/arrays.d.ts.map b/dist/src/indexer/arrays.d.ts.map new file mode 100644 index 00000000..c885bb4f --- /dev/null +++ b/dist/src/indexer/arrays.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"arrays.d.ts","sourceRoot":"","sources":["../../../src/indexer/arrays.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B,UAAU,EAAE,MAAM,CAAC;gBACP,EAAE,EAAE,MAAM;IAItB;;;OAGG;IACG,OAAO;IAGb;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM;IAIlB;;OAEG;IACG,MAAM,CAAC,CAAC;CAiBf"} \ No newline at end of file diff --git a/dist/src/indexer/arrays.js b/dist/src/indexer/arrays.js new file mode 100644 index 00000000..ecaf3011 --- /dev/null +++ b/dist/src/indexer/arrays.js @@ -0,0 +1,64 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const handlers_1 = require("../handlers"); +const module_1 = __importDefault(require("../module")); +const INDEX_TYPE = 'arrayIndex'; +/** + * Index of all array values stored in storage + */ +class arrayIndex { + constructor(id) { + this.instanceID = id; + } + /** + * + * Get all keys + */ + getKeys() { + return __awaiter(this, void 0, void 0, function* () { + return yield (0, handlers_1.handleActionAsync)(module_1.default.getIndexMMKV, INDEX_TYPE, this.instanceID); + }); + } + /** + * Check if a key exists. + */ + hasKey(key) { + let keys = (0, handlers_1.handleAction)(module_1.default.getIndexMMKV, INDEX_TYPE, this.instanceID); + return keys && keys.indexOf(key) > -1; + } + /** + * Get all arrays from storage. + */ + getAll() { + return __awaiter(this, void 0, void 0, function* () { + return new Promise(resolve => { + let keys = (0, handlers_1.handleAction)(module_1.default.getIndexMMKV, INDEX_TYPE, this.instanceID); + if (!keys) + keys = []; + let items = []; + for (let i = 0; i < keys.length; i++) { + //@ts-ignore + let item = []; + item[0] = keys[i]; + let array = module_1.default.getArrayMMKV(keys[i], this.instanceID); + item[1] = array ? JSON.parse(array) : null; + items.push(item); + } + resolve(items); + }); + }); + } +} +exports.default = arrayIndex; diff --git a/dist/src/indexer/booleans.d.ts b/dist/src/indexer/booleans.d.ts new file mode 100644 index 00000000..06137a9e --- /dev/null +++ b/dist/src/indexer/booleans.d.ts @@ -0,0 +1,20 @@ +/** + * Index of all boolean values stored in storage. + */ +export default class boolIndex { + instanceID: string; + constructor(id: string); + /** + * Get all keys + */ + getKeys(): Promise; + /** + * Check if a key exists. + */ + hasKey(key: string): boolean; + /** + * Get all boolean values from storage + */ + getAll(): Promise; +} +//# sourceMappingURL=booleans.d.ts.map \ No newline at end of file diff --git a/dist/src/indexer/booleans.d.ts.map b/dist/src/indexer/booleans.d.ts.map new file mode 100644 index 00000000..62897138 --- /dev/null +++ b/dist/src/indexer/booleans.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"booleans.d.ts","sourceRoot":"","sources":["../../../src/indexer/booleans.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,SAAS;IAC5B,UAAU,EAAE,MAAM,CAAC;gBACP,EAAE,EAAE,MAAM;IAGtB;;OAEG;IACG,OAAO;IAIb;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM;IAKlB;;OAEG;IACG,MAAM;CAcb"} \ No newline at end of file diff --git a/dist/src/indexer/booleans.js b/dist/src/indexer/booleans.js new file mode 100644 index 00000000..7a403803 --- /dev/null +++ b/dist/src/indexer/booleans.js @@ -0,0 +1,61 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const handlers_1 = require("../handlers"); +const module_1 = __importDefault(require("../module")); +const INDEX_TYPE = 'boolIndex'; +/** + * Index of all boolean values stored in storage. + */ +class boolIndex { + constructor(id) { + this.instanceID = id; + } + /** + * Get all keys + */ + getKeys() { + return __awaiter(this, void 0, void 0, function* () { + return yield (0, handlers_1.handleActionAsync)(module_1.default.getIndexMMKV, INDEX_TYPE, this.instanceID); + }); + } + /** + * Check if a key exists. + */ + hasKey(key) { + let keys = (0, handlers_1.handleAction)(module_1.default.getIndexMMKV, INDEX_TYPE, this.instanceID); + return keys && keys.indexOf(key) > -1; + } + /** + * Get all boolean values from storage + */ + getAll() { + return __awaiter(this, void 0, void 0, function* () { + return new Promise(resolve => { + let keys = (0, handlers_1.handleAction)(module_1.default.getIndexMMKV, INDEX_TYPE, this.instanceID); + if (!keys) + keys = []; + let items = []; + for (let i = 0; i < keys.length; i++) { + let item = []; + item[0] = keys[i]; + item[1] = module_1.default.getBoolMMKV(keys[i], this.instanceID); + items.push(item); + } + resolve(items); + }); + }); + } +} +exports.default = boolIndex; diff --git a/dist/src/indexer/indexer.d.ts b/dist/src/indexer/indexer.d.ts new file mode 100644 index 00000000..535d24c3 --- /dev/null +++ b/dist/src/indexer/indexer.d.ts @@ -0,0 +1,24 @@ +import stringsIndex from './strings'; +import numbersIndex from './numbers'; +import boolIndex from './booleans'; +import mapsIndex from './maps'; +import arrayIndex from './arrays'; +export default class indexer { + instanceID: string; + strings: stringsIndex; + numbers: numbersIndex; + booleans: boolIndex; + maps: mapsIndex; + arrays: arrayIndex; + constructor(id: string); + /** + * Get all keys from storage. + * + */ + getKeys(): Promise; + /** + * Check if a key exists in storage. + */ + hasKey(key: string): boolean; +} +//# sourceMappingURL=indexer.d.ts.map \ No newline at end of file diff --git a/dist/src/indexer/indexer.d.ts.map b/dist/src/indexer/indexer.d.ts.map new file mode 100644 index 00000000..5fdbb470 --- /dev/null +++ b/dist/src/indexer/indexer.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../../../src/indexer/indexer.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,WAAW,CAAC;AACrC,OAAO,YAAY,MAAM,WAAW,CAAC;AACrC,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,SAAS,MAAM,QAAQ,CAAC;AAC/B,OAAO,UAAU,MAAM,UAAU,CAAC;AAIlC,MAAM,CAAC,OAAO,OAAO,OAAO;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,SAAS,CAAC;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,UAAU,CAAC;gBAEP,EAAE,EAAE,MAAM;IAStB;;;OAGG;IACG,OAAO;IAIb;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM;CAGnB"} \ No newline at end of file diff --git a/dist/src/indexer/indexer.js b/dist/src/indexer/indexer.js new file mode 100644 index 00000000..efaf442e --- /dev/null +++ b/dist/src/indexer/indexer.js @@ -0,0 +1,47 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const strings_1 = __importDefault(require("./strings")); +const numbers_1 = __importDefault(require("./numbers")); +const booleans_1 = __importDefault(require("./booleans")); +const maps_1 = __importDefault(require("./maps")); +const arrays_1 = __importDefault(require("./arrays")); +const handlers_1 = require("../handlers"); +const module_1 = __importDefault(require("../module")); +class indexer { + constructor(id) { + this.instanceID = id; + this.strings = new strings_1.default(id); + this.numbers = new numbers_1.default(id); + this.booleans = new booleans_1.default(id); + this.maps = new maps_1.default(id); + this.arrays = new arrays_1.default(id); + } + /** + * Get all keys from storage. + * + */ + getKeys() { + return __awaiter(this, void 0, void 0, function* () { + return yield (0, handlers_1.handleActionAsync)(module_1.default.getAllKeysMMKV, this.instanceID); + }); + } + /** + * Check if a key exists in storage. + */ + hasKey(key) { + return (0, handlers_1.handleAction)(module_1.default.containsKeyMMKV, key, this.instanceID); + } +} +exports.default = indexer; diff --git a/dist/src/indexer/maps.d.ts b/dist/src/indexer/maps.d.ts new file mode 100644 index 00000000..a71ebe93 --- /dev/null +++ b/dist/src/indexer/maps.d.ts @@ -0,0 +1,21 @@ +/** + * Index of all objects stored in storage. + */ +export default class mapsIndex { + instanceID: string; + constructor(id: string); + /** + * + * Get all keys + */ + getKeys(): Promise; + /** + * Check if a key exists. + */ + hasKey(key: string): boolean; + /** + * Get all objects stored in storage. + */ + getAll(): Promise; +} +//# sourceMappingURL=maps.d.ts.map \ No newline at end of file diff --git a/dist/src/indexer/maps.d.ts.map b/dist/src/indexer/maps.d.ts.map new file mode 100644 index 00000000..09dd3105 --- /dev/null +++ b/dist/src/indexer/maps.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"maps.d.ts","sourceRoot":"","sources":["../../../src/indexer/maps.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,SAAS;IAC5B,UAAU,EAAE,MAAM,CAAC;gBACP,EAAE,EAAE,MAAM;IAItB;;;OAGG;IACG,OAAO;IAIb;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM;IAKlB;;OAEG;IACG,MAAM,CAAC,CAAC;CAgBf"} \ No newline at end of file diff --git a/dist/src/indexer/maps.js b/dist/src/indexer/maps.js new file mode 100644 index 00000000..7718e3fa --- /dev/null +++ b/dist/src/indexer/maps.js @@ -0,0 +1,64 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const handlers_1 = require("../handlers"); +const module_1 = __importDefault(require("../module")); +const INDEX_TYPE = 'mapIndex'; +/** + * Index of all objects stored in storage. + */ +class mapsIndex { + constructor(id) { + this.instanceID = id; + } + /** + * + * Get all keys + */ + getKeys() { + return __awaiter(this, void 0, void 0, function* () { + return yield (0, handlers_1.handleActionAsync)(module_1.default.getIndexMMKV, INDEX_TYPE, this.instanceID); + }); + } + /** + * Check if a key exists. + */ + hasKey(key) { + let keys = (0, handlers_1.handleAction)(module_1.default.getIndexMMKV, INDEX_TYPE, this.instanceID); + return keys && keys.indexOf(key) > -1; + } + /** + * Get all objects stored in storage. + */ + getAll() { + return __awaiter(this, void 0, void 0, function* () { + return new Promise(resolve => { + let keys = (0, handlers_1.handleAction)(module_1.default.getIndexMMKV, INDEX_TYPE, this.instanceID); + if (!keys) + keys = []; + let items = []; + for (let i = 0; i < keys.length; i++) { + //@ts-ignore + let item = []; + item[0] = keys[i]; + let map = module_1.default.getMapMMKV(keys[i], this.instanceID); + item[1] = map ? JSON.parse(map) : null; + items.push(item); + } + resolve(items); + }); + }); + } +} +exports.default = mapsIndex; diff --git a/dist/src/indexer/numbers.d.ts b/dist/src/indexer/numbers.d.ts new file mode 100644 index 00000000..c23bc0bb --- /dev/null +++ b/dist/src/indexer/numbers.d.ts @@ -0,0 +1,21 @@ +/** + * Index of all numbers stored in storage. + */ +export default class numbersIndex { + instanceID: string; + constructor(id: string); + /** + * + * Get all keys + */ + getKeys(): Promise; + /** + * Check if a key exists + */ + hasKey(key: string): boolean; + /** + * Get all numbers from storage + */ + getAll(): Promise; +} +//# sourceMappingURL=numbers.d.ts.map \ No newline at end of file diff --git a/dist/src/indexer/numbers.d.ts.map b/dist/src/indexer/numbers.d.ts.map new file mode 100644 index 00000000..ebc5a425 --- /dev/null +++ b/dist/src/indexer/numbers.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"numbers.d.ts","sourceRoot":"","sources":["../../../src/indexer/numbers.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B,UAAU,EAAE,MAAM,CAAC;gBACP,EAAE,EAAE,MAAM;IAItB;;;OAGG;IACG,OAAO;IAIb;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM;IAKlB;;OAEG;IACG,MAAM;CAcb"} \ No newline at end of file diff --git a/dist/src/indexer/numbers.js b/dist/src/indexer/numbers.js new file mode 100644 index 00000000..e926af6b --- /dev/null +++ b/dist/src/indexer/numbers.js @@ -0,0 +1,62 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const handlers_1 = require("../handlers"); +const module_1 = __importDefault(require("../module")); +const INDEX_TYPE = 'numberIndex'; +/** + * Index of all numbers stored in storage. + */ +class numbersIndex { + constructor(id) { + this.instanceID = id; + } + /** + * + * Get all keys + */ + getKeys() { + return __awaiter(this, void 0, void 0, function* () { + return yield (0, handlers_1.handleActionAsync)(module_1.default.getIndexMMKV, INDEX_TYPE, this.instanceID); + }); + } + /** + * Check if a key exists + */ + hasKey(key) { + let keys = (0, handlers_1.handleAction)(module_1.default.getIndexMMKV, INDEX_TYPE, this.instanceID); + return keys && keys.indexOf(key) > -1; + } + /** + * Get all numbers from storage + */ + getAll() { + return __awaiter(this, void 0, void 0, function* () { + return new Promise(resolve => { + let keys = (0, handlers_1.handleAction)(module_1.default.getIndexMMKV, INDEX_TYPE, this.instanceID); + if (!keys) + keys = []; + let items = []; + for (let i = 0; i < keys.length; i++) { + let item = []; + item[0] = keys[i]; + item[1] = module_1.default.getNumberMMKV(keys[i], this.instanceID); + items.push(item); + } + resolve(items); + }); + }); + } +} +exports.default = numbersIndex; diff --git a/dist/src/indexer/strings.d.ts b/dist/src/indexer/strings.d.ts new file mode 100644 index 00000000..249237e4 --- /dev/null +++ b/dist/src/indexer/strings.d.ts @@ -0,0 +1,20 @@ +/** + * Index of all string values in storage + */ +export default class stringsIndex { + instanceID: string; + constructor(id: string); + /** + * Get all keys + */ + getKeys(): Promise; + /** + * Checck if a key exists + */ + hasKey(key: string): boolean; + /** + * Get all string values from storage + */ + getAll(): Promise; +} +//# sourceMappingURL=strings.d.ts.map \ No newline at end of file diff --git a/dist/src/indexer/strings.d.ts.map b/dist/src/indexer/strings.d.ts.map new file mode 100644 index 00000000..5930be4c --- /dev/null +++ b/dist/src/indexer/strings.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../../../src/indexer/strings.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B,UAAU,EAAE,MAAM,CAAC;gBACP,EAAE,EAAE,MAAM;IAItB;;OAEG;IACG,OAAO;IAIb;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM;IAKlB;;OAEG;IACG,MAAM;CAcb"} \ No newline at end of file diff --git a/dist/src/indexer/strings.js b/dist/src/indexer/strings.js new file mode 100644 index 00000000..859addd0 --- /dev/null +++ b/dist/src/indexer/strings.js @@ -0,0 +1,61 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const handlers_1 = require("../handlers"); +const module_1 = __importDefault(require("../module")); +const INDEX_TYPE = 'stringIndex'; +/** + * Index of all string values in storage + */ +class stringsIndex { + constructor(id) { + this.instanceID = id; + } + /** + * Get all keys + */ + getKeys() { + return __awaiter(this, void 0, void 0, function* () { + return yield (0, handlers_1.handleActionAsync)(module_1.default.getIndexMMKV, INDEX_TYPE, this.instanceID); + }); + } + /** + * Checck if a key exists + */ + hasKey(key) { + let keys = (0, handlers_1.handleAction)(module_1.default.getIndexMMKV, INDEX_TYPE, this.instanceID); + return keys && keys.indexOf(key) > -1; + } + /** + * Get all string values from storage + */ + getAll() { + return __awaiter(this, void 0, void 0, function* () { + return new Promise(resolve => { + let keys = (0, handlers_1.handleAction)(module_1.default.getIndexMMKV, INDEX_TYPE, this.instanceID); + if (!keys) + keys = []; + let items = []; + for (let i = 0; i < keys.length; i++) { + let item = []; + item[0] = keys[i]; + item[1] = module_1.default.getStringMMKV(keys[i], this.instanceID); + items.push(item); + } + resolve(items); + }); + }); + } +} +exports.default = stringsIndex; diff --git a/dist/src/initializer.d.ts b/dist/src/initializer.d.ts new file mode 100644 index 00000000..2cf84571 --- /dev/null +++ b/dist/src/initializer.d.ts @@ -0,0 +1,19 @@ +export declare const currentInstancesStatus: { + [name: string]: boolean; +}; +/** + * Get current instance ID status for instances + * loaded since application started + */ +export declare function getCurrentMMKVInstanceIDs(): { + [x: string]: boolean; +}; +/** + * + * Initialize function is used to create + * the storage or load the storage if + * it already exists with the given options. + * + */ +export declare function initialize(id: string): boolean; +//# sourceMappingURL=initializer.d.ts.map \ No newline at end of file diff --git a/dist/src/initializer.d.ts.map b/dist/src/initializer.d.ts.map new file mode 100644 index 00000000..d10e9d49 --- /dev/null +++ b/dist/src/initializer.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"initializer.d.ts","sourceRoot":"","sources":["../../src/initializer.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,sBAAsB,EAAE;IAAE,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;CAAO,CAAC;AAEtE;;;GAGG;AACH,wBAAgB,yBAAyB;;EAExC;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,WA6BpC"} \ No newline at end of file diff --git a/dist/src/initializer.js b/dist/src/initializer.js new file mode 100644 index 00000000..ba459be9 --- /dev/null +++ b/dist/src/initializer.js @@ -0,0 +1,155 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.initialize = exports.getCurrentMMKVInstanceIDs = exports.currentInstancesStatus = void 0; +const utils_1 = require("./utils"); +const IDStore_1 = __importDefault(require("./mmkv/IDStore")); +const module_1 = __importDefault(require("./module")); +exports.currentInstancesStatus = {}; +/** + * Get current instance ID status for instances + * loaded since application started + */ +function getCurrentMMKVInstanceIDs() { + return Object.assign({}, exports.currentInstancesStatus); +} +exports.getCurrentMMKVInstanceIDs = getCurrentMMKVInstanceIDs; +/** + * + * Initialize function is used to create + * the storage or load the storage if + * it already exists with the given options. + * + */ +function initialize(id) { + let opts = utils_1.options[id]; + if (!module_1.default.setupMMKVInstance) + return false; + if (opts.serviceName && opts.alias && module_1.default.setMMKVServiceName) { + module_1.default.setMMKVServiceName(opts.alias, opts.serviceName); + } + if (IDStore_1.default.exists(id)) { + if (!IDStore_1.default.encrypted(id)) { + return initWithoutEncryption(opts); + } + opts.alias = IDStore_1.default.getAlias(id); + return initWithEncryptionUsingOldKey(opts); + } + if (!opts.initWithEncryption) { + return initWithoutEncryption(opts); + } + if (!opts.secureKeyStorage) { + return initWithEncryptionWithoutSecureStorage(opts); + } + if (opts.alias && !module_1.default.secureKeyExists(opts.alias)) { + return initWithEncryptionUsingNewKey(opts); + } + return initWithEncryptionUsingOldKey(opts); +} +exports.initialize = initialize; +/** + * Usually after first creation of the + * storage, your database will be + * initialized with its old key stored + * in the secure storage. + * + */ +function initWithEncryptionUsingOldKey(options) { + if (!options.alias) + return false; + let key = !options.secureKeyStorage ? options.key : module_1.default.getSecureKey(options.alias); + if (key) { + return setupWithEncryption(options.instanceID, options.processingMode, key, options.alias); + } + return false; +} +/** + * For first creation of storage + * this function is called when + * you are encrypting it on initialzation + * + */ +function initWithEncryptionUsingNewKey(options) { + if (!options.key || options.key.length < 3) + throw new Error('Key is null or too short'); + if (!options.alias) + return false; + module_1.default.setSecureKey(options.alias, options.key, options.accessibleMode); + return setupWithEncryption(options.instanceID, options.processingMode, options.key, options.alias); +} +/** + * It is possible that the user does not + * want to store the key in secure storage. + * In such a case, this function will + * be called to encrypt the storage. + * + */ +function initWithEncryptionWithoutSecureStorage(options) { + if (!options.key || options.key.length < 3) + throw new Error('Key is null or too short'); + if (!options.alias) + return false; + return setupWithEncryption(options.instanceID, options.processingMode, options.key, options.alias); +} +/** + * + * When you want to initialize the storage + * without encryption this function is called. + * + */ +function initWithoutEncryption(options) { + return setup(options.instanceID, options.processingMode); +} +function setup(id, mode) { + module_1.default.setupMMKVInstance(id, mode, '', '', utils_1.options[id].enableIndexing); + if (!IDStore_1.default.exists(id)) { + module_1.default.setBoolMMKV(id, true, id); + IDStore_1.default.add(id, false, null); + return true; + } + else { + if (module_1.default.containsKeyMMKV(id, id)) { + return true; + } + else { + return encryptionHandler(id, mode); + } + } +} +function setupWithEncryption(id, mode, key, alias) { + module_1.default.setupMMKVInstance(id, mode, key, '', utils_1.options[id].enableIndexing); + if (!IDStore_1.default.exists(id)) { + module_1.default.setBoolMMKV(id, true, id); + IDStore_1.default.add(id, true, alias); + return true; + } + else { + if (module_1.default.containsKeyMMKV(id, id)) { + utils_1.options[id].key = key; + return true; + } + else { + return encryptionHandler(id, mode); + } + } +} +/** + * When a storage instance is encrypted at runtime, this functions + * helps in detecting and loading the instance properly. + */ +function encryptionHandler(id, mode) { + let alias = IDStore_1.default.getAlias(id); + if (!alias) + return module_1.default.setupMMKVInstance(id, mode, '', '', utils_1.options[id].enableIndexing); + let exists = module_1.default.secureKeyExists(alias); + let key = exists && module_1.default.getSecureKey(alias); + if (IDStore_1.default.encrypted(id) && key) { + utils_1.options[id].key = key; + return module_1.default.setupMMKVInstance(id, mode, key, '', utils_1.options[id].enableIndexing); + } + else { + return module_1.default.setupMMKVInstance(id, mode, '', '', utils_1.options[id].enableIndexing); + } +} diff --git a/dist/src/keygen.d.ts b/dist/src/keygen.d.ts new file mode 100644 index 00000000..52ece03e --- /dev/null +++ b/dist/src/keygen.d.ts @@ -0,0 +1,6 @@ +/** + * A utility function that generates a strong password + * @returns + */ +export default function generatePassword(): string; +//# sourceMappingURL=keygen.d.ts.map \ No newline at end of file diff --git a/dist/src/keygen.d.ts.map b/dist/src/keygen.d.ts.map new file mode 100644 index 00000000..4d8bda43 --- /dev/null +++ b/dist/src/keygen.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"keygen.d.ts","sourceRoot":"","sources":["../../src/keygen.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,IAAI,MAAM,CAQjD"} \ No newline at end of file diff --git a/dist/src/keygen.js b/dist/src/keygen.js new file mode 100644 index 00000000..cf31040d --- /dev/null +++ b/dist/src/keygen.js @@ -0,0 +1,48 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const lowercase = 'abcdefghijklmnopqrstuvwxyz'; +const uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; +const numbers = '0123456789'; +const all = lowercase + uppercase + numbers; +/** + * A utility function that generates a strong password + * @returns + */ +function generatePassword() { + let password = ''; + password += pick(password, lowercase, 1, 5); + password += pick(password, uppercase, 1, 5); + password += pick(password, all, 10); + return shuffle(password); +} +exports.default = generatePassword; +function pick(exclusions, string, min, max) { + var n, chars = ''; + if (max === undefined) { + n = min; + } + else { + n = min + Math.floor(Math.random() * (max - min + 1)); + } + var i = 0; + while (i < n) { + const character = string.charAt(Math.floor(Math.random() * string.length)); + if (exclusions.indexOf(character) < 0 && chars.indexOf(character) < 0) { + chars += character; + i++; + } + } + return chars; +} +function shuffle(string) { + var array = string.split(''); + var tmp, current, top = array.length; + if (top) + while (--top) { + current = Math.floor(Math.random() * (top + 1)); + tmp = array[current]; + array[current] = array[top]; + array[top] = tmp; + } + return array.join(''); +} diff --git a/dist/src/mmkv/IDStore.d.ts b/dist/src/mmkv/IDStore.d.ts new file mode 100644 index 00000000..3555fb76 --- /dev/null +++ b/dist/src/mmkv/IDStore.d.ts @@ -0,0 +1,48 @@ +export type StorageInstanceInfo = { + encrypted: boolean; + id: string; + alias: string; +}; +/** + * Store instance properties that we will use later to + * load the storage again. + */ +declare function add(id: string, encrypted?: boolean, alias?: string | null): void; +/** + * Check if the storage instance with the given ID is encrypted or not. + */ +declare function encrypted(id: string): boolean; +/** + * Get the alias for the storage which we used + * to store the crypt key in secure storage. + * @param {string} id instance id + */ +declare function getAlias(id: string): string; +/** + * Check if an instance is already present in the store. + * @param {string} id instance id + */ +declare function exists(id: string): boolean; +/** + * Get all the available instances that + * were loaded since the app was installed. + */ +declare function getAll(): any[] | { + [name: string]: StorageInstanceInfo; +}; +/** + * Get all the instance ids for instances + * that were loaded since the app was installed + */ +declare function getAllMMKVInstanceIDs(): string[]; +declare const _default: { + getAll: typeof getAll; + getAlias: typeof getAlias; + getAllMMKVInstanceIDs: typeof getAllMMKVInstanceIDs; + add: typeof add; + exists: typeof exists; + encrypted: typeof encrypted; + STORE_ID: string; +}; +export default _default; +//# sourceMappingURL=IDStore.d.ts.map \ No newline at end of file diff --git a/dist/src/mmkv/IDStore.d.ts.map b/dist/src/mmkv/IDStore.d.ts.map new file mode 100644 index 00000000..b2a92a6d --- /dev/null +++ b/dist/src/mmkv/IDStore.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"IDStore.d.ts","sourceRoot":"","sources":["../../../src/mmkv/IDStore.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AACF;;;GAGG;AACH,iBAAS,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,QAOlE;AAED;;GAEG;AACH,iBAAS,SAAS,CAAC,EAAE,EAAE,MAAM,WAO5B;AAED;;;;GAIG;AACH,iBAAS,QAAQ,CAAC,EAAE,EAAE,MAAM,UAO3B;AAED;;;GAGG;AACH,iBAAS,MAAM,CAAC,EAAE,EAAE,MAAM,WAMzB;AAGD;;;GAGG;AACH,iBAAS,MAAM;;EAcd;AAED;;;GAGG;AACH,iBAAS,qBAAqB,aAE7B;;;;;;;;;;AAED,wBAQE"} \ No newline at end of file diff --git a/dist/src/mmkv/IDStore.js b/dist/src/mmkv/IDStore.js new file mode 100644 index 00000000..7fbfa658 --- /dev/null +++ b/dist/src/mmkv/IDStore.js @@ -0,0 +1,92 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const react_native_1 = require("react-native"); +const module_1 = __importDefault(require("../module")); +const STORE_ID = react_native_1.Platform.OS === 'ios' ? 'mmkvIdStore' : 'mmkvIDStore'; +/** + * Store instance properties that we will use later to + * load the storage again. + */ +function add(id, encrypted, alias) { + let storeUnit = { + id, + encrypted, + alias + }; + module_1.default.setStringMMKV(id, JSON.stringify(storeUnit), STORE_ID); +} +/** + * Check if the storage instance with the given ID is encrypted or not. + */ +function encrypted(id) { + let json = module_1.default.getStringMMKV(id, STORE_ID); + if (!json) { + return false; + } + let storeUnit = JSON.parse(json); + return storeUnit.encrypted; +} +/** + * Get the alias for the storage which we used + * to store the crypt key in secure storage. + * @param {string} id instance id + */ +function getAlias(id) { + let json = module_1.default.getStringMMKV(id, STORE_ID); + if (!json) { + return null; + } + let storeUnit = JSON.parse(json); + return storeUnit.alias; +} +/** + * Check if an instance is already present in the store. + * @param {string} id instance id + */ +function exists(id) { + let json = module_1.default.getStringMMKV(id, STORE_ID); + if (!json) { + return false; + } + return true; +} +let blacklist = ['stringIndex']; +/** + * Get all the available instances that + * were loaded since the app was installed. + */ +function getAll() { + let keys = module_1.default.getAllKeysMMKV(STORE_ID); + if (!keys) + return []; + let storeUnits = {}; + keys.forEach(key => { + if (!blacklist.includes(key)) { + let json = module_1.default.getStringMMKV(key, STORE_ID); + if (json) { + let storeUnit = JSON.parse(json); + storeUnits[key] = storeUnit; + } + } + }); + return storeUnits; +} +/** + * Get all the instance ids for instances + * that were loaded since the app was installed + */ +function getAllMMKVInstanceIDs() { + return Object.keys(getAll()); +} +exports.default = { + getAll, + getAlias, + getAllMMKVInstanceIDs, + add, + exists, + encrypted, + STORE_ID +}; diff --git a/dist/src/mmkv/init.d.ts b/dist/src/mmkv/init.d.ts new file mode 100644 index 00000000..834f9553 --- /dev/null +++ b/dist/src/mmkv/init.d.ts @@ -0,0 +1,11 @@ +/** + * Check if functions installed from JSI are present in global object. + */ +export declare function isLoaded(): boolean; +/** + * Install bindings lazily. + * + * Note: You don't need to call this normally. + */ +export declare function init(): boolean; +//# sourceMappingURL=init.d.ts.map \ No newline at end of file diff --git a/dist/src/mmkv/init.d.ts.map b/dist/src/mmkv/init.d.ts.map new file mode 100644 index 00000000..c8a6dbf3 --- /dev/null +++ b/dist/src/mmkv/init.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/mmkv/init.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAgB,QAAQ,YAEvB;AAED;;;;GAIG;AACH,wBAAgB,IAAI,YAgBnB"} \ No newline at end of file diff --git a/dist/src/mmkv/init.js b/dist/src/mmkv/init.js new file mode 100644 index 00000000..0eaaf98e --- /dev/null +++ b/dist/src/mmkv/init.js @@ -0,0 +1,60 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.init = exports.isLoaded = void 0; +const index_1 = __importStar(require("../module/index")); +// Installing JSI Bindings as done by +// https://github.com/mrousavy/react-native-mmkv +/** + * Check if functions installed from JSI are present in global object. + */ +function isLoaded() { + return typeof (index_1.default === null || index_1.default === void 0 ? void 0 : index_1.default.getStringMMKV) === 'function'; +} +exports.isLoaded = isLoaded; +/** + * Install bindings lazily. + * + * Note: You don't need to call this normally. + */ +function init() { + try { + if (!isLoaded()) { + const installed = index_1.mmkvBridgeModule.install(); + if (!installed) + throw new Error('JSI bindings were not installed for: MMKVNative'); + if (!isLoaded()) { + throw new Error('JSI bindings installation failed for: MMKVNative'); + } + return installed; + } + return true; + } + catch (e) { + console.log('JSI bindings were not installed for: MMKVNative'); + return false; + } +} +exports.init = init; diff --git a/dist/src/mmkvinstance.d.ts b/dist/src/mmkvinstance.d.ts new file mode 100644 index 00000000..f0f53a72 --- /dev/null +++ b/dist/src/mmkvinstance.d.ts @@ -0,0 +1,174 @@ +import encryption from './encryption'; +import EventManager from './eventmanager'; +import indexer from './indexer/indexer'; +import transactions from './transactions'; +import { DataType, StorageOptions } from './types'; +export default class MMKVInstance { + transactions: transactions; + instanceID: string; + encryption: encryption; + indexer: indexer; + ev: EventManager; + options: StorageOptions; + constructor(id: string); + isRegisterd(key: string): Function[]; + handleNullOrUndefined(key: string, value: any): boolean; + /** + * Set a string value to storage for the given key. + * This method is added for redux-persist/zustand support. + * + */ + setItem(key: string, value: string, callback?: (err?: Error | null) => void): Promise; + /** + * Get the string value for the given key. + * This method is added for redux-persist/zustand support. + */ + getItem(key: string, callback?: (error?: Error | null, result?: string | null) => void): Promise; + /** + * Set a string value to storage for the given key. + */ + setStringAsync(key: string, value: string): Promise; + /** + * Get the string value for the given key. + */ + getStringAsync(key: string): Promise; + /** + * Set a number value to storage for the given key. + */ + setIntAsync(key: string, value: number): Promise; + /** + * Get the number value for the given key. + */ + getIntAsync(key: string): Promise; + /** + * Set a boolean value to storage for the given key. + * + */ + setBoolAsync(key: string, value: boolean): Promise; + /** + * Get the boolean value for the given key. + */ + getBoolAsync(key: string): Promise; + /** + * Set an Object to storage for the given key. + * + * Note that this function does **not** work with the Map data type. + * + */ + setMapAsync(key: string, value: object): Promise; + /** + * Get then Object from storage for the given key. + */ + getMapAsync(key: string): Promise; + /** + * Set items in bulk of same type at once + * + * If a value against a key is null/undefined, it will be + * set as null. + * + * @param keys Array of keys + * @param values Array of values + * @param type + */ + setMultipleItemsAsync(items: [string, any][], type: DataType | 'map'): Promise; + /** + * Retrieve multiple items for the given array of keys + */ + getMultipleItemsAsync(keys: string[], type: DataType | 'map'): Promise<[string, T][]>; + /** + * Set an array to storage for the given key. + */ + setArrayAsync(key: string, value: any[]): Promise; + /** + * Get the array from the storage for the given key. + */ + getArrayAsync(key: string): Promise; + /** + * Set a string value to storage for the given key. + */ + setString: (key: string, value: string) => boolean | undefined; + /** + * Get the string value for the given key. + */ + getString: (key: string, callback?: (error: any, value: string | undefined | null) => void) => string | null | undefined; + /** + * Set a number value to storage for the given key. + */ + setInt: (key: string, value: number) => boolean | undefined; + /** + * Get the number value for the given key + */ + getInt: (key: string, callback?: (error: any, value: number | undefined | null) => void) => number | null | undefined; + /** + * Set a boolean value to storage for the given key + */ + setBool: (key: string, value: boolean) => boolean | undefined; + /** + * Get the boolean value for the given key. + */ + getBool: (key: string, callback?: (error: any, value: boolean | undefined | null) => void) => boolean | null | undefined; + /** + * Set an Object to storage for a given key. + * + * Note that this function does **not** work with the Map data type + */ + setMap: (key: string, value: object) => boolean | undefined; + /** + * Get an Object from storage for a given key. + */ + getMap: (key: string, callback?: (error: any, value: T) => void) => T; + /** + * Set an array to storage for the given key. + */ + setArray: (key: string, value: any[]) => boolean | undefined; + /** + * get an array from the storage for give key. + */ + getArray: (key: string, callback?: (error: any, value: T[]) => void) => T[]; + /** + * Retrieve multiple items for the given array of keys. + * + */ + getMultipleItems: (keys: string[], type: DataType | 'map') => [string, T][]; + /** + * + * Get all Storage Instance IDs that are currently loaded. + * + */ + getCurrentMMKVInstanceIDs(): { + [x: string]: boolean; + }; + /** + * + * Get all Storage Instance IDs. + * + */ + getAllMMKVInstanceIDs(): string[]; + /** + * Remove an item from storage for a given key. + * + * If you are removing large number of keys, use `removeItems` instead. + */ + removeItem(key: string): boolean; + /** + * Remove multiple items from storage for given keys + * + */ + removeItems(keys: string[]): boolean; + /** + * Remove all keys and values from storage. + */ + clearStore(): boolean; + /** + * Get the key and alias for the encrypted storage + */ + getKey(): { + alias: string; + key: string; + }; + /** + * Clear memory cache of the current MMKV instance + */ + clearMemoryCache(): boolean; +} +//# sourceMappingURL=mmkvinstance.d.ts.map \ No newline at end of file diff --git a/dist/src/mmkvinstance.d.ts.map b/dist/src/mmkvinstance.d.ts.map new file mode 100644 index 00000000..bacad311 --- /dev/null +++ b/dist/src/mmkvinstance.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"mmkvinstance.d.ts","sourceRoot":"","sources":["../../src/mmkvinstance.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAE1C,OAAO,OAAO,MAAM,mBAAmB,CAAC;AAIxC,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAWnD,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,EAAE,EAAE,YAAY,CAAC;IACjB,OAAO,EAAE,cAAc,CAAC;gBACZ,EAAE,EAAE,MAAM;IAStB,WAAW,CAAC,GAAG,EAAE,MAAM;IAIvB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAQ7C;;;;OAIG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI;IAOjF;;;OAGG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI;IAM5F;;OAEG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAK/E;;OAEG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAK/D;;OAEG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAK5E;;OAEG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAK5D;;;OAGG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAK9E;;OAEG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAK9D;;;;;OAKG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAK5E;;OAEG;IACH,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IAM1D;;;;;;;;;OASG;IACG,qBAAqB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG,KAAK;IA8D1E;;OAEG;IACG,qBAAqB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC;IA8C9F;;OAEG;IACG,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAKnF;;OAEG;IACG,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;IAKpE;;OAEG;IACH,SAAS,QAAS,MAAM,SAAS,MAAM,KAAG,OAAO,GAAG,SAAS,CAmB3D;IAEF;;OAEG;IACH,SAAS,QACF,MAAM,qBACQ,GAAG,SAAS,MAAM,GAAG,SAAS,GAAG,IAAI,KAAK,IAAI,KAChE,MAAM,GAAG,IAAI,GAAG,SAAS,CAS1B;IACF;;OAEG;IACH,MAAM,QAAS,MAAM,SAAS,MAAM,KAAG,OAAO,GAAG,SAAS,CAiBxD;IACF;;OAEG;IACH,MAAM,QACC,MAAM,qBACQ,GAAG,SAAS,MAAM,GAAG,SAAS,GAAG,IAAI,KAAK,IAAI,KAChE,MAAM,GAAG,IAAI,GAAG,SAAS,CAU1B;IACF;;OAEG;IACH,OAAO,QAAS,MAAM,SAAS,OAAO,KAAG,OAAO,GAAG,SAAS,CAkB1D;IACF;;OAEG;IACH,OAAO,QACA,MAAM,qBACQ,GAAG,SAAS,OAAO,GAAG,SAAS,GAAG,IAAI,KAAK,IAAI,KACjE,OAAO,GAAG,IAAI,GAAG,SAAS,CAS3B;IACF;;;;OAIG;IACH,MAAM,QAAS,MAAM,SAAS,MAAM,KAAG,OAAO,GAAG,SAAS,CAwBxD;IACF;;OAEG;IACH,MAAM,WACC,MAAM,qBACQ,GAAG,eAAkC,IAAI,OAoB5D;IAEF;;OAEG;IACH,QAAQ,QAAS,MAAM,SAAS,GAAG,EAAE,KAAG,OAAO,GAAG,SAAS,CAwBzD;IAEF;;OAEG;IACH,QAAQ,WACD,MAAM,qBACQ,GAAG,iBAAoC,IAAI,SAmB9D;IAEF;;;OAGG;IACH,gBAAgB,YAAa,MAAM,EAAE,QAAQ,QAAQ,GAAG,KAAK,mBA4D3D;IAEF;;;;OAIG;IACH,yBAAyB;;;IAIzB;;;;OAIG;IACH,qBAAqB;IAIrB;;;;OAIG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM;IAetB;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE;IAoB1B;;OAEG;IACH,UAAU;IAoBV;;OAEG;IACH,MAAM;;;;IAKN;;OAEG;IACH,gBAAgB;CAIjB"} \ No newline at end of file diff --git a/dist/src/mmkvinstance.js b/dist/src/mmkvinstance.js new file mode 100644 index 00000000..f62dc2e7 --- /dev/null +++ b/dist/src/mmkvinstance.js @@ -0,0 +1,594 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const encryption_1 = __importDefault(require("./encryption")); +const eventmanager_1 = __importDefault(require("./eventmanager")); +const handlers_1 = require("./handlers"); +const indexer_1 = __importDefault(require("./indexer/indexer")); +const initializer_1 = require("./initializer"); +const IDStore_1 = __importDefault(require("./mmkv/IDStore")); +const module_1 = __importDefault(require("./module")); +const transactions_1 = __importDefault(require("./transactions")); +const utils_1 = require("./utils"); +function assert(type, value) { + if (type === 'array') { + if (!Array.isArray(value)) + throw new Error(`Trying to set ${typeof value} as a ${type}.`); + } + else { + if (typeof value !== type) + throw new Error(`Trying to set ${typeof value} as a ${type}.`); + } +} +class MMKVInstance { + constructor(id) { + /** + * Set a string value to storage for the given key. + */ + this.setString = (key, value) => { + if (this.transactions.beforewrite['string']) { + value = this.transactions.transact('string', 'beforewrite', key, value); + } + if (this.handleNullOrUndefined(key, value)) + return true; + assert('string', value); + let result = (0, handlers_1.handleAction)(module_1.default.setStringMMKV, key, value, this.instanceID); + if (result) { + if (this.isRegisterd(key)) { + this.ev.publish(`${key}:onwrite`, { key, value: value }); + } + if (this.transactions.onwrite['string']) { + this.transactions.transact('string', 'onwrite', key, value); + } + } + return result; + }; + /** + * Get the string value for the given key. + */ + this.getString = (key, callback) => { + let string = (0, handlers_1.handleAction)(module_1.default.getStringMMKV, key, this.instanceID); + if (this.transactions.onread['string']) { + string = this.transactions.transact('string', 'onread', key, string); + } + callback && callback(null, string); + return string; + }; + /** + * Set a number value to storage for the given key. + */ + this.setInt = (key, value) => { + if (this.transactions.beforewrite['number']) { + value = this.transactions.transact('number', 'beforewrite', key, value); + } + if (this.handleNullOrUndefined(key, value)) + return true; + assert('number', value); + let result = (0, handlers_1.handleAction)(module_1.default.setNumberMMKV, key, value, this.instanceID); + if (result) { + if (this.isRegisterd(key)) { + this.ev.publish(`${key}:onwrite`, { key, value: value }); + } + this.transactions.transact('number', 'onwrite', key, value); + } + return result; + }; + /** + * Get the number value for the given key + */ + this.getInt = (key, callback) => { + let int = (0, handlers_1.handleAction)(module_1.default.getNumberMMKV, key, this.instanceID); + if (this.transactions.onread['number']) { + int = this.transactions.transact('number', 'onread', key, int); + } + callback && callback(null, int); + return int; + }; + /** + * Set a boolean value to storage for the given key + */ + this.setBool = (key, value) => { + if (this.transactions.beforewrite['boolean']) { + value = this.transactions.transact('boolean', 'beforewrite', key, value); + } + if (this.handleNullOrUndefined(key, value)) + return true; + assert('boolean', value); + let result = (0, handlers_1.handleAction)(module_1.default.setBoolMMKV, key, value, this.instanceID); + if (result) { + if (this.isRegisterd(key)) { + this.ev.publish(`${key}:onwrite`, { key, value: value }); + } + this.transactions.transact('boolean', 'onwrite', key, value); + } + return result; + }; + /** + * Get the boolean value for the given key. + */ + this.getBool = (key, callback) => { + let bool = (0, handlers_1.handleAction)(module_1.default.getBoolMMKV, key, this.instanceID); + if (this.transactions.onread['boolean']) { + bool = this.transactions.transact('boolean', 'onread', key, bool); + } + callback && callback(null, bool); + return bool; + }; + /** + * Set an Object to storage for a given key. + * + * Note that this function does **not** work with the Map data type + */ + this.setMap = (key, value) => { + if (this.transactions.beforewrite['object']) { + value = this.transactions.transact('object', 'beforewrite', key, value); + } + if (this.handleNullOrUndefined(key, value)) + return true; + assert('object', value); + let result = (0, handlers_1.handleAction)(module_1.default.setMapMMKV, key, JSON.stringify(value), this.instanceID); + if (result) { + if (this.isRegisterd(key)) { + this.ev.publish(`${key}:onwrite`, { key, value: value }); + } + if (this.transactions.onwrite['object']) { + this.transactions.transact('object', 'onwrite', key, value); + } + } + return result; + }; + /** + * Get an Object from storage for a given key. + */ + this.getMap = (key, callback) => { + let json = (0, handlers_1.handleAction)(module_1.default.getMapMMKV, key, this.instanceID); + try { + if (json) { + let map = JSON.parse(json); + if (this.transactions.onread['object']) { + map = this.transactions.transact('object', 'onread', key, map); + } + callback && callback(null, map); + return map; + } + } + catch (e) { } + this.transactions.transact('object', 'onread', key); + callback && callback(null, null); + return null; + }; + /** + * Set an array to storage for the given key. + */ + this.setArray = (key, value) => { + if (this.transactions.beforewrite['array']) { + value = this.transactions.transact('array', 'beforewrite', key, value); + } + if (this.handleNullOrUndefined(key, value)) + return true; + assert('array', value); + let result = (0, handlers_1.handleAction)(module_1.default.setArrayMMKV, key, JSON.stringify(value), this.instanceID); + if (result) { + if (this.isRegisterd(key)) { + this.ev.publish(`${key}:onwrite`, { key, value: value }); + } + if (this.transactions.onwrite['array']) { + this.transactions.transact('array', 'onwrite', key, value); + } + } + return result; + }; + /** + * get an array from the storage for give key. + */ + this.getArray = (key, callback) => { + let json = (0, handlers_1.handleAction)(module_1.default.getMapMMKV, key, this.instanceID); + try { + if (json) { + let array = JSON.parse(json); + if (this.transactions.onread['array']) { + array = this.transactions.transact('array', 'onread', key, array); + } + callback && callback(null, array); + return array; + } + } + catch (e) { } + this.transactions.transact('array', 'onread', key); + callback && callback(null, null); + return null; + }; + /** + * Retrieve multiple items for the given array of keys. + * + */ + this.getMultipleItems = (keys, type) => { + let items = []; + if (type === 'map') + type = 'object'; + if (type === 'string') { + for (let i = 0; i < keys.length; i++) { + const item = [keys[i], this.getString(keys[i])]; + if (this.transactions.onread[type]) { + item[1] = this.transactions.transact(type, 'onread', item[0], item[1]); + } + items.push(item); + } + return items; + } + else if (type === 'array') { + for (let i = 0; i < keys.length; i++) { + const item = [keys[i], this.getArray(keys[i])]; + if (this.transactions.onread[type]) { + item[1] = this.transactions.transact(type, 'onread', item[0], item[1]); + } + items.push(item); + } + return items; + } + else if (type === 'object') { + for (let i = 0; i < keys.length; i++) { + const item = [keys[i], this.getMap(keys[i])]; + if (this.transactions.onread[type]) { + item[1] = this.transactions.transact(type, 'onread', item[0], item[1]); + } + items.push(item); + } + return items; + } + else if (type === 'boolean') { + for (let i = 0; i < keys.length; i++) { + const item = [keys[i], this.getBool(keys[i])]; + if (this.transactions.onread[type]) { + item[1] = this.transactions.transact(type, 'onread', item[0], item[1]); + } + items.push(item); + } + return items; + } + else if (type === 'number') { + for (let i = 0; i < keys.length; i++) { + const item = [keys[i], this.getInt(keys[i])]; + if (this.transactions.onread[type]) { + item[1] = this.transactions.transact(type, 'onread', item[0], item[1]); + } + items.push(item); + } + return items; + } + }; + this.instanceID = id; + this.encryption = new encryption_1.default(id); + this.indexer = new indexer_1.default(id); + this.ev = new eventmanager_1.default(); + this.transactions = new transactions_1.default(); + this.options = utils_1.options[id]; + } + isRegisterd(key) { + return this.ev._registry[`${key}:onwrite`]; + } + handleNullOrUndefined(key, value) { + if (value === null || value === undefined) { + this.removeItem(key); + return true; + } + return false; + } + /** + * Set a string value to storage for the given key. + * This method is added for redux-persist/zustand support. + * + */ + setItem(key, value, callback) { + return __awaiter(this, void 0, void 0, function* () { + return new Promise(resolve => { + const result = this.setString(key, value); + callback && callback(null); + resolve(result); + }); + }); + } + /** + * Get the string value for the given key. + * This method is added for redux-persist/zustand support. + */ + getItem(key, callback) { + return __awaiter(this, void 0, void 0, function* () { + return new Promise(resolve => { + resolve(this.getString(key, callback)); + }); + }); + } + /** + * Set a string value to storage for the given key. + */ + setStringAsync(key, value) { + return new Promise(resolve => { + resolve(this.setString(key, value)); + }); + } + /** + * Get the string value for the given key. + */ + getStringAsync(key) { + return new Promise(resolve => { + resolve(this.getString(key)); + }); + } + /** + * Set a number value to storage for the given key. + */ + setIntAsync(key, value) { + return new Promise(resolve => { + resolve(this.setInt(key, value)); + }); + } + /** + * Get the number value for the given key. + */ + getIntAsync(key) { + return new Promise(resolve => { + resolve(this.getInt(key)); + }); + } + /** + * Set a boolean value to storage for the given key. + * + */ + setBoolAsync(key, value) { + return new Promise(resolve => { + resolve(this.setBool(key, value)); + }); + } + /** + * Get the boolean value for the given key. + */ + getBoolAsync(key) { + return new Promise(resolve => { + resolve(this.getBool(key)); + }); + } + /** + * Set an Object to storage for the given key. + * + * Note that this function does **not** work with the Map data type. + * + */ + setMapAsync(key, value) { + return new Promise(resolve => { + resolve(this.setMap(key, value)); + }); + } + /** + * Get then Object from storage for the given key. + */ + getMapAsync(key) { + return new Promise(resolve => { + resolve(this.getMap(key)); + }); + } + /** + * Set items in bulk of same type at once + * + * If a value against a key is null/undefined, it will be + * set as null. + * + * @param keys Array of keys + * @param values Array of values + * @param type + */ + setMultipleItemsAsync(items, type) { + return __awaiter(this, void 0, void 0, function* () { + if (type === 'object') + type = 'map'; + let values = []; + if (type === 'string' || type === 'array' || type === 'map') { + values = items.map(item => { + let value = item[1]; + if (this.transactions.beforewrite[type]) { + value = this.transactions.transact(type, 'beforewrite', item[0], value); + } + if (type === 'string') + return value; + return value ? JSON.stringify(value) : value; + }); + (0, handlers_1.handleAction)(module_1.default.setMultiMMKV, items.map(item => item[0]), values, `${type}Index`, this.instanceID); + } + else { + if (type === 'boolean') { + for (let i = 0; i < items.length; i++) { + const item = items[i]; + let value = item[1]; + if (this.transactions.beforewrite[type]) { + value = this.transactions.transact(type, 'beforewrite', item[0], value); + } + values[i] = value; + this.setBool(item[0], value); + } + } + else if (type === 'number') { + for (let i = 0; i < items.length; i++) { + const item = items[i]; + let value = item[1]; + if (this.transactions.beforewrite[type]) { + value = this.transactions.transact(type, 'beforewrite', item[0], value); + } + values[i] = value; + this.setInt(item[0], value); + } + } + } + queueMicrotask(() => { + items === null || items === void 0 ? void 0 : items.forEach((item, index) => { + if (this.isRegisterd(item[0])) { + this.ev.publish(`${item[0]}:onwrite`, { key: item[0], value: values[index] }); + } + if (this.transactions.onwrite[type]) { + this.transactions.transact(type, 'onwrite', item[0], values[index]); + } + }); + }); + return true; + }); + } + /** + * Retrieve multiple items for the given array of keys + */ + getMultipleItemsAsync(keys, type) { + return __awaiter(this, void 0, void 0, function* () { + let items = []; + if (type === 'map') + type = 'object'; + if (type === 'array' || type === 'string' || type === 'object') { + const result = (0, handlers_1.handleAction)(module_1.default.getMultiMMKV, keys, this.instanceID); + if (type === 'string') + return keys.map((key, index) => [key, result[index]]); + return keys.map((key, index) => { + let value = result[index] ? JSON.parse(result[index]) : result[index]; + if (this.transactions.onread[type]) { + value = this.transactions.transact(type, 'onread', key, value); + } + return [key, value]; + }); + } + if (type === 'boolean') { + for (let i = 0; i < keys.length; i++) { + let value = this.getBool(keys[i]); + if (this.transactions.onread[type]) { + value = this.transactions.transact(type, 'onread', keys[i], value); + } + const item = [keys[i], value]; + items.push(item); + } + return items; + } + else if (type === 'number') { + for (let i = 0; i < keys.length; i++) { + let value = this.getInt(keys[i]); + if (this.transactions.onread[type]) { + value = this.transactions.transact(type, 'onread', keys[i], value); + } + const item = [keys[i], value]; + items.push(item); + } + return items; + } + }); + } + /** + * Set an array to storage for the given key. + */ + setArrayAsync(key, value) { + return __awaiter(this, void 0, void 0, function* () { + return new Promise(resolve => { + resolve(this.setArray(key, value)); + }); + }); + } + /** + * Get the array from the storage for the given key. + */ + getArrayAsync(key) { + return __awaiter(this, void 0, void 0, function* () { + return new Promise(resolve => { + resolve(this.getArray(key)); + }); + }); + } + /** + * + * Get all Storage Instance IDs that are currently loaded. + * + */ + getCurrentMMKVInstanceIDs() { + return (0, initializer_1.getCurrentMMKVInstanceIDs)(); + } + /** + * + * Get all Storage Instance IDs. + * + */ + getAllMMKVInstanceIDs() { + return IDStore_1.default.getAllMMKVInstanceIDs(); + } + /** + * Remove an item from storage for a given key. + * + * If you are removing large number of keys, use `removeItems` instead. + */ + removeItem(key) { + let result = (0, handlers_1.handleAction)(module_1.default.removeValueMMKV, key, this.instanceID); + if (result) { + if (this.isRegisterd(key)) { + this.ev.publish(`${key}:onwrite`, { key, value: null }); + } + } + if (this.transactions.ondelete) { + this.transactions.transact('string', 'ondelete', key); + } + return result; + } + /** + * Remove multiple items from storage for given keys + * + */ + removeItems(keys) { + let result = (0, handlers_1.handleAction)(module_1.default.removeValuesMMKV, keys.filter(key => key !== this.instanceID), this.instanceID); + for (const key of keys) { + if (result) { + if (this.isRegisterd(key)) { + this.ev.publish(`${key}:onwrite`, { key, value: null }); + } + } + if (this.transactions.ondelete) { + this.transactions.transact('string', 'ondelete', key); + } + } + return result; + } + /** + * Remove all keys and values from storage. + */ + clearStore() { + let keys = (0, handlers_1.handleAction)(module_1.default.getAllKeysMMKV, this.instanceID); + let cleared = (0, handlers_1.handleAction)(module_1.default.clearMMKV, this.instanceID); + module_1.default.setBoolMMKV(this.instanceID, true, this.instanceID); + queueMicrotask(() => { + keys === null || keys === void 0 ? void 0 : keys.forEach((key) => { + if (this.isRegisterd(key)) { + this.ev.publish(`${key}:onwrite`, { key }); + } + if (this.transactions.ondelete) { + this.transactions.transact('string', 'ondelete', key); + } + }); + }); + return cleared; + } + /** + * Get the key and alias for the encrypted storage + */ + getKey() { + let { alias, key } = utils_1.options[this.instanceID]; + return { alias, key }; + } + /** + * Clear memory cache of the current MMKV instance + */ + clearMemoryCache() { + let cleared = (0, handlers_1.handleAction)(module_1.default.clearMemoryCache, this.instanceID); + return cleared; + } +} +exports.default = MMKVInstance; diff --git a/dist/src/mmkvloader.d.ts b/dist/src/mmkvloader.d.ts new file mode 100644 index 00000000..1616fb84 --- /dev/null +++ b/dist/src/mmkvloader.d.ts @@ -0,0 +1,66 @@ +import MMKVInstance from './mmkvinstance'; +import { StorageOptions } from './types'; +export default class MMKVLoader { + options: StorageOptions; + constructor(); + /** + * Load MMKV with the specified ID. If instance does not exist, a new instance will be created. + */ + withInstanceID(id: string): this; + /** + * Persist default values in hooks. + * Normally hooks do not persist default values in storage, + * so for example calling `getItem` will return `null`. + * Setting this to true, the defaultValue will be returned instead. + * + */ + withPersistedDefaultValues(): this; + /** + * Encrypt MMKV Instance and store the creditials in secured storage for later use. + * The key for encryption is automatically generated and the default alias for key storage is 'com.MMKV.ammarahmed' which is converted to HEX for usage. + * + * Requires an ID to be specified. + * + */ + withEncryption(): this; + /** + * (iOS only) Sets the kSecAttrService attribute in the key chain (https://developer.apple.com/documentation/security/ksecattrservice). + * Addresses https://github.com/ammarahm-ed/react-native-mmkv-storage/issues/156#issuecomment-934046177 issue. + */ + withServiceName(serviceName: string): this; + /** + * Set accessible mode for secure storage on ios devices + * + * @param accessible `MMKVStorage.ACCESSIBLE` + */ + setAccessibleIOS(accessible: string): this; + /** + * Provide a custom key to encrypt the storage. Use this if you dont want to generate the key automatically. + * You must call withEncryption() to use this. + * + * @param key the key to encrypt the storage with + * @param secureKeyStorage Should the key be stored securely. + * @param alias Provide an alias for key storage. Default alias is aliasPrefix + instanceID + */ + encryptWithCustomKey(key: string, secureKeyStorage?: boolean, alias?: string): this; + /** + * Set the processing mode for storage. + * + * Will recieve the following values. + * MMKV.MULTI_PROCESS + * MMKV.SINGLE_PROCESS + * + * @param {number} mode Set processing mode for storage + */ + setProcessingMode(mode: number): this; + /** + * Create the instance with the given options. + */ + initialize(): MMKVInstance; + /** + * Disable indexing values by data type. + */ + disableIndexing(): this; + generateKey(): this; +} +//# sourceMappingURL=mmkvloader.d.ts.map \ No newline at end of file diff --git a/dist/src/mmkvloader.d.ts.map b/dist/src/mmkvloader.d.ts.map new file mode 100644 index 00000000..84d73dc7 --- /dev/null +++ b/dist/src/mmkvloader.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"mmkvloader.d.ts","sourceRoot":"","sources":["../../src/mmkvloader.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAM1C,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B,OAAO,EAAE,cAAc,CAAC;;IAkBxB;;OAEG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM;IAKzB;;;;;;OAMG;IACH,0BAA0B;IAI1B;;;;;;OAMG;IACH,cAAc;IAQd;;;OAGG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM;IAInC;;;;OAIG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM;IAInC;;;;;;;OAOG;IACH,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM;IAe5E;;;;;;;;OAQG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM;IAK9B;;OAEG;IACH,UAAU;IAUV;;OAEG;IACH,eAAe;IAKf,WAAW;CAIZ"} \ No newline at end of file diff --git a/dist/src/mmkvloader.js b/dist/src/mmkvloader.js new file mode 100644 index 00000000..606b59f1 --- /dev/null +++ b/dist/src/mmkvloader.js @@ -0,0 +1,138 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const mmkvinstance_1 = __importDefault(require("./mmkvinstance")); +const handlers_1 = require("./handlers"); +const initializer_1 = require("./initializer"); +const keygen_1 = __importDefault(require("./keygen")); +const init_1 = require("./mmkv/init"); +const utils_1 = require("./utils"); +class MMKVLoader { + constructor() { + this.options = { + instanceID: 'default', + initWithEncryption: false, + secureKeyStorage: false, + accessibleMode: utils_1.IOSAccessibleStates.AFTER_FIRST_UNLOCK, + processingMode: utils_1.ProcessingModes.SINGLE_PROCESS, + aliasPrefix: 'com.MMKV.', + alias: null, + key: null, + serviceName: null, + initialized: false, + persistDefaults: false, + enableIndexing: true + }; + } + /** + * Load MMKV with the specified ID. If instance does not exist, a new instance will be created. + */ + withInstanceID(id) { + this.options.instanceID = id; + return this; + } + /** + * Persist default values in hooks. + * Normally hooks do not persist default values in storage, + * so for example calling `getItem` will return `null`. + * Setting this to true, the defaultValue will be returned instead. + * + */ + withPersistedDefaultValues() { + this.options.persistDefaults = true; + return this; + } + /** + * Encrypt MMKV Instance and store the creditials in secured storage for later use. + * The key for encryption is automatically generated and the default alias for key storage is 'com.MMKV.ammarahmed' which is converted to HEX for usage. + * + * Requires an ID to be specified. + * + */ + withEncryption() { + this.options.initWithEncryption = true; + this.options.key = (0, keygen_1.default)(); + this.options.alias = (0, utils_1.stringToHex)(this.options.aliasPrefix + this.options.instanceID); + this.options.secureKeyStorage = true; + return this; + } + /** + * (iOS only) Sets the kSecAttrService attribute in the key chain (https://developer.apple.com/documentation/security/ksecattrservice). + * Addresses https://github.com/ammarahm-ed/react-native-mmkv-storage/issues/156#issuecomment-934046177 issue. + */ + withServiceName(serviceName) { + this.options.serviceName = serviceName; + return this; + } + /** + * Set accessible mode for secure storage on ios devices + * + * @param accessible `MMKVStorage.ACCESSIBLE` + */ + setAccessibleIOS(accessible) { + this.options.accessibleMode = accessible; + return this; + } + /** + * Provide a custom key to encrypt the storage. Use this if you dont want to generate the key automatically. + * You must call withEncryption() to use this. + * + * @param key the key to encrypt the storage with + * @param secureKeyStorage Should the key be stored securely. + * @param alias Provide an alias for key storage. Default alias is aliasPrefix + instanceID + */ + encryptWithCustomKey(key, secureKeyStorage, alias) { + this.options.key = key; + this.options.secureKeyStorage = false; + if (secureKeyStorage) { + this.options.secureKeyStorage = true; + if (alias) { + this.options.alias = (0, utils_1.stringToHex)(this.options.aliasPrefix + alias); + } + else { + this.options.alias = (0, utils_1.stringToHex)(this.options.aliasPrefix + this.options.instanceID); + } + } + return this; + } + /** + * Set the processing mode for storage. + * + * Will recieve the following values. + * MMKV.MULTI_PROCESS + * MMKV.SINGLE_PROCESS + * + * @param {number} mode Set processing mode for storage + */ + setProcessingMode(mode) { + this.options.processingMode = mode; + return this; + } + /** + * Create the instance with the given options. + */ + initialize() { + if (!(0, init_1.init)()) + throw new Error('MMKVNative bindings not installed'); + initializer_1.currentInstancesStatus[this.options.instanceID] = false; + utils_1.options[this.options.instanceID] = this.options; + let instance = new mmkvinstance_1.default(this.options.instanceID); + //@ts-ignore + (0, handlers_1.handleAction)(null, this.options.instanceID); + return instance; + } + /** + * Disable indexing values by data type. + */ + disableIndexing() { + this.options.enableIndexing = false; + return this; + } + generateKey() { + this.options.key = (0, keygen_1.default)(); + return this; + } +} +exports.default = MMKVLoader; diff --git a/dist/src/module/index.d.ts b/dist/src/module/index.d.ts new file mode 100644 index 00000000..89f8775e --- /dev/null +++ b/dist/src/module/index.d.ts @@ -0,0 +1,20 @@ +import { MMKVJsiModule } from '../types'; +export declare const mmkvBridgeModule: { + /** + * Install JSI bindings + */ + install: () => boolean; +}; +/** + * All jsi functions bound to global object. + * + * The last param `id` is the instance id of the storage instance we want to get/set the value. + * + * `undefined`: It means that instance is not loaded + * + * `null`: Value does not exist or some error occured while getting the value + * + */ +declare const mmkvJsiModule: MMKVJsiModule; +export default mmkvJsiModule; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/dist/src/module/index.d.ts.map b/dist/src/module/index.d.ts.map new file mode 100644 index 00000000..8f9aafb6 --- /dev/null +++ b/dist/src/module/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/module/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAKzC,eAAO,MAAM,gBAAgB,EAAE;IAC7B;;OAEG;IACH,OAAO,EAAE,MAAM,OAAO,CAAC;CAWpB,CAAC;AAEN;;;;;;;;;GASG;AAGH,QAAA,MAAM,aAAa,EAAE,aAAsB,CAAC;AAE5C,eAAe,aAAa,CAAC"} \ No newline at end of file diff --git a/dist/src/module/index.js b/dist/src/module/index.js new file mode 100644 index 00000000..2a3d8239 --- /dev/null +++ b/dist/src/module/index.js @@ -0,0 +1,31 @@ +"use strict"; +var rn = require("react-native"); +var {TurboModuleRegistry } = rn; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.mmkvBridgeModule = void 0; +//@ts-ignore +const isDebugMode = global.location && global.location.pathname && global.location.pathname.includes('/debugger-ui'); +exports.mmkvBridgeModule = !isDebugMode + ? require('react-native').NativeModules.MMKVNative + : { + install: () => { + console.warn(`Remote debugging is not supported by JSI modules. MMKV is running with a memory adapter currently and is fully functional for testing only. Hence any values will not persist on App refresh/reload. `); + require('../../../jest/dist/jest/memoryStore.js').mock(); + return true; + } + }; +/** + * All jsi functions bound to global object. + * + * The last param `id` is the instance id of the storage instance we want to get/set the value. + * + * `undefined`: It means that instance is not loaded + * + * `null`: Value does not exist or some error occured while getting the value + * + */ +//@ts-ignore +var mmkvModule = TurboModuleRegistry.get('MMKVNative') +mmkvModule.install() +const mmkvJsiModule = global; +exports.default = mmkvJsiModule; \ No newline at end of file diff --git a/dist/src/transactions.d.ts b/dist/src/transactions.d.ts new file mode 100644 index 00000000..d0599043 --- /dev/null +++ b/dist/src/transactions.d.ts @@ -0,0 +1,58 @@ +import { DataType } from './types'; +/** + * A mutator function can return a value where needed. For example, + * you can modify the value in `beforewrite` or `onread` transactions. + */ +export type MutatorFunction = (key: string, value?: unknown) => any; +export type Transaction = { + [name: string]: MutatorFunction | null; +}; +export type TransactionType = 'beforewrite' | 'onwrite' | 'onread' | 'ondelete'; +/** + * Listen to a value’s lifecycle and mutate it on the go. + * Transactions lets you register lifecycle functions + * with your storage instance such as `onwrite`, + * `beforewrite`, `onread`, `ondelete`. This allows for a + * better and more managed control over the storage and + * also let’s you build custom indexes with a few lines of code. + * + * Example: + * ```tsx + * import MMKVStorage from "react-native-mmkv-storage"; + * + * const MMKV = new MMKVStorage.Loader().initialize(); + * + * MMKV.transactions.register("object", "onwrite", ({ key, value }) => { + * console.log(MMKV.instanceID, "object:onwrite: ", key, value) + * }); + * ``` + * + * Documentation: https://rnmmkv.vercel.app/#/transactionmanager + */ +export default class transactions { + beforewrite: Transaction; + onwrite: Transaction; + onread: Transaction; + ondelete: MutatorFunction | null; + constructor(); + /** + * Register a lifecycle function for a given data type. + * + * @param type Type of data to register a mutator function for + * @param transaction Type of transaction to listen to + * @param mutator The mutator function + */ + register(type: DataType, transaction: TransactionType, mutator: MutatorFunction): () => void; + /** + * Register a lifecycle function for a given data type. + * @param type Type of data to register a mutator function for + * @param transaction Type of transaction to listen to + */ + unregister(type: DataType, transaction: TransactionType): void; + /** + * Clear all registered functions. + */ + clear(): void; + transact(type: DataType, transaction: TransactionType, key: string, value?: T): T | undefined; +} +//# sourceMappingURL=transactions.d.ts.map \ No newline at end of file diff --git a/dist/src/transactions.d.ts.map b/dist/src/transactions.d.ts.map new file mode 100644 index 00000000..67e2d6a1 --- /dev/null +++ b/dist/src/transactions.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"transactions.d.ts","sourceRoot":"","sources":["../../src/transactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,GAAG,CAAC;AAEpE,MAAM,MAAM,WAAW,GAAG;IAAE,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAAA;CAAE,CAAC;AAErE,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEhF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;;IAQjC;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe;IAY/E;;;;OAIG;IACH,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe;IAQvD;;OAEG;IACH,KAAK;IAOL,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;CAOjG"} \ No newline at end of file diff --git a/dist/src/transactions.js b/dist/src/transactions.js new file mode 100644 index 00000000..b6a8d40f --- /dev/null +++ b/dist/src/transactions.js @@ -0,0 +1,81 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +/** + * Listen to a value’s lifecycle and mutate it on the go. + * Transactions lets you register lifecycle functions + * with your storage instance such as `onwrite`, + * `beforewrite`, `onread`, `ondelete`. This allows for a + * better and more managed control over the storage and + * also let’s you build custom indexes with a few lines of code. + * + * Example: + * ```tsx + * import MMKVStorage from "react-native-mmkv-storage"; + * + * const MMKV = new MMKVStorage.Loader().initialize(); + * + * MMKV.transactions.register("object", "onwrite", ({ key, value }) => { + * console.log(MMKV.instanceID, "object:onwrite: ", key, value) + * }); + * ``` + * + * Documentation: https://rnmmkv.vercel.app/#/transactionmanager + */ +class transactions { + constructor() { + this.beforewrite = {}; + this.onwrite = {}; + this.onread = {}; + this.ondelete = null; + } + /** + * Register a lifecycle function for a given data type. + * + * @param type Type of data to register a mutator function for + * @param transaction Type of transaction to listen to + * @param mutator The mutator function + */ + register(type, transaction, mutator) { + if (!transaction || !type || !mutator) + throw new Error('All parameters are required'); + if (transaction === 'ondelete') { + this.ondelete = mutator; + } + else { + this[transaction][type] = mutator; + } + return () => this.unregister(type, transaction); + } + /** + * Register a lifecycle function for a given data type. + * @param type Type of data to register a mutator function for + * @param transaction Type of transaction to listen to + */ + unregister(type, transaction) { + if (!type || !transaction) + throw new Error('All parameters are required'); + if (transaction === 'ondelete') { + this.ondelete = null; + return; + } + this[transaction][type] = null; + } + /** + * Clear all registered functions. + */ + clear() { + this.beforewrite = {}; + this.onread = {}; + this.onwrite = {}; + this.ondelete = null; + } + transact(type, transaction, key, value) { + const mutator = transaction === 'ondelete' ? this.ondelete : this[transaction][type]; + if (!mutator) + return value; + let _value = mutator(key, value); + // In case a mutator function does not return a value or returns undefined, we will return the original value. + return _value === undefined || _value === null ? value : _value; + } +} +exports.default = transactions; diff --git a/jest/dist/src/types/index.d.ts b/dist/src/types/index.d.ts similarity index 78% rename from jest/dist/src/types/index.d.ts rename to dist/src/types/index.d.ts index 3a9af8e7..43b07864 100644 --- a/jest/dist/src/types/index.d.ts +++ b/dist/src/types/index.d.ts @@ -1,4 +1,4 @@ -export declare type StorageOptions = { +export type StorageOptions = { /** * The id of the instance to be created. Default id is "default". */ @@ -15,7 +15,7 @@ export declare type StorageOptions = { secureKeyStorage: boolean; /** * Set the AccessibleMode for iOS - * Import ACCESSIBLE from library to use it. + * Import IOSAccessibleStates from library to use it. */ accessibleMode: string; /** @@ -45,17 +45,25 @@ export declare type StorageOptions = { * Persist default values in hooks */ persistDefaults: boolean; + /** + * Toggle indexing of values by type. + * + * @default true + */ + enableIndexing: boolean; }; -export declare type DataType = 'string' | 'number' | 'object' | 'array' | 'boolean'; -export declare type GenericReturnType = [key: string, value: T | null | undefined]; -export declare type IndexType = 'stringIndex' | 'boolIndex' | 'numberIndex' | 'mapIndex' | 'arrayIndex'; -export declare type MMKVJsiModule = { - setupMMKVInstance: (id: string, mode?: number, cryptKey?: string, path?: string) => boolean; +export type DataType = 'string' | 'number' | 'object' | 'array' | 'boolean'; +export type GenericReturnType = [key: string, value: T | null | undefined]; +export type IndexType = 'stringIndex' | 'boolIndex' | 'numberIndex' | 'mapIndex' | 'arrayIndex'; +export type MMKVJsiModule = { + setupMMKVInstance: (id: string, mode?: number, cryptKey?: string, path?: string, indexing?: boolean) => boolean; setMMKVServiceName: (alias: string, serviceName: string) => string; getSecureKey: (alias: string) => string | null; setSecureKey: (alias: string, key: string, accessibleMode: string) => boolean; secureKeyExists: (alias: string) => boolean; removeSecureKey: (alias: string) => boolean; + setMultiMMKV: (key: string[], value: string[], type: string, id: string) => Promise; + getMultiMMKV: (keys: string[], id: string) => Promise; setStringMMKV: (key: string, value: string, id: string) => boolean | undefined; getStringMMKV: (key: string, id: string) => string | null | undefined; setMapMMKV: (key: string, value: string, id: string) => boolean | undefined; @@ -67,6 +75,7 @@ export declare type MMKVJsiModule = { setBoolMMKV: (key: string, value: boolean, id: string) => boolean | undefined; getBoolMMKV: (key: string, id: string) => boolean | null | undefined; removeValueMMKV: (key: string, id: string) => boolean | undefined; + removeValuesMMKV: (...keys: string[]) => boolean | undefined; getAllKeysMMKV: (id: string) => string[] | undefined; getIndexMMKV: (type: IndexType, id: string) => string[] | undefined; containsKeyMMKV: (key: string, id: string) => boolean | undefined; diff --git a/dist/src/types/index.d.ts.map b/dist/src/types/index.d.ts.map new file mode 100644 index 00000000..9bba79e1 --- /dev/null +++ b/dist/src/types/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG;IAC3B;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,kBAAkB,EAAE,OAAO,CAAC;IAC5B;;;;OAIG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB;;OAEG;IACH,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB;;OAEG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;OAEG;IACH,WAAW,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,cAAc,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAE5E,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAE9E,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,WAAW,GAAG,aAAa,GAAG,UAAU,GAAG,YAAY,CAAC;AAEhG,MAAM,MAAM,aAAa,GAAG;IAC1B,iBAAiB,EAAE,CACjB,EAAE,EAAE,MAAM,EACV,IAAI,CAAC,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,OAAO,KACf,OAAO,CAAC;IAEb,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC;IACnE,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC/C,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9E,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAE5C,YAAY,EAAE,CACZ,GAAG,EAAE,MAAM,EAAE,EACb,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,KACP,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IAElC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEhE,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC;IAC/E,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAEtE,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC;IAC5E,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAEnE,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC;IAC9E,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAErE,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC;IAC/E,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAEtE,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC;IAC9E,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAErE,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC;IAClE,gBAAgB,EAAE,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,GAAG,SAAS,CAAC;IAE7D,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,EAAE,GAAG,SAAS,CAAC;IACrD,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,KAAK,MAAM,EAAE,GAAG,SAAS,CAAC;IACpE,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC;IAElE,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC;IAC/C,gBAAgB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC;IAEtD,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC;IACnE,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC;CAClD,CAAC"} \ No newline at end of file diff --git a/dist/src/types/index.js b/dist/src/types/index.js new file mode 100644 index 00000000..c8ad2e54 --- /dev/null +++ b/dist/src/types/index.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/src/utils.d.ts b/dist/src/utils.d.ts new file mode 100644 index 00000000..fc25a8c8 --- /dev/null +++ b/dist/src/utils.d.ts @@ -0,0 +1,38 @@ +import { StorageOptions } from './types'; +export declare function promisify(fn: Function): (...args: any) => Promise; +/** + * Accessible modes for iOS Keychain + */ +export declare const IOSAccessibleStates: { + WHEN_UNLOCKED: string; + AFTER_FIRST_UNLOCK: string; + /** @deprected in iOS 16+ */ + ALWAYS: string; + WHEN_PASSCODE_SET_THIS_DEVICE_ONLY: string; + WHEN_UNLOCKED_THIS_DEVICE_ONLY: string; + AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY: string; + /** @deprected in iOS 16+ */ + ALWAYS_THIS_DEVICE_ONLY: string; +}; +/** + * Processing modes for storage. + */ +export declare const ProcessingModes: { + SINGLE_PROCESS: number; + MULTI_PROCESS: number; +}; +export declare const DATA_TYPES: Readonly<{ + STRING: 1; + NUMBER: 2; + BOOL: 3; + MAP: 4; + ARRAY: 5; +}>; +/** + * Information about all storage instances + */ +export declare const options: { + [name: string]: StorageOptions; +}; +export declare const stringToHex: (input: string) => string; +//# sourceMappingURL=utils.d.ts.map \ No newline at end of file diff --git a/dist/src/utils.d.ts.map b/dist/src/utils.d.ts.map new file mode 100644 index 00000000..4420db2e --- /dev/null +++ b/dist/src/utils.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,wBAAgB,SAAS,CAAC,EAAE,EAAE,QAAQ,aACV,GAAG,sBAK9B;AACD;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;IAG9B,4BAA4B;;;;;IAK5B,4BAA4B;;CAE7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe;;;CAG3B,CAAC;AAEF,eAAO,MAAM,UAAU;;;;;;EAMrB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE;IAAE,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAAA;CAAO,CAAC;AAE9D,eAAO,MAAM,WAAW,UAAW,MAAM,WAOxC,CAAC"} \ No newline at end of file diff --git a/dist/src/utils.js b/dist/src/utils.js new file mode 100644 index 00000000..fef6e415 --- /dev/null +++ b/dist/src/utils.js @@ -0,0 +1,52 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.stringToHex = exports.options = exports.DATA_TYPES = exports.ProcessingModes = exports.IOSAccessibleStates = exports.promisify = void 0; +function promisify(fn) { + return function (...args) { + return new Promise(resolve => { + resolve(fn(...args)); + }); + }; +} +exports.promisify = promisify; +/** + * Accessible modes for iOS Keychain + */ +exports.IOSAccessibleStates = { + WHEN_UNLOCKED: 'AccessibleWhenUnlocked', + AFTER_FIRST_UNLOCK: 'AccessibleAfterFirstUnlock', + /** @deprected in iOS 16+ */ + ALWAYS: 'AccessibleAlways', + WHEN_PASSCODE_SET_THIS_DEVICE_ONLY: 'AccessibleWhenPasscodeSetThisDeviceOnly', + WHEN_UNLOCKED_THIS_DEVICE_ONLY: 'AccessibleWhenUnlockedThisDeviceOnly', + AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY: 'AccessibleAfterFirstUnlockThisDeviceOnly', + /** @deprected in iOS 16+ */ + ALWAYS_THIS_DEVICE_ONLY: 'AccessibleAlwaysThisDeviceOnly' +}; +/** + * Processing modes for storage. + */ +exports.ProcessingModes = { + SINGLE_PROCESS: 1, + MULTI_PROCESS: 2 +}; +exports.DATA_TYPES = Object.freeze({ + STRING: 1, + NUMBER: 2, + BOOL: 3, + MAP: 4, + ARRAY: 5 +}); +/** + * Information about all storage instances + */ +exports.options = {}; +const stringToHex = (input) => { + let str = ''; + //@ts-ignore + for (const char of input) { + str += char.charCodeAt(0).toString(16); + } + return str; +}; +exports.stringToHex = stringToHex; diff --git a/docs/.gitignore b/docs/.gitignore deleted file mode 100644 index 4d301d9c..00000000 --- a/docs/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.now \ No newline at end of file diff --git a/docs/.nojekyll b/docs/.nojekyll deleted file mode 100755 index e69de29b..00000000 diff --git a/docs/CNAME b/docs/CNAME deleted file mode 100755 index e555e6fb..00000000 --- a/docs/CNAME +++ /dev/null @@ -1 +0,0 @@ -docsify.js.org \ No newline at end of file diff --git a/docs/README.md b/docs/README.md deleted file mode 100755 index b56d53f9..00000000 --- a/docs/README.md +++ /dev/null @@ -1,186 +0,0 @@ -
- -
- -# - -
-

-License: MIT - -Android -iOS

- -
- -
-

Install the library

-
npm install react-native-mmkv-storage
-
- -
-

For expo bare workflow

-
expo prebuild
-
- - - -## What it is - -This library aims to provide a fast & reliable solution for you data storage needs in react-native apps. It uses [MMKV](https://github.com/Tencent/MMKV) by Tencent under the hood on Android and iOS both that is used by their WeChat app(more than 1 Billion users). Unlike other storage solutions for React Native, this library lets you store any kind of data type, in any number of database instances, with or without encryption in a very fast and efficient way. Read about it on this blog post I wrote on [dev.to](https://dev.to/ammarahmed/best-data-storage-option-for-react-native-apps-42k) - -> Learn how to build your own module with JSI on my [blog](https://blog.notesnook.com/getting-started-react-native-jsi/) - -## Features - -### **Written in C++ using JSI** - -Starting from `v0.5.0` the library has been rewritten in C++ on Android and iOS both. It employs React Native JSI making it the fastest storage option for React Native. - -### **Simple and lightweight** - -(~ 50K Android/30K iOS) and even smaller when packaged. - -### **Fast and Efficient (0.0002s Read/Write Speed)** - -MMKV uses mmap to keep memory synced with file, and protobuf to encode/decode values to achieve best performance. -You can see the benchmarks here: [Android](https://github.com/Tencent/MMKV/wiki/android_benchmark) & [iOS](https://github.com/Tencent/MMKV/wiki/iOS_benchmark) - -### **Reactive using `useMMKVStorage` & `useIndex` Hooks** - -Hooks let's the storage update your app when a change takes place in storage. - -#### `useMMKVStorage` hook - -Starting from `v0.5.5`, thanks to the power of JSI, we now have our very own `useMMKVStorage` Hook. Think of it like a persisted state that will always write every change in storage and update your app UI instantly. It doesn't matter if you reload the app or restart it. - -```js -import { MMKVLoader, useMMKVStorage } from 'react-native-mmkv-storage'; - -const storage = new MMKVLoader().initialize(); -const App = () => { - const [user, setUser] = useMMKVStorage('user', storage, 'robert'); - const [age, setAge] = useMMKVStorage('age', storage, 24); - - return ( - - - I am {user} and I am {age} years old. - - - ); -}; -``` - -Learn more about `useMMKVStorage` hook it in the [docs](https://rnmmkv.vercel.app/#/usemmkvstorage). - -#### `useIndex` hook - -A hook that will take an array of keys and returns an array of values for those keys. This is supposed to work in combination with Transactions. When you have build your custom index, you will need an easy and quick way to load values for your index. useIndex hook actively listens to all read/write changes and updates the values accordingly. - -```js -const App = () => { - // Get list of all post ids - const postsIndex = useMMKVStorage("postsIndex",storage,[]); // ['post123','post234']; - // Get the posts based on those ids. - const [posts,update,remove] = useIndex(postsIndex,"object" storage); - - return - - - -} -``` - -Learn more about `useIndex` hook it in the [docs](https://rnmmkv.vercel.app/#/useindex). - -### **Lifecycle Control with Transaction Manager** - -Listen to a value's lifecycle and mutate it on the go. Transactions lets you register lifecycle functions with your storage instance such as Read, Write and Delete. This allows for a better and more managed control over the storage and also let's you **build custom indexes** with a few lines of code. - -```js -MMKV.transaction.register('object', 'beforewrite', ({ key, value }) => { - if (key.startsWith('post.')) { - // Call this only when the key has the post prefix. - let indexForTag = MMKV.getArray(`${value.tag}-index`) || []; - MMKV.setArray(indexForTag.push(key)); - } -}); -``` - -Learn more about how to use Transactions in [docs](https://rnmmkv.vercel.app/#/transactionmanager) - -### **Multi-Process Support** - -MMKV supports concurrent read-read and read-write access between processes. This means that you can use MMKV for various extenstions and widgets and your app. - -### **Create unlimited Database instances** - -You can create many database instances. This helps greatly if you have seperate logics/modules in the same app that use data differently, It also helps in better performance since each database instance is small instead of a single bulky database which makes things slower as it grows. - -```js -const userStorage = new MMKVLoader().withEncryption().withInstanceID('userdata').initialize(); - -const settingsStorage = new MMKVLoader().withInstanceID('settings').initialize(); -``` - -### **Full encryption support** - -The library supports full encryption (AES CFB-128) on Android and iOS. You can choose to store your encryption key securely for continuious usage. The library uses Keychain on iOS and Android Keystore on android (API 23 and above). Encrypting an instance is simple: - -```js -const storage = new MMKVLoader() - .withEncryption() // Generates a random key and stores it securely in Keychain - .initialize(); -``` - -And that's it. - -### **Simple indexer and data querying** - -For each database instance, there is one global key index and then there are indexes of each type of data. So querying is easy and fast. - -### **Supports redux-persist** - -Support for redux persist is also added starting from v0.3.2. - -### **Supports expo** - -You can use this library with expo [bare workflow](https://docs.expo.dev/workflow/customizing/). - -## Consider supporting with a ⭐️ [star on GitHub](https://github.com/ammarahm-ed/react-native-mmkv-storage/) - -If you are using the library in one of your projects, consider supporting with a star. It takes a lot of time and effort to keep this maintained and address issues and bugs. Thank you. - -## Contact & Support - -- Create a GitHub issue for bug reports, feature requests, or questions -- Follow [@ammarahm-ed](https://github.com/ammarahm-ed) - -## I want to contribute - -That is awesome news! There is alot happening at a very fast pace in this library right now. Every little help is precious. You can contribute in many ways: - -- Suggest code improvements on native iOS and Android -- If you have suggestion or idea you want to discuss, open an issue. -- [Open an issue](https://github.com/ammarahm-ed/react-native-mmkv-storage/issues/) if you want to make a pull request, and tell me what you want to improve or add so we can discuss -- I am always open to new ideas - -## License - -This library is licensed under the [MIT license](https://github.com/ammarahm-ed/react-native-mmkv-storage/blob/master/LICENSE). - -Copyright © Ammar Ahmed ([@ammarahm-ed](https://github.com/ammarahm-ed)) - -# - - -Notesnook Logo - diff --git a/docs/_coverpage.md b/docs/_coverpage.md deleted file mode 100755 index 476e3762..00000000 --- a/docs/_coverpage.md +++ /dev/null @@ -1,13 +0,0 @@ -# react-native-mmkv-storage 0.10.3 - - -> An ultra fast(0.0002s read/write), small & encrypted mobile key-value storage framework for React Native written in C++ using JSI - -Ultra fast | Encrypted | Easy to use - -[GitHub](https://github.com/ammarahm-ed/react-native-mmkv-storage) -[Getting Started](#react-native-mmkv-storage) - - - -![color](#000000) \ No newline at end of file diff --git a/docs/_sidebar.md b/docs/_sidebar.md deleted file mode 100755 index 00938e09..00000000 --- a/docs/_sidebar.md +++ /dev/null @@ -1,26 +0,0 @@ -- Getting started - - - [Installation](gettingstarted.md) - - [Creating an MMKV Instance](creatinginstance.md) - - [Working with Encryption](workingwithencryption.md) - - [Reactive Apps with useMMKVStorage Hook](usemmkvstorage.md) - - [Value Lifecycle Control](transactionmanager.md) - - [Supported Data Types](datatypes.md) - - [Redux persist support](redux-persist.md) - - [Testing with Jest](mockjest.md) - - [Flipper support](flipper.md) - -- API Reference - - - [Loader Class](loaderclass.md) - - [Async API](asyncapi.md) - - [Sync API](callbackapi.md) - - [General Methods](generalmethods.md) - - [Encryption](encryption.md) - - [Querying and Indexing](queryingandindexing.md) - - [useMMKVStorage](usemmkvstorage.md) - - [useIndex](useindex.md) - - [useMMKVRef](usemmkvref.md) - - [Transcation Manager](transactionmanager.md) - -- [Changelog](changelog.md) diff --git a/docs/asyncapi.md b/docs/asyncapi.md deleted file mode 100755 index fc03a149..00000000 --- a/docs/asyncapi.md +++ /dev/null @@ -1,227 +0,0 @@ -# Async API - -A promise or `async/await` api is available. - -If you are on <=0.5.3, when the application loads, your first call to get/set data should be asynchronous because we will init the database in the first call. - - -First we create a default MMKV Instance - -```js -import { MMKVLoader } from "react-native-mmkv-storage"; - -MMKV = new MMKVLoader().initialize(); -``` - -## setStringAsync - -Sets a string value in storage for the given key. - -**Arguments** - -| Name | Type | -|-------|--------| -| key | String | -| value | String | - -```js -await MMKV.setStringAsync("string", "string"); -``` - -**Returns** -`Promise` - -## getStringAsync - -Gets a string value for a given key. - -**Arguments** - -| Name | Type | -|------|--------| -| key | String | - -```js -let string = await MMKV.getStringAsync("string"); -``` - -**Returns** -`Promise` - -## setIntAsync - -Sets a number value in storage for the given key. - -**Arguments** - -| Name | Type | -|-------|--------| -| key | String | -| value | Number | - -```js -await MMKV.setIntAsync("number", 10); -``` - -**Returns** -`Promise` - -## getIntAsync - -Gets a number value for a given key. - -**Arguments** - -| Name | Type | -|------|--------| -| key | String | - -```js -let number = await MMKV.getIntAsync("number"); -``` - -**Returns** -`Promise` - -## setBoolAsync - -Sets a boolean value in storage for the given key. - -**Arguments** - -| Name | Type | -|-------|---------| -| key | String | -| value | boolean | - -```js -await MMKV.setBoolAsync("myBooleanValue", false); -``` - -**Returns** -`Promise` - -## getBoolAsync - -Gets a boolean value for a given key. - -**Arguments** - -| Name | Type | -|------|--------| -| key | String | - -```js -let boolean = await MMKV.getBoolAsync("myBooleanValue"); -``` - -**Returns** -`Promise` - -## setMapAsync - -Sets an object to storage for the given key. - -**Arguments** - -| Name | Type | -|-------|--------| -| key | String | -| value | Object | - -```js -let myObject = { foo: "foo", bar: "bar" }; - -await MMKV.setMapAsync("myobject", myObject); -``` - -**Returns** -`Promise` - -## getMapAsync - -Gets an object from storage. - -**Arguments** - -| Name | Type | -|------|--------| -| key | String | - -```js -let object = await MMKV.getMapAsync("object"); -``` - -**Returns** -`Promise` - -## setArrayAsync - -Sets an array to storage for the given key. - -**Arguments** - -| Name | Type | -|-------|--------| -| key | String | -| value | Array | - -```js -let array = ["foo", "bar"]; - -await MMKV.setArrayAsync("array", array); -``` - -**Returns** -`Promise` - -## getArrayAsync - -Sets an array to storage for the given key. - -**Arguments** - -| Name | Type | -|------|--------| -| key | String | - -```js -let myArray = await MMKV.getArrayAsync("array"); -``` - -**Returns** -`Promise>` - -## getMultipleItemsAsync - -Retrieve multiple Objects for a given array of keys. **Currently will work only if data for all keys is an Object.** - -**Arguments** - -| Name | Type | -|------|----------------------------------------| -| keys | Array of Keys | -| type | "string","bool","number","map","array" | - -```js -let multipleItems = await MMKV.getMultipleItemsAsync( - ["foo", "bar", "loo"], - "map" -); -``` - -**Returns** -`Promise>` - -The Array returned has the following structure: - -```js -[ - ["foo", Object], - ["bar", Object] -]; -``` - -The first item in each array is the `key` for the object, and the second item is object itself. - -If the value for the key is not an object but an array, the array will be wrapped in an object having key as the key in database and its value as the Array. diff --git a/docs/callbackapi.md b/docs/callbackapi.md deleted file mode 100755 index 082f17e9..00000000 --- a/docs/callbackapi.md +++ /dev/null @@ -1,227 +0,0 @@ -# Synchronous API - -Synchronous calls is 8 to 10 times faster than Asynchronous calls. - -However If you are on <=0.5.3 at the very start of your app lifecycle, you cannot use Synchronous API with return values, only callbacks. A callback function can be optionally provided in case you need some value at the very beginning of app load, usually you won't need to. - -Starting from `0.5.4` all calls are Synchronous and you should not use the callbacks anymore. - -First we create a default MMKV Instance - -```js -import { MMKVLoader } from "react-native-mmkv-storage"; - -MMKV = new MMKVLoader().initialize(); -``` - -## setString - -Sets a string value in storage for the given key. - -**Arguments** - -| Name | Type | -|----------|----------| -| key | String | -| value | String | - -```js -MMKV.setString("string", "string"); -``` - -## getString - -Gets a string value for a given key. - -**Arguments** - -| Name | Type | -|----------|----------| -| key | String | - -```js -MMKV.getString("string"); -``` - -**Returns** -`string` - -## setInt - -Sets a number value in storage for the given key. - -**Arguments** - -| Name | Type | -|----------|----------| -| key | String | -| value | Number | -| callback | Function | - -```js -MMKV.setInt("number", 10); -``` - -## getInt - -Gets a number value for a given key. - -**Arguments** - -| Name | Type | -|----------|----------| -| key | String | -| callback | Function | - -```js -MMKV.getInt("number"); -``` - -**Returns** -`number` - -## setBool - -Sets a boolean value in storage for the given key. - -**Arguments** - -| Name | Type | -|----------|----------| -| key | String | -| value | boolean | -| callback | Function | - -```js -MMKV.setBool("boolean", true); -``` - -## getBool - -Gets a boolean value for a given key. - -**Arguments** - -| Name | Type | -|----------|----------| -| key | String | -| callback | Function | - -```js -MMKV.getBool("boolean"); -``` - -**Returns** -`boolean` - -## setMap - -Sets an object to storage for the given key. - -**Arguments** - -| Name | Type | -|----------|----------| -| key | String | -| value | Object | -| callback | Function | - -```js -let object = { - foo: "foo", - bar: "bar", -}; - -MMKV.setMap("object", object); -``` - -## getMap - -Gets an object from storage. - -**Arguments** - -| Name | Type | -|----------|----------| -| key | String | -| callback | Function | - -```js -let object = MMKV.getMap("object"); -``` - -**Returns** -`object` - -## setArray - -Sets an array to storage for the given key. - -**Arguments** - -| Name | Type | -|----------|----------| -| key | String | -| value | Array | -| callback | Function | - -```js -let array = ["foo", "bar"]; - -MMKV.setArray("array", array); -``` - -## getArray - -Sets an array to storage for the given key. - -**Arguments** - -| Name | Type | -|----------|----------| -| key | String | -| callback | Function | - -```js -let array = MMKV.getArray("array"); -``` - -**Returns** -`Array<>` - -## getMultipleItems - -Retrieve multiple Objects for a given array of keys. **Currently will work only if data for all keys is an Object.** - -**Arguments** - -| Name | Type | -|----------|----------------------------------------| -| keys | Array of Keys | -| type | "string","bool","number","map","array" | -| callback | Function | - -```js -import MMKV from "react-native-mmkv-storage"; - -let items = MMKV.getMultipleItems(["foo", "bar", "loo"], "map"); -``` - -**Returns** -`Array<[]>` - -The Array returned has the following structure: - -```js -[ - ["foo", Object < any > ], - ["bar", Object < any > ] -]; -``` - -The first item in each array is the `key` for the object, and the second item is object itself. - -If the value for the key is not an object but an array, the array will be wrapped in an object having key as the key in database and its value as the Array. - -**Returns** -`Promise` diff --git a/docs/changelog.md b/docs/changelog.md deleted file mode 100644 index 5ddad421..00000000 --- a/docs/changelog.md +++ /dev/null @@ -1 +0,0 @@ -# Changelog \ No newline at end of file diff --git a/docs/creatinginstance.md b/docs/creatinginstance.md deleted file mode 100755 index bef5c636..00000000 --- a/docs/creatinginstance.md +++ /dev/null @@ -1,87 +0,0 @@ -# Creating an MMKV Instance - -The first step is to import the library in your project files - -```js -import { MMKVLoader } from "react-native-mmkv-storage"; -``` - -Creating a new instance is simple and follows a builder pattern. Here is an example of loading the default instance. - -```js -// Create a new Loader Class. - -const MMKV = new MMKVLoader().initialize(); // Returns an MMKV Instance - -// Then make are read/write requests - -await MMKV.setStringAsync("string", "string"); - -let string = await MMKV.getStringAsync("string"); - -// -``` - -## MMKV Instance with ID - -The library allows you to create as many instances of MMKV as you might need giving a unique ID to each instance. - -```js -const MMKVwithID = new MMKVLoader() - .withInstanceID("mmkvWithID") - .initialize(); - -// Then make are read/write requests - -await MMKVwithID.setStringAsync("string", "string"); - -let string = await MMKVwithID.getStringAsync("string"); -``` - -## MMKV Instance with Encryption - -You can also encrypt MMKV Instance when you initialize it. By default the library generates a strong encryption key and saves it in Keychain on iOS and Android Keystore on Android for continuious usage - -```js -const MMKVwithEncryption = new MMKVLoader() - .withEncryption() - .initialize(); - -// OR if you are initializing with an instance ID - -const MMKVwithEncryptionAndID = new MMKVLoader() - .withInstanceID("mmkvWithEncryptionAndID") - .withEncryption() - .initialize(); -``` - -!> Remember that if you encrypt an already created instance using the loader class, it will create a new MMKV instance even if the instance exists. To encrypt an already existing instance, use encrypt() method. Read in detail about Encryption API here. - -## Encryption with custom key - -While the library can handle the encryption itself, you can choose to provide your own custom encryption key etc. For example, you maybe want to encrypt the storage with a token or user password. - -```js -const MMKVwithEncryptionKey = new MMKVLoader() - .withEncryption() - .encryptWithCustomKey("encryptionKey") - .initialize(); -``` - -And if you want to store this key in secure storage. - -```js -const MMKVwithEncryptionKey = new MMKVLoader() - .withEncryption() - .encryptWithCustomKey("encryptionKey",true) - .initialize(); -``` - -If you want to set your own custom alias for the key that is stored in the secure storage you can set it also. - -```js -const MMKVwithEncryptionKey = new MMKVLoader() - .withEncryption() - .encryptWithCustomKey("encryptionKey", true, "myCustomAlias") - .initialize(); -``` diff --git a/docs/datatypes.md b/docs/datatypes.md deleted file mode 100755 index 75b754f3..00000000 --- a/docs/datatypes.md +++ /dev/null @@ -1,116 +0,0 @@ -# Data Types - -The following javascript data types are supported - -
- -
-

- Strings
- "" -

-
- -
-

- Boolean
- true/false -

-
- -
-

- Numbers
- 123 -

-
- -
-

- Objects
- {} -

-
- -
-

- Arrays
- [] -

-
- -
- - -The Map data type is **not** supported. diff --git a/docs/encryption.md b/docs/encryption.md deleted file mode 100755 index 59d773e0..00000000 --- a/docs/encryption.md +++ /dev/null @@ -1,80 +0,0 @@ -# Encryption - -MMKV uses AES_CFB for encryption. The encryption keys are stored in Keychain on iOS and Android Keystore in android but if you are using your own secure storage solution, you can opt this out and save your keys there. - -## encrypt - -Encrypt an already created instance of MMKV. - -**Arguments** - -| Name | Required | Type | Description | -|------------------|----------|---------|---------------------------------------------------------------------------------------| -| cryptKey | no | String | Password to encrypt the storage | -| secureKeyStorage | no | boolean | Set to true of you want the library to store the password securely | -| alias | no | String | You can provide a custom alias for storage of password, by default instanceID is used | -| accessibleMode | no | IOSAccessibleStates | Choose the accessibility mode (iOS only) | - -```js -import { MMKVLoader } from "react-native-mmkv-storage"; - -// A simple MMKV Instance(); -MMKV = new MMKVLoader().initialize(); - -await MMKV.encryption.encrypt(); - -// or if you want to provide your own key - -await MMKV.encryption.encrypt("encryptionKey"); - -// if you want to store it - -MMKV.encryption.encrypt("encryptionKey", true); -``` - -## decrypt - -Removes encryption from an encrypted instance of MMKV. - -```js -// Create an instance that is encrypted - -MMKV = new MMKVLoader().withEncryption().initialize(); - -// Remove encryption from an encrypted instance of MMKV. - -await MMKV.encryption.decrypt(); -``` - -!> Once you have decrypted an already created instance, the loader will not encrypt it when you reload the your app. If you want to encrypt again, you will now call `encrypt()`. Only new created instances are encrypted with the loader class. Once you modify that, it will have no effect. - -## changeEncryptionKey - -Change the encryption key of an encrypted instance of MMKV. - -**Arguments** - -| Name | Required | Type | Description | -|------------------|----------|---------|---------------------------------------------------------------------------------------| -| cryptKey | yes | String | Password to encrypt the storage | -| secureKeyStorage | no | boolean | Set to true of you want the library to store the password securely | -| alias | no | String | You can provide a custom alias for storage of password, by default instanceID is used | -| accessibleMode | no | IOSAccessibleStates | Choose the accessibility mode (iOS only) | - -```js -// Create an instance that is encrypted - -MMKV = new MMKVLoader().withEncryption().initialize(); - -await MMKV.encryption.changeEncryptionKey(); - -// or if you want to provide your own key - -await MMKV.encryption.changeEncryptionKey("encryptionKey"); - -// if you want to store it - -MMKV.encryption.changeEncryptionKey("encryptionKey", true); -``` - -!> After changing the encryption key, you will need to change your key or provide a key in the loader method above or it will throw error and not load the database. diff --git a/docs/flipper.md b/docs/flipper.md deleted file mode 100644 index 3bb26be8..00000000 --- a/docs/flipper.md +++ /dev/null @@ -1,49 +0,0 @@ -# Flipper support - -Thanks to [pnthach95](https://github.com/pnthach95/flipper-plugin-react-native-mmkv-storage/commits?author=pnthach95) Flipper plugin is finally here. It supports logging and manipulating storage values on the fly. - -- Desktop plugin: https://github.com/pnthach95/flipper-plugin-react-native-mmkv-storage -- React Native plugin: https://github.com/pnthach95/rn-mmkv-storage-flipper - -## Features - -- Logging on read/write -- Edit values on the fly. If you use `useMMKVStorage` hook. Values will update automatically. - -![gif](https://github.com/pnthach95/flipper-plugin-react-native-mmkv-storage/raw/main/docs/example.gif) - -_\* Tested on Flipper v0.152.0, React Native v0.68.2, RN MMKV Storage source code from github_ - -## Installation - -Open Flipper and search on Plugin Manager - -![](https://github.com/pnthach95/flipper-plugin-react-native-mmkv-storage/raw/main/docs/manager.png) - -On your React Native project, install plugin: - -```bash -yarn add react-native-flipper rn-mmkv-storage-flipper --dev -``` - -or - -```bash -npm i react-native-flipper rn-mmkv-storage-flipper -D -``` - -And update your code: - -```js -import {MMKVLoader} from 'react-native-mmkv-storage'; -import mmkvFlipper from 'rn-mmkv-storage-flipper'; - -const MMKV = new MMKVLoader() - .withInstanceID('test') - .withEncryption() - .initialize(); - -if (__DEV__) { - mmkvFlipper(MMKV); -} -``` diff --git a/docs/generalmethods.md b/docs/generalmethods.md deleted file mode 100755 index c7f63ccc..00000000 --- a/docs/generalmethods.md +++ /dev/null @@ -1,65 +0,0 @@ -# General Methods - -Some useful general methods for each instance with a single variant. - -First we create a default MMKV Instance - -```js -import { MMKVLoader } from "react-native-mmkv-storage"; - -MMKV = new MMKVLoader().initialize(); -``` - -## removeItem - -Remove an item for a given key. - -**Arguments** - -| Name | Type | -|------|--------| -| key | String | - -```js -MMKV.removeItem(key); -``` - -## clearStore - -Clear the storage. - -```js -MMKV.clearStore(); -``` - -## clearMemoryCache - -Clear the storage from memory. - -```js -MMKV.clearMemoryCache(); -``` - -## getAllMMKVInstanceIDs - -Returns a list of all the MMKV Instance IDs created. - -```js -let allInstances = MMKV.getAllMMKVInstanceIDs(); -``` - -## getCurrentMMKVInstances - -get the currently initialized instance IDs. - -```js -let intializedInstances = MMKV.getCurrentMMKVInstanceIDs(); -``` - -## getKey - -get the encryption key for the current MMKV instance - -```js -let key = MMKV.getKey(); -``` diff --git a/docs/gettingstarted.md b/docs/gettingstarted.md deleted file mode 100755 index d5f9564a..00000000 --- a/docs/gettingstarted.md +++ /dev/null @@ -1,101 +0,0 @@ -# Installation - -Add the library to your React Native project. - -```bash -npm install react-native-mmkv-storage -``` -or - -```bash -yarn add react-native-mmkv-storage -``` - -It's recommended that you upgrade your project to latest version of react native. However if you are on react native < 0.66.x run the following: - -``` -npx mmkv-link -``` - -### iOS Steps - -```bash -pod install -``` - -### Manual Installation (For React Native 0.65.x & older) -If `npx mmkv-link` fails for some reason. You can follow the steps below and make the changes manually. - -Update the Android Gradle plugin to `4.1+` (`android/build.gradle`) and `ndkVersion` define property: - -```diff -// When SDK 30 -buildscript { - build { - compileSdkVersion = 30 - targetSdkVersion = 30 -+ ndkVersion = "21.4.7075529" - } - dependencies { -- classpath 'com.android.tools.build:gradle:3.2.0' -+ classpath 'com.android.tools.build:gradle:4.2.2' - -// When SDK 29 -buildscript { - build { - compileSdkVersion = 29 - targetSdkVersion = 29 -+ ndkVersion = "21.1.6352462" - } - dependencies { -- classpath 'com.android.tools.build:gradle:3.2.0' -+ classpath 'com.android.tools.build:gradle:4.1.0' -``` - -Update Gradle version in `android/gradle/wrapper/gradle-wrapper.properties` - -```diff -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists --distributionUrl=https\://services.gradle.org/distributions/gradle-6.2-all.zip - -// When SDK 30 -+distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-all.zip - -// When SDK 29 -+distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip -``` - -#### Troubleshooting - -if your build fails, check your NDK version & CMake version installed in Android Studio SDK Manager. -Also make sure you do not have multiple CMake & NDK versions selected in SDK Manager.[Refer to this comment](https://github.com/ammarahm-ed/react-native-mmkv-storage/issues/67#issuecomment-801467636) - -##### `CMake 3.9.0 or higher is required. You are running version 3.6.0-rc2` - -You can specify newer cmake version on CI using `local.properties`: - -```bash -echo "cmake.dir=$ANDROID_HOME/cmake/3.10.2.4988404" >> android/local.properties - -# Check installed cmake on CI -ls $ANDROID_HOME/cmake/ # 3.10.2.4988404 3.6.4111459 -``` - -### iOS - -1. Update your project deployment target to `11.0` - -2. Update your deployment target in project Podfile - -``` -platform :ios, '11.0' -``` - -## No Debug Mode - -You cannot attach chrome debugger if you are using >=0.5.0 version of this library since debugging is not available when JSI modules are used. You can use Flipper to debug if necessary. - -## - -**Read Next:** [Creating an MMKV Instance](creatinginstance.md) diff --git a/docs/index.html b/docs/index.html deleted file mode 100755 index 9f7eac63..00000000 --- a/docs/index.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - react-native-mmkv-storage - - - - - - - - - - - - - - -
Loading ...
- - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/loaderclass.md b/docs/loaderclass.md deleted file mode 100755 index 72a84a0c..00000000 --- a/docs/loaderclass.md +++ /dev/null @@ -1,184 +0,0 @@ -# Loader Class - -The `Loader Class` helps you create an MMKV Instance. Once the instance is loaded, you can then use it to read and write data in database. It follows a builder pattern. You need to tell the Loader class everything about the MMKV Instance you want to create and then finally call `initialize` to create and get the instance. - -## Create a Loader - -You can simply create a new Loader as follows: - -```js -import { MMKVLoader } from "react-native-mmkv-storage"; - -const MMKV = new MMKVLoader(); -``` - -## initialize - -Initialize the MMKV Instance with the selected properties. Returns an MMKV Instance that you can use. - -```js -import { MMKVLoader } from "react-native-mmkv-storage"; - -const MMKV = new MMKVLoader(); - -MMKV.initialize(); -``` - -**Returns:** `API` - -## withInstanceID - -Specifies that the MMKV Instance should be created with the given ID. This way multiple intances can be created. - -**Arguments** - -| Name | Type | -|------|--------| -| ID | String | - -```js -import { MMKVLoader } from "react-native-mmkv-storage"; - -const MMKV = new MMKVLoader(); - -MMKV = MMKV.withInstanceID("mmkvInstanceWithID"); -``` - -**Returns:** `this`; - -## withEncryption - -Encrypt the MMKV instance on initialization. By default the library generates a strong password and stores it in Keychain on iOS and Android Keystore in Android. - -**Arguments** - -| Name | Type | -|------|--------| -| ID | String | - -```js -import { MMKVLoader } from "react-native-mmkv-storage"; - -const MMKV = new MMKVLoader(); - -MMKV = MMKV.withEncryption(); -``` - -**Returns:** `this`; - -## encryptWithCustomKey - -You can also specify your own password to encrypt the storage. - -**Arguments** - -| Name | Required | Type | Description | -|------------------|----------|---------|---------------------------------------------------------------------------------------| -| cryptKey | yes | String | Password to encrypt the storage | -| secureKeyStorage | no | boolean | Set to true of you want the library to store the password securely | -| alias | no | String | You can provide a custom alias for storage of password, by default instanceID is used | - -```js -import { MMKVLoader } from "react-native-mmkv-storage"; - -const MMKV = new MMKVLoader(); - -MMKV = MMKV.withEncryption().encryptWithCustomKey("encryptionKey"); -``` - -**Returns:** `this`; - -## setProcessingMode - -You can choose between single process or multiprocess MMKV instance. - -**Arguments** - -| Name | Required | Type | Description | -|------|----------|-----------------|----------------------------| -| mode | yes | ProcessingModes | Select the processing mode | - -```js -import { MMKVLoader,ProcessingModes } from "react-native-mmkv-storage"; - -const MMKV = new MMKVLoader(); - -MMKV = MMKV.setProcessingMode( ProcessingModes.SINGLE_PROCESS); // OR MMKVStorage.MODES.MULTI_PROCESS -``` - -## setAccessibleMode (iOS only) - -Choose the accessibility mode for secure key storage (IOS ONLY); - -**Arguments** - -| Name | Required | Type | Description | -|------------|----------|----------------------|-------------------------------| -| accessible | yes | IOSAccessibleStates | Choose the accessibility mode | - -```js -import { MMKVLoader, IOSAccessibleStates } from "react-native-mmkv-storage"; - -const MMKV = new MMKVLoader(); - -MMKV = MMKV.setAccessibleMode(IOSAccessibleStates.WHEN_UNLOCKED); -``` - -```ts -type IOSAccessibleStates = { - WHEN_UNLOCKED: string; - AFTER_FIRST_UNLOCK: string; - /** @deprected in iOS 16+ */ - ALWAYS: string; - WHEN_PASSCODE_SET_THIS_DEVICE_ONLY: string; - WHEN_UNLOCKED_THIS_DEVICE_ONLY: string; - AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY: string; - /** @deprected in iOS 16+ */ - ALWAYS_THIS_DEVICE_ONLY: string; -}; -``` - -**Returns:** `this`; - -## withServiceName (iOS only) - -Sets the [kSecAttrService](https://developer.apple.com/documentation/security/ksecattrservice) option for secure key storage (IOS ONLY); - -**Arguments** - -| Name | Required | Type | Description | -|-------------|----------|--------|------------------| -| serviceName | yes | String | The service name | - -```js -import { MMKVLoader } from "react-native-mmkv-storage"; - -const MMKV = new MMKVLoader(); - -MMKV = MMKV.withServiceName('com.MMKV.example'); -``` - -**Returns:** `this`; - -## Putting it together - -Now you know about the loader class, lets create a MMKV Instance with an ID. - -```js -import { MMKVLoader } from "react-native-mmkv-storage"; - -MMKV = new MMKVLoader(). -.withInstanceID('mmkvInstanceID') -.setProcessingMode(MMKVStorage.MODES.MULTI_PROCESS) -.withEncryption() -.encryptWithCustomKey('encryptionKey',true, 'customAlias') -.initialize() - -// then use it - - - await MMKV.setStringAsync("string", "string"); - - let string = await MMKV.getStringAsync("string"); - -``` diff --git a/docs/mockjest.md b/docs/mockjest.md deleted file mode 100644 index 84ebd181..00000000 --- a/docs/mockjest.md +++ /dev/null @@ -1,46 +0,0 @@ -## Testing with Jest - -The library supports mocking the storage in memory to support read/write during tests. Follow the guide below to make it work with jest. - -Add `mmkvJestSetup.js` and `transformIgnorePatterns` in `jest.config.js`. - -```js -module.exports = { - preset: 'react-native', - setupFiles: [ - './node_modules/react-native-mmkv-storage/jest/mmkvJestSetup.js', - ], - transformIgnorePatterns: ['/!node_modules\\/react-native-mmkv-storage/'], -}; - -``` - -You will need to mock the storage with an `in-memory adapter` when your tests run as follows: - -```js -import 'react-native'; -import {MMKVLoader,isLoaded} from 'react-native-mmkv-storage'; // Import the library as normal. - -describe('MMKV Storage mock functionality', () => { - - beforeEach(function () { - // Install the in-memory adapter - let mmkvMock = require('react-native-mmkv-storage/jest/dist/jest/memoryStore.js'); - mmkvMock.unmock(); // Cleanup if already mocked - mmkvMock.mock(); // Mock the storage - }); - - // Use the storage methods as needed. Everything is mocked now - it('Mock bindings are installed', () => { - expect(isLoaded()).toBe(true); - }); - - // Create a new instance. - it('Init an instance', () => { - let instance = new MMKVLoader().initialize(); - expect(instance.instanceID).toBe('default'); - expect(instance.getString('unknown')).toBe(null); - }); - -}); -``` diff --git a/docs/queryingandindexing.md b/docs/queryingandindexing.md deleted file mode 100755 index 171ec146..00000000 --- a/docs/queryingandindexing.md +++ /dev/null @@ -1,343 +0,0 @@ -# Querying and Indexing - -MMKV provides a simple querying system. You can check if a key exists in the database and you can query all keys. This library adds an extra layer of indexing. Each data type for every instance of MMKV maintains its own index. Hence you can also check if a key exists in a specific data type index, for example you can check if a key exists in strings or maps etc. Also you can query all keys for a specific data type. - -First we create a default MMKV Instance - -```js -import { MMKVLoader } from "react-native-mmkv-storage"; - -MMKV = new MMKVLoader().initialize(); -``` - -# Instance Indexer - -Stores keys of all types in one place. - -##### hasKey - -Check if any data exists for a given key. - -**Arguments** -| Name | Type | -|------|--------| -| key | String | - -```jsx -MMKV.indexer.hasKey("your key").then((result) => { - if (result) { - // if true do this. - } else { - // if false do this. - } -}); -``` - -**Returns** -`Promise` - -##### getKeys - -Get all the keys in the storage for all stored items. - -```jsx -let keys = await MMKV.indexer.getKeys(); -``` - -**Returns** -`Promise` - -# Strings Indexer - -Index of all the strings in storage. - -##### hasKey - -Check if any data exists for a given key. - -**Arguments** -| Name | Type | -|------|--------| -| key | String | - -```jsx -MMKV.indexer.strings.hasKey("your key").then((result) => { - if (result) { - // if true do this. - } else { - // if false do this. - } -}); -``` - -**Returns** -`Promise` - -##### getKeys - -Get all the keys in the Storage indexer for all stored items. - -```jsx -let keys = await MMKV.indexer.strings.getKeys(); -``` - -**Returns** -`Promise` - -##### getAll - -Get all strings in the storage. - -```jsx -let strings = await MMKV.indexer.strings.getAll(); -``` - -**Returns** -`Promise>` - -The Array returned has the following structure: - -```js -[ - [key, data], - [key, data], -]; -``` - -The first item in each array is the `key` for the data, and the second item is object itself. - -# Number Indexer - -Index of all the numbers in storage. - -##### hasKey - -Check if any number exists for a given key. - -**Arguments** -| Name | Type | -|------|--------| -| key | String | - -```jsx -MMKV.indexer.numbers.hasKey("your key").then((result) => { - if (result) { - // if true do this. - } else { - // if false do this. - } -}); -``` - -**Returns** -`Promise` - -##### getKeys - -Get all the keys in the number indexer for all stored items. - -```jsx -let keys = await MMKV.indexer.numbers.getKeys(); -``` - -**Returns** -`Promise` - -##### getAll - -Get all numbers stored in the storage. - -```jsx -let numbers = await MMKV.indexer.numbers.getAll(); -``` - -**Returns** -`Promise>` - -The Array returned has the following structure: - -```js -[ - [key, data], - [key, data], -]; -``` - -The first item in each array is the `key` for the data, and the second item is object itself. - -# Boolean Indexer - -Index of all the booleans in storage. - -##### hasKey - -Check if any boolean exists for a given key. - -**Arguments** -| Name | Type | -|------|--------| -| key | String | - -```jsx -MMKV.indexer.booleans.hasKey("your key").then((result) => { - if (result) { - // if true do this. - } else { - // if false do this. - } -}); -``` - -**Returns** -`Promise` - -##### getKeys - -Get all the keys in the boolean indexer for all stored items. - -```jsx -let keys = await MMKV.indexer.booleans.getKeys(); -``` - -**Returns** -`Promise` - -##### getAll - -Get all booleans stored in the storage. - -```jsx -let booleans = await MMKV.indexer.booleans.getAll(); -``` - -**Returns** -`Promise>` - -The Array returned has the following structure: - -```js -[ - [key, data], - [key, data], -]; -``` - -The first item in each array is the `key` for the data, and the second item is object itself. - -# Map Indexer - -Index of all the objects in storage. - -##### hasKey - -Check if any objects exists for a given key. - -**Arguments** -| Name | Type | -|------|--------| -| key | String | - -```jsx -MMKV.indexer.maps.hasKey("your key").then((result) => { - if (result) { - // if true do this. - } else { - // if false do this. - } -}); -``` - -**Returns** -`Promise` - -##### getKeys - -Get all the keys in the objects indexer for all stored items. - -```jsx -let keys = await MMKV.indexer.maps.getKeys(); -``` - -**Returns** -`Promise` - -##### getAll - -Get all objects stored in the storage. - -```jsx -let numbers = await MMKV.indexer.maps.getAll(); -``` - -**Returns** -`Promise>` - -The Array returned has the following structure: - -```js -[ - [key, data], - [key, data], -]; -``` - -The first item in each array is the `key` for the data, and the second item is object itself. - -# Arrays Indexer - -Index of all the arrays in storage. - -##### hasKey - -Check if any array exists for a given key. - -**Arguments** -| Name | Type | -|------|--------| -| key | String | - -```jsx -MMKV.indexer.arrays.hasKey("your key").then((result) => { - if (result) { - // if true do this. - } else { - // if false do this. - } -}); -``` - -**Returns** -`Promise` - -##### getKeys - -Get all the keys in the array indexer for all stored items. - -```jsx -let keys = await MMKV.indexer.arrays.getKeys(); -``` - -**Returns** -`Promise` - -##### getAll - -Get all arrays stored in the storage. - -```jsx -let numbers = await MMKV.indexer.arrays.getAll(); -``` - -**Returns** -`Promise>` - -The Array returned has the following structure: - -```js -[ - [key, data], - [key, data], -]; -``` - -The first item in each array is the `key` for the data, and the second item is object itself. diff --git a/docs/redux-persist.md b/docs/redux-persist.md deleted file mode 100644 index de46c9e8..00000000 --- a/docs/redux-persist.md +++ /dev/null @@ -1,20 +0,0 @@ -# Support for redux-persist - -The library provides support for redux-persist so you can replace it directly with AsyncStorage. - -First we create an MMKV instance, it could be with or without encryption. - -```js -import { MMKVLoader } from "react-native-mmkv-storage"; - -const storage = new MMKVLoader().initialize(); -``` - -Then we pass the storage to persistConfig. - -```js -const persistConfig = { - //... - storage, -}; -``` diff --git a/docs/transactionmanager.md b/docs/transactionmanager.md deleted file mode 100644 index 1ede864c..00000000 --- a/docs/transactionmanager.md +++ /dev/null @@ -1,123 +0,0 @@ -# Lifecycle Control with Transaction Manager - -Listen to a value's lifecycle and mutate it on the go. Transactions lets you register lifecycle functions with your storage instance such as `onwrite`, `beforewrite`, `onread`, `ondelete`. This allows for a better and more managed control over the storage and also let's you build custom indexes with a few lines of code. - -### `register` - -Allows you to register a lifecycle function for a given data type. - -**Arguments** - -| Name | Required | Type | Description | -| --------------------------------- | -------- | ---------------------------------------------------- | ------------------------------------------------------- | -| type | yes | "string" / "number" / "object" / "array" / "boolean" | The type of data you want to register the function for. | -| transaction | yes | "beforewrite" / "onwrite" /"onread" / "ondelete" | When should the function be called | -| `mutator({key:string,value:any})` | no | function | The function that allows to mutate the value | - -### `unregister` - -Unregister a lifecycle function for a given data type. - -**Arguments** - -| Name | Required | Type | Description | -| ----------- | -------- | ---------------------------------------------------- | --------------------------------------------------------- | -| type | yes | "string" / "number" / "object" / "array" / "boolean" | The type of data you want to unregister the function for. | -| transaction | yes | "beforewrite" / "onwrite" / "onread" / "ondelete" | type of transaction to unregister | - -### `clear` - -Clear all registered functions. - -### How to use - -Import `MMKVStorage` and `useMMKVStorage` Hook. - -```js -import { MMKVLoader, useMMKVStorage } from 'react-native-mmkv-storage'; -``` - -Initialize the `MMKVStorage` instance. - -```js -const MMKV = new MMKVLoader().initialize(); -``` - -### 1. Simple Developer Tooling - -Debug what is happening during the lifecycle of your app. Track every single change and have better control and understanding your storage. - -```js -MMKV.transactions.register('object', 'onwrite', ({ key, value }) => { - console.log(MMKV.instanceID, 'object:onwrite: ', key, value); -}); -``` - -### 2. Enable Custom Indexing - -Building and storing custom indexes with a simple key/value storage can become difficult to manage. Transaction manager makes it a breeze to create and manage complex indexes. - -Let's assume that we are storing user posts in storage and each post as a specific tag. - -```js -MMKV.transactions.register('object', 'beforewrite', ({ key, value }) => { - if (key.startsWith('post.')) { - // Call this only when the key has the post prefix. - let indexForTag = MMKV.getArray(`${value.tag}-index`) || []; - MMKV.setArray(indexForTag.push(key)); - } -}); -``` - -And then we use that index in a component that shows posts by tag. - -```js -const PostByTag = ({tag}) => { -const [tagIndex,setTagIndex] = useMMKVStorage(`${tag}-index`,MMKV,[]); -const [posts,update,remove] = useIndex(tagIndex,"object", MMKV); - -return - - - -} -``` - -This is a basic example but you can imagine the level of control you can achieve with this. - -### 3. Enable Lower-Level Data Management - -Abstraction of data in your storage. Anything that is affected by multiple factors in your storage can be put here. This also allows for easier debugging since such data is mutated in one place instead of tens of different places in the app, you can know exactly what is happening. - -```js -MMKV.transactions.register('object', 'onwrite', ({ key, value }) => { - if (!key.startsWith('posts.')) return; // only look at "posts." prefix keys - // developer can update other fields based on this transaction - MMKV.setIntAsync('postsCount', oldValue + 1); -}); - -MMKV.transactions.register('object', 'ondelete', ({ key }) => { - if (!key.startsWith('posts.')) return; // only look at "posts." prefix keys - // developer can update other fields based on this transaction - MMKV.setIntAsync('postsCount', oldValue - 1); -}); -``` - -### 4. Enable On-the-Fly Mutations - -Mutate a value before read/write. - -```js -const injectTimestamp = record => ({ ...record, timestamp: Date.now() }); - -MMKV.transactions.register('object', 'beforewrite', ({ key, value }) => { - if (!key.startsWith('posts.')) return; // only look at "posts." namespace - if (!!value.timestamp) return; // only run if timestamp is not in record already - - // Setup new transaction with properly structured data - MMKV.setMapAsync(key, injectTimestamp(value)); -}); -``` diff --git a/docs/useindex.md b/docs/useindex.md deleted file mode 100644 index c2ad92df..00000000 --- a/docs/useindex.md +++ /dev/null @@ -1,44 +0,0 @@ -# useIndex hook - -A hook that will take an array of keys and returns an array of values for those keys. This is supposed to work in combination with [Transactions](transactionmanager.md). When you have build your custom index, you will need an easy and quick way to load values for your index. useIndex hook actively listens to all read/write changes and updates the values accordingly. - -**Arguments** - -| Name | Required | Type | Description | -|-------------------------------------|----------|------------------------------------------------------|--------------------------------------------------------------------| -| index | yes | Array | The type of data you want to register the function for. | -| type | yes | "string" / "number" / "object" / "array" / "boolean" | Type of values in index | -| [`MMKVStorage.API`](callbackapi.md) | no | `MMKVStorage.API` | MMKV storage instance created from `new MMKVLoader().initialize()` | - -**returns:** `[values,update,remove]` - -#### `values` - -An array of values for the given index - -#### `update(key:string,value:any)` - -A function that allows to update a key in an index. You can also add new ones. - -#### `remove(key:string)` - -Remove an item from index and storage. - -### How to use - -Here's a simple example use case - -```js -const MyComponent = () => { - const postsIndex = useMMKVStorage("postsIndex",MMKV,[]); - const [posts] = useIndex(postsIndex,"object" MMKV); - - return - - - -} -``` diff --git a/docs/usemmkvref.md b/docs/usemmkvref.md deleted file mode 100644 index 1e88b4d1..00000000 --- a/docs/usemmkvref.md +++ /dev/null @@ -1,63 +0,0 @@ -# useMMKVRef hook - -A persisted ref that will always write every change to it's `current` value to storage. It doesn't matter if you reload the app or restart it. Everything will be in place on app load. Let's see how this works: - -### `useMMKVRef` -A `useRef` like hook that allows you to easily manage values in storage. - -**Arguments** - -| Name | Required | Type | Description | -|-------------------|----------|-------------------|--------------------------------------------------------------------| -| key | yes | String | The key against which to get the value | -| `MMKVStorage.API` | yes | `MMKVStorage.API` | MMKV storage instance created from `new MMKVLoader().initialize()` | -| defaultValue | no | String | Pass a default value for the hook if any | - -**returns:** `{current: RefObject, reset: () => void}`. - -The `reset` function can be used to reset the value to `defaultValue`. - -### `createMMKVRefHookForStorage` -A helper function that returns `useMMKVRef` which can then be used inside a component. -**Arguments** - -| Name | Required | Type | Description | -|-------------------|----------|---------|--------------------------------------------------------------------| -| `MMKVStorage.API` | yes | boolean | MMKV storage instance created from `new MMKVLoader().initialize()` | - -**returns:** `useMMKVRef(key:string, defaultValue:any)` - -### How to use - -Import `MMKVLoader` and `useMMKVRef` Hook. - -```js -import { MMKVLoader, useMMKVRef } from "react-native-mmkv-storage"; -``` - -Initialize the `MMKVLoader` instance. - -```js -const MMKV = new MMKVLoader().initialize(); -``` - -Next, in our component we are going to register our hook. - -```jsx -const App = () => { - const name = useMMKVRef("username", MMKV); - - return ( - - { - name.current = value; - }} - /> - - ); -}; -``` -Now whenever you update `current` value, it will be stored in storage, until you call `reset` function; - diff --git a/docs/usemmkvstorage.md b/docs/usemmkvstorage.md deleted file mode 100644 index be65518d..00000000 --- a/docs/usemmkvstorage.md +++ /dev/null @@ -1,102 +0,0 @@ -# Reactive Apps with useMMKVStorage Hook - -Starting from `v0.5.5`, thanks to the power of JSI, we now have our very own `useMMKVStorage` Hook. Think of it like a persisted state that will always write every change in storage and update your app UI instantly. It doesn't matter if you reload the app or restart it. Everything will be in place on app load. Let's see how this works: - -### `useMMKVStorage` -A `useState` like hook that allows you to easily manage values in storage. - -**Arguments** - -| Name | Required | Type | Description | -|-------------------|----------|-------------------|--------------------------------------------------------------------| -| key | yes | String | The key against which to get the value | -| `MMKVStorage.API` | yes | `MMKVStorage.API` | MMKV storage instance created from `new MMKVLoader().initialize()` | -| defaultValue | no | String | Pass a default value for the hook if any | - -**returns:** A pair of `value` & `setValue`. - -### `create` -A helper function that returns `useMMKVStorage` which can then be used inside a functional component. -**Arguments** - -| Name | Required | Type | Description | -|-------------------|----------|---------|--------------------------------------------------------------------| -| `MMKVStorage.API` | yes | boolean | MMKV storage instance created from `new MMKVLoader().initialize()` | - -**returns:** `useMMKVStorage(key:string,defaultValue:any)` - -### How to use - -Import `MMKVStorage` and `useMMKVStorage` Hook. - -```js -import { MMKVLoader, useMMKVStorage } from "react-native-mmkv-storage"; -``` - -Initialize the `MMKVStorage` instance. - -```js -const MMKV = new MMKVLoader().initialize(); -``` - -Next, in our component we are going to register our hook. - -```jsx -const App = () => { - const [user, setUser] = useMMKVStorage("user", MMKV, "robert"); // robert is the default value - - return ( - - {user} - - ); -}; -``` - -Now whenever you update value of `"user"` in storage, your `App` component will automatically rerender. - -```jsx -setUser("andrew"); -//or you cal call setUser without a value to remove the value -setUser(); //removes the value from storage. - -// or you can do this too anywhere in your app: -MMKV.setString("user", "andrew"); -``` - -Simple right? now refresh the app or restart it. When it loads, it will always show andrew as the user until you update it. -The ideal way which I would recommend for better development experience would to wrap `useMMKVStorage` hook in a custom hook as follows: - -```jsx -const MMKV = new MMKVLoader().initialize(); - -export const useStorage = (key, defaultValue) => { - const [value, setValue] = useMMKVStorage(key, MMKV, defaultValue); - return [value, setValue]; -}; -``` - -You should use the `create` function from `v0.5.9` onwards: - -```jsx -import {MMKVLoader, create } from "react-native-mmkv-storage"; -const MMKV = new MMKVLoader().initialize(); - -export const useStorage = create(MMKV); -``` - -Now you don't have to import `MMKV` everywhere in your app but only once. If you use TypeScript you can do something like below to get nice intellisense in your editor. - -```tsx -const MMKV: MMKVStorage.API = new MMKVLoader().initialize(); -type LiteralUnion = T | (U & {}); - -export const useStorage = ( - key: LiteralUnion<"user" | "password">, - defaultValue?: string -) => { - const [value, setValue] = useMMKVStorage(key, MMKV, defaultValue); - return [value, setValue]; -}; -``` - diff --git a/docs/workingwithencryption.md b/docs/workingwithencryption.md deleted file mode 100755 index 917f64c3..00000000 --- a/docs/workingwithencryption.md +++ /dev/null @@ -1,89 +0,0 @@ -# Working with encryption - -So now you know how to create an instance of MMKV. Lets dig into encryption and how to handle different use cases. - -An already created instance of MMKV can be encrypted without destroying it. - -Lets suppose you have this MMKV instance created during first app startup. - -```js -import { MMKVLoader } from "react-native-mmkv-storage"; - -const MMKV = new MMKVStorage().initialize(); -``` - -Now later you might want to encrypt it somwhere during the lifecycle of an app. So you can then simply do this: - -Let the library do everything **(RECOMMENDED)** - -```js -await MMKV.encryption.encrypt(); -``` - -Or provide your own password - -```js -await MMKV.encryption.encrypt("myencryptionkey"); -``` - -if you want the key to be stored in the secure storage - -```js -await MMKV.encryption.encrypt("myencryptionkey", true); -``` - -This will encrypt the storage. Remember that **you will not need to change your Loader function** for this instance afterwards. The Library will handle everything itself - -Now lets say you want to decrypt it later on. - -```js -await MMKV.encryption.decrypt(); -``` - -Or you might want to update the encryption key to a newer one: - -```js -await MMKV.encryption.changeEncryptionKey(); -``` - -Or provide your own password, it will be stored securely - -```js -await MMKV.encryption.changeEncryptionKey("myencryptionkey"); -``` - -If you want it to be stored in the secure storage - -```js -await MMKV.encryption.changeEncryptionKey("myencryptionkey",true); -``` - -Remember that whenever you encrypt your storage, a strongpassword is automatically generated, stored and used to decrypt it behind the scenes. It is recommended to use it since it handles everything smoothly. However you can choose to not do so, in such a case, things get a little complicated. - -Lets say you created an MMKV Instance with encryption and you did not store the password so. - -```js -const MMKV = new MMKVLoader() - .withEncryption() - .encryptWithCustomKey("oldkey") - .initialize(); -``` - -Now if you change the encryption key - -```js -await MMKV.encryption.changeEncryptionKey("newkey"); -``` - -When the app starts again on next start up. You will need to update the value of key in the Loader function or your database will not load. - -So on next app startup: - -```js -const MMKV = new MMKVLoader() - .withEncryption() - .encryptWithCustomKey("newkey") - .initialize(); -``` - -How you handle the change from old key to the new one, is up to you. diff --git a/example/.bundle/config b/example/.bundle/config deleted file mode 100644 index 848943bb..00000000 --- a/example/.bundle/config +++ /dev/null @@ -1,2 +0,0 @@ -BUNDLE_PATH: "vendor/bundle" -BUNDLE_FORCE_RUBY_PLATFORM: 1 diff --git a/example/.gitignore b/example/.gitignore deleted file mode 100644 index 16f8c307..00000000 --- a/example/.gitignore +++ /dev/null @@ -1,63 +0,0 @@ -# OSX -# -.DS_Store - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -ios/.xcode.env.local - -# Android/IntelliJ -# -build/ -.idea -.gradle -local.properties -*.iml -*.hprof -.cxx/ -*.keystore -!debug.keystore - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -# fastlane -# -# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the -# screenshots whenever they are needed. -# For more information about the recommended setup visit: -# https://docs.fastlane.tools/best-practices/source-control/ - -**/fastlane/report.xml -**/fastlane/Preview.html -**/fastlane/screenshots -**/fastlane/test_output - -# Bundle artifact -*.jsbundle - -# Ruby / CocoaPods -/ios/Pods/ -/vendor/bundle/ - -# Temporary files created by Metro to check the health of the file watcher -.metro-health-check* diff --git a/example/.watchmanconfig b/example/.watchmanconfig deleted file mode 100644 index 0967ef42..00000000 --- a/example/.watchmanconfig +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/example/Gemfile b/example/Gemfile deleted file mode 100644 index 2a7ce357..00000000 --- a/example/Gemfile +++ /dev/null @@ -1,8 +0,0 @@ -source 'https://rubygems.org' - -# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version -ruby ">= 2.6.10" - -# Exclude problematic versions of cocoapods and activesupport that causes build failures. -gem 'cocoapods', '>= 1.13', '!= 1.15.0', '!= 1.15.1' -gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0' diff --git a/example/README.md b/example/README.md deleted file mode 100644 index 12470c30..00000000 --- a/example/README.md +++ /dev/null @@ -1,79 +0,0 @@ -This is a new [**React Native**](https://reactnative.dev) project, bootstrapped using [`@react-native-community/cli`](https://github.com/react-native-community/cli). - -# Getting Started - ->**Note**: Make sure you have completed the [React Native - Environment Setup](https://reactnative.dev/docs/environment-setup) instructions till "Creating a new application" step, before proceeding. - -## Step 1: Start the Metro Server - -First, you will need to start **Metro**, the JavaScript _bundler_ that ships _with_ React Native. - -To start Metro, run the following command from the _root_ of your React Native project: - -```bash -# using npm -npm start - -# OR using Yarn -yarn start -``` - -## Step 2: Start your Application - -Let Metro Bundler run in its _own_ terminal. Open a _new_ terminal from the _root_ of your React Native project. Run the following command to start your _Android_ or _iOS_ app: - -### For Android - -```bash -# using npm -npm run android - -# OR using Yarn -yarn android -``` - -### For iOS - -```bash -# using npm -npm run ios - -# OR using Yarn -yarn ios -``` - -If everything is set up _correctly_, you should see your new app running in your _Android Emulator_ or _iOS Simulator_ shortly provided you have set up your emulator/simulator correctly. - -This is one way to run your app — you can also run it directly from within Android Studio and Xcode respectively. - -## Step 3: Modifying your App - -Now that you have successfully run the app, let's modify it. - -1. Open `App.tsx` in your text editor of choice and edit some lines. -2. For **Android**: Press the R key twice or select **"Reload"** from the **Developer Menu** (Ctrl + M (on Window and Linux) or Cmd ⌘ + M (on macOS)) to see your changes! - - For **iOS**: Hit Cmd ⌘ + R in your iOS Simulator to reload the app and see your changes! - -## Congratulations! :tada: - -You've successfully run and modified your React Native App. :partying_face: - -### Now what? - -- If you want to add this new React Native code to an existing application, check out the [Integration guide](https://reactnative.dev/docs/integration-with-existing-apps). -- If you're curious to learn more about React Native, check out the [Introduction to React Native](https://reactnative.dev/docs/getting-started). - -# Troubleshooting - -If you can't get this to work, see the [Troubleshooting](https://reactnative.dev/docs/troubleshooting) page. - -# Learn More - -To learn more about React Native, take a look at the following resources: - -- [React Native Website](https://reactnative.dev) - learn more about React Native. -- [Getting Started](https://reactnative.dev/docs/environment-setup) - an **overview** of React Native and how setup your environment. -- [Learn the Basics](https://reactnative.dev/docs/getting-started) - a **guided tour** of the React Native **basics**. -- [Blog](https://reactnative.dev/blog) - read the latest official React Native **Blog** posts. -- [`@facebook/react-native`](https://github.com/facebook/react-native) - the Open Source; GitHub **repository** for React Native. diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle deleted file mode 100644 index db7119db..00000000 --- a/example/android/app/build.gradle +++ /dev/null @@ -1,119 +0,0 @@ -apply plugin: "com.android.application" -apply plugin: "org.jetbrains.kotlin.android" -apply plugin: "com.facebook.react" - -/** - * This is the configuration block to customize your React Native Android app. - * By default you don't need to apply any configuration, just uncomment the lines you need. - */ -react { - /* Folders */ - // The root of your project, i.e. where "package.json" lives. Default is '../..' - // root = file("../../") - // The folder where the react-native NPM package is. Default is ../../node_modules/react-native - // reactNativeDir = file("../../node_modules/react-native") - // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen - // codegenDir = file("../../node_modules/@react-native/codegen") - // The cli.js file which is the React Native CLI entrypoint. Default is ../../node_modules/react-native/cli.js - // cliFile = file("../../node_modules/react-native/cli.js") - - /* Variants */ - // The list of variants to that are debuggable. For those we're going to - // skip the bundling of the JS bundle and the assets. By default is just 'debug'. - // If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants. - // debuggableVariants = ["liteDebug", "prodDebug"] - - /* Bundling */ - // A list containing the node command and its flags. Default is just 'node'. - // nodeExecutableAndArgs = ["node"] - // - // The command to run when bundling. By default is 'bundle' - // bundleCommand = "ram-bundle" - // - // The path to the CLI configuration file. Default is empty. - // bundleConfig = file(../rn-cli.config.js) - // - // The name of the generated asset file containing your JS bundle - // bundleAssetName = "MyApplication.android.bundle" - // - // The entry file for bundle generation. Default is 'index.android.js' or 'index.js' - // entryFile = file("../js/MyApplication.android.js") - // - // A list of extra flags to pass to the 'bundle' commands. - // See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle - // extraPackagerArgs = [] - - /* Hermes Commands */ - // The hermes compiler command to run. By default it is 'hermesc' - // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc" - // - // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map" - // hermesFlags = ["-O", "-output-source-map"] - - /* Autolinking */ - autolinkLibrariesWithApp() -} - -/** - * Set this to true to Run Proguard on Release builds to minify the Java bytecode. - */ -def enableProguardInReleaseBuilds = false - -/** - * The preferred build flavor of JavaScriptCore (JSC) - * - * 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:+' - -android { - ndkVersion rootProject.ext.ndkVersion - buildToolsVersion rootProject.ext.buildToolsVersion - compileSdk rootProject.ext.compileSdkVersion - - namespace "mmkvstorage.example" - defaultConfig { - applicationId "mmkvstorage.example" - minSdkVersion rootProject.ext.minSdkVersion - targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 1 - versionName "1.0" - } - 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" - } - } -} - -dependencies { - // The version of react-native is set by the React Native Gradle Plugin - implementation("com.facebook.react:react-android") - - if (hermesEnabled.toBoolean()) { - implementation("com.facebook.react:hermes-android") - } else { - implementation jscFlavor - } -} diff --git a/example/android/app/debug.keystore b/example/android/app/debug.keystore deleted file mode 100644 index 364e105e..00000000 Binary files a/example/android/app/debug.keystore and /dev/null differ diff --git a/example/android/app/proguard-rules.pro b/example/android/app/proguard-rules.pro deleted file mode 100644 index 11b02572..00000000 --- a/example/android/app/proguard-rules.pro +++ /dev/null @@ -1,10 +0,0 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: diff --git a/example/android/app/src/debug/AndroidManifest.xml b/example/android/app/src/debug/AndroidManifest.xml deleted file mode 100644 index eb98c01a..00000000 --- a/example/android/app/src/debug/AndroidManifest.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index e1892528..00000000 --- a/example/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - diff --git a/example/android/app/src/main/java/mmkvstorage/example/MainActivity.kt b/example/android/app/src/main/java/mmkvstorage/example/MainActivity.kt deleted file mode 100644 index cb435664..00000000 --- a/example/android/app/src/main/java/mmkvstorage/example/MainActivity.kt +++ /dev/null @@ -1,22 +0,0 @@ -package mmkvstorage.example - -import com.facebook.react.ReactActivity -import com.facebook.react.ReactActivityDelegate -import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled -import com.facebook.react.defaults.DefaultReactActivityDelegate - -class MainActivity : ReactActivity() { - - /** - * Returns the name of the main component registered from JavaScript. This is used to schedule - * rendering of the component. - */ - override fun getMainComponentName(): String = "MmkvStorageExample" - - /** - * Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate] - * which allows you to enable New Architecture with a single boolean flags [fabricEnabled] - */ - override fun createReactActivityDelegate(): ReactActivityDelegate = - DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled) -} diff --git a/example/android/app/src/main/java/mmkvstorage/example/MainApplication.kt b/example/android/app/src/main/java/mmkvstorage/example/MainApplication.kt deleted file mode 100644 index 23e8a6fe..00000000 --- a/example/android/app/src/main/java/mmkvstorage/example/MainApplication.kt +++ /dev/null @@ -1,43 +0,0 @@ -package mmkvstorage.example - -import android.app.Application -import com.facebook.react.PackageList -import com.facebook.react.ReactApplication -import com.facebook.react.ReactHost -import com.facebook.react.ReactNativeHost -import com.facebook.react.ReactPackage -import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load -import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost -import com.facebook.react.defaults.DefaultReactNativeHost -import com.facebook.soloader.SoLoader - -class MainApplication : Application(), ReactApplication { - - override val reactNativeHost: ReactNativeHost = - object : DefaultReactNativeHost(this) { - override fun getPackages(): List = - PackageList(this).packages.apply { - // Packages that cannot be autolinked yet can be added manually here, for example: - // add(MyReactNativePackage()) - } - - override fun getJSMainModuleName(): String = "index" - - override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG - - override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED - override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED - } - - override val reactHost: ReactHost - get() = getDefaultReactHost(applicationContext, reactNativeHost) - - override fun onCreate() { - super.onCreate() - SoLoader.init(this, false) - if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { - // If you opted-in for the New Architecture, we load the native entry point for this app. - load() - } - } -} diff --git a/example/android/app/src/main/res/drawable/rn_edit_text_material.xml b/example/android/app/src/main/res/drawable/rn_edit_text_material.xml deleted file mode 100644 index 5c25e728..00000000 --- a/example/android/app/src/main/res/drawable/rn_edit_text_material.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - diff --git a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index a2f59082..00000000 Binary files a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png deleted file mode 100644 index 1b523998..00000000 Binary files a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ diff --git a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index ff10afd6..00000000 Binary files a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png deleted file mode 100644 index 115a4c76..00000000 Binary files a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ diff --git a/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index dcd3cd80..00000000 Binary files a/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png deleted file mode 100644 index 459ca609..00000000 Binary files a/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ diff --git a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 8ca12fe0..00000000 Binary files a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100644 index 8e19b410..00000000 Binary files a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index b824ebdd..00000000 Binary files a/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index 4c19a13c..00000000 Binary files a/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/example/android/app/src/main/res/values/strings.xml b/example/android/app/src/main/res/values/strings.xml deleted file mode 100644 index 582d147d..00000000 --- a/example/android/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - MmkvStorageExample - diff --git a/example/android/app/src/main/res/values/styles.xml b/example/android/app/src/main/res/values/styles.xml deleted file mode 100644 index 7ba83a2a..00000000 --- a/example/android/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/example/android/build.gradle b/example/android/build.gradle deleted file mode 100644 index df1ce4db..00000000 --- a/example/android/build.gradle +++ /dev/null @@ -1,21 +0,0 @@ -buildscript { - ext { - buildToolsVersion = "34.0.0" - minSdkVersion = 23 - compileSdkVersion = 34 - targetSdkVersion = 34 - ndkVersion = "26.1.10909125" - kotlinVersion = "1.9.24" - } - repositories { - google() - mavenCentral() - } - dependencies { - classpath("com.android.tools.build:gradle") - classpath("com.facebook.react:react-native-gradle-plugin") - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") - } -} - -apply plugin: "com.facebook.react.rootproject" diff --git a/example/android/gradle.properties b/example/android/gradle.properties deleted file mode 100644 index 9fb15664..00000000 --- a/example/android/gradle.properties +++ /dev/null @@ -1,39 +0,0 @@ -# Project-wide Gradle settings. - -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. - -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html - -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. -# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m -org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m - -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true - -# AndroidX package structure to make it clearer which packages are bundled with the -# Android operating system, and which are packaged with your app's APK -# https://developer.android.com/topic/libraries/support-library/androidx-rn -android.useAndroidX=true - -# Use this property to specify which architecture you want to build. -# You can also override it from the CLI using -# ./gradlew -PreactNativeArchitectures=x86_64 -reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 - -# Use this property to enable support to the new architecture. -# This will allow you to use TurboModules and the Fabric render in -# your application. You should enable this flag either if you want -# to write custom TurboModules/Fabric components OR use libraries that -# are providing them. -newArchEnabled=false - -# Use this property to enable or disable the Hermes JS engine. -# If set to false, you will be using JSC instead. -hermesEnabled=true diff --git a/example/android/gradle/wrapper/gradle-wrapper.jar b/example/android/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index e6441136..00000000 Binary files a/example/android/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 6f7a6eb3..00000000 --- a/example/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,7 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-all.zip -networkTimeout=10000 -validateDistributionUrl=true -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/example/android/gradlew b/example/android/gradlew deleted file mode 100755 index b740cf13..00000000 --- a/example/android/gradlew +++ /dev/null @@ -1,249 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original 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 POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# 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 ;; #( - MSYS* | 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 - if ! command -v java >/dev/null 2>&1 - then - 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 -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# 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"' - -# Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, -# and any embedded shellness will be escaped. -# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be -# treated as '${Hostname}' itself on the command line. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/example/android/gradlew.bat b/example/android/gradlew.bat deleted file mode 100644 index 7101f8e4..00000000 --- a/example/android/gradlew.bat +++ /dev/null @@ -1,92 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/example/android/settings.gradle b/example/android/settings.gradle deleted file mode 100644 index ee17f7ce..00000000 --- a/example/android/settings.gradle +++ /dev/null @@ -1,6 +0,0 @@ -pluginManagement { includeBuild("../node_modules/@react-native/gradle-plugin") } -plugins { id("com.facebook.react.settings") } -extensions.configure(com.facebook.react.ReactSettingsExtension){ ex -> ex.autolinkLibrariesFromCommand() } -rootProject.name = 'mmkvstorage.example' -include ':app' -includeBuild('../node_modules/@react-native/gradle-plugin') diff --git a/example/app.json b/example/app.json deleted file mode 100644 index 5545fdb1..00000000 --- a/example/app.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "MmkvStorageExample", - "displayName": "MmkvStorageExample" -} diff --git a/example/babel.config.js b/example/babel.config.js deleted file mode 100644 index f7b3da3b..00000000 --- a/example/babel.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - presets: ['module:@react-native/babel-preset'], -}; diff --git a/example/index.js b/example/index.js deleted file mode 100644 index 117ddcae..00000000 --- a/example/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import { AppRegistry } from 'react-native'; -import App from './src/App'; -import { name as appName } from './app.json'; - -AppRegistry.registerComponent(appName, () => App); diff --git a/example/ios/.xcode.env b/example/ios/.xcode.env deleted file mode 100644 index 3d5782c7..00000000 --- a/example/ios/.xcode.env +++ /dev/null @@ -1,11 +0,0 @@ -# This `.xcode.env` file is versioned and is used to source the environment -# used when running script phases inside Xcode. -# To customize your local environment, you can create an `.xcode.env.local` -# file that is not versioned. - -# NODE_BINARY variable contains the PATH to the node executable. -# -# Customize the NODE_BINARY variable here. -# For example, to use nvm with brew, add the following line -# . "$(brew --prefix nvm)/nvm.sh" --no-use -export NODE_BINARY=$(command -v node) diff --git a/example/ios/File.swift b/example/ios/File.swift deleted file mode 100644 index 2931faa2..00000000 --- a/example/ios/File.swift +++ /dev/null @@ -1,6 +0,0 @@ -// -// File.swift -// MmkvStorageExample -// - -import Foundation diff --git a/example/ios/MmkvStorageExample-Bridging-Header.h b/example/ios/MmkvStorageExample-Bridging-Header.h deleted file mode 100644 index e11d920b..00000000 --- a/example/ios/MmkvStorageExample-Bridging-Header.h +++ /dev/null @@ -1,3 +0,0 @@ -// -// Use this file to import your target's public headers that you would like to expose to Swift. -// diff --git a/example/ios/MmkvStorageExample.xcodeproj/project.pbxproj b/example/ios/MmkvStorageExample.xcodeproj/project.pbxproj deleted file mode 100644 index 6704219e..00000000 --- a/example/ios/MmkvStorageExample.xcodeproj/project.pbxproj +++ /dev/null @@ -1,705 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 54; - objects = { - -/* Begin PBXBuildFile section */ - 00E356F31AD99517003FC87E /* MmkvStorageExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* MmkvStorageExampleTests.m */; }; - 0C80B921A6F3F58F76C31292 /* libPods-MmkvStorageExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-MmkvStorageExample.a */; }; - 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; }; - 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; - 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; - 7699B88040F8A987B510C191 /* libPods-MmkvStorageExample-MmkvStorageExampleTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-MmkvStorageExample-MmkvStorageExampleTests.a */; }; - 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; - D0A85D56BFA2DF0F0DBC974A /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 1EA1907D33F38B509CC89A82 /* PrivacyInfo.xcprivacy */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 13B07F861A680F5B00A75B9A; - remoteInfo = MmkvStorageExample; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 00E356EE1AD99517003FC87E /* MmkvStorageExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MmkvStorageExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 00E356F21AD99517003FC87E /* MmkvStorageExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MmkvStorageExampleTests.m; sourceTree = ""; }; - 13B07F961A680F5B00A75B9A /* MmkvStorageExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MmkvStorageExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = MmkvStorageExample/AppDelegate.h; sourceTree = ""; }; - 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = MmkvStorageExample/AppDelegate.mm; sourceTree = ""; }; - 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = MmkvStorageExample/Images.xcassets; sourceTree = ""; }; - 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = MmkvStorageExample/Info.plist; sourceTree = ""; }; - 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = MmkvStorageExample/main.m; sourceTree = ""; }; - 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = PrivacyInfo.xcprivacy; path = MmkvStorageExample/PrivacyInfo.xcprivacy; sourceTree = ""; }; - 19F6CBCC0A4E27FBF8BF4A61 /* libPods-MmkvStorageExample-MmkvStorageExampleTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MmkvStorageExample-MmkvStorageExampleTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 1EA1907D33F38B509CC89A82 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = MmkvStorageExample/PrivacyInfo.xcprivacy; sourceTree = ""; }; - 3B4392A12AC88292D35C810B /* Pods-MmkvStorageExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MmkvStorageExample.debug.xcconfig"; path = "Target Support Files/Pods-MmkvStorageExample/Pods-MmkvStorageExample.debug.xcconfig"; sourceTree = ""; }; - 5709B34CF0A7D63546082F79 /* Pods-MmkvStorageExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MmkvStorageExample.release.xcconfig"; path = "Target Support Files/Pods-MmkvStorageExample/Pods-MmkvStorageExample.release.xcconfig"; sourceTree = ""; }; - 5B7EB9410499542E8C5724F5 /* Pods-MmkvStorageExample-MmkvStorageExampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MmkvStorageExample-MmkvStorageExampleTests.debug.xcconfig"; path = "Target Support Files/Pods-MmkvStorageExample-MmkvStorageExampleTests/Pods-MmkvStorageExample-MmkvStorageExampleTests.debug.xcconfig"; sourceTree = ""; }; - 5DCACB8F33CDC322A6C60F78 /* libPods-MmkvStorageExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MmkvStorageExample.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = MmkvStorageExample/LaunchScreen.storyboard; sourceTree = ""; }; - 89C6BE57DB24E9ADA2F236DE /* Pods-MmkvStorageExample-MmkvStorageExampleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MmkvStorageExample-MmkvStorageExampleTests.release.xcconfig"; path = "Target Support Files/Pods-MmkvStorageExample-MmkvStorageExampleTests/Pods-MmkvStorageExample-MmkvStorageExampleTests.release.xcconfig"; sourceTree = ""; }; - ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 00E356EB1AD99517003FC87E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 7699B88040F8A987B510C191 /* libPods-MmkvStorageExample-MmkvStorageExampleTests.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 0C80B921A6F3F58F76C31292 /* libPods-MmkvStorageExample.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 00E356EF1AD99517003FC87E /* MmkvStorageExampleTests */ = { - isa = PBXGroup; - children = ( - 00E356F21AD99517003FC87E /* MmkvStorageExampleTests.m */, - 00E356F01AD99517003FC87E /* Supporting Files */, - ); - path = MmkvStorageExampleTests; - sourceTree = ""; - }; - 00E356F01AD99517003FC87E /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 00E356F11AD99517003FC87E /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 13B07FAE1A68108700A75B9A /* MmkvStorageExample */ = { - isa = PBXGroup; - children = ( - 13B07FAF1A68108700A75B9A /* AppDelegate.h */, - 13B07FB01A68108700A75B9A /* AppDelegate.mm */, - 13B07FB51A68108700A75B9A /* Images.xcassets */, - 13B07FB61A68108700A75B9A /* Info.plist */, - 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */, - 13B07FB71A68108700A75B9A /* main.m */, - 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */, - 1EA1907D33F38B509CC89A82 /* PrivacyInfo.xcprivacy */, - ); - name = MmkvStorageExample; - sourceTree = ""; - }; - 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { - isa = PBXGroup; - children = ( - ED297162215061F000B7C4FE /* JavaScriptCore.framework */, - 5DCACB8F33CDC322A6C60F78 /* libPods-MmkvStorageExample.a */, - 19F6CBCC0A4E27FBF8BF4A61 /* libPods-MmkvStorageExample-MmkvStorageExampleTests.a */, - ); - name = Frameworks; - sourceTree = ""; - }; - 832341AE1AAA6A7D00B99B32 /* Libraries */ = { - isa = PBXGroup; - children = ( - ); - name = Libraries; - sourceTree = ""; - }; - 83CBB9F61A601CBA00E9B192 = { - isa = PBXGroup; - children = ( - 13B07FAE1A68108700A75B9A /* MmkvStorageExample */, - 832341AE1AAA6A7D00B99B32 /* Libraries */, - 00E356EF1AD99517003FC87E /* MmkvStorageExampleTests */, - 83CBBA001A601CBA00E9B192 /* Products */, - 2D16E6871FA4F8E400B85C8A /* Frameworks */, - BBD78D7AC51CEA395F1C20DB /* Pods */, - ); - indentWidth = 2; - sourceTree = ""; - tabWidth = 2; - usesTabs = 0; - }; - 83CBBA001A601CBA00E9B192 /* Products */ = { - isa = PBXGroup; - children = ( - 13B07F961A680F5B00A75B9A /* MmkvStorageExample.app */, - 00E356EE1AD99517003FC87E /* MmkvStorageExampleTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - BBD78D7AC51CEA395F1C20DB /* Pods */ = { - isa = PBXGroup; - children = ( - 3B4392A12AC88292D35C810B /* Pods-MmkvStorageExample.debug.xcconfig */, - 5709B34CF0A7D63546082F79 /* Pods-MmkvStorageExample.release.xcconfig */, - 5B7EB9410499542E8C5724F5 /* Pods-MmkvStorageExample-MmkvStorageExampleTests.debug.xcconfig */, - 89C6BE57DB24E9ADA2F236DE /* Pods-MmkvStorageExample-MmkvStorageExampleTests.release.xcconfig */, - ); - path = Pods; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 00E356ED1AD99517003FC87E /* MmkvStorageExampleTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "MmkvStorageExampleTests" */; - buildPhases = ( - A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */, - 00E356EA1AD99517003FC87E /* Sources */, - 00E356EB1AD99517003FC87E /* Frameworks */, - 00E356EC1AD99517003FC87E /* Resources */, - C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */, - F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */, - ); - buildRules = ( - ); - dependencies = ( - 00E356F51AD99517003FC87E /* PBXTargetDependency */, - ); - name = MmkvStorageExampleTests; - productName = MmkvStorageExampleTests; - productReference = 00E356EE1AD99517003FC87E /* MmkvStorageExampleTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 13B07F861A680F5B00A75B9A /* MmkvStorageExample */ = { - isa = PBXNativeTarget; - buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "MmkvStorageExample" */; - buildPhases = ( - C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */, - 13B07F871A680F5B00A75B9A /* Sources */, - 13B07F8C1A680F5B00A75B9A /* Frameworks */, - 13B07F8E1A680F5B00A75B9A /* Resources */, - 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, - 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */, - E235C05ADACE081382539298 /* [CP] Copy Pods Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = MmkvStorageExample; - productName = MmkvStorageExample; - productReference = 13B07F961A680F5B00A75B9A /* MmkvStorageExample.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 83CBB9F71A601CBA00E9B192 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1210; - TargetAttributes = { - 00E356ED1AD99517003FC87E = { - CreatedOnToolsVersion = 6.2; - TestTargetID = 13B07F861A680F5B00A75B9A; - }; - 13B07F861A680F5B00A75B9A = { - LastSwiftMigration = 1120; - }; - }; - }; - buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "MmkvStorageExample" */; - compatibilityVersion = "Xcode 12.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 83CBB9F61A601CBA00E9B192; - productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 13B07F861A680F5B00A75B9A /* MmkvStorageExample */, - 00E356ED1AD99517003FC87E /* MmkvStorageExampleTests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 00E356EC1AD99517003FC87E /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 13B07F8E1A680F5B00A75B9A /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */, - 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, - D0A85D56BFA2DF0F0DBC974A /* PrivacyInfo.xcprivacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "$(SRCROOT)/.xcode.env.local", - "$(SRCROOT)/.xcode.env", - ); - name = "Bundle React Native code and images"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "set -e\n\nWITH_ENVIRONMENT=\"$REACT_NATIVE_PATH/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"$REACT_NATIVE_PATH/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n"; - }; - 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-MmkvStorageExample/Pods-MmkvStorageExample-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-MmkvStorageExample/Pods-MmkvStorageExample-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-MmkvStorageExample/Pods-MmkvStorageExample-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-MmkvStorageExample-MmkvStorageExampleTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-MmkvStorageExample-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-MmkvStorageExample-MmkvStorageExampleTests/Pods-MmkvStorageExample-MmkvStorageExampleTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-MmkvStorageExample-MmkvStorageExampleTests/Pods-MmkvStorageExample-MmkvStorageExampleTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-MmkvStorageExample-MmkvStorageExampleTests/Pods-MmkvStorageExample-MmkvStorageExampleTests-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-MmkvStorageExample/Pods-MmkvStorageExample-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-MmkvStorageExample/Pods-MmkvStorageExample-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-MmkvStorageExample/Pods-MmkvStorageExample-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-MmkvStorageExample-MmkvStorageExampleTests/Pods-MmkvStorageExample-MmkvStorageExampleTests-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-MmkvStorageExample-MmkvStorageExampleTests/Pods-MmkvStorageExample-MmkvStorageExampleTests-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-MmkvStorageExample-MmkvStorageExampleTests/Pods-MmkvStorageExample-MmkvStorageExampleTests-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 00E356EA1AD99517003FC87E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 00E356F31AD99517003FC87E /* MmkvStorageExampleTests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 13B07F871A680F5B00A75B9A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */, - 13B07FC11A68108700A75B9A /* main.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 00E356F51AD99517003FC87E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 13B07F861A680F5B00A75B9A /* MmkvStorageExample */; - targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 00E356F61AD99517003FC87E /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5B7EB9410499542E8C5724F5 /* Pods-MmkvStorageExample-MmkvStorageExampleTests.debug.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = MmkvStorageExampleTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.4; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - OTHER_LDFLAGS = ( - "-ObjC", - "-lc++", - "$(inherited)", - ); - PRODUCT_BUNDLE_IDENTIFIER = mmkvstorage.example; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MmkvStorageExample.app/MmkvStorageExample"; - }; - name = Debug; - }; - 00E356F71AD99517003FC87E /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 89C6BE57DB24E9ADA2F236DE /* Pods-MmkvStorageExample-MmkvStorageExampleTests.release.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - COPY_PHASE_STRIP = NO; - INFOPLIST_FILE = MmkvStorageExampleTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.4; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - OTHER_LDFLAGS = ( - "-ObjC", - "-lc++", - "$(inherited)", - ); - PRODUCT_BUNDLE_IDENTIFIER = mmkvstorage.example; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MmkvStorageExample.app/MmkvStorageExample"; - }; - name = Release; - }; - 13B07F941A680F5B00A75B9A /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-MmkvStorageExample.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 1; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = MmkvStorageExample/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-lc++", - ); - PRODUCT_BUNDLE_IDENTIFIER = mmkvstorage.example; - PRODUCT_NAME = MmkvStorageExample; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Debug; - }; - 13B07F951A680F5B00A75B9A /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-MmkvStorageExample.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 1; - INFOPLIST_FILE = MmkvStorageExample/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-lc++", - ); - PRODUCT_BUNDLE_IDENTIFIER = mmkvstorage.example; - PRODUCT_NAME = MmkvStorageExample; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Release; - }; - 83CBBA201A601CBA00E9B192 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++20"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.4; - LD_RUNPATH_SEARCH_PATHS = ( - /usr/lib/swift, - "$(inherited)", - ); - LIBRARY_SEARCH_PATHS = ( - "\"$(SDKROOT)/usr/lib/swift\"", - "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", - "\"$(inherited)\"", - ); - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "-DFOLLY_NO_CONFIG", - "-DFOLLY_MOBILE=1", - "-DFOLLY_USE_LIBCPP=1", - "-DFOLLY_CFG_NO_COROUTINES=1", - "-DFOLLY_HAVE_CLOCK_GETTIME=1", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - " ", - ); - REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; - USE_HERMES = true; - }; - name = Debug; - }; - 83CBBA211A601CBA00E9B192 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++20"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.4; - LD_RUNPATH_SEARCH_PATHS = ( - /usr/lib/swift, - "$(inherited)", - ); - LIBRARY_SEARCH_PATHS = ( - "\"$(SDKROOT)/usr/lib/swift\"", - "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", - "\"$(inherited)\"", - ); - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "-DFOLLY_NO_CONFIG", - "-DFOLLY_MOBILE=1", - "-DFOLLY_USE_LIBCPP=1", - "-DFOLLY_CFG_NO_COROUTINES=1", - "-DFOLLY_HAVE_CLOCK_GETTIME=1", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - " ", - ); - REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; - SDKROOT = iphoneos; - USE_HERMES = true; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "MmkvStorageExampleTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 00E356F61AD99517003FC87E /* Debug */, - 00E356F71AD99517003FC87E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "MmkvStorageExample" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 13B07F941A680F5B00A75B9A /* Debug */, - 13B07F951A680F5B00A75B9A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "MmkvStorageExample" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 83CBBA201A601CBA00E9B192 /* Debug */, - 83CBBA211A601CBA00E9B192 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; -} diff --git a/example/ios/MmkvStorageExample.xcodeproj/xcshareddata/xcschemes/MmkvStorageExample.xcscheme b/example/ios/MmkvStorageExample.xcodeproj/xcshareddata/xcschemes/MmkvStorageExample.xcscheme deleted file mode 100644 index 44233dc4..00000000 --- a/example/ios/MmkvStorageExample.xcodeproj/xcshareddata/xcschemes/MmkvStorageExample.xcscheme +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/ios/MmkvStorageExample.xcworkspace/contents.xcworkspacedata b/example/ios/MmkvStorageExample.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 5d527c53..00000000 --- a/example/ios/MmkvStorageExample.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/example/ios/MmkvStorageExample/AppDelegate.h b/example/ios/MmkvStorageExample/AppDelegate.h deleted file mode 100644 index 5d280825..00000000 --- a/example/ios/MmkvStorageExample/AppDelegate.h +++ /dev/null @@ -1,6 +0,0 @@ -#import -#import - -@interface AppDelegate : RCTAppDelegate - -@end diff --git a/example/ios/MmkvStorageExample/AppDelegate.mm b/example/ios/MmkvStorageExample/AppDelegate.mm deleted file mode 100644 index 7b4fef4f..00000000 --- a/example/ios/MmkvStorageExample/AppDelegate.mm +++ /dev/null @@ -1,31 +0,0 @@ -#import "AppDelegate.h" - -#import - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - self.moduleName = @"MmkvStorageExample"; - // You can add your custom initial props in the dictionary below. - // They will be passed down to the ViewController used by React Native. - self.initialProps = @{}; - - return [super application:application didFinishLaunchingWithOptions:launchOptions]; -} - -- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge -{ - return [self bundleURL]; -} - -- (NSURL *)bundleURL -{ -#if DEBUG - return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"]; -#else - return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; -#endif -} - -@end diff --git a/example/ios/MmkvStorageExample/Images.xcassets/AppIcon.appiconset/Contents.json b/example/ios/MmkvStorageExample/Images.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 81213230..00000000 --- a/example/ios/MmkvStorageExample/Images.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "20x20" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "20x20" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "29x29" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "29x29" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "40x40" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "40x40" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "60x60" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "60x60" - }, - { - "idiom" : "ios-marketing", - "scale" : "1x", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/example/ios/MmkvStorageExample/Images.xcassets/Contents.json b/example/ios/MmkvStorageExample/Images.xcassets/Contents.json deleted file mode 100644 index 2d92bd53..00000000 --- a/example/ios/MmkvStorageExample/Images.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/example/ios/MmkvStorageExample/Info.plist b/example/ios/MmkvStorageExample/Info.plist deleted file mode 100644 index 850e0e07..00000000 --- a/example/ios/MmkvStorageExample/Info.plist +++ /dev/null @@ -1,52 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - MmkvStorageExample - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - $(MARKETING_VERSION) - CFBundleSignature - ???? - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - LSRequiresIPhoneOS - - NSAppTransportSecurity - - - NSAllowsArbitraryLoads - - NSAllowsLocalNetworking - - - NSLocationWhenInUseUsageDescription - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - arm64 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - - - diff --git a/example/ios/MmkvStorageExample/LaunchScreen.storyboard b/example/ios/MmkvStorageExample/LaunchScreen.storyboard deleted file mode 100644 index 3282f230..00000000 --- a/example/ios/MmkvStorageExample/LaunchScreen.storyboard +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/ios/MmkvStorageExample/PrivacyInfo.xcprivacy b/example/ios/MmkvStorageExample/PrivacyInfo.xcprivacy deleted file mode 100644 index 41b8317f..00000000 --- a/example/ios/MmkvStorageExample/PrivacyInfo.xcprivacy +++ /dev/null @@ -1,37 +0,0 @@ - - - - - NSPrivacyAccessedAPITypes - - - NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategoryFileTimestamp - NSPrivacyAccessedAPITypeReasons - - C617.1 - - - - NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategoryUserDefaults - NSPrivacyAccessedAPITypeReasons - - CA92.1 - - - - NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategorySystemBootTime - NSPrivacyAccessedAPITypeReasons - - 35F9.1 - - - - NSPrivacyCollectedDataTypes - - NSPrivacyTracking - - - diff --git a/example/ios/MmkvStorageExample/main.m b/example/ios/MmkvStorageExample/main.m deleted file mode 100644 index d645c724..00000000 --- a/example/ios/MmkvStorageExample/main.m +++ /dev/null @@ -1,10 +0,0 @@ -#import - -#import "AppDelegate.h" - -int main(int argc, char *argv[]) -{ - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/example/ios/MmkvStorageExampleTests/Info.plist b/example/ios/MmkvStorageExampleTests/Info.plist deleted file mode 100644 index ba72822e..00000000 --- a/example/ios/MmkvStorageExampleTests/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/example/ios/MmkvStorageExampleTests/MmkvStorageExampleTests.m b/example/ios/MmkvStorageExampleTests/MmkvStorageExampleTests.m deleted file mode 100644 index 9fab4476..00000000 --- a/example/ios/MmkvStorageExampleTests/MmkvStorageExampleTests.m +++ /dev/null @@ -1,66 +0,0 @@ -#import -#import - -#import -#import - -#define TIMEOUT_SECONDS 600 -#define TEXT_TO_LOOK_FOR @"Welcome to React" - -@interface MmkvStorageExampleTests : XCTestCase - -@end - -@implementation MmkvStorageExampleTests - -- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL (^)(UIView *view))test -{ - if (test(view)) { - return YES; - } - for (UIView *subview in [view subviews]) { - if ([self findSubviewInView:subview matching:test]) { - return YES; - } - } - return NO; -} - -- (void)testRendersWelcomeScreen -{ - UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController]; - NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS]; - BOOL foundElement = NO; - - __block NSString *redboxError = nil; -#ifdef DEBUG - RCTSetLogFunction( - ^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) { - if (level >= RCTLogLevelError) { - redboxError = message; - } - }); -#endif - - while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) { - [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; - [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; - - foundElement = [self findSubviewInView:vc.view - matching:^BOOL(UIView *view) { - if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) { - return YES; - } - return NO; - }]; - } - -#ifdef DEBUG - RCTSetLogFunction(RCTDefaultLogFunction); -#endif - - XCTAssertNil(redboxError, @"RedBox error: %@", redboxError); - XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS); -} - -@end diff --git a/example/ios/Podfile b/example/ios/Podfile deleted file mode 100644 index e3fa55b8..00000000 --- a/example/ios/Podfile +++ /dev/null @@ -1,40 +0,0 @@ -# Resolve react_native_pods.rb with node to allow for hoisting -require Pod::Executable.execute_command('node', ['-p', - 'require.resolve( - "react-native/scripts/react_native_pods.rb", - {paths: [process.argv[1]]}, - )', __dir__]).strip - -platform :ios, min_ios_version_supported -prepare_react_native_project! - -linkage = ENV['USE_FRAMEWORKS'] -if linkage != nil - Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green - use_frameworks! :linkage => linkage.to_sym -end - -target 'MmkvStorageExample' do - config = use_native_modules! - - use_react_native!( - :path => config[:reactNativePath], - # An absolute path to your application root. - :app_path => "#{Pod::Config.instance.installation_root}/.." - ) - - target 'MmkvStorageExampleTests' do - inherit! :complete - # Pods for testing - end - - post_install do |installer| - # https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202 - react_native_post_install( - installer, - config[:reactNativePath], - :mac_catalyst_enabled => false, - # :ccache_enabled => true - ) - end -end diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock deleted file mode 100644 index 2a268544..00000000 --- a/example/ios/Podfile.lock +++ /dev/null @@ -1,1782 +0,0 @@ -PODS: - - boost (1.84.0) - - DoubleConversion (1.1.6) - - FBLazyVector (0.75.2) - - fmt (9.1.0) - - glog (0.3.5) - - hermes-engine (0.75.2): - - hermes-engine/Pre-built (= 0.75.2) - - hermes-engine/Pre-built (0.75.2) - - MMKV (1.3.9): - - MMKVCore (~> 1.3.9) - - MMKVCore (1.3.9) - - RCT-Folly (2024.01.01.00): - - boost - - DoubleConversion - - fmt (= 9.1.0) - - glog - - RCT-Folly/Default (= 2024.01.01.00) - - RCT-Folly/Default (2024.01.01.00): - - boost - - DoubleConversion - - fmt (= 9.1.0) - - glog - - RCT-Folly/Fabric (2024.01.01.00): - - boost - - DoubleConversion - - fmt (= 9.1.0) - - glog - - RCTDeprecation (0.75.2) - - RCTRequired (0.75.2) - - RCTTypeSafety (0.75.2): - - FBLazyVector (= 0.75.2) - - RCTRequired (= 0.75.2) - - React-Core (= 0.75.2) - - React (0.75.2): - - React-Core (= 0.75.2) - - React-Core/DevSupport (= 0.75.2) - - React-Core/RCTWebSocket (= 0.75.2) - - React-RCTActionSheet (= 0.75.2) - - React-RCTAnimation (= 0.75.2) - - React-RCTBlob (= 0.75.2) - - React-RCTImage (= 0.75.2) - - React-RCTLinking (= 0.75.2) - - React-RCTNetwork (= 0.75.2) - - React-RCTSettings (= 0.75.2) - - React-RCTText (= 0.75.2) - - React-RCTVibration (= 0.75.2) - - React-callinvoker (0.75.2) - - React-Core (0.75.2): - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - RCTDeprecation - - React-Core/Default (= 0.75.2) - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket (= 0.7.0) - - Yoga - - React-Core/CoreModulesHeaders (0.75.2): - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket (= 0.7.0) - - Yoga - - React-Core/Default (0.75.2): - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - RCTDeprecation - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket (= 0.7.0) - - Yoga - - React-Core/DevSupport (0.75.2): - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - RCTDeprecation - - React-Core/Default (= 0.75.2) - - React-Core/RCTWebSocket (= 0.75.2) - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket (= 0.7.0) - - Yoga - - React-Core/RCTActionSheetHeaders (0.75.2): - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket (= 0.7.0) - - Yoga - - React-Core/RCTAnimationHeaders (0.75.2): - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket (= 0.7.0) - - Yoga - - React-Core/RCTBlobHeaders (0.75.2): - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket (= 0.7.0) - - Yoga - - React-Core/RCTImageHeaders (0.75.2): - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket (= 0.7.0) - - Yoga - - React-Core/RCTLinkingHeaders (0.75.2): - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket (= 0.7.0) - - Yoga - - React-Core/RCTNetworkHeaders (0.75.2): - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket (= 0.7.0) - - Yoga - - React-Core/RCTSettingsHeaders (0.75.2): - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket (= 0.7.0) - - Yoga - - React-Core/RCTTextHeaders (0.75.2): - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket (= 0.7.0) - - Yoga - - React-Core/RCTVibrationHeaders (0.75.2): - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket (= 0.7.0) - - Yoga - - React-Core/RCTWebSocket (0.75.2): - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - RCTDeprecation - - React-Core/Default (= 0.75.2) - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket (= 0.7.0) - - Yoga - - React-CoreModules (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - RCT-Folly (= 2024.01.01.00) - - RCTTypeSafety (= 0.75.2) - - React-Core/CoreModulesHeaders (= 0.75.2) - - React-jsi (= 0.75.2) - - React-jsinspector - - React-NativeModulesApple - - React-RCTBlob - - React-RCTImage (= 0.75.2) - - ReactCodegen - - ReactCommon - - SocketRocket (= 0.7.0) - - React-cxxreact (0.75.2): - - boost - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.75.2) - - React-debug (= 0.75.2) - - React-jsi (= 0.75.2) - - React-jsinspector - - React-logger (= 0.75.2) - - React-perflogger (= 0.75.2) - - React-runtimeexecutor (= 0.75.2) - - React-debug (0.75.2) - - React-defaultsnativemodule (0.75.2): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-domnativemodule - - React-Fabric - - React-featureflags - - React-featureflagsnativemodule - - React-graphics - - React-idlecallbacksnativemodule - - React-ImageManager - - React-microtasksnativemodule - - React-NativeModulesApple - - React-RCTFabric - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - Yoga - - React-domnativemodule (0.75.2): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-FabricComponents - - React-featureflags - - React-graphics - - React-ImageManager - - React-NativeModulesApple - - React-RCTFabric - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - Yoga - - React-Fabric (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric/animations (= 0.75.2) - - React-Fabric/attributedstring (= 0.75.2) - - React-Fabric/componentregistry (= 0.75.2) - - React-Fabric/componentregistrynative (= 0.75.2) - - React-Fabric/components (= 0.75.2) - - React-Fabric/core (= 0.75.2) - - React-Fabric/dom (= 0.75.2) - - React-Fabric/imagemanager (= 0.75.2) - - React-Fabric/leakchecker (= 0.75.2) - - React-Fabric/mounting (= 0.75.2) - - React-Fabric/observers (= 0.75.2) - - React-Fabric/scheduler (= 0.75.2) - - React-Fabric/telemetry (= 0.75.2) - - React-Fabric/templateprocessor (= 0.75.2) - - React-Fabric/uimanager (= 0.75.2) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/animations (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/attributedstring (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/componentregistry (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/componentregistrynative (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/components (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.75.2) - - React-Fabric/components/root (= 0.75.2) - - React-Fabric/components/view (= 0.75.2) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/components/legacyviewmanagerinterop (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/components/root (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/components/view (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - Yoga - - React-Fabric/core (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/dom (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/imagemanager (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/leakchecker (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/mounting (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/observers (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric/observers/events (= 0.75.2) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/observers/events (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/scheduler (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric/observers/events - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-performancetimeline - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/telemetry (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/templateprocessor (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/uimanager (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric/uimanager/consistency (= 0.75.2) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererconsistency - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/uimanager/consistency (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererconsistency - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-FabricComponents (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-FabricComponents/components (= 0.75.2) - - React-FabricComponents/textlayoutmanager (= 0.75.2) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/core - - Yoga - - React-FabricComponents/components (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.75.2) - - React-FabricComponents/components/iostextinput (= 0.75.2) - - React-FabricComponents/components/modal (= 0.75.2) - - React-FabricComponents/components/rncore (= 0.75.2) - - React-FabricComponents/components/safeareaview (= 0.75.2) - - React-FabricComponents/components/scrollview (= 0.75.2) - - React-FabricComponents/components/text (= 0.75.2) - - React-FabricComponents/components/textinput (= 0.75.2) - - React-FabricComponents/components/unimplementedview (= 0.75.2) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/core - - Yoga - - React-FabricComponents/components/inputaccessory (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/core - - Yoga - - React-FabricComponents/components/iostextinput (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/core - - Yoga - - React-FabricComponents/components/modal (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/core - - Yoga - - React-FabricComponents/components/rncore (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/core - - Yoga - - React-FabricComponents/components/safeareaview (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/core - - Yoga - - React-FabricComponents/components/scrollview (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/core - - Yoga - - React-FabricComponents/components/text (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/core - - Yoga - - React-FabricComponents/components/textinput (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/core - - Yoga - - React-FabricComponents/components/unimplementedview (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/core - - Yoga - - React-FabricComponents/textlayoutmanager (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/core - - Yoga - - React-FabricImage (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired (= 0.75.2) - - RCTTypeSafety (= 0.75.2) - - React-Fabric - - React-graphics - - React-ImageManager - - React-jsi - - React-jsiexecutor (= 0.75.2) - - React-logger - - React-rendererdebug - - React-utils - - ReactCommon - - Yoga - - React-featureflags (0.75.2) - - React-featureflagsnativemodule (0.75.2): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-NativeModulesApple - - React-RCTFabric - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - Yoga - - React-graphics (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - RCT-Folly/Fabric (= 2024.01.01.00) - - React-jsi - - React-jsiexecutor - - React-utils - - React-hermes (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-cxxreact (= 0.75.2) - - React-jsi - - React-jsiexecutor (= 0.75.2) - - React-jsinspector - - React-perflogger (= 0.75.2) - - React-runtimeexecutor - - React-idlecallbacksnativemodule (0.75.2): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-NativeModulesApple - - React-RCTFabric - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - Yoga - - React-ImageManager (0.75.2): - - glog - - RCT-Folly/Fabric - - React-Core/Default - - React-debug - - React-Fabric - - React-graphics - - React-rendererdebug - - React-utils - - React-jserrorhandler (0.75.2): - - RCT-Folly/Fabric (= 2024.01.01.00) - - React-debug - - React-jsi - - React-jsi (0.75.2): - - boost - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-jsiexecutor (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-cxxreact (= 0.75.2) - - React-jsi (= 0.75.2) - - React-jsinspector - - React-perflogger (= 0.75.2) - - React-jsinspector (0.75.2): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-featureflags - - React-jsi - - React-runtimeexecutor (= 0.75.2) - - React-jsitracing (0.75.2): - - React-jsi - - React-logger (0.75.2): - - glog - - React-Mapbuffer (0.75.2): - - glog - - React-debug - - React-microtasksnativemodule (0.75.2): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-NativeModulesApple - - React-RCTFabric - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - Yoga - - react-native-mmkv-storage (0.10.3): - - MMKV (~> 1.3.9) - - React - - React-Core - - React-nativeconfig (0.75.2) - - React-NativeModulesApple (0.75.2): - - glog - - hermes-engine - - React-callinvoker - - React-Core - - React-cxxreact - - React-jsi - - React-jsinspector - - React-runtimeexecutor - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - React-perflogger (0.75.2) - - React-performancetimeline (0.75.2): - - RCT-Folly (= 2024.01.01.00) - - React-cxxreact - - React-RCTActionSheet (0.75.2): - - React-Core/RCTActionSheetHeaders (= 0.75.2) - - React-RCTAnimation (0.75.2): - - RCT-Folly (= 2024.01.01.00) - - RCTTypeSafety - - React-Core/RCTAnimationHeaders - - React-jsi - - React-NativeModulesApple - - ReactCodegen - - ReactCommon - - React-RCTAppDelegate (0.75.2): - - RCT-Folly (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-CoreModules - - React-debug - - React-defaultsnativemodule - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-nativeconfig - - React-NativeModulesApple - - React-RCTFabric - - React-RCTImage - - React-RCTNetwork - - React-rendererdebug - - React-RuntimeApple - - React-RuntimeCore - - React-RuntimeHermes - - React-runtimescheduler - - React-utils - - ReactCodegen - - ReactCommon - - React-RCTBlob (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-Core/RCTBlobHeaders - - React-Core/RCTWebSocket - - React-jsi - - React-jsinspector - - React-NativeModulesApple - - React-RCTNetwork - - ReactCodegen - - ReactCommon - - React-RCTFabric (0.75.2): - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - React-Core - - React-debug - - React-Fabric - - React-FabricComponents - - React-FabricImage - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-jsinspector - - React-nativeconfig - - React-performancetimeline - - React-RCTImage - - React-RCTText - - React-rendererconsistency - - React-rendererdebug - - React-runtimescheduler - - React-utils - - Yoga - - React-RCTImage (0.75.2): - - RCT-Folly (= 2024.01.01.00) - - RCTTypeSafety - - React-Core/RCTImageHeaders - - React-jsi - - React-NativeModulesApple - - React-RCTNetwork - - ReactCodegen - - ReactCommon - - React-RCTLinking (0.75.2): - - React-Core/RCTLinkingHeaders (= 0.75.2) - - React-jsi (= 0.75.2) - - React-NativeModulesApple - - ReactCodegen - - ReactCommon - - ReactCommon/turbomodule/core (= 0.75.2) - - React-RCTNetwork (0.75.2): - - RCT-Folly (= 2024.01.01.00) - - RCTTypeSafety - - React-Core/RCTNetworkHeaders - - React-jsi - - React-NativeModulesApple - - ReactCodegen - - ReactCommon - - React-RCTSettings (0.75.2): - - RCT-Folly (= 2024.01.01.00) - - RCTTypeSafety - - React-Core/RCTSettingsHeaders - - React-jsi - - React-NativeModulesApple - - ReactCodegen - - ReactCommon - - React-RCTText (0.75.2): - - React-Core/RCTTextHeaders (= 0.75.2) - - Yoga - - React-RCTVibration (0.75.2): - - RCT-Folly (= 2024.01.01.00) - - React-Core/RCTVibrationHeaders - - React-jsi - - React-NativeModulesApple - - ReactCodegen - - ReactCommon - - React-rendererconsistency (0.75.2) - - React-rendererdebug (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - RCT-Folly (= 2024.01.01.00) - - React-debug - - React-rncore (0.75.2) - - React-RuntimeApple (0.75.2): - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - React-callinvoker - - React-Core/Default - - React-CoreModules - - React-cxxreact - - React-jserrorhandler - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-Mapbuffer - - React-NativeModulesApple - - React-RCTFabric - - React-RuntimeCore - - React-runtimeexecutor - - React-RuntimeHermes - - React-runtimescheduler - - React-utils - - React-RuntimeCore (0.75.2): - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - React-cxxreact - - React-featureflags - - React-jserrorhandler - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - React-runtimeexecutor (0.75.2): - - React-jsi (= 0.75.2) - - React-RuntimeHermes (0.75.2): - - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - React-featureflags - - React-hermes - - React-jsi - - React-jsinspector - - React-jsitracing - - React-nativeconfig - - React-RuntimeCore - - React-utils - - React-runtimescheduler (0.75.2): - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-callinvoker - - React-cxxreact - - React-debug - - React-featureflags - - React-jsi - - React-rendererconsistency - - React-rendererdebug - - React-runtimeexecutor - - React-utils - - React-utils (0.75.2): - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-debug - - React-jsi (= 0.75.2) - - ReactCodegen (0.75.2): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-FabricImage - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-NativeModulesApple - - React-rendererdebug - - React-utils - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - ReactCommon (0.75.2): - - ReactCommon/turbomodule (= 0.75.2) - - ReactCommon/turbomodule (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.75.2) - - React-cxxreact (= 0.75.2) - - React-jsi (= 0.75.2) - - React-logger (= 0.75.2) - - React-perflogger (= 0.75.2) - - ReactCommon/turbomodule/bridging (= 0.75.2) - - ReactCommon/turbomodule/core (= 0.75.2) - - ReactCommon/turbomodule/bridging (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.75.2) - - React-cxxreact (= 0.75.2) - - React-jsi (= 0.75.2) - - React-logger (= 0.75.2) - - React-perflogger (= 0.75.2) - - ReactCommon/turbomodule/core (0.75.2): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.75.2) - - React-cxxreact (= 0.75.2) - - React-debug (= 0.75.2) - - React-featureflags (= 0.75.2) - - React-jsi (= 0.75.2) - - React-logger (= 0.75.2) - - React-perflogger (= 0.75.2) - - React-utils (= 0.75.2) - - SocketRocket (0.7.0) - - Yoga (0.0.0) - -DEPENDENCIES: - - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) - - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) - - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`) - - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) - - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) - - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - - RCT-Folly/Fabric (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - - RCTDeprecation (from `../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) - - RCTRequired (from `../node_modules/react-native/Libraries/Required`) - - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) - - React (from `../node_modules/react-native/`) - - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) - - React-Core (from `../node_modules/react-native/`) - - React-Core/RCTWebSocket (from `../node_modules/react-native/`) - - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) - - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) - - React-debug (from `../node_modules/react-native/ReactCommon/react/debug`) - - React-defaultsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/defaults`) - - React-domnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/dom`) - - React-Fabric (from `../node_modules/react-native/ReactCommon`) - - React-FabricComponents (from `../node_modules/react-native/ReactCommon`) - - React-FabricImage (from `../node_modules/react-native/ReactCommon`) - - React-featureflags (from `../node_modules/react-native/ReactCommon/react/featureflags`) - - React-featureflagsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/featureflags`) - - React-graphics (from `../node_modules/react-native/ReactCommon/react/renderer/graphics`) - - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) - - React-idlecallbacksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks`) - - React-ImageManager (from `../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios`) - - React-jserrorhandler (from `../node_modules/react-native/ReactCommon/jserrorhandler`) - - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) - - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) - - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector-modern`) - - React-jsitracing (from `../node_modules/react-native/ReactCommon/hermes/executor/`) - - React-logger (from `../node_modules/react-native/ReactCommon/logger`) - - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`) - - React-microtasksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`) - - react-native-mmkv-storage (from `../..`) - - React-nativeconfig (from `../node_modules/react-native/ReactCommon`) - - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) - - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) - - React-performancetimeline (from `../node_modules/react-native/ReactCommon/react/performance/timeline`) - - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) - - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) - - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`) - - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) - - React-RCTFabric (from `../node_modules/react-native/React`) - - React-RCTImage (from `../node_modules/react-native/Libraries/Image`) - - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) - - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`) - - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) - - React-RCTText (from `../node_modules/react-native/Libraries/Text`) - - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) - - React-rendererconsistency (from `../node_modules/react-native/ReactCommon/react/renderer/consistency`) - - React-rendererdebug (from `../node_modules/react-native/ReactCommon/react/renderer/debug`) - - React-rncore (from `../node_modules/react-native/ReactCommon`) - - React-RuntimeApple (from `../node_modules/react-native/ReactCommon/react/runtime/platform/ios`) - - React-RuntimeCore (from `../node_modules/react-native/ReactCommon/react/runtime`) - - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) - - React-RuntimeHermes (from `../node_modules/react-native/ReactCommon/react/runtime`) - - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) - - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`) - - ReactCodegen (from `build/generated/ios`) - - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) - -SPEC REPOS: - trunk: - - MMKV - - MMKVCore - - SocketRocket - -EXTERNAL SOURCES: - boost: - :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" - DoubleConversion: - :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" - FBLazyVector: - :path: "../node_modules/react-native/Libraries/FBLazyVector" - fmt: - :podspec: "../node_modules/react-native/third-party-podspecs/fmt.podspec" - glog: - :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" - hermes-engine: - :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" - :tag: hermes-2024-08-15-RNv0.75.1-4b3bf912cc0f705b51b71ce1a5b8bd79b93a451b - RCT-Folly: - :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" - RCTDeprecation: - :path: "../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation" - RCTRequired: - :path: "../node_modules/react-native/Libraries/Required" - RCTTypeSafety: - :path: "../node_modules/react-native/Libraries/TypeSafety" - React: - :path: "../node_modules/react-native/" - React-callinvoker: - :path: "../node_modules/react-native/ReactCommon/callinvoker" - React-Core: - :path: "../node_modules/react-native/" - React-CoreModules: - :path: "../node_modules/react-native/React/CoreModules" - React-cxxreact: - :path: "../node_modules/react-native/ReactCommon/cxxreact" - React-debug: - :path: "../node_modules/react-native/ReactCommon/react/debug" - React-defaultsnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/defaults" - React-domnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/dom" - React-Fabric: - :path: "../node_modules/react-native/ReactCommon" - React-FabricComponents: - :path: "../node_modules/react-native/ReactCommon" - React-FabricImage: - :path: "../node_modules/react-native/ReactCommon" - React-featureflags: - :path: "../node_modules/react-native/ReactCommon/react/featureflags" - React-featureflagsnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/featureflags" - React-graphics: - :path: "../node_modules/react-native/ReactCommon/react/renderer/graphics" - React-hermes: - :path: "../node_modules/react-native/ReactCommon/hermes" - React-idlecallbacksnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks" - React-ImageManager: - :path: "../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios" - React-jserrorhandler: - :path: "../node_modules/react-native/ReactCommon/jserrorhandler" - React-jsi: - :path: "../node_modules/react-native/ReactCommon/jsi" - React-jsiexecutor: - :path: "../node_modules/react-native/ReactCommon/jsiexecutor" - React-jsinspector: - :path: "../node_modules/react-native/ReactCommon/jsinspector-modern" - React-jsitracing: - :path: "../node_modules/react-native/ReactCommon/hermes/executor/" - React-logger: - :path: "../node_modules/react-native/ReactCommon/logger" - React-Mapbuffer: - :path: "../node_modules/react-native/ReactCommon" - React-microtasksnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/microtasks" - react-native-mmkv-storage: - :path: "../.." - React-nativeconfig: - :path: "../node_modules/react-native/ReactCommon" - React-NativeModulesApple: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios" - React-perflogger: - :path: "../node_modules/react-native/ReactCommon/reactperflogger" - React-performancetimeline: - :path: "../node_modules/react-native/ReactCommon/react/performance/timeline" - React-RCTActionSheet: - :path: "../node_modules/react-native/Libraries/ActionSheetIOS" - React-RCTAnimation: - :path: "../node_modules/react-native/Libraries/NativeAnimation" - React-RCTAppDelegate: - :path: "../node_modules/react-native/Libraries/AppDelegate" - React-RCTBlob: - :path: "../node_modules/react-native/Libraries/Blob" - React-RCTFabric: - :path: "../node_modules/react-native/React" - React-RCTImage: - :path: "../node_modules/react-native/Libraries/Image" - React-RCTLinking: - :path: "../node_modules/react-native/Libraries/LinkingIOS" - React-RCTNetwork: - :path: "../node_modules/react-native/Libraries/Network" - React-RCTSettings: - :path: "../node_modules/react-native/Libraries/Settings" - React-RCTText: - :path: "../node_modules/react-native/Libraries/Text" - React-RCTVibration: - :path: "../node_modules/react-native/Libraries/Vibration" - React-rendererconsistency: - :path: "../node_modules/react-native/ReactCommon/react/renderer/consistency" - React-rendererdebug: - :path: "../node_modules/react-native/ReactCommon/react/renderer/debug" - React-rncore: - :path: "../node_modules/react-native/ReactCommon" - React-RuntimeApple: - :path: "../node_modules/react-native/ReactCommon/react/runtime/platform/ios" - React-RuntimeCore: - :path: "../node_modules/react-native/ReactCommon/react/runtime" - React-runtimeexecutor: - :path: "../node_modules/react-native/ReactCommon/runtimeexecutor" - React-RuntimeHermes: - :path: "../node_modules/react-native/ReactCommon/react/runtime" - React-runtimescheduler: - :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler" - React-utils: - :path: "../node_modules/react-native/ReactCommon/react/utils" - ReactCodegen: - :path: build/generated/ios - ReactCommon: - :path: "../node_modules/react-native/ReactCommon" - Yoga: - :path: "../node_modules/react-native/ReactCommon/yoga" - -SPEC CHECKSUMS: - boost: 4cb898d0bf20404aab1850c656dcea009429d6c1 - DoubleConversion: 76ab83afb40bddeeee456813d9c04f67f78771b5 - FBLazyVector: 38bb611218305c3bc61803e287b8a81c6f63b619 - fmt: 4c2741a687cc09f0634a2e2c72a838b99f1ff120 - glog: 69ef571f3de08433d766d614c73a9838a06bf7eb - hermes-engine: 3b6e0717ca847e2fc90a201e59db36caf04dee88 - MMKV: 817ba1eea17421547e01e087285606eb270a8dcb - MMKVCore: af055b00e27d88cd92fad301c5fecd1ff9b26dd9 - RCT-Folly: 4464f4d875961fce86008d45f4ecf6cef6de0740 - RCTDeprecation: 34cbf122b623037ea9facad2e92e53434c5c7422 - RCTRequired: 24c446d7bcd0f517d516b6265d8df04dc3eb1219 - RCTTypeSafety: ef5e91bd791abd3a99b2c75fd565791102a66352 - React: 643f06bc294806d2db2526b424fdf759e107f514 - React-callinvoker: 34d1fa0c340104f324e2521f546196beb44dfad2 - React-Core: facd883836d8d1cc1949d2053c58eab5fb22eb75 - React-CoreModules: f92a2cb11d22f6066823ca547c61e900325dfe44 - React-cxxreact: f5595a4cbfe5a4e9d401dffa2c1c78bbbbbe75e4 - React-debug: 4a91c177b5b2efcc546fb50bc2f676f3f589efab - React-defaultsnativemodule: bb94c3db425b01c760f41a253de8536b3f5497f0 - React-domnativemodule: 6c581fd39812cafb024171e091c00905b2c3a3e2 - React-Fabric: a33cc1fdc62a3085774783bb30970531589d2028 - React-FabricComponents: 98de5f94cbd35d407f4fc78855298b562d8289cb - React-FabricImage: 0ce8fd83844d9edef5825116d38f0e208b9ad786 - React-featureflags: 37a78859ad71db758e2efdcbdb7384afefa8701e - React-featureflagsnativemodule: 52b46e161a151b4653cf1762285e8e899d534e3f - React-graphics: c16f1bab97a5d473831a79360d84300e93a614e5 - React-hermes: 7801f8c0e12f326524b461dc368d3e74f3d2a385 - React-idlecallbacksnativemodule: 58de2ac968ee80947d19dc8fe20def607e5c2de8 - React-ImageManager: 98a1e5b0b05528dde47ebcd953d916ac66d46c09 - React-jserrorhandler: 08f1c3465a71a6549c27ad82809ce145ad52d4f1 - React-jsi: 161428ab2c706d5fcd9878d260ff1513fdb356ab - React-jsiexecutor: abfdc7526151c6755f836235bbaa53b267a0803c - React-jsinspector: f0786053a1a258a4d8dde859d1a820c26ee686f0 - React-jsitracing: 52b849a77d02e2dc262a3031454c23be8dabb4d9 - React-logger: 8db32983d75dc2ad54f278f344ccb9b256e694fc - React-Mapbuffer: 1c08607305558666fd16678b85ef135e455d5c96 - React-microtasksnativemodule: 87b8de96f937faefece8afd2cb3a518321b2ef99 - react-native-mmkv-storage: 36fcafe92a2c4cf19bce96be0b5d587f7a62a2c6 - React-nativeconfig: 57781b79e11d5af7573e6f77cbf1143b71802a6d - React-NativeModulesApple: 7ff2e2cfb2e5fa5bdedcecf28ce37e696c6ef1e1 - React-perflogger: 8a360ccf603de6ddbe9ff8f54383146d26e6c936 - React-performancetimeline: 3cfec915adcb3653a5a633b41e711903844c35d8 - React-RCTActionSheet: 1c0e26a88eec41215089cf4436e38188cfe9f01a - React-RCTAnimation: d87207841b1e2ae1389e684262ea8c73c887cb04 - React-RCTAppDelegate: 4ec7824c0cc9cc4b146ca8ee0fd81b10c316a440 - React-RCTBlob: 79b42cb7db55f34079297687a480dbcf37f023f6 - React-RCTFabric: 1dd1661db93716f8cb116e451bd9c211a8d15716 - React-RCTImage: 0c10a75de59f7384a2a55545d5f36fe783e6ecda - React-RCTLinking: bf08f4f655bf777af292b8d97449072c8bb196ca - React-RCTNetwork: 1b690846b40fc5685af58e088720657db6814637 - React-RCTSettings: 097e420926dd44153fb25174835b572aded224d6 - React-RCTText: d8fe2ae9f95b2ccd03b2f534286e938254791992 - React-RCTVibration: 976466dba32c0981a836e45ce38bcd4c8d6d924e - React-rendererconsistency: ee0d6f1b4420e1ad5bb01c02170e7ecbd278e307 - React-rendererdebug: 7fbf02f30d1e0bb0d96d65cf2548219cb53b29b6 - React-rncore: 7ffc5be03adbf0a5cbf1b654483f487a899cff08 - React-RuntimeApple: e623f002e1871de30a443291171d3f2fb134a6ec - React-RuntimeCore: a67357d4f073b1dbe6fbefc5273072027f201e1c - React-runtimeexecutor: 5bb52479abf8081086afb0397dc33dc97202a439 - React-RuntimeHermes: 860cf64708a12a2fa62366fe51fe000121fa031b - React-runtimescheduler: fff88d51ad2c8815fc75930dbac224d680593e6b - React-utils: 81a715d9c0a2a49047e77a86f3a2247408540deb - ReactCodegen: 60973d382704c793c605b9be0fc7f31cb279442f - ReactCommon: 6ef348087d250257c44c0204461c03f036650e9b - SocketRocket: abac6f5de4d4d62d24e11868d7a2f427e0ef940d - Yoga: 2a45d7e59592db061217551fd3bbe2dd993817ae - -PODFILE CHECKSUM: d997fd4d3054f22ed970ca88a192a8ce7d261e41 - -COCOAPODS: 1.15.2 diff --git a/example/jest.config.js b/example/jest.config.js deleted file mode 100644 index 8eb675e9..00000000 --- a/example/jest.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - preset: 'react-native', -}; diff --git a/example/metro.config.js b/example/metro.config.js deleted file mode 100644 index 0117c04d..00000000 --- a/example/metro.config.js +++ /dev/null @@ -1,40 +0,0 @@ -const path = require('path'); -const { getDefaultConfig } = require('@react-native/metro-config'); -const { getConfig } = require('react-native-builder-bob/metro-config'); -const pkg = require('../package.json'); -const root = path.resolve(__dirname, '..'); - -const config = getConfig(getDefaultConfig(__dirname), { - root, - pkg, - project: __dirname -}); - -/** - * Metro configuration - * https://facebook.github.io/metro/docs/configuration - * - * @type {import('metro-config').MetroConfig} - */ -module.exports = { - ...config, - resolver: { - ...config.resolver, - resolveRequest: (context, moduleName, platform) => { - if (moduleName === 'react') { - return { - filePath: path.resolve(path.join(__dirname, '../node_modules', 'react', 'index.js')), - type: 'sourceFile' - }; - } - - if (moduleName === pkg.name) { - return { - filePath: path.resolve(path.join(__dirname, '../dist', 'index.js')), - type: 'sourceFile' - }; - } - return context.resolveRequest(context, moduleName, platform); - } - } -}; diff --git a/example/package-lock.json b/example/package-lock.json deleted file mode 100644 index f97bcb1f..00000000 --- a/example/package-lock.json +++ /dev/null @@ -1,8990 +0,0 @@ -{ - "name": "react-native-mmkv-storage-example", - "version": "0.0.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "react-native-mmkv-storage-example", - "version": "0.0.1", - "dependencies": { - "react": "18.3.1", - "react-native": "0.75.2" - }, - "devDependencies": { - "@babel/core": "^7.20.0", - "@babel/preset-env": "^7.20.0", - "@babel/runtime": "^7.20.0", - "@react-native/babel-preset": "0.75.2", - "@react-native/metro-config": "0.75.2", - "@react-native/typescript-config": "0.75.2", - "@tsconfig/react-native": "3.0.5", - "react-native-builder-bob": "^0.30.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", - "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", - "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", - "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-module-transforms": "^7.25.2", - "@babel/helpers": "^7.25.0", - "@babel/parser": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.2", - "@babel/types": "^7.25.2", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", - "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", - "dependencies": { - "@babel/types": "^7.25.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", - "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", - "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", - "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz", - "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/traverse": "^7.25.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", - "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", - "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", - "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", - "dependencies": { - "@babel/traverse": "^7.24.8", - "@babel/types": "^7.24.8" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", - "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", - "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", - "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", - "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", - "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-wrap-function": "^7.25.0", - "@babel/traverse": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", - "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/traverse": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", - "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", - "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", - "dependencies": { - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.0", - "@babel/types": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", - "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", - "dependencies": { - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", - "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", - "dependencies": { - "@babel/types": "^7.25.2" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", - "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz", - "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", - "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", - "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", - "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-default-from": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.24.7.tgz", - "integrity": "sha512-CcmFwUJ3tKhLjPdt4NP+SHMshebytF8ZTYOv5ZDpkzq2sin80Wb5vJrGt8fhPrORQCfoSa0LAxC/DW+GAC5+Hw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-export-default-from": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "engines": { - "node": ">=6.9.0" - }, - "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-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "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.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.24.7.tgz", - "integrity": "sha512-bTPz4/635WQ9WhwsyPdxUJDVpsi/X9BMmy/8Rf/UAlOO4jSql4CxUCjWI5PiM+jG+c4LVPTScoTw80geFj9+Bw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "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.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.7.tgz", - "integrity": "sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", - "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", - "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "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.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", - "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "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-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", - "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", - "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz", - "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-remap-async-to-generator": "^7.25.0", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/traverse": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", - "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", - "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-remap-async-to-generator": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", - "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", - "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", - "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", - "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz", - "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/traverse": "^7.25.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", - "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/template": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", - "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", - "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", - "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz", - "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", - "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", - "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", - "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.2.tgz", - "integrity": "sha512-InBZ0O8tew5V0K6cHcQ+wgxlrjOw1W4wDXLkOTjLRD8GYhTSkxTVBtdy3MMtvYBrbAWa1Qm3hNoTc1620Yj+Mg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/plugin-syntax-flow": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", - "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", - "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", - "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", - "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", - "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", - "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", - "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", - "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", - "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", - "dependencies": { - "@babel/helper-module-transforms": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-simple-access": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", - "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", - "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", - "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", - "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", - "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", - "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", - "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", - "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", - "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-replace-supers": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", - "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", - "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", - "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", - "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", - "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", - "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz", - "integrity": "sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz", - "integrity": "sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/plugin-syntax-jsx": "^7.24.7", - "@babel/types": "^7.25.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz", - "integrity": "sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==", - "dev": true, - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz", - "integrity": "sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz", - "integrity": "sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz", - "integrity": "sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", - "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", - "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz", - "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==", - "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.1", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", - "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", - "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", - "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-strict-mode": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-strict-mode/-/plugin-transform-strict-mode-7.24.7.tgz", - "integrity": "sha512-EcO8qA8P8VpPhzjeZoxf3FwLkov0o3SQ0Sc2bjCGYlkFdvx6aNawk6HvneO1kU4Q8/wX5OnDVsogsXAe9xnBag==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", - "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", - "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz", - "integrity": "sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-create-class-features-plugin": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-syntax-typescript": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", - "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", - "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", - "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", - "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz", - "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==", - "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-validator-option": "^7.24.8", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.24.7", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.24.7", - "@babel/plugin-transform-async-generator-functions": "^7.25.0", - "@babel/plugin-transform-async-to-generator": "^7.24.7", - "@babel/plugin-transform-block-scoped-functions": "^7.24.7", - "@babel/plugin-transform-block-scoping": "^7.25.0", - "@babel/plugin-transform-class-properties": "^7.24.7", - "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.25.0", - "@babel/plugin-transform-computed-properties": "^7.24.7", - "@babel/plugin-transform-destructuring": "^7.24.8", - "@babel/plugin-transform-dotall-regex": "^7.24.7", - "@babel/plugin-transform-duplicate-keys": "^7.24.7", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", - "@babel/plugin-transform-dynamic-import": "^7.24.7", - "@babel/plugin-transform-exponentiation-operator": "^7.24.7", - "@babel/plugin-transform-export-namespace-from": "^7.24.7", - "@babel/plugin-transform-for-of": "^7.24.7", - "@babel/plugin-transform-function-name": "^7.25.1", - "@babel/plugin-transform-json-strings": "^7.24.7", - "@babel/plugin-transform-literals": "^7.25.2", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", - "@babel/plugin-transform-member-expression-literals": "^7.24.7", - "@babel/plugin-transform-modules-amd": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.8", - "@babel/plugin-transform-modules-systemjs": "^7.25.0", - "@babel/plugin-transform-modules-umd": "^7.24.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", - "@babel/plugin-transform-new-target": "^7.24.7", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", - "@babel/plugin-transform-numeric-separator": "^7.24.7", - "@babel/plugin-transform-object-rest-spread": "^7.24.7", - "@babel/plugin-transform-object-super": "^7.24.7", - "@babel/plugin-transform-optional-catch-binding": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.8", - "@babel/plugin-transform-parameters": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.24.7", - "@babel/plugin-transform-private-property-in-object": "^7.24.7", - "@babel/plugin-transform-property-literals": "^7.24.7", - "@babel/plugin-transform-regenerator": "^7.24.7", - "@babel/plugin-transform-reserved-words": "^7.24.7", - "@babel/plugin-transform-shorthand-properties": "^7.24.7", - "@babel/plugin-transform-spread": "^7.24.7", - "@babel/plugin-transform-sticky-regex": "^7.24.7", - "@babel/plugin-transform-template-literals": "^7.24.7", - "@babel/plugin-transform-typeof-symbol": "^7.24.8", - "@babel/plugin-transform-unicode-escapes": "^7.24.7", - "@babel/plugin-transform-unicode-property-regex": "^7.24.7", - "@babel/plugin-transform-unicode-regex": "^7.24.7", - "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.4", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.37.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-flow": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.24.7.tgz", - "integrity": "sha512-NL3Lo0NorCU607zU3NwRyJbpaB6E3t0xtd3LfAQKDfkeX4/ggcDXvkmkW42QWT5owUeW/jAe4hn+2qvkV1IbfQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "@babel/plugin-transform-flow-strip-types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.7.tgz", - "integrity": "sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "@babel/plugin-transform-react-display-name": "^7.24.7", - "@babel/plugin-transform-react-jsx": "^7.24.7", - "@babel/plugin-transform-react-jsx-development": "^7.24.7", - "@babel/plugin-transform-react-pure-annotations": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz", - "integrity": "sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "@babel/plugin-syntax-jsx": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.7", - "@babel/plugin-transform-typescript": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/register": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.24.6.tgz", - "integrity": "sha512-WSuFCc2wCqMeXkz/i3yfAAsxwWflEgbVkZzivgAmXl/MxrXeoYFZOOPllbC8R8WTF7u61wSRQtDVZ1879cdu6w==", - "dependencies": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.6", - "source-map-support": "^0.5.16" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" - }, - "node_modules/@babel/runtime": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", - "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", - "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.2", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", - "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", - "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@isaacs/ttlcache": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz", - "integrity": "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/@jest/create-cache-key-function": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz", - "integrity": "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==", - "dependencies": { - "@jest/types": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types/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/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/types/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/@jest/types/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/@jest/types/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/types/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/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@react-native-community/cli": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-14.0.0.tgz", - "integrity": "sha512-KwMKJB5jsDxqOhT8CGJ55BADDAYxlYDHv5R/ASQlEcdBEZxT0zZmnL0iiq2VqzETUy+Y/Nop+XDFgqyoQm0C2w==", - "dependencies": { - "@react-native-community/cli-clean": "14.0.0", - "@react-native-community/cli-config": "14.0.0", - "@react-native-community/cli-debugger-ui": "14.0.0", - "@react-native-community/cli-doctor": "14.0.0", - "@react-native-community/cli-server-api": "14.0.0", - "@react-native-community/cli-tools": "14.0.0", - "@react-native-community/cli-types": "14.0.0", - "chalk": "^4.1.2", - "commander": "^9.4.1", - "deepmerge": "^4.3.0", - "execa": "^5.0.0", - "find-up": "^5.0.0", - "fs-extra": "^8.1.0", - "graceful-fs": "^4.1.3", - "prompts": "^2.4.2", - "semver": "^7.5.2" - }, - "bin": { - "rnc-cli": "build/bin.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native-community/cli-clean": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-14.0.0.tgz", - "integrity": "sha512-kvHthZTNur/wLLx8WL5Oh+r04zzzFAX16r8xuaLhu9qGTE6Th1JevbsIuiQb5IJqD8G/uZDKgIZ2a0/lONcbJg==", - "dependencies": { - "@react-native-community/cli-tools": "14.0.0", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "fast-glob": "^3.3.2" - } - }, - "node_modules/@react-native-community/cli-clean/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-clean/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-clean/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-clean/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-clean/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-clean/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-config": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-14.0.0.tgz", - "integrity": "sha512-2Nr8KR+dgn1z+HLxT8piguQ1SoEzgKJnOPQKE1uakxWaRFcQ4LOXgzpIAscYwDW6jmQxdNqqbg2cRUoOS7IMtQ==", - "dependencies": { - "@react-native-community/cli-tools": "14.0.0", - "chalk": "^4.1.2", - "cosmiconfig": "^9.0.0", - "deepmerge": "^4.3.0", - "fast-glob": "^3.3.2", - "joi": "^17.2.1" - } - }, - "node_modules/@react-native-community/cli-config/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-config/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/@react-native-community/cli-config/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-config/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-config/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-config/node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", - "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@react-native-community/cli-config/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-config/node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@react-native-community/cli-config/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@react-native-community/cli-config/node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@react-native-community/cli-config/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-config/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-debugger-ui": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-14.0.0.tgz", - "integrity": "sha512-JpfzILfU7eKE9+7AMCAwNJv70H4tJGVv3ZGFqSVoK1YHg5QkVEGsHtoNW8AsqZRS6Fj4os+Fmh+r+z1L36sPmg==", - "dependencies": { - "serve-static": "^1.13.1" - } - }, - "node_modules/@react-native-community/cli-doctor": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-14.0.0.tgz", - "integrity": "sha512-in6jylHjaPUaDzV+JtUblh8m9JYIHGjHOf6Xn57hrmE5Zwzwuueoe9rSMHF1P0mtDgRKrWPzAJVejElddfptWA==", - "dependencies": { - "@react-native-community/cli-config": "14.0.0", - "@react-native-community/cli-platform-android": "14.0.0", - "@react-native-community/cli-platform-apple": "14.0.0", - "@react-native-community/cli-platform-ios": "14.0.0", - "@react-native-community/cli-tools": "14.0.0", - "chalk": "^4.1.2", - "command-exists": "^1.2.8", - "deepmerge": "^4.3.0", - "envinfo": "^7.13.0", - "execa": "^5.0.0", - "node-stream-zip": "^1.9.1", - "ora": "^5.4.1", - "semver": "^7.5.2", - "strip-ansi": "^5.2.0", - "wcwidth": "^1.0.1", - "yaml": "^2.2.1" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@react-native-community/cli-doctor/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-doctor/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-doctor/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-doctor/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-doctor/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-doctor/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@react-native-community/cli-doctor/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/@react-native-community/cli-doctor/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": "14.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-14.0.0.tgz", - "integrity": "sha512-nt7yVz3pGKQXnVa5MAk7zR+1n41kNKD3Hi2OgybH5tVShMBo7JQoL2ZVVH6/y/9wAwI/s7hXJgzf1OIP3sMq+Q==", - "dependencies": { - "@react-native-community/cli-tools": "14.0.0", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "fast-glob": "^3.3.2", - "fast-xml-parser": "^4.2.4", - "logkitty": "^0.7.1" - } - }, - "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": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@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/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/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-apple": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-apple/-/cli-platform-apple-14.0.0.tgz", - "integrity": "sha512-WniJL8vR4MeIsjqio2hiWWuUYUJEL3/9TDL5aXNwG68hH3tYgK3742+X9C+vRzdjTmf5IKc/a6PwLsdplFeiwQ==", - "dependencies": { - "@react-native-community/cli-tools": "14.0.0", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "fast-glob": "^3.3.2", - "fast-xml-parser": "^4.2.4", - "ora": "^5.4.1" - } - }, - "node_modules/@react-native-community/cli-platform-apple/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-apple/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-platform-apple/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-apple/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-apple/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-apple/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": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-14.0.0.tgz", - "integrity": "sha512-8kxGv7mZ5nGMtueQDq+ndu08f0ikf3Zsqm3Ix8FY5KCXpSgP14uZloO2GlOImq/zFESij+oMhCkZJGggpWpfAw==", - "dependencies": { - "@react-native-community/cli-platform-apple": "14.0.0" - } - }, - "node_modules/@react-native-community/cli-server-api": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-14.0.0.tgz", - "integrity": "sha512-A0FIsj0QCcDl1rswaVlChICoNbfN+mkrKB5e1ab5tOYeZMMyCHqvU+eFvAvXjHUlIvVI+LbqCkf4IEdQ6H/2AQ==", - "dependencies": { - "@react-native-community/cli-debugger-ui": "14.0.0", - "@react-native-community/cli-tools": "14.0.0", - "compression": "^1.7.1", - "connect": "^3.6.5", - "errorhandler": "^1.5.1", - "nocache": "^3.0.1", - "pretty-format": "^26.6.2", - "serve-static": "^1.13.1", - "ws": "^6.2.3" - } - }, - "node_modules/@react-native-community/cli-server-api/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/@react-native-community/cli-server-api/node_modules/@types/yargs": { - "version": "15.0.19", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", - "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@react-native-community/cli-server-api/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-server-api/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-server-api/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-server-api/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-server-api/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-server-api/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/@react-native-community/cli-server-api/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/@react-native-community/cli-server-api/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-server-api/node_modules/ws": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", - "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/@react-native-community/cli-tools": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-14.0.0.tgz", - "integrity": "sha512-L7GX5hyYYv0ZWbAyIQKzhHuShnwDqlKYB0tqn57wa5riGCaxYuRPTK+u4qy+WRCye7+i8M4Xj6oQtSd4z0T9cA==", - "dependencies": { - "appdirsjs": "^1.2.4", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "find-up": "^5.0.0", - "mime": "^2.4.1", - "open": "^6.2.0", - "ora": "^5.4.1", - "semver": "^7.5.2", - "shell-quote": "^1.7.3", - "sudo-prompt": "^9.0.0" - } - }, - "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": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@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/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/@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/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/@react-native-community/cli-tools/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/@react-native-community/cli-tools/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/@react-native-community/cli-tools/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/@react-native-community/cli-tools/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "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": "14.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-14.0.0.tgz", - "integrity": "sha512-CMUevd1pOWqvmvutkUiyQT2lNmMHUzSW7NKc1xvHgg39NjbS58Eh2pMzIUP85IwbYNeocfYc3PH19vA/8LnQtg==", - "dependencies": { - "joi": "^17.2.1" - } - }, - "node_modules/@react-native-community/cli/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/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@react-native-community/cli/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/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/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/@react-native-community/cli/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/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/@react-native-community/cli/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/@react-native-community/cli/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/@react-native-community/cli/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/@react-native-community/cli/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@react-native-community/cli/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/assets-registry": { - "version": "0.75.2", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.75.2.tgz", - "integrity": "sha512-P1dLHjpUeC0AIkDHRYcx0qLMr+p92IPWL3pmczzo6T76Qa9XzruQOYy0jittxyBK91Csn6HHQ/eit8TeXW8MVw==", - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native/babel-plugin-codegen": { - "version": "0.75.2", - "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.75.2.tgz", - "integrity": "sha512-BIKVh2ZJPkzluUGgCNgpoh6NTHgX8j04FCS0Z/rTmRJ66hir/EUBl8frMFKrOy/6i4VvZEltOWB5eWfHe1AYgw==", - "dependencies": { - "@react-native/codegen": "0.75.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native/babel-preset": { - "version": "0.75.2", - "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.75.2.tgz", - "integrity": "sha512-mprpsas+WdCEMjQZnbDiAC4KKRmmLbMB+o/v4mDqKlH4Mcm7RdtP5t80MZGOVCHlceNp1uEIpXywx69DNwgbgg==", - "dependencies": { - "@babel/core": "^7.20.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.18.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-async-generator-functions": "^7.24.3", - "@babel/plugin-transform-async-to-generator": "^7.20.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-class-properties": "^7.24.1", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.20.0", - "@babel/plugin-transform-flow-strip-types": "^7.20.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-logical-assignment-operators": "^7.24.1", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1", - "@babel/plugin-transform-numeric-separator": "^7.24.1", - "@babel/plugin-transform-object-rest-spread": "^7.24.5", - "@babel/plugin-transform-optional-catch-binding": "^7.24.1", - "@babel/plugin-transform-optional-chaining": "^7.24.5", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.11", - "@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.20.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-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "@react-native/babel-plugin-codegen": "0.75.2", - "babel-plugin-transform-flow-enums": "^0.0.2", - "react-refresh": "^0.14.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/@react-native/codegen": { - "version": "0.75.2", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.75.2.tgz", - "integrity": "sha512-OkWdbtO2jTkfOXfj3ibIL27rM6LoaEuApOByU2G8X+HS6v9U87uJVJlMIRWBDmnxODzazuHwNVA2/wAmSbucaw==", - "dependencies": { - "@babel/parser": "^7.20.0", - "glob": "^7.1.1", - "hermes-parser": "0.22.0", - "invariant": "^2.2.4", - "jscodeshift": "^0.14.0", - "mkdirp": "^0.5.1", - "nullthrows": "^1.1.1", - "yargs": "^17.6.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@babel/preset-env": "^7.1.6" - } - }, - "node_modules/@react-native/community-cli-plugin": { - "version": "0.75.2", - "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.75.2.tgz", - "integrity": "sha512-/tz0bzVja4FU0aAimzzQ7iYR43peaD6pzksArdrrGhlm8OvFYAQPOYSNeIQVMSarwnkNeg1naFKaeYf1o3++yA==", - "dependencies": { - "@react-native-community/cli-server-api": "14.0.0-alpha.11", - "@react-native-community/cli-tools": "14.0.0-alpha.11", - "@react-native/dev-middleware": "0.75.2", - "@react-native/metro-babel-transformer": "0.75.2", - "chalk": "^4.0.0", - "execa": "^5.1.1", - "metro": "^0.80.3", - "metro-config": "^0.80.3", - "metro-core": "^0.80.3", - "node-fetch": "^2.2.0", - "querystring": "^0.2.1", - "readline": "^1.3.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native/community-cli-plugin/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/@react-native/community-cli-plugin/node_modules/@react-native-community/cli-debugger-ui": { - "version": "14.0.0-alpha.11", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-14.0.0-alpha.11.tgz", - "integrity": "sha512-0wCNQxhCniyjyMXgR1qXliY180y/2QbvoiYpp2MleGQADr5M1b8lgI4GoyADh5kE+kX3VL0ssjgyxpmbpCD86A==", - "dependencies": { - "serve-static": "^1.13.1" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/@react-native-community/cli-server-api": { - "version": "14.0.0-alpha.11", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-14.0.0-alpha.11.tgz", - "integrity": "sha512-I7YeYI7S5wSxnQAqeG8LNqhT99FojiGIk87DU0vTp6U8hIMLcA90fUuBAyJY38AuQZ12ZJpGa8ObkhIhWzGkvg==", - "dependencies": { - "@react-native-community/cli-debugger-ui": "14.0.0-alpha.11", - "@react-native-community/cli-tools": "14.0.0-alpha.11", - "compression": "^1.7.1", - "connect": "^3.6.5", - "errorhandler": "^1.5.1", - "nocache": "^3.0.1", - "pretty-format": "^26.6.2", - "serve-static": "^1.13.1", - "ws": "^6.2.3" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/@react-native-community/cli-tools": { - "version": "14.0.0-alpha.11", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-14.0.0-alpha.11.tgz", - "integrity": "sha512-HQCfVnX9aqRdKdLxmQy4fUAUo+YhNGlBV7ZjOayPbuEGWJ4RN+vSy0Cawk7epo7hXd6vKzc7P7y3HlU6Kxs7+w==", - "dependencies": { - "appdirsjs": "^1.2.4", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "find-up": "^5.0.0", - "mime": "^2.4.1", - "open": "^6.2.0", - "ora": "^5.4.1", - "semver": "^7.5.2", - "shell-quote": "^1.7.3", - "sudo-prompt": "^9.0.0" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/@types/yargs": { - "version": "15.0.19", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", - "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@react-native/community-cli-plugin/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-plugin/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@react-native/community-cli-plugin/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-plugin/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-plugin/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/@react-native/community-cli-plugin/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-plugin/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/@react-native/community-cli-plugin/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/@react-native/community-cli-plugin/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/@react-native/community-cli-plugin/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/@react-native/community-cli-plugin/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/@react-native/community-cli-plugin/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/@react-native/community-cli-plugin/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@react-native/community-cli-plugin/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-plugin/node_modules/ws": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", - "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/@react-native/debugger-frontend": { - "version": "0.75.2", - "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.75.2.tgz", - "integrity": "sha512-qIC6mrlG8RQOPaYLZQiJwqnPchAVGnHWcVDeQxPMPLkM/D5+PC8tuKWYOwgLcEau3RZlgz7QQNk31Qj2/OJG6Q==", - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native/dev-middleware": { - "version": "0.75.2", - "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.75.2.tgz", - "integrity": "sha512-fTC5m2uVjYp1XPaIJBFgscnQjPdGVsl96z/RfLgXDq0HBffyqbg29ttx6yTCx7lIa9Gdvf6nKQom+e+Oa4izSw==", - "dependencies": { - "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.75.2", - "chrome-launcher": "^0.15.2", - "chromium-edge-launcher": "^0.2.0", - "connect": "^3.6.5", - "debug": "^2.2.0", - "node-fetch": "^2.2.0", - "nullthrows": "^1.1.1", - "open": "^7.0.3", - "selfsigned": "^2.4.1", - "serve-static": "^1.13.1", - "ws": "^6.2.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native/dev-middleware/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/@react-native/dev-middleware/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/@react-native/dev-middleware/node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@react-native/dev-middleware/node_modules/ws": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", - "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/@react-native/gradle-plugin": { - "version": "0.75.2", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.75.2.tgz", - "integrity": "sha512-AELeAOCZi3B2vE6SeN+mjpZjjqzqa76yfFBB3L3f3NWiu4dm/YClTGOj+5IVRRgbt8LDuRImhDoaj7ukheXr4Q==", - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native/js-polyfills": { - "version": "0.75.2", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.75.2.tgz", - "integrity": "sha512-AtLd3mbiE+FXK2Ru3l2NFOXDhUvzdUsCP4qspUw0haVaO/9xzV97RVD2zz0lur2f/LmZqQ2+KXyYzr7048b5iw==", - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native/metro-babel-transformer": { - "version": "0.75.2", - "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.75.2.tgz", - "integrity": "sha512-EygglCCuOub2sZ00CSIiEekCXoGL2XbOC6ssOB47M55QKvhdPG/0WBQXvmOmiN42uZgJK99Lj749v4rB0PlPIQ==", - "dependencies": { - "@babel/core": "^7.20.0", - "@react-native/babel-preset": "0.75.2", - "hermes-parser": "0.22.0", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/@react-native/metro-config": { - "version": "0.75.2", - "resolved": "https://registry.npmjs.org/@react-native/metro-config/-/metro-config-0.75.2.tgz", - "integrity": "sha512-LBcNF0csApOirPVmRhIAAb4ovAXDhn0Dbli5LMaLCosgQwJuhb05z7s1weavcAylPPUS7DuICUQpMoRU6hZzeQ==", - "dev": true, - "dependencies": { - "@react-native/js-polyfills": "0.75.2", - "@react-native/metro-babel-transformer": "0.75.2", - "metro-config": "^0.80.3", - "metro-runtime": "^0.80.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native/normalize-colors": { - "version": "0.75.2", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.75.2.tgz", - "integrity": "sha512-nPwWJFtsqNFS/qSG9yDOiSJ64mjG7RCP4X/HXFfyWzCM1jq49h/DYBdr+c3e7AvTKGIdy0gGT3vgaRUHZFVdUQ==" - }, - "node_modules/@react-native/typescript-config": { - "version": "0.75.2", - "resolved": "https://registry.npmjs.org/@react-native/typescript-config/-/typescript-config-0.75.2.tgz", - "integrity": "sha512-guqu6REcuDmfjlM/B6YNqTfv4kK35gn6ungzZQdU8zznyWiXlyxR7uSSyNcy1QgEztsvO7B3HU073PBHV8RxXQ==", - "dev": true - }, - "node_modules/@react-native/virtualized-lists": { - "version": "0.75.2", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.75.2.tgz", - "integrity": "sha512-pD5SVCjxc8k+JdoyQ+IlulBTEqJc3S4KUKsmv5zqbNCyETB0ZUvd4Su7bp+lLF6ALxx6KKmbGk8E3LaWEjUFFQ==", - "dependencies": { - "invariant": "^2.2.4", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/react": "^18.2.6", - "react": "*", - "react-native": "*" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@sideway/address": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", - "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" - }, - "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/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@tsconfig/react-native": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@tsconfig/react-native/-/react-native-3.0.5.tgz", - "integrity": "sha512-0+pmYzHccvwWpFz2Tv5AJxp6UroLALmAy+SX34tKlwaCie1mNbtCv6uOJp7x8pKchgNA9/n6BGrx7uLQvw8p9A==", - "dev": true - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/node": { - "version": "22.4.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.4.2.tgz", - "integrity": "sha512-nAvM3Ey230/XzxtyDcJ+VjvlzpzoHwLsF7JaDRfoI0ytO0mVheerNmM45CtA0yOILXwXXxOrcUWH3wltX+7PSw==", - "dependencies": { - "undici-types": "~6.19.2" - } - }, - "node_modules/@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==" - }, - "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" - }, - "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/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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-fragments/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-fragments/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/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/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/appdirsjs": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.7.tgz", - "integrity": "sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==" - }, - "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/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/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "node_modules/ast-types": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", - "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", - "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-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/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-module-resolver": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-5.0.2.tgz", - "integrity": "sha512-9KtaCazHee2xc0ibfqsDeamwDps6FZNo5S0Q81dUqEuFzVwPhcT4J5jOqIVvgCA3Q/wO9hKYxN/Ds3tIsp5ygg==", - "dev": true, - "dependencies": { - "find-babel-config": "^2.1.1", - "glob": "^9.3.3", - "pkg-up": "^3.1.0", - "reselect": "^4.1.7", - "resolve": "^1.22.8" - } - }, - "node_modules/babel-plugin-module-resolver/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/babel-plugin-module-resolver/node_modules/glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/babel-plugin-module-resolver/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", - "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", - "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-transform-flow-enums": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", - "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", - "dependencies": { - "@babel/plugin-syntax-flow": "^7.12.1" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.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.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "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-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", - "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": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", - "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": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001651", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz", - "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "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/chrome-launcher": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", - "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", - "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0" - }, - "bin": { - "print-chrome-path": "bin/print-chrome-path.js" - }, - "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/chrome-launcher/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/chromium-edge-launcher": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/chromium-edge-launcher/-/chromium-edge-launcher-0.2.0.tgz", - "integrity": "sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==", - "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0", - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "node_modules/chromium-edge-launcher/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/chromium-edge-launcher/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/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/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-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/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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" - }, - "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": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" - }, - "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" - }, - "node_modules/core-js-compat": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", - "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", - "dependencies": { - "browserslist": "^4.23.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "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/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/dayjs": { - "version": "1.11.13", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", - "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" - }, - "node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "dev": true, - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/denodeify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", - "integrity": "sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==" - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "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/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz", - "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==" - }, - "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": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "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==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/envinfo": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", - "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", - "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-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "dependencies": { - "stackframe": "^1.3.4" - } - }, - "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/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "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": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/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": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "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/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "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.6.0" - } - }, - "node_modules/fast-xml-parser": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", - "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - }, - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - } - ], - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/find-babel-config": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-2.1.1.tgz", - "integrity": "sha512-5Ji+EAysHGe1OipH7GN4qDjok5Z1uw5KAwDCbicU/4wyTZY7CqOCzcWbG7J5ad9mazq67k89fXlbc1MuIfl9uA==", - "dev": true, - "dependencies": { - "json5": "^2.2.3", - "path-exists": "^4.0.0" - } - }, - "node_modules/find-babel-config/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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": "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/flow-enums-runtime": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz", - "integrity": "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==" - }, - "node_modules/flow-parser": { - "version": "0.244.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.244.0.tgz", - "integrity": "sha512-Dkc88m5k8bx1VvHTO9HEJ7tvMcSb3Zvcv1PY4OHK7pHdtdY2aUjhmPy6vpjVJ2uUUOIybRlb91sXE8g4doChtA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "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/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "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.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hermes-estree": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.22.0.tgz", - "integrity": "sha512-FLBt5X9OfA8BERUdc6aZS36Xz3rRuB0Y/mfocSADWEJfomc1xfene33GdyAmtTkKTBXTN/EgAy+rjTKkkZJHlw==" - }, - "node_modules/hermes-parser": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.22.0.tgz", - "integrity": "sha512-gn5RfZiEXCsIWsFGsKiykekktUoh0PdFWYocXsUdZIyWSckT6UIyPcyyUIPSR3kpnELWeK3n3ztAse7Mat6PSA==", - "dependencies": { - "hermes-estree": "0.22.0" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz", - "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==", - "dependencies": { - "queue": "6.0.2" - }, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=16.x" - } - }, - "node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", - "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "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/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/is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "dependencies": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-core-module": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", - "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/is-git-dirty": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-git-dirty/-/is-git-dirty-2.0.2.tgz", - "integrity": "sha512-U3YCo+GKR/rDsY7r0v/LBICbQwsx859tDQnAT+v0E/zCDeWbQ1TUt1FtyExeyik7VIJlYOLHCIifLdz71HDalg==", - "dev": true, - "dependencies": { - "execa": "^4.0.3", - "is-git-repository": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/is-git-dirty/node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/is-git-dirty/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-git-dirty/node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/is-git-repository": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-git-repository/-/is-git-repository-2.0.0.tgz", - "integrity": "sha512-HDO50CG5suIAcmqG4F1buqVXEZRPn+RaXIn9pFKq/947FBo2bCRwK7ZluEVZOy99a4IQyqsjbKEpAiOXCccOHQ==", - "dev": true, - "dependencies": { - "execa": "^4.0.3", - "is-absolute": "^1.0.0" - } - }, - "node_modules/is-git-repository/node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/is-git-repository/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-git-repository/node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "engines": { - "node": ">=8" - } - }, - "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-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "dependencies": { - "is-unc-path": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "dependencies": { - "unc-path-regex": "^0.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util/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/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-message-util/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/jest-message-util/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/jest-message-util/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-message-util/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/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util/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/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util/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/jest-util/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/jest-util/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-util/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/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/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/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-validate/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/jest-validate/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/jest-validate/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-validate/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/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.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": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/joi": { - "version": "17.13.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", - "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", - "dependencies": { - "@hapi/hoek": "^9.3.0", - "@hapi/topo": "^5.1.0", - "@sideway/address": "^4.1.5", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, - "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": "250231.0.0", - "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-250231.0.0.tgz", - "integrity": "sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw==" - }, - "node_modules/jsc-safe-url": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz", - "integrity": "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==" - }, - "node_modules/jscodeshift": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz", - "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==", - "dependencies": { - "@babel/core": "^7.13.16", - "@babel/parser": "^7.13.16", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", - "@babel/preset-flow": "^7.13.13", - "@babel/preset-typescript": "^7.13.0", - "@babel/register": "^7.13.16", - "babel-core": "^7.0.0-bridge.0", - "chalk": "^4.1.2", - "flow-parser": "0.*", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "neo-async": "^2.5.0", - "node-dir": "^0.1.17", - "recast": "^0.21.0", - "temp": "^0.8.4", - "write-file-atomic": "^2.3.0" - }, - "bin": { - "jscodeshift": "bin/jscodeshift.js" - }, - "peerDependencies": { - "@babel/preset-env": "^7.1.6" - } - }, - "node_modules/jscodeshift/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/jscodeshift/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jscodeshift/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/jscodeshift/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/jscodeshift/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/jscodeshift/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/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-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "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/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/lighthouse-logger": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", - "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", - "dependencies": { - "debug": "^2.6.9", - "marky": "^1.2.2" - } - }, - "node_modules/lighthouse-logger/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/lighthouse-logger/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "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/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "node_modules/lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/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/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/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/log-symbols/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/log-symbols/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/log-symbols/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/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/logkitty/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/logkitty/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/logkitty/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/logkitty/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/logkitty/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/logkitty/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/logkitty/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/logkitty/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/logkitty/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/logkitty/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/logkitty/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/logkitty/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/logkitty/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/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": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "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.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/marky": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", - "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==" - }, - "node_modules/memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" - }, - "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==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/metro": { - "version": "0.80.10", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.10.tgz", - "integrity": "sha512-FDPi0X7wpafmDREXe1lgg3WzETxtXh6Kpq8+IwsG35R2tMyp2kFIqDdshdohuvDt1J/qDARcEPq7V/jElTb1kA==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.0", - "@babel/parser": "^7.20.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.20.0", - "@babel/types": "^7.20.0", - "accepts": "^1.3.7", - "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", - "flow-enums-runtime": "^0.0.6", - "graceful-fs": "^4.2.4", - "hermes-parser": "0.23.0", - "image-size": "^1.0.2", - "invariant": "^2.2.4", - "jest-worker": "^29.6.3", - "jsc-safe-url": "^0.2.2", - "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.80.10", - "metro-cache": "0.80.10", - "metro-cache-key": "0.80.10", - "metro-config": "0.80.10", - "metro-core": "0.80.10", - "metro-file-map": "0.80.10", - "metro-resolver": "0.80.10", - "metro-runtime": "0.80.10", - "metro-source-map": "0.80.10", - "metro-symbolicate": "0.80.10", - "metro-transform-plugins": "0.80.10", - "metro-transform-worker": "0.80.10", - "mime-types": "^2.1.27", - "node-fetch": "^2.2.0", - "nullthrows": "^1.1.1", - "serialize-error": "^2.1.0", - "source-map": "^0.5.6", - "strip-ansi": "^6.0.0", - "throat": "^5.0.0", - "ws": "^7.5.10", - "yargs": "^17.6.2" - }, - "bin": { - "metro": "src/cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/metro-babel-transformer": { - "version": "0.80.10", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.10.tgz", - "integrity": "sha512-GXHueUzgzcazfzORDxDzWS9jVVRV6u+cR6TGvHOfGdfLzJCj7/D0PretLfyq+MwN20twHxLW+BUXkoaB8sCQBg==", - "dependencies": { - "@babel/core": "^7.20.0", - "flow-enums-runtime": "^0.0.6", - "hermes-parser": "0.23.0", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/metro-babel-transformer/node_modules/hermes-estree": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.23.0.tgz", - "integrity": "sha512-Rkp0PNLGpORw4ktsttkVbpYJbrYKS3hAnkxu8D9nvQi6LvSbuPa+tYw/t2u3Gjc35lYd/k95YkjqyTcN4zspag==" - }, - "node_modules/metro-babel-transformer/node_modules/hermes-parser": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.23.0.tgz", - "integrity": "sha512-xLwM4ylfHGwrm+2qXfO1JT/fnqEDGSnpS/9hQ4VLtqTexSviu2ZpBgz07U8jVtndq67qdb/ps0qvaWDZ3fkTyg==", - "dependencies": { - "hermes-estree": "0.23.0" - } - }, - "node_modules/metro-cache": { - "version": "0.80.10", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.10.tgz", - "integrity": "sha512-8CBtDJwMguIE5RvV3PU1QtxUG8oSSX54mIuAbRZmcQ0MYiOl9JdrMd4JCBvIyhiZLoSStph425SMyCSnjtJsdA==", - "dependencies": { - "exponential-backoff": "^3.1.1", - "flow-enums-runtime": "^0.0.6", - "metro-core": "0.80.10" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/metro-cache-key": { - "version": "0.80.10", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.10.tgz", - "integrity": "sha512-57qBhO3zQfoU/hP4ZlLW5hVej2jVfBX6B4NcSfMj4LgDPL3YknWg80IJBxzQfjQY/m+fmMLmPy8aUMHzUp/guA==", - "dependencies": { - "flow-enums-runtime": "^0.0.6" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/metro-config": { - "version": "0.80.10", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.10.tgz", - "integrity": "sha512-0GYAw0LkmGbmA81FepKQepL1KU/85Cyv7sAiWm6QWeV6AcVCpsKg6jGLqGHJ0LLPL60rWzA4TV1DQAlzdJAEtA==", - "dependencies": { - "connect": "^3.6.5", - "cosmiconfig": "^5.0.5", - "flow-enums-runtime": "^0.0.6", - "jest-validate": "^29.6.3", - "metro": "0.80.10", - "metro-cache": "0.80.10", - "metro-core": "0.80.10", - "metro-runtime": "0.80.10" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/metro-core": { - "version": "0.80.10", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.10.tgz", - "integrity": "sha512-nwBB6HbpGlNsZMuzxVqxqGIOsn5F3JKpsp8PziS7Z4mV8a/jA1d44mVOgYmDa2q5WlH5iJfRIIhdz24XRNDlLA==", - "dependencies": { - "flow-enums-runtime": "^0.0.6", - "lodash.throttle": "^4.1.1", - "metro-resolver": "0.80.10" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/metro-file-map": { - "version": "0.80.10", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.10.tgz", - "integrity": "sha512-ytsUq8coneaN7ZCVk1IogojcGhLIbzWyiI2dNmw2nnBgV/0A+M5WaTTgZ6dJEz3dzjObPryDnkqWPvIGLCPtiw==", - "dependencies": { - "anymatch": "^3.0.3", - "debug": "^2.2.0", - "fb-watchman": "^2.0.0", - "flow-enums-runtime": "^0.0.6", - "graceful-fs": "^4.2.4", - "invariant": "^2.2.4", - "jest-worker": "^29.6.3", - "micromatch": "^4.0.4", - "node-abort-controller": "^3.1.1", - "nullthrows": "^1.1.1", - "walker": "^1.0.7" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/metro-file-map/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-file-map/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/metro-minify-terser": { - "version": "0.80.10", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.10.tgz", - "integrity": "sha512-Xyv9pEYpOsAerrld7cSLIcnCCpv8ItwysOmTA+AKf1q4KyE9cxrH2O2SA0FzMCkPzwxzBWmXwHUr+A89BpEM6g==", - "dependencies": { - "flow-enums-runtime": "^0.0.6", - "terser": "^5.15.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/metro-resolver": { - "version": "0.80.10", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.10.tgz", - "integrity": "sha512-EYC5CL7f+bSzrqdk1bylKqFNGabfiI5PDctxoPx70jFt89Jz+ThcOscENog8Jb4LEQFG6GkOYlwmPpsi7kx3QA==", - "dependencies": { - "flow-enums-runtime": "^0.0.6" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/metro-runtime": { - "version": "0.80.10", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.10.tgz", - "integrity": "sha512-Xh0N589ZmSIgJYAM+oYwlzTXEHfASZac9TYPCNbvjNTn0EHKqpoJ/+Im5G3MZT4oZzYv4YnvzRtjqS5k0tK94A==", - "dependencies": { - "@babel/runtime": "^7.0.0", - "flow-enums-runtime": "^0.0.6" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/metro-source-map": { - "version": "0.80.10", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.10.tgz", - "integrity": "sha512-EyZswqJW8Uukv/HcQr6K19vkMXW1nzHAZPWJSEyJFKIbgp708QfRZ6vnZGmrtFxeJEaFdNup4bGnu8/mIOYlyA==", - "dependencies": { - "@babel/traverse": "^7.20.0", - "@babel/types": "^7.20.0", - "flow-enums-runtime": "^0.0.6", - "invariant": "^2.2.4", - "metro-symbolicate": "0.80.10", - "nullthrows": "^1.1.1", - "ob1": "0.80.10", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/metro-symbolicate": { - "version": "0.80.10", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.10.tgz", - "integrity": "sha512-qAoVUoSxpfZ2DwZV7IdnQGXCSsf2cAUExUcZyuCqGlY5kaWBb0mx2BL/xbMFDJ4wBp3sVvSBPtK/rt4J7a0xBA==", - "dependencies": { - "flow-enums-runtime": "^0.0.6", - "invariant": "^2.2.4", - "metro-source-map": "0.80.10", - "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": ">=18" - } - }, - "node_modules/metro-transform-plugins": { - "version": "0.80.10", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.10.tgz", - "integrity": "sha512-leAx9gtA+2MHLsCeWK6XTLBbv2fBnNFu/QiYhWzMq8HsOAP4u1xQAU0tSgPs8+1vYO34Plyn79xTLUtQCRSSUQ==", - "dependencies": { - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.20.0", - "flow-enums-runtime": "^0.0.6", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/metro-transform-worker": { - "version": "0.80.10", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.10.tgz", - "integrity": "sha512-zNfNLD8Rz99U+JdOTqtF2o7iTjcDMMYdVS90z6+81Tzd2D0lDWVpls7R1hadS6xwM+ymgXFQTjM6V6wFoZaC0g==", - "dependencies": { - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.0", - "@babel/parser": "^7.20.0", - "@babel/types": "^7.20.0", - "flow-enums-runtime": "^0.0.6", - "metro": "0.80.10", - "metro-babel-transformer": "0.80.10", - "metro-cache": "0.80.10", - "metro-cache-key": "0.80.10", - "metro-minify-terser": "0.80.10", - "metro-source-map": "0.80.10", - "metro-transform-plugins": "0.80.10", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/metro/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/metro/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/metro/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/metro/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/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/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/metro/node_modules/hermes-estree": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.23.0.tgz", - "integrity": "sha512-Rkp0PNLGpORw4ktsttkVbpYJbrYKS3hAnkxu8D9nvQi6LvSbuPa+tYw/t2u3Gjc35lYd/k95YkjqyTcN4zspag==" - }, - "node_modules/metro/node_modules/hermes-parser": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.23.0.tgz", - "integrity": "sha512-xLwM4ylfHGwrm+2qXfO1JT/fnqEDGSnpS/9hQ4VLtqTexSviu2ZpBgz07U8jVtndq67qdb/ps0qvaWDZ3fkTyg==", - "dependencies": { - "hermes-estree": "0.23.0" - } - }, - "node_modules/metro/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/metro/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/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "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/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "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/nocache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/nocache/-/nocache-3.0.4.tgz", - "integrity": "sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/node-abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", - "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==" - }, - "node_modules/node-dir": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", - "dependencies": { - "minimatch": "^3.0.2" - }, - "engines": { - "node": ">= 0.10.5" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" - }, - "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==" - }, - "node_modules/node-stream-zip": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", - "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", - "engines": { - "node": ">=0.12.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/antelle" - } - }, - "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/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/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.80.10", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.80.10.tgz", - "integrity": "sha512-dJHyB0S6JkMorUSfSGcYGkkg9kmq3qDUu3ygZUKIfkr47XOPuG35r2Sk6tbwtHXbdKIXmcMvM8DF2CwgdyaHfQ==", - "dependencies": { - "flow-enums-runtime": "^0.0.6" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "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": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "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/open/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/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/ora/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ora/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/ora/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/ora/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/ora/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/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "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/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/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==", - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "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/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true - }, - "node_modules/path-scurry/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "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/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "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.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "engines": { - "node": ">= 6" - } - }, - "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-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "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": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "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==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/querystring": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", - "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "dependencies": { - "inherits": "~2.0.3" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/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": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-devtools-core": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-5.3.1.tgz", - "integrity": "sha512-7FSb9meX0btdBQLwdFOwt6bGqvRPabmVMMslv8fgoSPqXyuGpgQe36kx8gR86XPw7aV1yVouTp6fyZ0EH+NfUw==", - "dependencies": { - "shell-quote": "^1.6.1", - "ws": "^7" - } - }, - "node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" - }, - "node_modules/react-native": { - "version": "0.75.2", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.75.2.tgz", - "integrity": "sha512-pP+Yswd/EurzAlKizytRrid9LJaPJzuNldc+o5t01md2VLHym8V7FWH2z9omFKtFTer8ERg0fAhG1fpd0Qq6bQ==", - "dependencies": { - "@jest/create-cache-key-function": "^29.6.3", - "@react-native-community/cli": "14.0.0", - "@react-native-community/cli-platform-android": "14.0.0", - "@react-native-community/cli-platform-ios": "14.0.0", - "@react-native/assets-registry": "0.75.2", - "@react-native/codegen": "0.75.2", - "@react-native/community-cli-plugin": "0.75.2", - "@react-native/gradle-plugin": "0.75.2", - "@react-native/js-polyfills": "0.75.2", - "@react-native/normalize-colors": "0.75.2", - "@react-native/virtualized-lists": "0.75.2", - "abort-controller": "^3.0.0", - "anser": "^1.4.9", - "ansi-regex": "^5.0.0", - "base64-js": "^1.5.1", - "chalk": "^4.0.0", - "event-target-shim": "^5.0.1", - "flow-enums-runtime": "^0.0.6", - "glob": "^7.1.1", - "invariant": "^2.2.4", - "jest-environment-node": "^29.6.3", - "jsc-android": "^250231.0.0", - "memoize-one": "^5.0.0", - "metro-runtime": "^0.80.3", - "metro-source-map": "^0.80.3", - "mkdirp": "^0.5.1", - "nullthrows": "^1.1.1", - "pretty-format": "^26.5.2", - "promise": "^8.3.0", - "react-devtools-core": "^5.3.1", - "react-refresh": "^0.14.0", - "regenerator-runtime": "^0.13.2", - "scheduler": "0.24.0-canary-efb381bbf-20230505", - "semver": "^7.1.3", - "stacktrace-parser": "^0.1.10", - "whatwg-fetch": "^3.0.0", - "ws": "^6.2.2", - "yargs": "^17.6.2" - }, - "bin": { - "react-native": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/react": "^18.2.6", - "react": "^18.2.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-native-builder-bob": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/react-native-builder-bob/-/react-native-builder-bob-0.30.0.tgz", - "integrity": "sha512-ohwnIckZ7ir5dot3CIm+6pFeaZUDBkSY6dQuJm/zFhFghcARUFon0c1xjc4xY+hmipg81TRRsvbLW/NOpJ7mvA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.25.2", - "@babel/plugin-transform-strict-mode": "^7.24.7", - "@babel/preset-env": "^7.25.2", - "@babel/preset-flow": "^7.24.7", - "@babel/preset-react": "^7.24.7", - "@babel/preset-typescript": "^7.24.7", - "babel-plugin-module-resolver": "^5.0.2", - "browserslist": "^4.20.4", - "cosmiconfig": "^9.0.0", - "cross-spawn": "^7.0.3", - "dedent": "^0.7.0", - "del": "^6.1.1", - "escape-string-regexp": "^4.0.0", - "fs-extra": "^10.1.0", - "glob": "^8.0.3", - "is-git-dirty": "^2.0.1", - "json5": "^2.2.1", - "kleur": "^4.1.4", - "metro-config": "^0.80.9", - "prompts": "^2.4.2", - "which": "^2.0.2", - "yargs": "^17.5.1" - }, - "bin": { - "bob": "bin/bob" - }, - "engines": { - "node": ">= 18.0.0" - } - }, - "node_modules/react-native-builder-bob/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/react-native-builder-bob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/react-native-builder-bob/node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/react-native-builder-bob/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==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-native-builder-bob/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/react-native-builder-bob/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/react-native-builder-bob/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/react-native-builder-bob/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/react-native-builder-bob/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/react-native-builder-bob/node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/react-native-builder-bob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/react-native-builder-bob/node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-native-builder-bob/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/react-native-builder-bob/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/react-native/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/react-native/node_modules/@types/yargs": { - "version": "15.0.19", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", - "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "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": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/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/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/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/react-native/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/react-native/node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "node_modules/react-native/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "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/ws": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", - "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/react-refresh": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", - "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readline": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", - "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==" - }, - "node_modules/recast": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz", - "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==", - "dependencies": { - "ast-types": "0.15.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/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": "10.1.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", - "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "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": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "node_modules/reselect": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", - "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/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/scheduler": { - "version": "0.24.0-canary-efb381bbf-20230505", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.24.0-canary-efb381bbf-20230505.tgz", - "integrity": "sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", - "dependencies": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "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.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/send/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serialize-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", - "integrity": "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "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": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "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": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/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/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/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/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/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/stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" - }, - "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/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/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/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" - }, - "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/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/temp": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", - "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", - "dependencies": { - "rimraf": "~2.6.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/temp/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/terser": { - "version": "5.31.6", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz", - "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser/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/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/through2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/through2/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/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" - }, - "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": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } - }, - "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.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.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/unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "engines": { - "node": ">=4" - } - }, - "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/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "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.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-fetch": { - "version": "3.6.20", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", - "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-module": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/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/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/write-file-atomic": { - "version": "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": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "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/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": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/yaml": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", - "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/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" - } - } - } -} diff --git a/example/package.json b/example/package.json deleted file mode 100644 index e3e8286d..00000000 --- a/example/package.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "react-native-mmkv-storage-example", - "version": "0.0.1", - "private": true, - "scripts": { - "android": "react-native run-android", - "ios": "react-native run-ios", - "start": "react-native start", - "build:android": "react-native build-android --extra-params \"--no-daemon --console=plain -PreactNativeArchitectures=arm64-v8a\"", - "build:ios": "react-native build-ios --scheme MmkvStorageExample --mode Debug --extra-params \"-sdk iphonesimulator CC=clang CPLUSPLUS=clang++ LD=clang LDPLUSPLUS=clang++ GCC_OPTIMIZATION_LEVEL=0 GCC_PRECOMPILE_PREFIX_HEADER=YES ASSETCATALOG_COMPILER_OPTIMIZATION=time DEBUG_INFORMATION_FORMAT=dwarf COMPILER_INDEX_STORE_ENABLE=NO\"" - }, - "dependencies": { - "react": "18.3.1", - "react-native": "0.75.2" - }, - "devDependencies": { - "@babel/core": "^7.20.0", - "@babel/preset-env": "^7.20.0", - "@babel/runtime": "^7.20.0", - "@react-native/babel-preset": "0.75.2", - "@react-native/metro-config": "0.75.2", - "@react-native/typescript-config": "0.75.2", - "react-native-builder-bob": "^0.30.0", - "@tsconfig/react-native": "3.0.5" - }, - "engines": { - "node": ">=18" - } -} diff --git a/example/react-native.config.js b/example/react-native.config.js deleted file mode 100644 index 0b9606d4..00000000 --- a/example/react-native.config.js +++ /dev/null @@ -1,15 +0,0 @@ -const path = require('path'); -const pkg = require('../package.json'); - -module.exports = { - project: { - ios: { - automaticPodsInstallation: true, - }, - }, - dependencies: { - [pkg.name]: { - root: path.join(__dirname, '..'), - }, - }, -}; diff --git a/example/src/App.tsx b/example/src/App.tsx deleted file mode 100644 index a97f95ef..00000000 --- a/example/src/App.tsx +++ /dev/null @@ -1,147 +0,0 @@ -import React, {useCallback} from 'react'; -import { - SafeAreaView, - ScrollView, - StatusBar, - StyleSheet, - Text, - TouchableOpacity, - View, -} from 'react-native'; -import {MMKVLoader, create} from 'react-native-mmkv-storage'; - -const storage = new MMKVLoader().withEncryption().initialize(); - -const storage2 = new MMKVLoader().withInstanceID('storage2').initialize(); - -const useStorage = create(storage); -const useStorage2 = create(storage2); - -const App = () => { - const [user, setUser] = useStorage('user', 'robert'); - const [age, setAge] = useStorage2('age', 24); - - const getUser = useCallback(() => { - let users = ['andrew', 'robert', 'jack', 'alison']; - let _user = - users[ - users.indexOf(user) === users.length - 1 ? 0 : users.indexOf(user) + 1 - ]; - return _user; - }, [user]); - - const buttons = [ - { - title: 'setString', - onPress: () => { - storage.setString('user', getUser()); - }, - }, - { - title: 'setMulti', - onPress: () => { - const user = getUser(); - console.log('setting user to', user); - storage.setMultipleItemsAsync([['user', user]], 'string'); - }, - }, - { - title: 'getMulti', - onPress: async () => { - console.log(await storage.getMultipleItemsAsync(['user'], 'string')); - }, - }, - { - title: 'setUser', - onPress: () => { - setUser(getUser()); - }, - }, - { - title: 'setAge', - onPress: () => { - setAge((age: number) => { - return age + 1; - }); - }, - }, - { - title: 'clearAll', - onPress: () => { - storage.clearStore(); - }, - }, - { - title: 'removeByKeys', - onPress: async () => { - const keys = await storage.indexer.getKeys(); - console.log(keys); - storage.removeItems(keys); - storage.clearStore(); - console.log(await storage.indexer.getKeys()); - }, - }, - ]; - - return ( - <> - - - - - I am {user} and I am {age} years old. - - - - {buttons.map(item => ( -