diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cfac840 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +squarenotsquare/ios/squarenotsquare.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +squarenotsquare/ios/squarenotsquare.xcworkspace/contents.xcworkspacedata +squarenotsquare/ios/squarenotsquare.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +.DS_Store diff --git a/README.md b/README.md index a328e9d..62d8dd2 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,32 @@ # squarenotsquare +## Dependencies +- Node version 18 + +## Running the app +- Clone the repo +- Navigate to the directory in a cli with node accessible +- Run the command **npm install** +- Wait for the installation to complete +- Start an Android or iOS simulator (or connect a device with USB debugging configured) +- In the cli, pass the command **npm run android** or **npm run ios** +- Wait for the build to complete and install on the device + +## Coding Conventions +- Lower-case single-word folder names +- Upper-case single-word file names +- Upper-case exports IF export is an object or reference +- Lower-case exports IF export is a function + +## Testing Scripts +- "npm run **test**": run all tests with minimal console output +- "npm run **testVerbose**": run all tests with all console output +- "npm run **testCoverage**": produce coverage report for all project code +- "npm run **testActionCreators**": only test action creators +- "npm run **testApp**": only test app screens and components +- "npm run **testMigrations**": only test database migrations +- "npm run **testRepos**": only test database repositories +- "npm run **testDB**": only test database setup and API calls +- "npm run **testNav**": only test navigation +- "npm run **testThemes**": only test app theming and styles setup +- "npm run **testServices**": only test app services \ No newline at end of file diff --git a/squarenotsquare/.gitignore b/squarenotsquare/.gitignore index 0574a1a..ff0a04c 100644 --- a/squarenotsquare/.gitignore +++ b/squarenotsquare/.gitignore @@ -63,8 +63,7 @@ buck-out/ /vendor/bundle/ #VScode -launch.json -settings.json +/.vscode/ #jest coverage/ \ No newline at end of file diff --git a/squarenotsquare/Launcher.js b/squarenotsquare/SquareNotSquare.js similarity index 100% rename from squarenotsquare/Launcher.js rename to squarenotsquare/SquareNotSquare.js diff --git a/squarenotsquare/__mock__/mockKeyStore.js b/squarenotsquare/__mock__/mockKeyStore.js index 4f681f4..60369e3 100644 --- a/squarenotsquare/__mock__/mockKeyStore.js +++ b/squarenotsquare/__mock__/mockKeyStore.js @@ -1,32 +1,29 @@ -class MockKeyStore { - async remove(key) { - if (key === 'notakey') { - throw ('Key not found'); - } - return true; + +export async function resetInternetCredentials(key) { + if (key === 'notakey') { + throw ('Key not found'); } + return true; +} - async set(key, value) { - if (key === 'savefailed'){ - throw ('Failed to save key'); - } - return true; +export async function setInternetCredentials(key, value, placeholder) { + if (key === 'savefailed'){ + throw ('Failed to save key'); } - - async get(key) { - if (key === 'isNull'){ - return null; - } else if (key === 'negTest') { - return '-1'; - } else if (key === 'notakey') { - throw ('Key not found'); - } else { - return '1234567890'; - } - } + return true; } -export default RNSecureKeyStore = new MockKeyStore(); +export async function getInternetCredentials(key) { + if (key === 'isNull'){ + return false; + } else if (key === 'negTest') { + return {username: '-1'}; + } else if (key === 'notakey') { + throw ('Key not found'); + } else { + return {username: '1234567890'}; + } +} export const ACCESSIBLE = { AFTER_FIRST_UNLOCK :'AccessibleAfterFirstUnlock', diff --git a/squarenotsquare/__mock__/mockMaterialIcons.js b/squarenotsquare/__mock__/mockMaterialIcons.js new file mode 100644 index 0000000..7a1dc3a --- /dev/null +++ b/squarenotsquare/__mock__/mockMaterialIcons.js @@ -0,0 +1,16 @@ +import React from "react"; +import { View } from "react-native"; + +function MaterialIcon (props) { + function loadFont(){ + return true; + } + + return ( + + + + ) +} + +export default MaterialIcon; \ No newline at end of file diff --git a/squarenotsquare/__mock__/mockRealm.js b/squarenotsquare/__mock__/mockRealm.js deleted file mode 100644 index e9fe715..0000000 --- a/squarenotsquare/__mock__/mockRealm.js +++ /dev/null @@ -1,135 +0,0 @@ -// https://github.com/realm/realm-js/issues/370#issuecomment-270849466 -export default class MockRealm { - constructor(params) { - this.schema = {}; - this.schemaVersion = params.schemaVersion; - this.callbackList = []; - this.data = {}; - this.schemaCallbackList = {}; - params.schema.forEach((schema) => { - this.data[schema.name] = {}; - }); - params.schema.forEach((schema) => { - this.schema[schema.name] = schema; - }); - this.lastLookedUpModel = null; - } - - objects(schemaName) { - this.lastLookedUpModel = schemaName; - const objects = Object.values(this.data[schemaName]); - objects.values = () => objects; - objects.sorted = () => this.compareFunc ? objects.sort(this.compareFunc) : objects.sort(); - objects.addListener = (cb) => { - if (this.schemaCallbackList[schemaName]) { - this.schemaCallbackList[schemaName].push(cb); - } else { - this.schemaCallbackList[schemaName] = [cb]; - } - }; - objects.removeListener = () => {}; - objects.filtered = this.filtered ? this.filtered.bind(this, schemaName) : () => objects; - return objects; - } - - write(fn) { - this.writing = true; - fn(); - this.writing = false; - } - - create(schemaName, object) { - const modelObject = object; - const properties = this.schema[schemaName].schema.properties; - Object.keys(properties).forEach((key) => { - if (modelObject[key] && modelObject[key].model) { - this.data[modelObject[key].model][modelObject[key].id] = this.create( - modelObject[key].model, modelObject[key], - ); - } else if (modelObject[key] && modelObject[key].length && modelObject[key][0].model) { - modelObject[key].forEach((obj) => { - this.data[modelObject[key][0].model][obj.id] = obj; - }); - modelObject[key].filtered = this.filtered ? this.filtered : () => modelObject[key]; - modelObject[key].sorted = () => modelObject[key].sort(); - } else if (modelObject[key] === undefined) { - if (typeof properties[key] === 'object' && properties[key].optional) { - modelObject[key] = null; - } - if (typeof properties[key] === 'object' && ['list', 'linkingObjects'].includes(properties[key].type)) { - modelObject[key] = []; - modelObject[key].filtered = () => []; - modelObject[key].sorted = () => []; - } - } - }); - - this.data[schemaName][modelObject.id] = modelObject; - if (this.writing) { - if (this.schemaCallbackList[schemaName]) { - this.schemaCallbackList[schemaName].forEach(cb => cb(schemaName, { - insertions: { length: 1 }, - modifications: { length: 0 }, - deletions: { length: 0 }, - })); - } - this.callbackList.forEach((cb) => { cb(); }); - } - return modelObject; - } - - objectForPrimaryKey(model, id) { - this.lastLookedUpModel = model; - return this.data[model][id]; - } - - delete(object) { - if (this.lastLookedUpModel || object.model) { - const model = object.model ? object.model : this.lastLookedUpModel - if (Array.isArray(object)) { - object.forEach((item) => { - delete this.data[model][item.id]; - }); - } - delete this.data[model][object.id]; - if (this.writing) { - if (this.schemaCallbackList[model]) { - this.schemaCallbackList[model].forEach(cb => cb(model, { - insertions: { length: 0 }, - modifications: { length: 0 }, - deletions: { length: 1 }, - })); - } - this.callbackList.forEach((cb) => { cb(); }); - } - } - } - - deleteAll() { - Object.keys(this.schema).forEach((key) => { - if (this.writing && this.schemaCallbackList[this.schema[key].name]) { - this.schemaCallbackList[this.schema[key].name].forEach(cb => cb(key, { - insertions: { length: 0 }, - modifications: { length: 0 }, - deletions: { length: Object.values(this.data[this.schema[key].name]).length }, - })); - } - this.data[this.schema[key].name] = {}; - }); - if (this.writing) this.callbackList.forEach((cb) => { cb(); }); - } - - addListener(event, callback) { - this.callbackList.push(callback); - } - - prepareData(schemaName, objects) { - objects.forEach((object) => { - this.create(schemaName, object); - }); - } - } - - MockRealm.Object = class Object { - isValid() { return true; } - }; \ No newline at end of file diff --git a/squarenotsquare/__mock__/mockRealmObject.js b/squarenotsquare/__mock__/mockRealmObject.js index cebcc79..3337e6a 100644 --- a/squarenotsquare/__mock__/mockRealmObject.js +++ b/squarenotsquare/__mock__/mockRealmObject.js @@ -19,6 +19,7 @@ export default class MockRealm{ objects(repoName){ let objects = this[repoName]; objects.filtered = this.filtered ? this.filtered.bind(this, repoName) : () => objects; + objects.sorted = this.sorted ? this.sorted.bind(this, repoName) : () => objects; return objects; } diff --git a/squarenotsquare/__tests__/App-test.js b/squarenotsquare/__tests__/App-test.js index 6ecec53..ba745e2 100644 --- a/squarenotsquare/__tests__/App-test.js +++ b/squarenotsquare/__tests__/App-test.js @@ -1,5 +1,7 @@ import 'react-native'; import React from 'react'; +import { Provider } from 'react-redux'; +import ConfigStore from '../src/redux/CreateStore'; // Note: test renderer must be required after react-native. import renderer from 'react-test-renderer'; @@ -7,27 +9,38 @@ import SquareStack from '../src/navigation/SquareStack'; import Game from '../src/screens/Game'; import HighScore from '../src/screens/HighScore'; import Home from '../src/screens/Home'; -import Settings from '../src/screens/Settings'; import Splash from '../src/screens/Splash'; +jest.useFakeTimers() it('renders square stack', () => { - renderer.create(); + const mockStore = ConfigStore; + renderer.create(); }); it('renders game component', () => { - renderer.create(); + const mockStore = ConfigStore; + renderer.create( + + + ); }); it('renders highscore component', () => { - renderer.create(); + const mockStore = ConfigStore; + renderer.create( + + + + ); }); it('renders home component', () => { - renderer.create(); -}); - -it('renders settings component', () => { - renderer.create(); + const mockStore = ConfigStore; + renderer.create( + + + + ); }); it('renders splash component', () => { diff --git a/squarenotsquare/__tests__/DB-test.js b/squarenotsquare/__tests__/DB-test.js index 09c6dbe..0907577 100644 --- a/squarenotsquare/__tests__/DB-test.js +++ b/squarenotsquare/__tests__/DB-test.js @@ -1,5 +1,5 @@ -import { initDB } from '../src/realm/dbInit'; -import dbAPI from '../src/realm/dbAPI'; +import { initDB } from '../src/realm/DbInit'; +import DbAPI from '../src/realm/DbAPI'; test('Realm DB inits', () => { return initDB('negTest', 'negTest') @@ -30,33 +30,33 @@ test('Realm DB returns null after exceptions', () => { }); test('dbAPI calls system repo getAllSystemValues()', () => { - return initDB('isNull', 'isNull') + return DbAPI.initDB('isNull', 'isNull') .then( () => { - let returned = dbAPI.getAllSystemValues(); + let returned = DbAPI.getAllSystemValues(); expect(returned).toEqual({}); }); }); test('dbAPI calls system repo createSystemValue()', () => { - return initDB('isNull', 'isNull') + return DbAPI.initDB('isNull', 'isNull') .then( () => { - let returned = dbAPI.createSystemValue(); + let returned = DbAPI.createSystemValue(); expect(returned).toEqual(true); }); }); test('dbAPI calls system repo deleteSystemValue()', () => { - return initDB('isNull', 'isNull') + return DbAPI.initDB('isNull', 'isNull') .then( () => { - let returned = dbAPI.deleteSystemValue(); + let returned = DbAPI.deleteSystemValue(); expect(returned).toEqual(true); }); }); test('dbAPI calls system repo getSystemValue()', () => { - return initDB('isNull', 'isNull') + return DbAPI.initDB('isNull', 'isNull') .then( () => { - let returned = dbAPI.getSystemValue('notakey'); + let returned = DbAPI.getSystemValue('notakey'); expect(returned.id).toEqual(null); }); }); \ No newline at end of file diff --git a/squarenotsquare/__tests__/Migration-test.js b/squarenotsquare/__tests__/Migration-test.js index 0448971..262e634 100644 --- a/squarenotsquare/__tests__/Migration-test.js +++ b/squarenotsquare/__tests__/Migration-test.js @@ -20,7 +20,7 @@ test('Realm migrates to V1', () => { migratev1(oldRealm, newRealm); expect(newRealm[SystemEntity.name][0].key).toBe('username'); - expect(newRealm[SystemEntity.name][0].value).toBe('changeme'); + expect(newRealm[SystemEntity.name][0].value).toBe('noname'); }) test('Realm halts V1 migration when schema is V2+', () => { diff --git a/squarenotsquare/__tests__/Nav-test.js b/squarenotsquare/__tests__/Nav-test.js index aaf784a..72a9255 100644 --- a/squarenotsquare/__tests__/Nav-test.js +++ b/squarenotsquare/__tests__/Nav-test.js @@ -1,6 +1,6 @@ -import { squareRef, navigate } from "../src/navigation/SquareNav"; +import { squareRef, squareNav } from "../src/navigation/SquareNav"; test('SquareNav calls navigation ref', () => { - let postNav = navigate('notascreen', {}); + let postNav = squareNav('notascreen', {}); expect(postNav).toEqual(true); }); \ No newline at end of file diff --git a/squarenotsquare/__tests__/Redux-test.js b/squarenotsquare/__tests__/Redux-test.js index 6a4d7d5..63139ed 100644 --- a/squarenotsquare/__tests__/Redux-test.js +++ b/squarenotsquare/__tests__/Redux-test.js @@ -1,5 +1,4 @@ import configStore from '../src/redux/CreateStore'; -import {navReducer} from '../src/redux/reducers/NavReducer'; import {systemReducer} from '../src/redux/reducers/SystemReducer'; import rootReducer from '../src/redux/reducers/RootReducer'; import { APP_INIT } from '../src/redux/types/SystemTypes'; @@ -13,11 +12,6 @@ test('rootReducer constructs', () => { expect(rootReducer).toEqual(expect.anything()); }) -test('navReducer response to app-init', () => { - let nextState = navReducer({}, {type: APP_INIT}); - expect(nextState).toEqual({}); -}) - test('systemReducer response to app-init', () => { let nextState = systemReducer.system({}, {type: APP_INIT, system: {value: 0}}); expect(nextState.value).toEqual(0); diff --git a/squarenotsquare/android/app/build.gradle b/squarenotsquare/android/app/build.gradle index 9117853..180c638 100644 --- a/squarenotsquare/android/app/build.gradle +++ b/squarenotsquare/android/app/build.gradle @@ -310,6 +310,7 @@ task copyDownloadableDepsToLibs(type: Copy) { } apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) +apply from: "../../node_modules/react-native-vector-icons/fonts.gradle" def isNewArchitectureEnabled() { // To opt-in for the New Architecture, you can either: diff --git a/squarenotsquare/android/app/src/main/assets/squarelogo.png b/squarenotsquare/android/app/src/main/assets/squarelogo.png new file mode 100644 index 0000000..7f3925c Binary files /dev/null and b/squarenotsquare/android/app/src/main/assets/squarelogo.png differ diff --git a/squarenotsquare/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/squarenotsquare/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index a2f5908..385a506 100644 Binary files a/squarenotsquare/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/squarenotsquare/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/squarenotsquare/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/squarenotsquare/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png index 1b52399..966a881 100644 Binary files a/squarenotsquare/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and b/squarenotsquare/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/squarenotsquare/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/squarenotsquare/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index ff10afd..b8caae6 100644 Binary files a/squarenotsquare/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/squarenotsquare/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/squarenotsquare/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/squarenotsquare/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png index 115a4c7..7bd6c44 100644 Binary files a/squarenotsquare/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and b/squarenotsquare/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/squarenotsquare/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/squarenotsquare/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png index dcd3cd8..0c8c603 100644 Binary files a/squarenotsquare/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/squarenotsquare/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/squarenotsquare/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/squarenotsquare/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png index 459ca60..c4e9d13 100644 Binary files a/squarenotsquare/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and b/squarenotsquare/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/squarenotsquare/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/squarenotsquare/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index 8ca12fe..fd7f31c 100644 Binary files a/squarenotsquare/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/squarenotsquare/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/squarenotsquare/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/squarenotsquare/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png index 8e19b41..da91d48 100644 Binary files a/squarenotsquare/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and b/squarenotsquare/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/squarenotsquare/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/squarenotsquare/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index b824ebd..b9db5c3 100644 Binary files a/squarenotsquare/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/squarenotsquare/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/squarenotsquare/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/squarenotsquare/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png index 4c19a13..f552dd6 100644 Binary files a/squarenotsquare/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and b/squarenotsquare/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/squarenotsquare/index.js b/squarenotsquare/index.js index 16b4988..0b2853c 100644 --- a/squarenotsquare/index.js +++ b/squarenotsquare/index.js @@ -1,11 +1,14 @@ import React from 'react'; import {AppRegistry} from 'react-native'; import {name as appName} from './app.json'; -import SquareNotSquare from './Launcher'; -import configStore from './src/redux/CreateStore'; +import SquareNotSquare from './SquareNotSquare'; +import ConfigStore from './src/redux/CreateStore'; import { appInit } from './src/redux/actions/SystemActions'; +import MaterialIcon from 'react-native-vector-icons/MaterialCommunityIcons'; -const squareStore = configStore; +//fix vector icons bug +MaterialIcon.loadFont(); +const squareStore = ConfigStore; squareStore.dispatch(appInit()); const ProppedContainer = () => { diff --git a/squarenotsquare/ios/Podfile.lock b/squarenotsquare/ios/Podfile.lock new file mode 100644 index 0000000..83e107e --- /dev/null +++ b/squarenotsquare/ios/Podfile.lock @@ -0,0 +1,604 @@ +PODS: + - boost (1.76.0) + - CocoaAsyncSocket (7.6.5) + - DoubleConversion (1.1.6) + - FBLazyVector (0.69.2) + - FBReactNativeSpec (0.69.2): + - RCT-Folly (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.2) + - RCTTypeSafety (= 0.69.2) + - React-Core (= 0.69.2) + - React-jsi (= 0.69.2) + - ReactCommon/turbomodule/core (= 0.69.2) + - Flipper (0.125.0): + - Flipper-Folly (~> 2.6) + - Flipper-RSocket (~> 1.4) + - Flipper-Boost-iOSX (1.76.0.1.11) + - Flipper-DoubleConversion (3.2.0.1) + - Flipper-Fmt (7.1.7) + - Flipper-Folly (2.6.10): + - Flipper-Boost-iOSX + - Flipper-DoubleConversion + - Flipper-Fmt (= 7.1.7) + - Flipper-Glog + - libevent (~> 2.1.12) + - OpenSSL-Universal (= 1.1.1100) + - Flipper-Glog (0.5.0.5) + - Flipper-PeerTalk (0.0.4) + - Flipper-RSocket (1.4.3): + - Flipper-Folly (~> 2.6) + - FlipperKit (0.125.0): + - FlipperKit/Core (= 0.125.0) + - FlipperKit/Core (0.125.0): + - Flipper (~> 0.125.0) + - FlipperKit/CppBridge + - FlipperKit/FBCxxFollyDynamicConvert + - FlipperKit/FBDefines + - FlipperKit/FKPortForwarding + - SocketRocket (~> 0.6.0) + - FlipperKit/CppBridge (0.125.0): + - Flipper (~> 0.125.0) + - FlipperKit/FBCxxFollyDynamicConvert (0.125.0): + - Flipper-Folly (~> 2.6) + - FlipperKit/FBDefines (0.125.0) + - FlipperKit/FKPortForwarding (0.125.0): + - CocoaAsyncSocket (~> 7.6) + - Flipper-PeerTalk (~> 0.0.4) + - FlipperKit/FlipperKitHighlightOverlay (0.125.0) + - FlipperKit/FlipperKitLayoutHelpers (0.125.0): + - FlipperKit/Core + - FlipperKit/FlipperKitHighlightOverlay + - FlipperKit/FlipperKitLayoutTextSearchable + - FlipperKit/FlipperKitLayoutIOSDescriptors (0.125.0): + - FlipperKit/Core + - FlipperKit/FlipperKitHighlightOverlay + - FlipperKit/FlipperKitLayoutHelpers + - YogaKit (~> 1.18) + - FlipperKit/FlipperKitLayoutPlugin (0.125.0): + - FlipperKit/Core + - FlipperKit/FlipperKitHighlightOverlay + - FlipperKit/FlipperKitLayoutHelpers + - FlipperKit/FlipperKitLayoutIOSDescriptors + - FlipperKit/FlipperKitLayoutTextSearchable + - YogaKit (~> 1.18) + - FlipperKit/FlipperKitLayoutTextSearchable (0.125.0) + - FlipperKit/FlipperKitNetworkPlugin (0.125.0): + - FlipperKit/Core + - FlipperKit/FlipperKitReactPlugin (0.125.0): + - FlipperKit/Core + - FlipperKit/FlipperKitUserDefaultsPlugin (0.125.0): + - FlipperKit/Core + - FlipperKit/SKIOSNetworkPlugin (0.125.0): + - FlipperKit/Core + - FlipperKit/FlipperKitNetworkPlugin + - fmt (6.2.1) + - GCDWebServer (3.5.4): + - GCDWebServer/Core (= 3.5.4) + - GCDWebServer/Core (3.5.4) + - glog (0.3.5) + - libevent (2.1.12) + - OpenSSL-Universal (1.1.1100) + - RCT-Folly (2021.06.28.00-v2): + - boost + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - RCT-Folly/Default (= 2021.06.28.00-v2) + - RCT-Folly/Default (2021.06.28.00-v2): + - boost + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - RCTRequired (0.69.2) + - RCTTypeSafety (0.69.2): + - FBLazyVector (= 0.69.2) + - RCTRequired (= 0.69.2) + - React-Core (= 0.69.2) + - React (0.69.2): + - React-Core (= 0.69.2) + - React-Core/DevSupport (= 0.69.2) + - React-Core/RCTWebSocket (= 0.69.2) + - React-RCTActionSheet (= 0.69.2) + - React-RCTAnimation (= 0.69.2) + - React-RCTBlob (= 0.69.2) + - React-RCTImage (= 0.69.2) + - React-RCTLinking (= 0.69.2) + - React-RCTNetwork (= 0.69.2) + - React-RCTSettings (= 0.69.2) + - React-RCTText (= 0.69.2) + - React-RCTVibration (= 0.69.2) + - React-bridging (0.69.2): + - RCT-Folly (= 2021.06.28.00-v2) + - React-jsi (= 0.69.2) + - React-callinvoker (0.69.2) + - React-Codegen (0.69.2): + - FBReactNativeSpec (= 0.69.2) + - RCT-Folly (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.2) + - RCTTypeSafety (= 0.69.2) + - React-Core (= 0.69.2) + - React-jsi (= 0.69.2) + - React-jsiexecutor (= 0.69.2) + - ReactCommon/turbomodule/core (= 0.69.2) + - React-Core (0.69.2): + - glog + - RCT-Folly (= 2021.06.28.00-v2) + - React-Core/Default (= 0.69.2) + - React-cxxreact (= 0.69.2) + - React-jsi (= 0.69.2) + - React-jsiexecutor (= 0.69.2) + - React-perflogger (= 0.69.2) + - Yoga + - React-Core/CoreModulesHeaders (0.69.2): + - glog + - RCT-Folly (= 2021.06.28.00-v2) + - React-Core/Default + - React-cxxreact (= 0.69.2) + - React-jsi (= 0.69.2) + - React-jsiexecutor (= 0.69.2) + - React-perflogger (= 0.69.2) + - Yoga + - React-Core/Default (0.69.2): + - glog + - RCT-Folly (= 2021.06.28.00-v2) + - React-cxxreact (= 0.69.2) + - React-jsi (= 0.69.2) + - React-jsiexecutor (= 0.69.2) + - React-perflogger (= 0.69.2) + - Yoga + - React-Core/DevSupport (0.69.2): + - glog + - RCT-Folly (= 2021.06.28.00-v2) + - React-Core/Default (= 0.69.2) + - React-Core/RCTWebSocket (= 0.69.2) + - React-cxxreact (= 0.69.2) + - React-jsi (= 0.69.2) + - React-jsiexecutor (= 0.69.2) + - React-jsinspector (= 0.69.2) + - React-perflogger (= 0.69.2) + - Yoga + - React-Core/RCTActionSheetHeaders (0.69.2): + - glog + - RCT-Folly (= 2021.06.28.00-v2) + - React-Core/Default + - React-cxxreact (= 0.69.2) + - React-jsi (= 0.69.2) + - React-jsiexecutor (= 0.69.2) + - React-perflogger (= 0.69.2) + - Yoga + - React-Core/RCTAnimationHeaders (0.69.2): + - glog + - RCT-Folly (= 2021.06.28.00-v2) + - React-Core/Default + - React-cxxreact (= 0.69.2) + - React-jsi (= 0.69.2) + - React-jsiexecutor (= 0.69.2) + - React-perflogger (= 0.69.2) + - Yoga + - React-Core/RCTBlobHeaders (0.69.2): + - glog + - RCT-Folly (= 2021.06.28.00-v2) + - React-Core/Default + - React-cxxreact (= 0.69.2) + - React-jsi (= 0.69.2) + - React-jsiexecutor (= 0.69.2) + - React-perflogger (= 0.69.2) + - Yoga + - React-Core/RCTImageHeaders (0.69.2): + - glog + - RCT-Folly (= 2021.06.28.00-v2) + - React-Core/Default + - React-cxxreact (= 0.69.2) + - React-jsi (= 0.69.2) + - React-jsiexecutor (= 0.69.2) + - React-perflogger (= 0.69.2) + - Yoga + - React-Core/RCTLinkingHeaders (0.69.2): + - glog + - RCT-Folly (= 2021.06.28.00-v2) + - React-Core/Default + - React-cxxreact (= 0.69.2) + - React-jsi (= 0.69.2) + - React-jsiexecutor (= 0.69.2) + - React-perflogger (= 0.69.2) + - Yoga + - React-Core/RCTNetworkHeaders (0.69.2): + - glog + - RCT-Folly (= 2021.06.28.00-v2) + - React-Core/Default + - React-cxxreact (= 0.69.2) + - React-jsi (= 0.69.2) + - React-jsiexecutor (= 0.69.2) + - React-perflogger (= 0.69.2) + - Yoga + - React-Core/RCTSettingsHeaders (0.69.2): + - glog + - RCT-Folly (= 2021.06.28.00-v2) + - React-Core/Default + - React-cxxreact (= 0.69.2) + - React-jsi (= 0.69.2) + - React-jsiexecutor (= 0.69.2) + - React-perflogger (= 0.69.2) + - Yoga + - React-Core/RCTTextHeaders (0.69.2): + - glog + - RCT-Folly (= 2021.06.28.00-v2) + - React-Core/Default + - React-cxxreact (= 0.69.2) + - React-jsi (= 0.69.2) + - React-jsiexecutor (= 0.69.2) + - React-perflogger (= 0.69.2) + - Yoga + - React-Core/RCTVibrationHeaders (0.69.2): + - glog + - RCT-Folly (= 2021.06.28.00-v2) + - React-Core/Default + - React-cxxreact (= 0.69.2) + - React-jsi (= 0.69.2) + - React-jsiexecutor (= 0.69.2) + - React-perflogger (= 0.69.2) + - Yoga + - React-Core/RCTWebSocket (0.69.2): + - glog + - RCT-Folly (= 2021.06.28.00-v2) + - React-Core/Default (= 0.69.2) + - React-cxxreact (= 0.69.2) + - React-jsi (= 0.69.2) + - React-jsiexecutor (= 0.69.2) + - React-perflogger (= 0.69.2) + - Yoga + - React-CoreModules (0.69.2): + - RCT-Folly (= 2021.06.28.00-v2) + - RCTTypeSafety (= 0.69.2) + - React-Codegen (= 0.69.2) + - React-Core/CoreModulesHeaders (= 0.69.2) + - React-jsi (= 0.69.2) + - React-RCTImage (= 0.69.2) + - ReactCommon/turbomodule/core (= 0.69.2) + - React-cxxreact (0.69.2): + - boost (= 1.76.0) + - DoubleConversion + - glog + - RCT-Folly (= 2021.06.28.00-v2) + - React-callinvoker (= 0.69.2) + - React-jsi (= 0.69.2) + - React-jsinspector (= 0.69.2) + - React-logger (= 0.69.2) + - React-perflogger (= 0.69.2) + - React-runtimeexecutor (= 0.69.2) + - React-jsi (0.69.2): + - boost (= 1.76.0) + - DoubleConversion + - glog + - RCT-Folly (= 2021.06.28.00-v2) + - React-jsi/Default (= 0.69.2) + - React-jsi/Default (0.69.2): + - boost (= 1.76.0) + - DoubleConversion + - glog + - RCT-Folly (= 2021.06.28.00-v2) + - React-jsiexecutor (0.69.2): + - DoubleConversion + - glog + - RCT-Folly (= 2021.06.28.00-v2) + - React-cxxreact (= 0.69.2) + - React-jsi (= 0.69.2) + - React-perflogger (= 0.69.2) + - React-jsinspector (0.69.2) + - React-logger (0.69.2): + - glog + - react-native-get-random-values (1.8.0): + - React-Core + - react-native-safe-area-context (4.3.1): + - RCT-Folly + - RCTRequired + - RCTTypeSafety + - React + - ReactCommon/turbomodule/core + - React-perflogger (0.69.2) + - React-RCTActionSheet (0.69.2): + - React-Core/RCTActionSheetHeaders (= 0.69.2) + - React-RCTAnimation (0.69.2): + - RCT-Folly (= 2021.06.28.00-v2) + - RCTTypeSafety (= 0.69.2) + - React-Codegen (= 0.69.2) + - React-Core/RCTAnimationHeaders (= 0.69.2) + - React-jsi (= 0.69.2) + - ReactCommon/turbomodule/core (= 0.69.2) + - React-RCTBlob (0.69.2): + - RCT-Folly (= 2021.06.28.00-v2) + - React-Codegen (= 0.69.2) + - React-Core/RCTBlobHeaders (= 0.69.2) + - React-Core/RCTWebSocket (= 0.69.2) + - React-jsi (= 0.69.2) + - React-RCTNetwork (= 0.69.2) + - ReactCommon/turbomodule/core (= 0.69.2) + - React-RCTImage (0.69.2): + - RCT-Folly (= 2021.06.28.00-v2) + - RCTTypeSafety (= 0.69.2) + - React-Codegen (= 0.69.2) + - React-Core/RCTImageHeaders (= 0.69.2) + - React-jsi (= 0.69.2) + - React-RCTNetwork (= 0.69.2) + - ReactCommon/turbomodule/core (= 0.69.2) + - React-RCTLinking (0.69.2): + - React-Codegen (= 0.69.2) + - React-Core/RCTLinkingHeaders (= 0.69.2) + - React-jsi (= 0.69.2) + - ReactCommon/turbomodule/core (= 0.69.2) + - React-RCTNetwork (0.69.2): + - RCT-Folly (= 2021.06.28.00-v2) + - RCTTypeSafety (= 0.69.2) + - React-Codegen (= 0.69.2) + - React-Core/RCTNetworkHeaders (= 0.69.2) + - React-jsi (= 0.69.2) + - ReactCommon/turbomodule/core (= 0.69.2) + - React-RCTSettings (0.69.2): + - RCT-Folly (= 2021.06.28.00-v2) + - RCTTypeSafety (= 0.69.2) + - React-Codegen (= 0.69.2) + - React-Core/RCTSettingsHeaders (= 0.69.2) + - React-jsi (= 0.69.2) + - ReactCommon/turbomodule/core (= 0.69.2) + - React-RCTText (0.69.2): + - React-Core/RCTTextHeaders (= 0.69.2) + - React-RCTVibration (0.69.2): + - RCT-Folly (= 2021.06.28.00-v2) + - React-Codegen (= 0.69.2) + - React-Core/RCTVibrationHeaders (= 0.69.2) + - React-jsi (= 0.69.2) + - ReactCommon/turbomodule/core (= 0.69.2) + - React-runtimeexecutor (0.69.2): + - React-jsi (= 0.69.2) + - ReactCommon/turbomodule/core (0.69.2): + - DoubleConversion + - glog + - RCT-Folly (= 2021.06.28.00-v2) + - React-bridging (= 0.69.2) + - React-callinvoker (= 0.69.2) + - React-Core (= 0.69.2) + - React-cxxreact (= 0.69.2) + - React-jsi (= 0.69.2) + - React-logger (= 0.69.2) + - React-perflogger (= 0.69.2) + - RealmJS (10.19.5): + - GCDWebServer + - React + - RNGestureHandler (2.5.0): + - React-Core + - RNKeychain (8.1.1): + - React-Core + - RNScreens (3.15.0): + - React-Core + - React-RCTImage + - RNVectorIcons (9.2.0): + - React-Core + - SocketRocket (0.6.0) + - Yoga (1.14.0) + - YogaKit (1.18.1): + - Yoga (~> 1.14) + +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`) + - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`) + - Flipper (= 0.125.0) + - Flipper-Boost-iOSX (= 1.76.0.1.11) + - Flipper-DoubleConversion (= 3.2.0.1) + - Flipper-Fmt (= 7.1.7) + - Flipper-Folly (= 2.6.10) + - Flipper-Glog (= 0.5.0.5) + - Flipper-PeerTalk (= 0.0.4) + - Flipper-RSocket (= 1.4.3) + - FlipperKit (= 0.125.0) + - FlipperKit/Core (= 0.125.0) + - FlipperKit/CppBridge (= 0.125.0) + - FlipperKit/FBCxxFollyDynamicConvert (= 0.125.0) + - FlipperKit/FBDefines (= 0.125.0) + - FlipperKit/FKPortForwarding (= 0.125.0) + - FlipperKit/FlipperKitHighlightOverlay (= 0.125.0) + - FlipperKit/FlipperKitLayoutPlugin (= 0.125.0) + - FlipperKit/FlipperKitLayoutTextSearchable (= 0.125.0) + - FlipperKit/FlipperKitNetworkPlugin (= 0.125.0) + - FlipperKit/FlipperKitReactPlugin (= 0.125.0) + - FlipperKit/FlipperKitUserDefaultsPlugin (= 0.125.0) + - FlipperKit/SKIOSNetworkPlugin (= 0.125.0) + - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) + - OpenSSL-Universal (= 1.1.1100) + - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) + - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`) + - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) + - React (from `../node_modules/react-native/`) + - React-bridging (from `../node_modules/react-native/ReactCommon`) + - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) + - React-Codegen (from `build/generated/ios`) + - React-Core (from `../node_modules/react-native/`) + - React-Core/DevSupport (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-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`) + - React-logger (from `../node_modules/react-native/ReactCommon/logger`) + - react-native-get-random-values (from `../node_modules/react-native-get-random-values`) + - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) + - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) + - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) + - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) + - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) + - 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-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) + - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) + - RealmJS (from `../node_modules/realm`) + - RNGestureHandler (from `../node_modules/react-native-gesture-handler`) + - RNKeychain (from `../node_modules/react-native-keychain`) + - RNScreens (from `../node_modules/react-native-screens`) + - RNVectorIcons (from `../node_modules/react-native-vector-icons`) + - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) + +SPEC REPOS: + trunk: + - CocoaAsyncSocket + - Flipper + - Flipper-Boost-iOSX + - Flipper-DoubleConversion + - Flipper-Fmt + - Flipper-Folly + - Flipper-Glog + - Flipper-PeerTalk + - Flipper-RSocket + - FlipperKit + - fmt + - GCDWebServer + - libevent + - OpenSSL-Universal + - SocketRocket + - YogaKit + +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" + FBReactNativeSpec: + :path: "../node_modules/react-native/React/FBReactNativeSpec" + glog: + :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" + RCT-Folly: + :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" + RCTRequired: + :path: "../node_modules/react-native/Libraries/RCTRequired" + RCTTypeSafety: + :path: "../node_modules/react-native/Libraries/TypeSafety" + React: + :path: "../node_modules/react-native/" + React-bridging: + :path: "../node_modules/react-native/ReactCommon" + React-callinvoker: + :path: "../node_modules/react-native/ReactCommon/callinvoker" + React-Codegen: + :path: build/generated/ios + 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-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" + React-logger: + :path: "../node_modules/react-native/ReactCommon/logger" + react-native-get-random-values: + :path: "../node_modules/react-native-get-random-values" + react-native-safe-area-context: + :path: "../node_modules/react-native-safe-area-context" + React-perflogger: + :path: "../node_modules/react-native/ReactCommon/reactperflogger" + React-RCTActionSheet: + :path: "../node_modules/react-native/Libraries/ActionSheetIOS" + React-RCTAnimation: + :path: "../node_modules/react-native/Libraries/NativeAnimation" + React-RCTBlob: + :path: "../node_modules/react-native/Libraries/Blob" + 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-runtimeexecutor: + :path: "../node_modules/react-native/ReactCommon/runtimeexecutor" + ReactCommon: + :path: "../node_modules/react-native/ReactCommon" + RealmJS: + :path: "../node_modules/realm" + RNGestureHandler: + :path: "../node_modules/react-native-gesture-handler" + RNKeychain: + :path: "../node_modules/react-native-keychain" + RNScreens: + :path: "../node_modules/react-native-screens" + RNVectorIcons: + :path: "../node_modules/react-native-vector-icons" + Yoga: + :path: "../node_modules/react-native/ReactCommon/yoga" + +SPEC CHECKSUMS: + boost: a7c83b31436843459a1961bfd74b96033dc77234 + CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99 + DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54 + FBLazyVector: e3c1479be506060131807f2f2435af5107c58410 + FBReactNativeSpec: 1381e8c4230895b6c2d20cea6b216ac7096a95f0 + Flipper: 26fc4b7382499f1281eb8cb921e5c3ad6de91fe0 + Flipper-Boost-iOSX: fd1e2b8cbef7e662a122412d7ac5f5bea715403c + Flipper-DoubleConversion: 2dc99b02f658daf147069aad9dbd29d8feb06d30 + Flipper-Fmt: 60cbdd92fc254826e61d669a5d87ef7015396a9b + Flipper-Folly: 584845625005ff068a6ebf41f857f468decd26b3 + Flipper-Glog: 70c50ce58ddaf67dc35180db05f191692570f446 + Flipper-PeerTalk: 116d8f857dc6ef55c7a5a75ea3ceaafe878aadc9 + Flipper-RSocket: d9d9ade67cbecf6ac10730304bf5607266dd2541 + FlipperKit: cbdee19bdd4e7f05472a66ce290f1b729ba3cb86 + fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9 + GCDWebServer: 2c156a56c8226e2d5c0c3f208a3621ccffbe3ce4 + glog: 3d02b25ca00c2d456734d0bcff864cbc62f6ae1a + libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913 + OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c + RCT-Folly: b9d9fe1fc70114b751c076104e52f3b1b5e5a95a + RCTRequired: b723d4d6da2795df58189a01f92856b6912cf256 + RCTTypeSafety: 3973d2fcf39f43f7819e840d56ea6b2fe45996a0 + React: 242d4ffb093ed57c4761307a69b23b2479930ae9 + React-bridging: 66938204bc9d703b9c357201a40bf498aeb14412 + React-callinvoker: bf0a87845bc3158eec32be848bd9546e79d6dd25 + React-Codegen: e5c04fc987e909433915f247699402ece1955aa0 + React-Core: 5acd5715010b56d23846859b3a68c316dad09d5b + React-CoreModules: 73db18e3aaf5e29f73e4b7c9ddf6ead823795d06 + React-cxxreact: 0fc57a199d2d69c0e0401c9eab944be9b972bf1b + React-jsi: f845df5e8fd5688cab3cdaaa06f5413e791a01bd + React-jsiexecutor: 7c23e92591431ac925f430b3118de934cb816ac0 + React-jsinspector: 31e53f048cc8f32605de36981903a7bbf9456892 + React-logger: 9a6c684d5cd56c4129e0c2842dba75c4bfb1e981 + react-native-get-random-values: a6ea6a8a65dc93e96e24a11105b1a9c8cfe1d72a + react-native-safe-area-context: 6c12e3859b6f27b25de4fee8201cfb858432d8de + React-perflogger: 281c34e42f13245c7a4d6932364d9182f8655e1a + React-RCTActionSheet: 92f4292754a1b4a0e42bf9b1489206a06f878929 + React-RCTAnimation: 2a5bb5549758e4e594481633f3db649d11519f75 + React-RCTBlob: cf573ac95fc612ed4440cad0b92161722430de87 + React-RCTImage: af8b9a46a743937db396fcb43320f57b570661dc + React-RCTLinking: 81029ed5767d2a2c13c03caeed32f87b72e73838 + React-RCTNetwork: 24c2b13acdcd43af39b2da90584c92e7799ee366 + React-RCTSettings: 028b0e20ff60d2c7ba47cedec8e99e69b6691c40 + React-RCTText: 6d17c2aead07b9de7ddc8765b580d0fb4b1d2e50 + React-RCTVibration: 0d07f00705b5f11e88aaaaf9131f5e1785d4bd6e + React-runtimeexecutor: 8030b9cf9b9e87b878d92da680b55b5e74c58e70 + ReactCommon: a9414b91f0d19de002b55d9f4f6cb176d6dd8452 + RealmJS: 400aac2267a47b25fcc2b6321e8a419282719d16 + RNGestureHandler: bad495418bcbd3ab47017a38d93d290ebd406f50 + RNKeychain: ff836453cba46938e0e9e4c22e43d43fa2c90333 + RNScreens: 4a1af06327774490d97342c00aee0c2bafb497b7 + RNVectorIcons: fcc2f6cb32f5735b586e66d14103a74ce6ad61f8 + SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608 + Yoga: 236056dd74cda4d9d76c20306fd8c20bb087614d + YogaKit: f782866e155069a2cca2517aafea43200b01fd5a + +PODFILE CHECKSUM: d581c290a90c94822dda89c7b1468491518584f1 + +COCOAPODS: 1.11.3 diff --git a/squarenotsquare/ios/squarenotsquare.xcodeproj/project.pbxproj b/squarenotsquare/ios/squarenotsquare.xcodeproj/project.pbxproj index c3505fb..c5e0267 100644 --- a/squarenotsquare/ios/squarenotsquare.xcodeproj/project.pbxproj +++ b/squarenotsquare/ios/squarenotsquare.xcodeproj/project.pbxproj @@ -14,6 +14,7 @@ 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 7699B88040F8A987B510C191 /* libPods-squarenotsquare-squarenotsquareTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-squarenotsquare-squarenotsquareTests.a */; }; 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; + A00B4610289C8148008607EC /* squarelogo.png in Resources */ = {isa = PBXBuildFile; fileRef = A00B460F289C8148008607EC /* squarelogo.png */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -43,6 +44,7 @@ 5DCACB8F33CDC322A6C60F78 /* libPods-squarenotsquare.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-squarenotsquare.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = squarenotsquare/LaunchScreen.storyboard; sourceTree = ""; }; 89C6BE57DB24E9ADA2F236DE /* Pods-squarenotsquare-squarenotsquareTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-squarenotsquare-squarenotsquareTests.release.xcconfig"; path = "Target Support Files/Pods-squarenotsquare-squarenotsquareTests/Pods-squarenotsquare-squarenotsquareTests.release.xcconfig"; sourceTree = ""; }; + A00B460F289C8148008607EC /* squarelogo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = squarelogo.png; path = squarenotsquare/squarelogo.png; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; /* End PBXFileReference section */ @@ -89,6 +91,7 @@ 13B07FAF1A68108700A75B9A /* AppDelegate.h */, 13B07FB01A68108700A75B9A /* AppDelegate.mm */, 13B07FB51A68108700A75B9A /* Images.xcassets */, + A00B460F289C8148008607EC /* squarelogo.png */, 13B07FB61A68108700A75B9A /* Info.plist */, 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */, 13B07FB71A68108700A75B9A /* main.m */, @@ -243,6 +246,7 @@ buildActionMask = 2147483647; files = ( 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */, + A00B4610289C8148008607EC /* squarelogo.png in Resources */, 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -596,6 +600,7 @@ "-DFOLLY_MOBILE=1", "-DFOLLY_USE_LIBCPP=1", ); + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; }; name = Debug; @@ -659,6 +664,7 @@ "-DFOLLY_MOBILE=1", "-DFOLLY_USE_LIBCPP=1", ); + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; diff --git a/squarenotsquare/ios/squarenotsquare/squarelogo.png b/squarenotsquare/ios/squarenotsquare/squarelogo.png new file mode 100644 index 0000000..7f3925c Binary files /dev/null and b/squarenotsquare/ios/squarenotsquare/squarelogo.png differ diff --git a/squarenotsquare/jest.config.js b/squarenotsquare/jest.config.js index 9e0fac9..9a7b2dd 100644 --- a/squarenotsquare/jest.config.js +++ b/squarenotsquare/jest.config.js @@ -6,9 +6,10 @@ module.exports = { moduleDirectories: ['node_modules', 'src'], moduleNameMapper: { // '@react-native-firebase/messaging: '/__mock__/mockFirebase.js', - 'react-native-secure-key-store': '/__mock__/mockKeyStore.js', + 'react-native-keychain': '/__mock__/mockKeyStore.js', '\\.(jpg|ico|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': '/__mock__/file.js', - '^(realm)': '/__mock__/mockRealmObject' + '^(realm)': '/__mock__/mockRealmObject', + 'react-native-vector-icons/MaterialCommunityIcons': '/__mock__/mockMaterialIcons' }, transform: { '^.+\\.(ts|tsx)?$': 'ts-jest', diff --git a/squarenotsquare/package-lock.json b/squarenotsquare/package-lock.json index d2b1e74..986c99b 100644 --- a/squarenotsquare/package-lock.json +++ b/squarenotsquare/package-lock.json @@ -15,9 +15,9 @@ "react-native": "0.69.2", "react-native-gesture-handler": "^2.5.0", "react-native-get-random-values": "^1.8.0", + "react-native-keychain": "^8.1.1", "react-native-safe-area-context": "^4.3.1", "react-native-screens": "^3.15.0", - "react-native-secure-key-store": "^2.0.9", "react-native-vector-icons": "^9.2.0", "react-redux": "^8.0.2", "realm": "^10.19.5", @@ -28,11 +28,14 @@ "devDependencies": { "@babel/core": "^7.12.9", "@babel/runtime": "^7.12.5", + "@react-native-community/cli": "^8.0.1", + "@react-native-community/cli-platform-ios": "^7.0.1", "@react-native-community/eslint-config": "^2.0.0", "babel-jest": "^28.0.0", "eslint": "^7.32.0", "jest": "^28.0.0", "metro-react-native-babel-preset": "^0.70.3", + "react-native-cli": "^2.0.1", "react-test-renderer": "18.0.0", "redux-logger": "^3.0.6", "redux-mock-store": "^1.5.4", @@ -3288,15 +3291,16 @@ } }, "node_modules/@react-native-community/cli": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-8.0.3.tgz", - "integrity": "sha512-7gY7QCEdpYDbvbdZBt6w64YPExLoiUpH/lVRaR4tKl6JalqXzrUotOJnBOS/qEC4q0nk0WXsiC5EkuiSliKS5Q==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-8.0.1.tgz", + "integrity": "sha512-0bZ2x2MPQPdVOxv80WsD22pvMqcs9MnKwfWbQ+vavEr5OEd4H60r4rgl/LaiSq+f22+RHm9CAe9r4EDlLMC/Ag==", + "dev": true, "dependencies": { "@react-native-community/cli-clean": "^8.0.0", - "@react-native-community/cli-config": "^8.0.3", + "@react-native-community/cli-config": "^8.0.1", "@react-native-community/cli-debugger-ui": "^8.0.0", - "@react-native-community/cli-doctor": "^8.0.3", - "@react-native-community/cli-hermes": "^8.0.2", + "@react-native-community/cli-doctor": "^8.0.1", + "@react-native-community/cli-hermes": "^8.0.0", "@react-native-community/cli-plugin-metro": "^8.0.0", "@react-native-community/cli-server-api": "^8.0.0", "@react-native-community/cli-tools": "^8.0.0", @@ -3324,11 +3328,11 @@ } }, "node_modules/@react-native-community/cli-clean": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-8.0.0.tgz", - "integrity": "sha512-VY/kwyH5xp6oXiB9bcwa+I9W5k6WR/nX3s85FuMW76hSlgG1UVAGL04uZPwYlSmMZuSOSuoXOaIjJ7wAvQMBpg==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-8.0.4.tgz", + "integrity": "sha512-IwS1M1NHg6+qL8PThZYMSIMYbZ6Zbx+lIck9PLBskbosFo24M3lCOflOl++Bggjakp6mR+sRXxLMexid/GeOsQ==", "dependencies": { - "@react-native-community/cli-tools": "^8.0.0", + "@react-native-community/cli-tools": "^8.0.4", "chalk": "^4.1.2", "execa": "^1.0.0", "prompts": "^2.4.0" @@ -3507,11 +3511,11 @@ } }, "node_modules/@react-native-community/cli-config": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-8.0.3.tgz", - "integrity": "sha512-QhLU6QZywkoO4FzpeEkdoYml0nE9tBwhmOUI/c5iYPOtKhhXiW8kNCLiX96TJDiZonalzptkkNiRZkipdz/8hw==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-8.0.4.tgz", + "integrity": "sha512-0vcrIETka1Tr0blr0AjVkoP/1yynvarJQXi8Yry/XB3BLenrkUFxolqqA3Ff55KFQ7t1IzAuFtfuVZs25LvyDQ==", "dependencies": { - "@react-native-community/cli-tools": "^8.0.0", + "@react-native-community/cli-tools": "^8.0.4", "cosmiconfig": "^5.1.0", "deepmerge": "^3.2.0", "glob": "^7.1.3", @@ -3535,13 +3539,13 @@ } }, "node_modules/@react-native-community/cli-doctor": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-8.0.3.tgz", - "integrity": "sha512-ndISZhZqOoeSuQCm5KLwJNkckk14Bqn1N8LHJbC6l4zAyDU0nQRO1IVPoV5uyaANMzMqSNzS6k9N4M0PpcuhIQ==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-8.0.4.tgz", + "integrity": "sha512-Blw/66qwoEoKrtwn3O9iTtXbt4YWlwqNse5BJeRDzlSdutWTX4PgJu/34gyvOHGysNlrf+GYkeyqqxI/y0s07A==", "dependencies": { - "@react-native-community/cli-config": "^8.0.3", - "@react-native-community/cli-platform-ios": "^8.0.2", - "@react-native-community/cli-tools": "^8.0.0", + "@react-native-community/cli-config": "^8.0.4", + "@react-native-community/cli-platform-ios": "^8.0.4", + "@react-native-community/cli-tools": "^8.0.4", "chalk": "^4.1.2", "command-exists": "^1.2.8", "envinfo": "^7.7.2", @@ -3557,6 +3561,21 @@ "wcwidth": "^1.0.1" } }, + "node_modules/@react-native-community/cli-doctor/node_modules/@react-native-community/cli-platform-ios": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-8.0.4.tgz", + "integrity": "sha512-7Jdptedfg/J0Xo2rQbJ4jmo+PMYOiIiRcNDCSI5dBcNkQfSq4MMYUnKQx5DdZHgrfxE0O1vE4iNmJdd4wePz8w==", + "dependencies": { + "@react-native-community/cli-tools": "^8.0.4", + "chalk": "^4.1.2", + "execa": "^1.0.0", + "glob": "^7.1.3", + "js-yaml": "^3.13.1", + "lodash": "^4.17.15", + "ora": "^5.4.1", + "plist": "^3.0.2" + } + }, "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", @@ -3749,12 +3768,12 @@ } }, "node_modules/@react-native-community/cli-hermes": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-8.0.2.tgz", - "integrity": "sha512-RZ9uHTf3UFtGTYxq88uENJEdaDB8ab+YPBDn+Li1u78IKwNeL04F0A1A3ab3hYUkG4PEPnL2rkYSlzzNFLOSPQ==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-8.0.5.tgz", + "integrity": "sha512-Zm0wM6SfgYAEX1kfJ1QBvTayabvh79GzmjHyuSnEROVNPbl4PeCG4WFbwy489tGwOP9Qx9fMT5tRIFCD8bp6/g==", "dependencies": { - "@react-native-community/cli-platform-android": "^8.0.2", - "@react-native-community/cli-tools": "^8.0.0", + "@react-native-community/cli-platform-android": "^8.0.5", + "@react-native-community/cli-tools": "^8.0.4", "chalk": "^4.1.2", "hermes-profile-transformer": "^0.0.6", "ip": "^1.1.5" @@ -3825,11 +3844,11 @@ } }, "node_modules/@react-native-community/cli-platform-android": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-8.0.2.tgz", - "integrity": "sha512-pAEkt+GULesr8FphTpaNYSmu+O1CPQ2zCXkAg4kRd0WXpq3BsVqomyDWd/eMXTkY/yYQMGl6KilU2p9r/hnfhA==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-8.0.5.tgz", + "integrity": "sha512-z1YNE4T1lG5o9acoQR1GBvf7mq6Tzayqo/za5sHVSOJAC9SZOuVN/gg/nkBa9a8n5U7qOMFXfwhTMNqA474gXA==", "dependencies": { - "@react-native-community/cli-tools": "^8.0.0", + "@react-native-community/cli-tools": "^8.0.4", "chalk": "^4.1.2", "execa": "^1.0.0", "fs-extra": "^8.1.0", @@ -4013,24 +4032,53 @@ } }, "node_modules/@react-native-community/cli-platform-ios": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-8.0.2.tgz", - "integrity": "sha512-LxWzj6jIZr5Ot893TKFbt0/T3WkVe6pbc/FSTo+TDQq1FQr/Urv16Uqn0AcL4IX2O1g3Qd13d0vtR/Cdpn3VNw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-7.0.1.tgz", + "integrity": "sha512-PLRIbzrCzSedmpjuFtQqcqUD45G8q7sEciI1lf5zUbVMXqjIBwJWS7iz8235PyWwj8J4MNHohLC+oyRueFtbGg==", + "dev": true, "dependencies": { - "@react-native-community/cli-tools": "^8.0.0", + "@react-native-community/cli-tools": "^7.0.1", "chalk": "^4.1.2", "execa": "^1.0.0", "glob": "^7.1.3", "js-yaml": "^3.13.1", "lodash": "^4.17.15", "ora": "^5.4.1", - "plist": "^3.0.2" + "plist": "^3.0.2", + "xcode": "^3.0.0" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/@react-native-community/cli-tools": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-7.0.1.tgz", + "integrity": "sha512-0xra4hKNA5PR2zYVXsDMNiXMGaDNoNRYMY6eTP2aVIxQbqIcVMDWSyCA8wMWX5iOpMWg0cZGaQ6a77f3Rlb34g==", + "dev": true, + "dependencies": { + "appdirsjs": "^1.2.4", + "chalk": "^4.1.2", + "lodash": "^4.17.15", + "mime": "^2.4.1", + "node-fetch": "^2.6.0", + "open": "^6.2.0", + "ora": "^5.4.1", + "semver": "^6.3.0", + "shell-quote": "^1.7.3" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/@react-native-community/cli-tools/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" } }, "node_modules/@react-native-community/cli-platform-ios/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -4045,6 +4093,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4060,6 +4109,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -4070,12 +4120,14 @@ "node_modules/@react-native-community/cli-platform-ios/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/@react-native-community/cli-platform-ios/node_modules/cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -4091,6 +4143,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, "dependencies": { "cross-spawn": "^6.0.0", "get-stream": "^4.0.0", @@ -4108,6 +4161,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, "dependencies": { "pump": "^3.0.0" }, @@ -4119,6 +4173,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -4127,6 +4182,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4135,6 +4191,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, "dependencies": { "path-key": "^2.0.0" }, @@ -4146,6 +4203,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, "engines": { "node": ">=4" } @@ -4154,6 +4212,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, "bin": { "semver": "bin/semver" } @@ -4162,6 +4221,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, "dependencies": { "shebang-regex": "^1.0.0" }, @@ -4173,6 +4233,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4181,6 +4242,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -4192,6 +4254,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -4200,12 +4263,12 @@ } }, "node_modules/@react-native-community/cli-plugin-metro": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-8.0.0.tgz", - "integrity": "sha512-eIowV2ZRbzIWL3RIKVUUSahntXTuAeKzBSsFuhffLZphsV+UdKdtg5ATR9zbq7nsKap4ZseO5DkVqZngUkC7iQ==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-8.0.4.tgz", + "integrity": "sha512-UWzY1eMcEr/6262R2+d0Is5M3L/7Y/xXSDIFMoc5Rv5Wucl3hJM/TxHXmByvHpuJf6fJAfqOskyt4bZCvbI+wQ==", "dependencies": { - "@react-native-community/cli-server-api": "^8.0.0", - "@react-native-community/cli-tools": "^8.0.0", + "@react-native-community/cli-server-api": "^8.0.4", + "@react-native-community/cli-tools": "^8.0.4", "chalk": "^4.1.2", "metro": "^0.70.1", "metro-config": "^0.70.1", @@ -4281,12 +4344,12 @@ } }, "node_modules/@react-native-community/cli-server-api": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-8.0.0.tgz", - "integrity": "sha512-TxUs3sMl9clt7sdv30XETc6VRzyaEli2vDrk3TB5W5o5nSd1PmQdP4ccdGLO/nDRXwOy72QmmXlYWMg1XGU0Gg==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-8.0.4.tgz", + "integrity": "sha512-Orr14njx1E70CVrUA8bFdl+mrnbuXUjf1Rhhm0RxUadFpvkHuOi5dh8Bryj2MKtf8eZrpEwZ7tuQPhJEULW16A==", "dependencies": { "@react-native-community/cli-debugger-ui": "^8.0.0", - "@react-native-community/cli-tools": "^8.0.0", + "@react-native-community/cli-tools": "^8.0.4", "compression": "^1.7.1", "connect": "^3.6.5", "errorhandler": "^1.5.0", @@ -4297,12 +4360,13 @@ } }, "node_modules/@react-native-community/cli-tools": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-8.0.0.tgz", - "integrity": "sha512-jA4y8CebrRZaOJFjc5zMOnls4KfHkBl2FUtBZV2vcWuedQHa6JVwo+KO88ta3Ysby3uY0+mrZagZfXk7c0mrBw==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-8.0.4.tgz", + "integrity": "sha512-ePN9lGxh6LRFiotyddEkSmuqpQhnq2iw9oiXYr4EFWpIEy0yCigTuSTiDF68+c8M9B+7bTwkRpz/rMPC4ViO5Q==", "dependencies": { "appdirsjs": "^1.2.4", "chalk": "^4.1.2", + "find-up": "^5.0.0", "lodash": "^4.17.15", "mime": "^2.4.1", "node-fetch": "^2.6.0", @@ -4357,6 +4421,21 @@ "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", @@ -4365,6 +4444,48 @@ "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/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -4388,6 +4509,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -4402,6 +4524,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4417,6 +4540,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -4427,12 +4551,14 @@ "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==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/@react-native-community/cli/node_modules/cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -4448,6 +4574,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, "bin": { "semver": "bin/semver" } @@ -4456,6 +4583,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, "dependencies": { "cross-spawn": "^6.0.0", "get-stream": "^4.0.0", @@ -4473,6 +4601,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, "dependencies": { "pump": "^3.0.0" }, @@ -4484,6 +4613,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -4492,6 +4622,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4500,6 +4631,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, "dependencies": { "path-key": "^2.0.0" }, @@ -4511,6 +4643,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, "engines": { "node": ">=4" } @@ -4519,6 +4652,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, "dependencies": { "shebang-regex": "^1.0.0" }, @@ -4530,6 +4664,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4538,6 +4673,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -4549,6 +4685,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -5401,6 +5538,18 @@ "node": ">= 4.5.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -5750,6 +5899,15 @@ "tweetnacl": "^0.14.3" } }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, "node_modules/bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", @@ -5768,6 +5926,27 @@ "readable-stream": "^3.4.0" } }, + "node_modules/bplist-creator": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz", + "integrity": "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==", + "dev": true, + "dependencies": { + "stream-buffers": "2.2.x" + } + }, + "node_modules/bplist-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz", + "integrity": "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==", + "dev": true, + "dependencies": { + "big-integer": "1.6.x" + }, + "engines": { + "node": ">= 5.10.0" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -6262,6 +6441,15 @@ "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" }, + "node_modules/colors": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha512-OsSVtHK8Ir8r3+Fxw/b4jS1ZLPXkV6ZxDRJQzeD7qo0SqMXWrHDM71DgYzPMHY8SFJ0Ao+nNU2p1MmwdzKqPrw==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -6511,6 +6699,15 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" }, + "node_modules/cycle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "integrity": "sha512-TVF6svNzeQCOpjCqsy0/CSy8VgObG3wXusJ73xW2GbG5rGx7lC8zxDSURicsXI2UsGdi2L0QNRCi745/wUDvsA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -6593,6 +6790,38 @@ "integrity": "sha512-yVn6RZmHiGnxRKR9sJb3iVV2XTF1Ghh2DiWRZ3dMnGc43yUdWWF/kX6lQyk3+P84iprfWKU/8zFTrlkvtFm1ug==", "dev": true }, + "node_modules/deep-equal": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.5.tgz", + "integrity": "sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "es-get-iterator": "^1.1.1", + "get-intrinsic": "^1.0.1", + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.2", + "is-regex": "^1.1.1", + "isarray": "^2.0.5", + "object-is": "^1.1.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.3.0", + "side-channel": "^1.0.3", + "which-boxed-primitive": "^1.0.1", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-equal/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -6859,6 +7088,31 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-get-iterator": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", + "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.0", + "has-symbols": "^1.0.1", + "is-arguments": "^1.1.0", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-get-iterator/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/es-shim-unscopables": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", @@ -7671,6 +7925,15 @@ "node >=0.6.0" ] }, + "node_modules/eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==", + "dev": true, + "engines": { + "node": "> 0.1.90" + } + }, "node_modules/fast-base64-decode": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", @@ -7930,6 +8193,15 @@ "node": ">=0.4.0" } }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -8233,6 +8505,27 @@ "node": ">= 0.4.0" } }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -8467,6 +8760,15 @@ "node": ">=10.17.0" } }, + "node_modules/i": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/i/-/i-0.3.7.tgz", + "integrity": "sha512-FYz4wlXgkQwIPqhzC5TdNMLSE5+GS1IIDJZY/1ZiEPCT2S3COUVZeT5OW4BmW4r5LHLQuOosSwsvnroG9GR59Q==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -8624,6 +8926,22 @@ "node": ">=0.10.0" } }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -8789,6 +9107,15 @@ "node": ">=8" } }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -8851,6 +9178,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", @@ -8905,11 +9241,30 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, + "node_modules/is-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", + "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -8921,6 +9276,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -8933,6 +9297,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -11283,6 +11660,18 @@ "node": ">=8" } }, + "node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/jest-snapshot": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz", @@ -12731,18 +13120,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/metro-core/node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/metro-core/node_modules/jest-util": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", @@ -13128,18 +13505,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/metro/node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/metro/node_modules/jest-util": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", @@ -13364,6 +13729,12 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, "node_modules/nanoid": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", @@ -13407,6 +13778,15 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/ncp": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz", + "integrity": "sha512-PfGU8jYWdRl4FqJfCy0IzbkGyFHntfWygZg46nFk/dJD/XRrk2cj0SsKSX9n5u5gE0E0YfEpKWrEkfjnlZSTXA==", + "dev": true, + "bin": { + "ncp": "bin/ncp" + } + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -13690,6 +14070,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -14135,6 +14531,15 @@ "node": ">=8" } }, + "node_modules/pkginfo": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz", + "integrity": "sha512-8xCNE/aT/EXKenuMDZ+xTVwkT8gsoHN2z/Q29l80u0ppGEXVvsKRzNMbtKhg8LS8k1tJLAHHylf6p4VFmP6XUQ==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/plist": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.6.tgz", @@ -14281,6 +14686,22 @@ "asap": "~2.0.6" } }, + "node_modules/prompt": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/prompt/-/prompt-0.2.14.tgz", + "integrity": "sha512-jDK5yEbAakJmNm+260gZG1+PuzX3jT5Jy0VZAUGrrW9RQ1JEWEDEVNnhO70mL3+U5r6bSJo02xsE34wOS/LnrA==", + "dev": true, + "dependencies": { + "pkginfo": "0.x.x", + "read": "1.0.x", + "revalidator": "0.1.x", + "utile": "0.2.x", + "winston": "0.8.x" + }, + "engines": { + "node": ">= 0.6.6" + } + }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -14464,6 +14885,88 @@ "react": "18.0.0" } }, + "node_modules/react-native-cli": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/react-native-cli/-/react-native-cli-2.0.1.tgz", + "integrity": "sha512-QgkB1urUhGe9q1vcqQLIfNdCd/Qf3MdNQe19QO6lVjhIVKljlVMKtaK8RaZ8PCNB/cdXlO/G3tKUGk+ghMXE6w==", + "dev": true, + "dependencies": { + "chalk": "^1.1.1", + "minimist": "^1.2.0", + "prompt": "^0.2.14", + "semver": "^5.0.3" + }, + "bin": { + "react-native": "index.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/react-native-cli/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-native-cli/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-native-cli/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-native-cli/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/react-native-cli/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-native-cli/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/react-native-codegen": { "version": "0.69.1", "resolved": "https://registry.npmjs.org/react-native-codegen/-/react-native-codegen-0.69.1.tgz", @@ -14507,6 +15010,11 @@ "resolved": "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.0.7.tgz", "integrity": "sha512-+4JpbIx42zGTONhBTIXSyfyHICHC29VTvhkkoUOJAh/XHPEixpuBduYgf6Y4y9wsN1ARlQhBBoptTvXvAFQf5g==" }, + "node_modules/react-native-keychain": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/react-native-keychain/-/react-native-keychain-8.1.1.tgz", + "integrity": "sha512-8fxgeHKwGcL657eAYpdBTkDIxNhbIHI+kyyO0Yac2dgVAN184JoIwQcW2z6snahwDaCObQOu0biLFHnsH+4KSg==" + }, "node_modules/react-native-safe-area-context": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.3.1.tgz", @@ -14540,11 +15048,6 @@ "react": "^17.0.0" } }, - "node_modules/react-native-secure-key-store": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/react-native-secure-key-store/-/react-native-secure-key-store-2.0.9.tgz", - "integrity": "sha512-9qi1rOlv4qNSpJIjqcIB7d0EQSwo2Yho8NVBT/Jc9NeYibDLHdArLXl8jn8H6nlf+8alk/bXqr4rPINrCTtmog==" - }, "node_modules/react-native-vector-icons": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-9.2.0.tgz", @@ -14647,97 +15150,332 @@ "node": ">=10" } }, - "node_modules/react-native/node_modules/ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/react-redux": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.2.tgz", - "integrity": "sha512-nBwiscMw3NoP59NFCXFf02f8xdo+vSHT/uZ1ldDwF7XaTpzm+Phk97VT4urYBl5TYAPNVaFm12UHAEyzkpNzRA==", + "node_modules/react-native/node_modules/@react-native-community/cli": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-8.0.5.tgz", + "integrity": "sha512-X0AMNK+sKDJQX8eQRkqgddJsZPWlHgLryX7O9usj78UFEK8VqVYtpv08piWecfAhC2mZU4/Lww4bKu9uJ1rdyQ==", "dependencies": { - "@babel/runtime": "^7.12.1", - "@types/hoist-non-react-statics": "^3.3.1", - "@types/use-sync-external-store": "^0.0.3", - "hoist-non-react-statics": "^3.3.2", - "react-is": "^18.0.0", - "use-sync-external-store": "^1.0.0" + "@react-native-community/cli-clean": "^8.0.4", + "@react-native-community/cli-config": "^8.0.4", + "@react-native-community/cli-debugger-ui": "^8.0.0", + "@react-native-community/cli-doctor": "^8.0.4", + "@react-native-community/cli-hermes": "^8.0.5", + "@react-native-community/cli-plugin-metro": "^8.0.4", + "@react-native-community/cli-server-api": "^8.0.4", + "@react-native-community/cli-tools": "^8.0.4", + "@react-native-community/cli-types": "^8.0.0", + "chalk": "^4.1.2", + "commander": "^2.19.0", + "execa": "^1.0.0", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0", + "graceful-fs": "^4.1.3", + "leven": "^3.1.0", + "lodash": "^4.17.15", + "minimist": "^1.2.0", + "prompts": "^2.4.0", + "semver": "^6.3.0" }, - "peerDependencies": { - "@types/react": "^16.8 || ^17.0 || ^18.0", - "@types/react-dom": "^16.8 || ^17.0 || ^18.0", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0", - "react-native": ">=0.59", - "redux": "^4" + "bin": { + "react-native": "build/bin.js" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - }, - "redux": { - "optional": true - } - } - }, - "node_modules/react-redux/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, - "node_modules/react-refresh": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", - "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==", "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-shallow-renderer": { - "version": "16.15.0", - "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz", - "integrity": "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==", - "dependencies": { - "object-assign": "^4.1.1", - "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" + "node": ">=12" }, "peerDependencies": { - "react": "^16.0.0 || ^17.0.0 || ^18.0.0" + "react-native": "*" } }, - "node_modules/react-test-renderer": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-18.0.0.tgz", - "integrity": "sha512-SyZTP/FSkwfiKOZuTZiISzsrC8A80KNlQ8PyyoGoOq+VzMAab6Em1POK/CiX3+XyXG6oiJa1C53zYDbdrJu9fw==", - "dev": true, + "node_modules/react-native/node_modules/@react-native-community/cli-platform-ios": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-8.0.4.tgz", + "integrity": "sha512-7Jdptedfg/J0Xo2rQbJ4jmo+PMYOiIiRcNDCSI5dBcNkQfSq4MMYUnKQx5DdZHgrfxE0O1vE4iNmJdd4wePz8w==", "dependencies": { - "react-is": "^18.0.0", - "react-shallow-renderer": "^16.13.1", - "scheduler": "^0.21.0" - }, - "peerDependencies": { - "react": "^18.0.0" + "@react-native-community/cli-tools": "^8.0.4", + "chalk": "^4.1.2", + "execa": "^1.0.0", + "glob": "^7.1.3", + "js-yaml": "^3.13.1", + "lodash": "^4.17.15", + "ora": "^5.4.1", + "plist": "^3.0.2" + } + }, + "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/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/react-native/node_modules/cross-spawn/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/react-native/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/react-native/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/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/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-native/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/react-native/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/react-native/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-native/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "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/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/react-native/node_modules/ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/react-redux": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.2.tgz", + "integrity": "sha512-nBwiscMw3NoP59NFCXFf02f8xdo+vSHT/uZ1ldDwF7XaTpzm+Phk97VT4urYBl5TYAPNVaFm12UHAEyzkpNzRA==", + "dependencies": { + "@babel/runtime": "^7.12.1", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/use-sync-external-store": "^0.0.3", + "hoist-non-react-statics": "^3.3.2", + "react-is": "^18.0.0", + "use-sync-external-store": "^1.0.0" + }, + "peerDependencies": { + "@types/react": "^16.8 || ^17.0 || ^18.0", + "@types/react-dom": "^16.8 || ^17.0 || ^18.0", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0", + "react-native": ">=0.59", + "redux": "^4" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, + "node_modules/react-redux/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/react-refresh": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", + "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-shallow-renderer": { + "version": "16.15.0", + "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz", + "integrity": "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==", + "dependencies": { + "object-assign": "^4.1.1", + "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-test-renderer": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-18.0.0.tgz", + "integrity": "sha512-SyZTP/FSkwfiKOZuTZiISzsrC8A80KNlQ8PyyoGoOq+VzMAab6Em1POK/CiX3+XyXG6oiJa1C53zYDbdrJu9fw==", + "dev": true, + "dependencies": { + "react-is": "^18.0.0", + "react-shallow-renderer": "^16.13.1", + "scheduler": "^0.21.0" + }, + "peerDependencies": { + "react": "^18.0.0" + } + }, + "node_modules/react-test-renderer/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "dev": true, + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" } }, - "node_modules/react-test-renderer/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -15184,6 +15922,15 @@ "node": ">=0.12" } }, + "node_modules/revalidator": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", + "integrity": "sha512-xcBILK2pA9oh4SiinPEZfhP8HfrB/ha+a2fTMyl7Om2WjlDVrOQy99N2MXXlUHqGJz4qEu2duXxHJjDWuK/0xg==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -15468,6 +16215,17 @@ "simple-concat": "^1.0.0" } }, + "node_modules/simple-plist": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz", + "integrity": "sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==", + "dev": true, + "dependencies": { + "bplist-creator": "0.1.0", + "bplist-parser": "0.3.1", + "plist": "^3.0.5" + } + }, "node_modules/simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -15771,6 +16529,15 @@ "node": ">=0.10.0" } }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/stack-utils": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", @@ -15912,6 +16679,15 @@ "node": ">= 0.6" } }, + "node_modules/stream-buffers": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "integrity": "sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, "node_modules/stream-counter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stream-counter/-/stream-counter-1.0.0.tgz", @@ -16910,6 +17686,41 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, + "node_modules/utile": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/utile/-/utile-0.2.1.tgz", + "integrity": "sha512-ltfvuCJNa/JFOhKBBiQ9qDyyFwLstoMMO1ru0Yg/Mcl8dp1Z3IBaL7n+5dHpyma+d3lCogkgBQnWKtGxzNyqhg==", + "dev": true, + "dependencies": { + "async": "~0.2.9", + "deep-equal": "*", + "i": "0.3.x", + "mkdirp": "0.x.x", + "ncp": "0.4.x", + "rimraf": "2.x.x" + }, + "engines": { + "node": ">= 0.6.4" + } + }, + "node_modules/utile/node_modules/async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==", + "dev": true + }, + "node_modules/utile/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -17026,26 +17837,94 @@ "node": ">= 8" } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" + }, + "node_modules/which-typed-array": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", + "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/winston": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz", + "integrity": "sha512-fPoamsHq8leJ62D1M9V/f15mjQ1UHe4+7j1wpAT3fqgA5JqhJkk4aIfPEjfMTI9x6ZTjaLOpMAjluLtmgO5b6g==", "dev": true, "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "async": "0.2.x", + "colors": "0.6.x", + "cycle": "1.0.x", + "eyes": "0.1.x", + "isstream": "0.1.x", + "pkginfo": "0.3.x", + "stack-trace": "0.0.x" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.6.0" } }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" + "node_modules/winston/node_modules/async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==", + "dev": true + }, + "node_modules/winston/node_modules/pkginfo": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz", + "integrity": "sha512-yO5feByMzAp96LtP58wvPKSbaKAi/1C4kV9XpTctr6EepnP6F33RBNOiVrdz9BrPA98U2BMFsTNHo44TWcbQ2A==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } }, "node_modules/word-wrap": { "version": "1.2.3", @@ -17137,6 +18016,28 @@ } } }, + "node_modules/xcode": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz", + "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==", + "dev": true, + "dependencies": { + "simple-plist": "^1.1.0", + "uuid": "^7.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/xcode/node_modules/uuid": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", + "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/xmlbuilder": { "version": "15.1.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", @@ -17200,7 +18101,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, "engines": { "node": ">=10" }, @@ -19541,15 +20441,16 @@ } }, "@react-native-community/cli": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-8.0.3.tgz", - "integrity": "sha512-7gY7QCEdpYDbvbdZBt6w64YPExLoiUpH/lVRaR4tKl6JalqXzrUotOJnBOS/qEC4q0nk0WXsiC5EkuiSliKS5Q==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-8.0.1.tgz", + "integrity": "sha512-0bZ2x2MPQPdVOxv80WsD22pvMqcs9MnKwfWbQ+vavEr5OEd4H60r4rgl/LaiSq+f22+RHm9CAe9r4EDlLMC/Ag==", + "dev": true, "requires": { "@react-native-community/cli-clean": "^8.0.0", - "@react-native-community/cli-config": "^8.0.3", + "@react-native-community/cli-config": "^8.0.1", "@react-native-community/cli-debugger-ui": "^8.0.0", - "@react-native-community/cli-doctor": "^8.0.3", - "@react-native-community/cli-hermes": "^8.0.2", + "@react-native-community/cli-doctor": "^8.0.1", + "@react-native-community/cli-hermes": "^8.0.0", "@react-native-community/cli-plugin-metro": "^8.0.0", "@react-native-community/cli-server-api": "^8.0.0", "@react-native-community/cli-tools": "^8.0.0", @@ -19571,6 +20472,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -19579,6 +20481,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -19588,6 +20491,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -19595,12 +20499,14 @@ "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==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, "requires": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -19612,7 +20518,8 @@ "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true } } }, @@ -19620,6 +20527,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, "requires": { "cross-spawn": "^6.0.0", "get-stream": "^4.0.0", @@ -19634,6 +20542,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, "requires": { "pump": "^3.0.0" } @@ -19641,17 +20550,20 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, "requires": { "path-key": "^2.0.0" } @@ -19659,12 +20571,14 @@ "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, "requires": { "shebang-regex": "^1.0.0" } @@ -19672,12 +20586,14 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true }, "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==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -19686,6 +20602,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, "requires": { "isexe": "^2.0.0" } @@ -19693,11 +20610,11 @@ } }, "@react-native-community/cli-clean": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-8.0.0.tgz", - "integrity": "sha512-VY/kwyH5xp6oXiB9bcwa+I9W5k6WR/nX3s85FuMW76hSlgG1UVAGL04uZPwYlSmMZuSOSuoXOaIjJ7wAvQMBpg==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-8.0.4.tgz", + "integrity": "sha512-IwS1M1NHg6+qL8PThZYMSIMYbZ6Zbx+lIck9PLBskbosFo24M3lCOflOl++Bggjakp6mR+sRXxLMexid/GeOsQ==", "requires": { - "@react-native-community/cli-tools": "^8.0.0", + "@react-native-community/cli-tools": "^8.0.4", "chalk": "^4.1.2", "execa": "^1.0.0", "prompts": "^2.4.0" @@ -19827,11 +20744,11 @@ } }, "@react-native-community/cli-config": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-8.0.3.tgz", - "integrity": "sha512-QhLU6QZywkoO4FzpeEkdoYml0nE9tBwhmOUI/c5iYPOtKhhXiW8kNCLiX96TJDiZonalzptkkNiRZkipdz/8hw==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-8.0.4.tgz", + "integrity": "sha512-0vcrIETka1Tr0blr0AjVkoP/1yynvarJQXi8Yry/XB3BLenrkUFxolqqA3Ff55KFQ7t1IzAuFtfuVZs25LvyDQ==", "requires": { - "@react-native-community/cli-tools": "^8.0.0", + "@react-native-community/cli-tools": "^8.0.4", "cosmiconfig": "^5.1.0", "deepmerge": "^3.2.0", "glob": "^7.1.3", @@ -19854,13 +20771,13 @@ } }, "@react-native-community/cli-doctor": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-8.0.3.tgz", - "integrity": "sha512-ndISZhZqOoeSuQCm5KLwJNkckk14Bqn1N8LHJbC6l4zAyDU0nQRO1IVPoV5uyaANMzMqSNzS6k9N4M0PpcuhIQ==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-8.0.4.tgz", + "integrity": "sha512-Blw/66qwoEoKrtwn3O9iTtXbt4YWlwqNse5BJeRDzlSdutWTX4PgJu/34gyvOHGysNlrf+GYkeyqqxI/y0s07A==", "requires": { - "@react-native-community/cli-config": "^8.0.3", - "@react-native-community/cli-platform-ios": "^8.0.2", - "@react-native-community/cli-tools": "^8.0.0", + "@react-native-community/cli-config": "^8.0.4", + "@react-native-community/cli-platform-ios": "^8.0.4", + "@react-native-community/cli-tools": "^8.0.4", "chalk": "^4.1.2", "command-exists": "^1.2.8", "envinfo": "^7.7.2", @@ -19876,6 +20793,21 @@ "wcwidth": "^1.0.1" }, "dependencies": { + "@react-native-community/cli-platform-ios": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-8.0.4.tgz", + "integrity": "sha512-7Jdptedfg/J0Xo2rQbJ4jmo+PMYOiIiRcNDCSI5dBcNkQfSq4MMYUnKQx5DdZHgrfxE0O1vE4iNmJdd4wePz8w==", + "requires": { + "@react-native-community/cli-tools": "^8.0.4", + "chalk": "^4.1.2", + "execa": "^1.0.0", + "glob": "^7.1.3", + "js-yaml": "^3.13.1", + "lodash": "^4.17.15", + "ora": "^5.4.1", + "plist": "^3.0.2" + } + }, "ansi-regex": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", @@ -20015,12 +20947,12 @@ } }, "@react-native-community/cli-hermes": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-8.0.2.tgz", - "integrity": "sha512-RZ9uHTf3UFtGTYxq88uENJEdaDB8ab+YPBDn+Li1u78IKwNeL04F0A1A3ab3hYUkG4PEPnL2rkYSlzzNFLOSPQ==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-8.0.5.tgz", + "integrity": "sha512-Zm0wM6SfgYAEX1kfJ1QBvTayabvh79GzmjHyuSnEROVNPbl4PeCG4WFbwy489tGwOP9Qx9fMT5tRIFCD8bp6/g==", "requires": { - "@react-native-community/cli-platform-android": "^8.0.2", - "@react-native-community/cli-tools": "^8.0.0", + "@react-native-community/cli-platform-android": "^8.0.5", + "@react-native-community/cli-tools": "^8.0.4", "chalk": "^4.1.2", "hermes-profile-transformer": "^0.0.6", "ip": "^1.1.5" @@ -20072,11 +21004,11 @@ } }, "@react-native-community/cli-platform-android": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-8.0.2.tgz", - "integrity": "sha512-pAEkt+GULesr8FphTpaNYSmu+O1CPQ2zCXkAg4kRd0WXpq3BsVqomyDWd/eMXTkY/yYQMGl6KilU2p9r/hnfhA==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-8.0.5.tgz", + "integrity": "sha512-z1YNE4T1lG5o9acoQR1GBvf7mq6Tzayqo/za5sHVSOJAC9SZOuVN/gg/nkBa9a8n5U7qOMFXfwhTMNqA474gXA==", "requires": { - "@react-native-community/cli-tools": "^8.0.0", + "@react-native-community/cli-tools": "^8.0.4", "chalk": "^4.1.2", "execa": "^1.0.0", "fs-extra": "^8.1.0", @@ -20211,24 +21143,52 @@ } }, "@react-native-community/cli-platform-ios": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-8.0.2.tgz", - "integrity": "sha512-LxWzj6jIZr5Ot893TKFbt0/T3WkVe6pbc/FSTo+TDQq1FQr/Urv16Uqn0AcL4IX2O1g3Qd13d0vtR/Cdpn3VNw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-7.0.1.tgz", + "integrity": "sha512-PLRIbzrCzSedmpjuFtQqcqUD45G8q7sEciI1lf5zUbVMXqjIBwJWS7iz8235PyWwj8J4MNHohLC+oyRueFtbGg==", + "dev": true, "requires": { - "@react-native-community/cli-tools": "^8.0.0", + "@react-native-community/cli-tools": "^7.0.1", "chalk": "^4.1.2", "execa": "^1.0.0", "glob": "^7.1.3", "js-yaml": "^3.13.1", "lodash": "^4.17.15", "ora": "^5.4.1", - "plist": "^3.0.2" + "plist": "^3.0.2", + "xcode": "^3.0.0" }, "dependencies": { + "@react-native-community/cli-tools": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-7.0.1.tgz", + "integrity": "sha512-0xra4hKNA5PR2zYVXsDMNiXMGaDNoNRYMY6eTP2aVIxQbqIcVMDWSyCA8wMWX5iOpMWg0cZGaQ6a77f3Rlb34g==", + "dev": true, + "requires": { + "appdirsjs": "^1.2.4", + "chalk": "^4.1.2", + "lodash": "^4.17.15", + "mime": "^2.4.1", + "node-fetch": "^2.6.0", + "open": "^6.2.0", + "ora": "^5.4.1", + "semver": "^6.3.0", + "shell-quote": "^1.7.3" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -20237,6 +21197,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -20246,6 +21207,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -20253,12 +21215,14 @@ "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==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, "requires": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -20271,6 +21235,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, "requires": { "cross-spawn": "^6.0.0", "get-stream": "^4.0.0", @@ -20285,6 +21250,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, "requires": { "pump": "^3.0.0" } @@ -20292,17 +21258,20 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, "requires": { "path-key": "^2.0.0" } @@ -20310,17 +21279,20 @@ "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, "requires": { "shebang-regex": "^1.0.0" } @@ -20328,12 +21300,14 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true }, "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==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -20342,6 +21316,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, "requires": { "isexe": "^2.0.0" } @@ -20349,12 +21324,12 @@ } }, "@react-native-community/cli-plugin-metro": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-8.0.0.tgz", - "integrity": "sha512-eIowV2ZRbzIWL3RIKVUUSahntXTuAeKzBSsFuhffLZphsV+UdKdtg5ATR9zbq7nsKap4ZseO5DkVqZngUkC7iQ==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-8.0.4.tgz", + "integrity": "sha512-UWzY1eMcEr/6262R2+d0Is5M3L/7Y/xXSDIFMoc5Rv5Wucl3hJM/TxHXmByvHpuJf6fJAfqOskyt4bZCvbI+wQ==", "requires": { - "@react-native-community/cli-server-api": "^8.0.0", - "@react-native-community/cli-tools": "^8.0.0", + "@react-native-community/cli-server-api": "^8.0.4", + "@react-native-community/cli-tools": "^8.0.4", "chalk": "^4.1.2", "metro": "^0.70.1", "metro-config": "^0.70.1", @@ -20411,12 +21386,12 @@ } }, "@react-native-community/cli-server-api": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-8.0.0.tgz", - "integrity": "sha512-TxUs3sMl9clt7sdv30XETc6VRzyaEli2vDrk3TB5W5o5nSd1PmQdP4ccdGLO/nDRXwOy72QmmXlYWMg1XGU0Gg==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-8.0.4.tgz", + "integrity": "sha512-Orr14njx1E70CVrUA8bFdl+mrnbuXUjf1Rhhm0RxUadFpvkHuOi5dh8Bryj2MKtf8eZrpEwZ7tuQPhJEULW16A==", "requires": { "@react-native-community/cli-debugger-ui": "^8.0.0", - "@react-native-community/cli-tools": "^8.0.0", + "@react-native-community/cli-tools": "^8.0.4", "compression": "^1.7.1", "connect": "^3.6.5", "errorhandler": "^1.5.0", @@ -20427,12 +21402,13 @@ } }, "@react-native-community/cli-tools": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-8.0.0.tgz", - "integrity": "sha512-jA4y8CebrRZaOJFjc5zMOnls4KfHkBl2FUtBZV2vcWuedQHa6JVwo+KO88ta3Ysby3uY0+mrZagZfXk7c0mrBw==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-8.0.4.tgz", + "integrity": "sha512-ePN9lGxh6LRFiotyddEkSmuqpQhnq2iw9oiXYr4EFWpIEy0yCigTuSTiDF68+c8M9B+7bTwkRpz/rMPC4ViO5Q==", "requires": { "appdirsjs": "^1.2.4", "chalk": "^4.1.2", + "find-up": "^5.0.0", "lodash": "^4.17.15", "mime": "^2.4.1", "node-fetch": "^2.6.0", @@ -20472,11 +21448,44 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "requires": { + "p-limit": "^3.0.2" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -21137,6 +22146,12 @@ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -21404,6 +22419,12 @@ "tweetnacl": "^0.14.3" } }, + "big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true + }, "bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", @@ -21422,6 +22443,24 @@ "readable-stream": "^3.4.0" } }, + "bplist-creator": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz", + "integrity": "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==", + "dev": true, + "requires": { + "stream-buffers": "2.2.x" + } + }, + "bplist-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz", + "integrity": "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==", + "dev": true, + "requires": { + "big-integer": "1.6.x" + } + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -21787,6 +22826,12 @@ "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" }, + "colors": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha512-OsSVtHK8Ir8r3+Fxw/b4jS1ZLPXkV6ZxDRJQzeD7qo0SqMXWrHDM71DgYzPMHY8SFJ0Ao+nNU2p1MmwdzKqPrw==", + "dev": true + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -22006,6 +23051,12 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" }, + "cycle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "integrity": "sha512-TVF6svNzeQCOpjCqsy0/CSy8VgObG3wXusJ73xW2GbG5rGx7lC8zxDSURicsXI2UsGdi2L0QNRCi745/wUDvsA==", + "dev": true + }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -22062,6 +23113,37 @@ "integrity": "sha512-yVn6RZmHiGnxRKR9sJb3iVV2XTF1Ghh2DiWRZ3dMnGc43yUdWWF/kX6lQyk3+P84iprfWKU/8zFTrlkvtFm1ug==", "dev": true }, + "deep-equal": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.5.tgz", + "integrity": "sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "es-get-iterator": "^1.1.1", + "get-intrinsic": "^1.0.1", + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.2", + "is-regex": "^1.1.1", + "isarray": "^2.0.5", + "object-is": "^1.1.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.3.0", + "side-channel": "^1.0.3", + "which-boxed-primitive": "^1.0.1", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.2" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -22264,6 +23346,30 @@ "unbox-primitive": "^1.0.2" } }, + "es-get-iterator": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", + "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.0", + "has-symbols": "^1.0.1", + "is-arguments": "^1.1.0", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, "es-shim-unscopables": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", @@ -22857,6 +23963,12 @@ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" }, + "eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==", + "dev": true + }, "fast-base64-decode": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", @@ -23059,6 +24171,15 @@ "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.121.0.tgz", "integrity": "sha512-1gIBiWJNR0tKUNv8gZuk7l9rVX06OuLzY9AoGio7y/JT4V1IZErEMEq2TJS+PFcw/y0RshZ1J/27VfK1UQzYVg==" }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -23273,6 +24394,23 @@ "function-bind": "^1.1.1" } }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + } + } + }, "has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -23464,6 +24602,12 @@ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, + "i": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/i/-/i-0.3.7.tgz", + "integrity": "sha512-FYz4wlXgkQwIPqhzC5TdNMLSE5+GS1IIDJZY/1ZiEPCT2S3COUVZeT5OW4BmW4r5LHLQuOosSwsvnroG9GR59Q==", + "dev": true + }, "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -23569,6 +24713,16 @@ "kind-of": "^6.0.0" } }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -23683,6 +24837,12 @@ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" }, + "is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true + }, "is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -23721,6 +24881,12 @@ "has-tostringtag": "^1.0.0" } }, + "is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true + }, "is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", @@ -23754,6 +24920,19 @@ "has-symbols": "^1.0.2" } }, + "is-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", + "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -23764,6 +24943,12 @@ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" }, + "is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true + }, "is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -23773,6 +24958,16 @@ "call-bind": "^1.0.2" } }, + "is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -25558,6 +26753,15 @@ } } }, + "jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + } + }, "jest-snapshot": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz", @@ -26660,15 +27864,6 @@ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==" }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, "jest-util": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", @@ -26885,17 +28080,8 @@ }, "jest-regex-util": { "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==" - }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==" }, "jest-util": { "version": "27.5.1", @@ -27223,6 +28409,12 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, "nanoid": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", @@ -27257,6 +28449,12 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "ncp": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz", + "integrity": "sha512-PfGU8jYWdRl4FqJfCy0IzbkGyFHntfWygZg46nFk/dJD/XRrk2cj0SsKSX9n5u5gE0E0YfEpKWrEkfjnlZSTXA==", + "dev": true + }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -27463,6 +28661,16 @@ "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", "dev": true }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -27777,6 +28985,12 @@ "find-up": "^4.0.0" } }, + "pkginfo": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz", + "integrity": "sha512-8xCNE/aT/EXKenuMDZ+xTVwkT8gsoHN2z/Q29l80u0ppGEXVvsKRzNMbtKhg8LS8k1tJLAHHylf6p4VFmP6XUQ==", + "dev": true + }, "plist": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.6.tgz", @@ -27883,6 +29097,19 @@ "asap": "~2.0.6" } }, + "prompt": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/prompt/-/prompt-0.2.14.tgz", + "integrity": "sha512-jDK5yEbAakJmNm+260gZG1+PuzX3jT5Jy0VZAUGrrW9RQ1JEWEDEVNnhO70mL3+U5r6bSJo02xsE34wOS/LnrA==", + "dev": true, + "requires": { + "pkginfo": "0.x.x", + "read": "1.0.x", + "revalidator": "0.1.x", + "utile": "0.2.x", + "winston": "0.8.x" + } + }, "prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -28034,6 +29261,171 @@ "ws": "^6.1.4" }, "dependencies": { + "@react-native-community/cli": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-8.0.5.tgz", + "integrity": "sha512-X0AMNK+sKDJQX8eQRkqgddJsZPWlHgLryX7O9usj78UFEK8VqVYtpv08piWecfAhC2mZU4/Lww4bKu9uJ1rdyQ==", + "requires": { + "@react-native-community/cli-clean": "^8.0.4", + "@react-native-community/cli-config": "^8.0.4", + "@react-native-community/cli-debugger-ui": "^8.0.0", + "@react-native-community/cli-doctor": "^8.0.4", + "@react-native-community/cli-hermes": "^8.0.5", + "@react-native-community/cli-plugin-metro": "^8.0.4", + "@react-native-community/cli-server-api": "^8.0.4", + "@react-native-community/cli-tools": "^8.0.4", + "@react-native-community/cli-types": "^8.0.0", + "chalk": "^4.1.2", + "commander": "^2.19.0", + "execa": "^1.0.0", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0", + "graceful-fs": "^4.1.3", + "leven": "^3.1.0", + "lodash": "^4.17.15", + "minimist": "^1.2.0", + "prompts": "^2.4.0", + "semver": "^6.3.0" + } + }, + "@react-native-community/cli-platform-ios": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-8.0.4.tgz", + "integrity": "sha512-7Jdptedfg/J0Xo2rQbJ4jmo+PMYOiIiRcNDCSI5dBcNkQfSq4MMYUnKQx5DdZHgrfxE0O1vE4iNmJdd4wePz8w==", + "requires": { + "@react-native-community/cli-tools": "^8.0.4", + "chalk": "^4.1.2", + "execa": "^1.0.0", + "glob": "^7.1.3", + "js-yaml": "^3.13.1", + "lodash": "^4.17.15", + "ora": "^5.4.1", + "plist": "^3.0.2" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "requires": { + "path-key": "^2.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, "ws": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", @@ -28044,6 +29436,66 @@ } } }, + "react-native-cli": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/react-native-cli/-/react-native-cli-2.0.1.tgz", + "integrity": "sha512-QgkB1urUhGe9q1vcqQLIfNdCd/Qf3MdNQe19QO6lVjhIVKljlVMKtaK8RaZ8PCNB/cdXlO/G3tKUGk+ghMXE6w==", + "dev": true, + "requires": { + "chalk": "^1.1.1", + "minimist": "^1.2.0", + "prompt": "^0.2.14", + "semver": "^5.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true + } + } + }, "react-native-codegen": { "version": "0.69.1", "resolved": "https://registry.npmjs.org/react-native-codegen/-/react-native-codegen-0.69.1.tgz", @@ -28080,6 +29532,11 @@ "resolved": "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.0.7.tgz", "integrity": "sha512-+4JpbIx42zGTONhBTIXSyfyHICHC29VTvhkkoUOJAh/XHPEixpuBduYgf6Y4y9wsN1ARlQhBBoptTvXvAFQf5g==" }, + "react-native-keychain": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/react-native-keychain/-/react-native-keychain-8.1.1.tgz", + "integrity": "sha512-8fxgeHKwGcL657eAYpdBTkDIxNhbIHI+kyyO0Yac2dgVAN184JoIwQcW2z6snahwDaCObQOu0biLFHnsH+4KSg==" + }, "react-native-safe-area-context": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.3.1.tgz", @@ -28103,11 +29560,6 @@ } } }, - "react-native-secure-key-store": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/react-native-secure-key-store/-/react-native-secure-key-store-2.0.9.tgz", - "integrity": "sha512-9qi1rOlv4qNSpJIjqcIB7d0EQSwo2Yho8NVBT/Jc9NeYibDLHdArLXl8jn8H6nlf+8alk/bXqr4rPINrCTtmog==" - }, "react-native-vector-icons": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-9.2.0.tgz", @@ -28237,6 +29689,15 @@ } } }, + "read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "dev": true, + "requires": { + "mute-stream": "~0.0.4" + } + }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -28583,6 +30044,12 @@ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, + "revalidator": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", + "integrity": "sha512-xcBILK2pA9oh4SiinPEZfhP8HfrB/ha+a2fTMyl7Om2WjlDVrOQy99N2MXXlUHqGJz4qEu2duXxHJjDWuK/0xg==", + "dev": true + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -28794,6 +30261,17 @@ "simple-concat": "^1.0.0" } }, + "simple-plist": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz", + "integrity": "sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==", + "dev": true, + "requires": { + "bplist-creator": "0.1.0", + "bplist-parser": "0.3.1", + "plist": "^3.0.5" + } + }, "simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -29039,6 +30517,12 @@ "tweetnacl": "~0.14.0" } }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "dev": true + }, "stack-utils": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", @@ -29151,6 +30635,12 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" }, + "stream-buffers": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "integrity": "sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==", + "dev": true + }, "stream-counter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stream-counter/-/stream-counter-1.0.0.tgz", @@ -29896,6 +31386,37 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, + "utile": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/utile/-/utile-0.2.1.tgz", + "integrity": "sha512-ltfvuCJNa/JFOhKBBiQ9qDyyFwLstoMMO1ru0Yg/Mcl8dp1Z3IBaL7n+5dHpyma+d3lCogkgBQnWKtGxzNyqhg==", + "dev": true, + "requires": { + "async": "~0.2.9", + "deep-equal": "*", + "i": "0.3.x", + "mkdirp": "0.x.x", + "ncp": "0.4.x", + "rimraf": "2.x.x" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -30003,11 +31524,66 @@ "is-symbol": "^1.0.3" } }, + "which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "requires": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + } + }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" }, + "which-typed-array": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", + "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.9" + } + }, + "winston": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz", + "integrity": "sha512-fPoamsHq8leJ62D1M9V/f15mjQ1UHe4+7j1wpAT3fqgA5JqhJkk4aIfPEjfMTI9x6ZTjaLOpMAjluLtmgO5b6g==", + "dev": true, + "requires": { + "async": "0.2.x", + "colors": "0.6.x", + "cycle": "1.0.x", + "eyes": "0.1.x", + "isstream": "0.1.x", + "pkginfo": "0.3.x", + "stack-trace": "0.0.x" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==", + "dev": true + }, + "pkginfo": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz", + "integrity": "sha512-yO5feByMzAp96LtP58wvPKSbaKAi/1C4kV9XpTctr6EepnP6F33RBNOiVrdz9BrPA98U2BMFsTNHo44TWcbQ2A==", + "dev": true + } + } + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -30068,6 +31644,24 @@ "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "requires": {} }, + "xcode": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz", + "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==", + "dev": true, + "requires": { + "simple-plist": "^1.1.0", + "uuid": "^7.0.3" + }, + "dependencies": { + "uuid": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", + "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", + "dev": true + } + } + }, "xmlbuilder": { "version": "15.1.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", @@ -30118,8 +31712,7 @@ "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==", - "dev": true + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" } } } diff --git a/squarenotsquare/package.json b/squarenotsquare/package.json index e479f83..3707151 100644 --- a/squarenotsquare/package.json +++ b/squarenotsquare/package.json @@ -26,9 +26,9 @@ "react-native": "0.69.2", "react-native-gesture-handler": "^2.5.0", "react-native-get-random-values": "^1.8.0", + "react-native-keychain": "^8.1.1", "react-native-safe-area-context": "^4.3.1", "react-native-screens": "^3.15.0", - "react-native-secure-key-store": "^2.0.9", "react-native-vector-icons": "^9.2.0", "react-redux": "^8.0.2", "realm": "^10.19.5", @@ -39,11 +39,14 @@ "devDependencies": { "@babel/core": "^7.12.9", "@babel/runtime": "^7.12.5", + "@react-native-community/cli": "^8.0.1", + "@react-native-community/cli-platform-ios": "^7.0.1", "@react-native-community/eslint-config": "^2.0.0", "babel-jest": "^28.0.0", "eslint": "^7.32.0", "jest": "^28.0.0", "metro-react-native-babel-preset": "^0.70.3", + "react-native-cli": "^2.0.1", "react-test-renderer": "18.0.0", "redux-logger": "^3.0.6", "redux-mock-store": "^1.5.4", diff --git a/squarenotsquare/src/assets/squarelogo.png b/squarenotsquare/src/assets/squarelogo.png new file mode 100644 index 0000000..7f3925c Binary files /dev/null and b/squarenotsquare/src/assets/squarelogo.png differ diff --git a/squarenotsquare/src/components/Autoscroll.js b/squarenotsquare/src/components/Autoscroll.js new file mode 100644 index 0000000..7652d02 --- /dev/null +++ b/squarenotsquare/src/components/Autoscroll.js @@ -0,0 +1,25 @@ +import React from "react"; +import { Animated, Easing} from "react-native"; +import { useEffect, useRef } from "react"; +import Metrics from "../themes/Metrics"; + +function Autoscroll(props){ + const yPosition = useRef(new Animated.Value(props.origin)); + + useEffect(() => { + Animated.timing(yPosition.current, { + toValue: props.destination - Metrics.animated.gameScrollInterval, + duration: props.duration, + useNativeDriver: true + }).start(); + }, [props.origin]) + + + return ( + + {props.children} + + ) +} + +export default Autoscroll; \ No newline at end of file diff --git a/squarenotsquare/src/components/Fade.js b/squarenotsquare/src/components/Fade.js new file mode 100644 index 0000000..1b3fe46 --- /dev/null +++ b/squarenotsquare/src/components/Fade.js @@ -0,0 +1,38 @@ +import React from "react"; +import { Animated} from "react-native"; +import { useEffect, useRef } from "react"; + +function Fade(props){ + const faded = useRef(new Animated.Value(0.1)); + + useEffect(() => { + if (props.faded) { + Animated.timing( + faded.current, + { + toValue: 0.1, + duration: props.duration, + useNativeDriver: true + } + ).start(); + } else { + Animated.timing( + faded.current, + { + toValue: 1, + duration: props.duration, + useNativeDriver: true + } + ).start(); + } + }, [props.faded]) + + + return ( + + {props.children} + + ) +} + +export default Fade; \ No newline at end of file diff --git a/squarenotsquare/src/components/NineKey.js b/squarenotsquare/src/components/NineKey.js new file mode 100644 index 0000000..7231da1 --- /dev/null +++ b/squarenotsquare/src/components/NineKey.js @@ -0,0 +1,47 @@ +import React from "react"; +import { Text, View } from "react-native"; +import { TouchableOpacity } from "react-native-gesture-handler"; +import { styles } from "../screens/styles/AppStyles"; + +function NineKey(props){ + + function generateKey(value){ + return ( + props.onPress(value)} + > + + {value} + + + ); + } + + return ( + + + {generateKey(7)} + {generateKey(8)} + {generateKey(9)} + + + {generateKey(4)} + {generateKey(5)} + {generateKey(6)} + + + {generateKey(1)} + {generateKey(2)} + {generateKey(3)} + + + + {generateKey(0)} + + + + ); +} + +export default NineKey; \ No newline at end of file diff --git a/squarenotsquare/src/components/ScrollingPicker.js b/squarenotsquare/src/components/ScrollingPicker.js new file mode 100644 index 0000000..624d7de --- /dev/null +++ b/squarenotsquare/src/components/ScrollingPicker.js @@ -0,0 +1,63 @@ +import React, { useRef, useState } from "react"; +import { + ScrollView, + Animated, +} from "react-native"; +import MaterialIcon from 'react-native-vector-icons/MaterialCommunityIcons'; +import Icons from '../themes/Icons'; +import Colors from "../themes/Colors"; +import Metrics from "../themes/Metrics"; +import { styles } from "../screens/styles/AppStyles"; +import Fade from "./Fade"; + +function ScrollingPicker(props) { + const scrollX = useRef(new Animated.Value(0)).current; + + function onScroll(event){ + let rounded = Math.round(event.nativeEvent.contentOffset.x); + if (rounded === 0) { + props.modeSetter('square'); + } else if (rounded === (Metrics.icons.buttonIcon * 2)) { + props.modeSetter('addition'); + } + Animated.event([ + { + nativeEvent: { + contentOffset: { + x: scrollX + } + } + } + ], {useNativeDriver: true}) + } + + return ( + + + + + + + + + ); +} + +export default ScrollingPicker; \ No newline at end of file diff --git a/squarenotsquare/src/components/Slider.js b/squarenotsquare/src/components/Slider.js new file mode 100644 index 0000000..bc95f15 --- /dev/null +++ b/squarenotsquare/src/components/Slider.js @@ -0,0 +1,27 @@ +import React from "react"; +import { Animated, Easing} from "react-native"; +import { useEffect, useState } from "react"; + +function Slider(props){ + const [xPosition, setXPosition] = useState(new Animated.Value(props.origin)); + + useEffect(() => { + Animated.sequence([ + Animated.delay(props.delay), + Animated.timing(xPosition, { + toValue: 0, + duration: props.duration, + useNativeDriver: true + }) + ]).start(); + }, []); + + + return ( + + {props.children} + + ) +} + +export default Slider; \ No newline at end of file diff --git a/squarenotsquare/src/components/Spinner.js b/squarenotsquare/src/components/Spinner.js new file mode 100644 index 0000000..0f23561 --- /dev/null +++ b/squarenotsquare/src/components/Spinner.js @@ -0,0 +1,39 @@ +import React from "react"; +import { Animated, Easing} from "react-native"; +import { useEffect } from "react"; +import MaterialIcon from 'react-native-vector-icons/MaterialCommunityIcons'; +import Icons from '../themes/Icons'; +import Colors from "../themes/Colors"; +import Metrics from "../themes/Metrics"; + +const spinValue = new Animated.Value(0); + +function Spinner(){ + + useEffect(() => { + Animated.loop( + Animated.timing(spinValue, { + toValue: 1, + duration: 3000, + easing: Easing.linear, + useNativeDriver: true, + })).start(); + }, []); + + const spin = spinValue.interpolate({ + inputRange: [0, 1], + outputRange: ['0deg', '360deg'], + }); + + return ( + + + + ) +} + +export default Spinner; \ No newline at end of file diff --git a/squarenotsquare/src/libs/CalculateScore.js b/squarenotsquare/src/libs/CalculateScore.js new file mode 100644 index 0000000..0dfc6c0 --- /dev/null +++ b/squarenotsquare/src/libs/CalculateScore.js @@ -0,0 +1,6 @@ +export function calculateSquareScore (answers, finalTime) { + let timeScore = Math.round((60 - finalTime) * 1000); + let answerScore = answers * 1000; + let finalScore = timeScore + answerScore; + return finalScore; +} \ No newline at end of file diff --git a/squarenotsquare/src/libs/Random.js b/squarenotsquare/src/libs/Random.js index aeea885..fc3717d 100644 --- a/squarenotsquare/src/libs/Random.js +++ b/squarenotsquare/src/libs/Random.js @@ -1,13 +1,57 @@ +import 'react-native-get-random-values'; + export function generateKey() { let result = []; const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; let charactersLength = characters.length; + + let uintArray = new Uint8Array(64); + let newKey = crypto.getRandomValues(uintArray); for (let i = 0; i < 64; i++) { + let newCharIndex = newKey[i]; + while(newCharIndex > charactersLength){ + newCharIndex -= charactersLength; + } result.push( - characters.charAt(Math.floor(Math.random() * charactersLength)), + characters.charAt(newCharIndex), ); } return result.join(''); +} + +export function genSquareChallenge(){ + let result = []; + let uintArray = new Uint8Array(20); + let squares = crypto.getRandomValues(uintArray); + let shapes = crypto.getRandomValues(uintArray); + + for(let i = 0; i < 20; ++i){ + let squarePos = squares[i] % 2; + let shapeType = shapes[i] % 6; + result.push({ + squarePos: squarePos, + shapeType: shapeType + }); + } + + return result; +} + +export function generateAdditionChallenge(){ + let result = []; + for (let i = 0; i < 20; ++i) { + let left = 0; + let right = 0; + + do { + left = Math.round(Math.random() * 10); + right = Math.round(Math.random() * 10); + } while (left + right >= 10); + + result.push({left: left, right: right}); + } + + return result; } \ No newline at end of file diff --git a/squarenotsquare/src/libs/ShapeEnum.js b/squarenotsquare/src/libs/ShapeEnum.js new file mode 100644 index 0000000..7ed6f19 --- /dev/null +++ b/squarenotsquare/src/libs/ShapeEnum.js @@ -0,0 +1,10 @@ +import Icons from "../themes/Icons"; + +export const shapes = { + '0': Icons.wrongShapes.rectangle, + '1': Icons.wrongShapes.triangle, + '2': Icons.wrongShapes.circle, + '3': Icons.wrongShapes.hexagon, + '4': Icons.wrongShapes.pentagon, + '5': Icons.wrongShapes.octagon +} \ No newline at end of file diff --git a/squarenotsquare/src/navigation/SquareNav.js b/squarenotsquare/src/navigation/SquareNav.js index 9030f3a..7b22de2 100644 --- a/squarenotsquare/src/navigation/SquareNav.js +++ b/squarenotsquare/src/navigation/SquareNav.js @@ -1,8 +1,8 @@ import { createRef } from "react"; -export const squareRef = createRef(); +export const SquareRef = createRef(); -export function navigate(name, params) { - squareRef.current?.navigate(name, params); +export function squareNav(name, params) { + SquareRef.current?.navigate(name, params); return true; } \ No newline at end of file diff --git a/squarenotsquare/src/navigation/SquareStack.js b/squarenotsquare/src/navigation/SquareStack.js index 28bce3f..ba56a1d 100644 --- a/squarenotsquare/src/navigation/SquareStack.js +++ b/squarenotsquare/src/navigation/SquareStack.js @@ -1,13 +1,14 @@ import React from 'react'; import {NavigationContainer} from '@react-navigation/native'; import {createStackNavigator} from '@react-navigation/stack'; -import {squareRef} from './SquareNav'; +import {SquareRef} from './SquareNav'; import Home from '../screens/Home'; import Game from '../screens/Game'; import HighScore from '../screens/HighScore'; -import Settings from '../screens/Settings'; import Splash from '../screens/Splash'; +import Score from '../screens/Score'; +import AdditionGame from '../screens/AdditionGame'; const SquareNav = createStackNavigator(); @@ -15,7 +16,7 @@ function SquareStack() { let noHeader = {headerShown: false}; return ( - + + diff --git a/squarenotsquare/src/realm/DbAPI.js b/squarenotsquare/src/realm/DbAPI.js new file mode 100644 index 0000000..cf78b87 --- /dev/null +++ b/squarenotsquare/src/realm/DbAPI.js @@ -0,0 +1,48 @@ +import {initDB} from './DbInit'; + +class DatabaseAPI { + constructor(){ + this.systemRepo = null; + this.scoreRepo = null; + this.userRepo = null; + } + + getAllSystemValues() { + return this.systemRepo.getAllSystemValues(); + } + + createSystemValue(key, value) { + this.systemRepo.createSystemValue(key, value); + return true; + } + + deleteSystemValue(key) { + this.systemRepo.deleteSystemValue(key); + return true; + } + + getSystemValue(key) { + return this.systemRepo.getSystemKeyValue(key); + } + + createScore(user, score) { + this.scoreRepo.createScore(user, score); + return true; + } + + getHighScores() { + return this.scoreRepo.getCachedScores(); + } + + async initDB() { + let repos = await initDB(); + this.systemRepo = repos.systemRepo; + this.scoreRepo = repos.scoreRepo; + this.userRepo = repos.userRepo; + + this.scoreRepo.loadCache(); + } +} + +const DbAPI = new DatabaseAPI(); +export default DbAPI; \ No newline at end of file diff --git a/squarenotsquare/src/realm/dbInit.js b/squarenotsquare/src/realm/DbInit.js similarity index 94% rename from squarenotsquare/src/realm/dbInit.js rename to squarenotsquare/src/realm/DbInit.js index d0ceb7a..d67ac30 100644 --- a/squarenotsquare/src/realm/dbInit.js +++ b/squarenotsquare/src/realm/DbInit.js @@ -22,14 +22,14 @@ export async function initDB(dbKeyRef = 'squareDB', dbLocation = Realm.defaultPa try { let fromStore = await KeyStore.getKey(dbKeyRef); - if (fromStore === null) { + if (fromStore === false) { let newKey = generateKey(); await KeyStore.setKey(dbKeyRef, newKey); - fromStore = await KeyStore.getKey(dbKeyRef); + fromStore = newKey; } let dbKey = new Uint8Array(64); - if (fromStore !== null){ + if (fromStore !== false){ for (let i = 0; i < 64; ++i){ dbKey[i] = fromStore.charAt(i); } diff --git a/squarenotsquare/src/realm/dbAPI.js b/squarenotsquare/src/realm/dbAPI.js deleted file mode 100644 index 91a398f..0000000 --- a/squarenotsquare/src/realm/dbAPI.js +++ /dev/null @@ -1,37 +0,0 @@ -import {initDB} from './dbInit'; - -class DbAPI { - constructor(){ - this.systemRepo = null; - this.scoreRepo = null; - this.userRepo = null; - } - - getAllSystemValues() { - return systemRepo.getAllSystemValues(); - } - - createSystemValue(key, value) { - systemRepo.createSystemValue(key, value); - return true; - } - - deleteSystemValue(key) { - systemRepo.deleteSystemValue(key); - return true; - } - - getSystemValue(key) { - return systemRepo.getSystemKeyValue(key); - } - - async initDB() { - let repos = await initDB(); - this.systemRepo = repos.systemRepo; - this.scoreRepo = repos.scoreRepo; - this.userRepo = repos.userRepo; - } -} - -const dbAPI = new DbAPI(); -export default dbAPI; \ No newline at end of file diff --git a/squarenotsquare/src/realm/entities/Score.js b/squarenotsquare/src/realm/entities/Score.js index 81425c2..449777e 100644 --- a/squarenotsquare/src/realm/entities/Score.js +++ b/squarenotsquare/src/realm/entities/Score.js @@ -4,6 +4,6 @@ export const ScoreEntity = { properties: { id: 'string', user: 'string', - value: 'string' + value: 'int' } }; \ No newline at end of file diff --git a/squarenotsquare/src/realm/migrations/MigrateV1.js b/squarenotsquare/src/realm/migrations/MigrateV1.js index f48dabe..49948c0 100644 --- a/squarenotsquare/src/realm/migrations/MigrateV1.js +++ b/squarenotsquare/src/realm/migrations/MigrateV1.js @@ -7,7 +7,7 @@ export function migratev1(oldRealm, newRealm) { newRealm.create(SystemEntity.name, { id: uuidv4(), key: 'username', - value: 'changeme' + value: 'noname' }); } } diff --git a/squarenotsquare/src/realm/repos/ScoreRepo.js b/squarenotsquare/src/realm/repos/ScoreRepo.js index 51c89c7..9138270 100644 --- a/squarenotsquare/src/realm/repos/ScoreRepo.js +++ b/squarenotsquare/src/realm/repos/ScoreRepo.js @@ -7,5 +7,52 @@ export default class ScoreRepo { constructor(db) { this.realmDB = db; + this.scoreCache = []; + } + + updateScoreCache = (newScore) => { + this.scoreCache.push(newScore); + this.scoreCache.sort((a, b) => b.value - a.value); + + if (this.scoreCache.length > 99) { + this.scoreCache = this.scoreCache.slice(99, this.scoreCache.length - 1); + } + } + + createScore = (user, score) => { + let scoreID = uuidv4(); + + let newScore = { + id: scoreID, + user: user, + value: score + }; + + this.updateScoreCache(newScore); + + this.realmDB.write(() => { + this.realmDB.create( ScoreEntity.name, newScore, true); + }); + } + + getHighScores = () => { + let score = this.realmDB.objects(ScoreEntity.name).sorted('value', true); + let highScores = []; + let i = 0; + score.forEach((row) => { + if (i > 99){ + return highScores; + } + highScores.push({user: row.user, value: row.value}); + }); + return highScores; + } + + loadCache = () => { + this.scoreCache = this.getHighScores(); + } + + getCachedScores = () => { + return this.scoreCache; } } \ No newline at end of file diff --git a/squarenotsquare/src/redux/CreateStore.js b/squarenotsquare/src/redux/CreateStore.js index baffac3..b82a733 100644 --- a/squarenotsquare/src/redux/CreateStore.js +++ b/squarenotsquare/src/redux/CreateStore.js @@ -1,8 +1,8 @@ import { configureStore } from '@reduxjs/toolkit'; import rootReducer from './reducers/RootReducer'; -const configStore = configureStore({ +const ConfigStore = configureStore({ reducer: rootReducer }); -export default configStore; \ No newline at end of file +export default ConfigStore; \ No newline at end of file diff --git a/squarenotsquare/src/redux/actions/SystemActions.js b/squarenotsquare/src/redux/actions/SystemActions.js index a6108a7..3859b5d 100644 --- a/squarenotsquare/src/redux/actions/SystemActions.js +++ b/squarenotsquare/src/redux/actions/SystemActions.js @@ -1,21 +1,41 @@ -import { initDB } from "../../realm/dbInit"; -import dbAPI from "../../realm/dbAPI"; -import { APP_INIT } from "../types/SystemTypes"; +import DbAPI from "../../realm/DbAPI"; +import { APP_INIT, NAV_HOME, NAV_SCORES } from "../types/SystemTypes"; +import { squareNav } from "../../navigation/SquareNav"; export function appInit() { return async (dispatch) => { - await dbAPI.initDB(); - dispatch(onInit()); + await DbAPI.initDB(); + let lastUsername = DbAPI.getSystemValue('username').value; + dispatch(onInit(lastUsername)); + squareNav('Home'); } } -function onInit() { +export function goHome() { return (dispatch) => { + squareNav('Home'); dispatch({ - type: APP_INIT - //system: system - //user: user - //score: score + type: NAV_HOME + }) + } +} + +export function goToScores() { + return (dispatch) => { + squareNav('HighScore'); + dispatch({ + type: NAV_SCORES + }) + } +} + +function onInit(lastUsername) { + return (dispatch, getState) => { + let currentUser = {...getState().user}; + currentUser.username = lastUsername; + dispatch({ + type: APP_INIT, + user: currentUser }); } } \ No newline at end of file diff --git a/squarenotsquare/src/redux/actions/UserActions.js b/squarenotsquare/src/redux/actions/UserActions.js index e69de29..6729c11 100644 --- a/squarenotsquare/src/redux/actions/UserActions.js +++ b/squarenotsquare/src/redux/actions/UserActions.js @@ -0,0 +1,59 @@ +import { squareNav } from "../../navigation/SquareNav"; +import { ADDITION_FINISHED, ADDITION_START, SQUARE_FINISHED, SQUARE_START } from "../types/UserTypes"; +import { calculateSquareScore } from "../../libs/CalculateScore"; +import DbAPI from "../../realm/DbAPI"; + +export function squareStartPressed(mode, username) { + return (dispatch, getState) => { + DbAPI.createSystemValue('username', username); + let userState = {...getState().user}; + userState.username = username; + if (mode === 'square') { + squareNav('Game'); + dispatch({ + type: SQUARE_START, + user: userState + }); + } else if (mode === 'addition') { + squareNav('AdditionGame'); + dispatch({ + type: ADDITION_START, + user: userState + }) + } + } +} + +export function squareFinished(answers, finalTime) { + return (dispatch, getState) => { + setTimeout(() => squareNav('Score'), 3000); + const userState = getState().user; + let newUser = {...userState}; + newUser.lastGameTime = finalTime; + newUser.lastGameAnswers = answers; + + let finalScore = calculateSquareScore(answers, finalTime); + DbAPI.createScore(userState.username, finalScore); + dispatch({ + type: SQUARE_FINISHED, + user: newUser + }); + } +} + +export function addFinished(answers, finalTime) { + return (dispatch, getState) => { + setTimeout(() => squareNav('Score'), 3000); + const userState = getState().user; + let newUser = {...userState}; + newUser.lastGameTime = finalTime; + newUser.lastGameAnswers = answers; + + let finalScore = calculateSquareScore(answers, finalTime); + DbAPI.createScore(userState.username, finalScore); + dispatch({ + type: ADDITION_FINISHED, + user: newUser + }); + } +} \ No newline at end of file diff --git a/squarenotsquare/src/redux/reducers/NavReducer.js b/squarenotsquare/src/redux/reducers/NavReducer.js deleted file mode 100644 index 16f162a..0000000 --- a/squarenotsquare/src/redux/reducers/NavReducer.js +++ /dev/null @@ -1,15 +0,0 @@ -import * as SquareNav from '../../navigation/SquareNav'; - -import { APP_INIT } from '../types/SystemTypes'; - -export function navReducer(state = {}, action){ - switch (action.type) { - case APP_INIT: - //SquareNav.navigate('Home'); - break; - default: - break; - } - - return state; -} \ No newline at end of file diff --git a/squarenotsquare/src/redux/reducers/RootReducer.js b/squarenotsquare/src/redux/reducers/RootReducer.js index 8b54e1f..af7f207 100644 --- a/squarenotsquare/src/redux/reducers/RootReducer.js +++ b/squarenotsquare/src/redux/reducers/RootReducer.js @@ -1,10 +1,10 @@ import { combineReducers } from 'redux'; import { systemReducer } from './SystemReducer'; -import { navReducer } from './NavReducer'; +import { userReducer } from './UserReducer'; const rootReducer = combineReducers({ ...systemReducer, - navReducer + ...userReducer }); export default rootReducer; \ No newline at end of file diff --git a/squarenotsquare/src/redux/reducers/UserReducer.js b/squarenotsquare/src/redux/reducers/UserReducer.js index e69de29..3c3a711 100644 --- a/squarenotsquare/src/redux/reducers/UserReducer.js +++ b/squarenotsquare/src/redux/reducers/UserReducer.js @@ -0,0 +1,31 @@ +import { APP_INIT } from "../types/SystemTypes"; +import { + SQUARE_START, + SQUARE_FINISHED, + ADDITION_FINISHED, + ADDITION_START +} from '../types/UserTypes'; + +const initialUserState = { + lastGameTime: null, + lastGameAnswers: null, + lastGameScore: null, + username: 'noname' +} + +function usr(state = initialUserState, action) { + switch (action.type) { + case APP_INIT: + case SQUARE_START: + case ADDITION_START: + case SQUARE_FINISHED: + case ADDITION_FINISHED: + return {...state, ...action.user}; + default: + return state; + } +} + +export const userReducer = { + user: usr +}; \ No newline at end of file diff --git a/squarenotsquare/src/redux/types/SystemTypes.js b/squarenotsquare/src/redux/types/SystemTypes.js index a75ea52..0669679 100644 --- a/squarenotsquare/src/redux/types/SystemTypes.js +++ b/squarenotsquare/src/redux/types/SystemTypes.js @@ -1 +1,3 @@ -export const APP_INIT = 'app-init'; \ No newline at end of file +export const APP_INIT = 'app-init'; +export const NAV_HOME = 'go-home'; +export const NAV_SCORES = 'nav-scores'; \ No newline at end of file diff --git a/squarenotsquare/src/redux/types/UserTypes.js b/squarenotsquare/src/redux/types/UserTypes.js new file mode 100644 index 0000000..bba52a3 --- /dev/null +++ b/squarenotsquare/src/redux/types/UserTypes.js @@ -0,0 +1,4 @@ +export const SQUARE_START = 'square-start'; +export const SQUARE_FINISHED = 'square-finished'; +export const ADDITION_START = 'addition-start'; +export const ADDITION_FINISHED = 'addition-finished'; \ No newline at end of file diff --git a/squarenotsquare/src/screens/AdditionGame.js b/squarenotsquare/src/screens/AdditionGame.js new file mode 100644 index 0000000..3750184 --- /dev/null +++ b/squarenotsquare/src/screens/AdditionGame.js @@ -0,0 +1,171 @@ +import React from "react"; +import { Text, TouchableOpacity, View, SafeAreaView } from "react-native"; +import { useState, useEffect, useRef, useMemo } from "react"; +import { useDispatch } from "react-redux"; +import {generateAdditionChallenge} from '../libs/Random'; +import { styles } from "./styles/AppStyles"; +import NineKey from "../components/NineKey"; +import Autoscroll from "../components/Autoscroll"; +import Fade from "../components/Fade"; +import MaterialIcon from 'react-native-vector-icons/MaterialCommunityIcons'; +import Icons from '../themes/Icons'; +import Colors from "../themes/Colors"; +import Metrics from "../themes/Metrics"; +import { addFinished } from "../redux/actions/UserActions"; + +function AdditionGame(props){ + + const [addChallenge, setAddChallenge]= useState(() => {return generateAdditionChallenge()}); + const challengeState = useRef(-1); + const squareMemo = useMemo(renderPairs, [challengeState.current]); + const [timerState, setTimerState] = useState(0); + const localTimer = useRef(null); + const startTime = useRef(0); + const answers = useRef(0); + const [scrollOrigin, setScrollOrigin] = useState(0); + const scrollDestination = useRef(Metrics.animated.gameScrollInterval); + const [headerText, setHeaderText] = useState('Ready?'); + const [headerColor, setHeaderColor] = useState(styles.green); + const [headerTextColor, setHeaderTextColor] = useState(styles.darkText); + const dispatch = useDispatch(); + + useEffect(() => { + let headerTimeout = null; + + switch(timerState){ + case 0: + headerTimeout = setTimeout(() => { + setHeaderColor(styles.yellow); + setHeaderText('Set'); + setTimerState(1); + }, 1000); + break; + case 1: + headerTimeout = setTimeout(() => { + setHeaderColor(styles.red); + setHeaderTextColor(styles.lightText); + setHeaderText('Go!'); + challengeState.current = 0; + setTimerState(2); + }, 1000); + break; + case 2: + headerTimeout = setTimeout(() => { + setHeaderColor(styles.dark); + startTime.current = (Date.now()); + setHeaderText(0 + ' s'); + setTimerState(3); + }, 1000); + break; + case 3: + headerTimeout = setInterval(() => { + let elapsed = Math.round((Date.now() - startTime.current) / (1000)); + setHeaderText(elapsed + ' s'); + }, 1000); + break; + default: + break; + } + + localTimer.current = headerTimeout; + + return () => { + clearTimeout(localTimer.current); + clearInterval(localTimer.current); + } + }, [timerState]); + + + + function selectAnswer(answer){ + let currentChallenge = addChallenge[challengeState.current]; + let outcome = ( + answer === ( + currentChallenge.left + currentChallenge.right + ) + ); + + if (outcome) { + answers.current = answers.current + 1; + } + + let newOrigin = scrollDestination.current; + let newDestination = scrollDestination.current - Metrics.animated.gameScrollInterval; + + scrollDestination.current = newDestination; + challengeState.current = challengeState.current + 1; + setScrollOrigin(newOrigin); + + if (challengeState.current >= 20) { + completeChallenge(); + } + } + + function completeChallenge(){ + let unformatted = (Date.now() - startTime.current) / (1000); + let finalTime = Number.parseFloat(unformatted).toFixed(3); + clearInterval(localTimer.current); + setHeaderColor(styles.darkGreen); + setHeaderText(finalTime + ' s'); + setTimerState(4); + dispatch(addFinished(answers.current, finalTime)); + } + + function generateLine(left, right, pairIndex) { + return ( + + + + {left + ' + ' + right + ' = '} + + + + ); + } + + function renderPairs(){ + return addChallenge.map((pair, index) => { + return generateLine(pair.left, pair.right, index); + }); + } + + return ( + + + + {headerText} + + + + + {squareMemo} + + + + + Finish + + + + + + + + {answers.current + ' / ' + addChallenge.length} + + + + + ); +} + +export default AdditionGame; \ No newline at end of file diff --git a/squarenotsquare/src/screens/Game.js b/squarenotsquare/src/screens/Game.js index 106d1d5..6632002 100644 --- a/squarenotsquare/src/screens/Game.js +++ b/squarenotsquare/src/screens/Game.js @@ -1,13 +1,202 @@ import React from "react"; -import { Text, View } from "react-native"; -import { useState } from "react"; +import { Text, TouchableOpacity, View, SafeAreaView } from "react-native"; +import { useState, useEffect, useRef, useMemo } from "react"; +import { useDispatch } from "react-redux"; +import {genSquareChallenge} from '../libs/Random'; +import {shapes} from '../libs/ShapeEnum'; +import { styles } from "./styles/AppStyles"; +import { squareFinished } from "../redux/actions/UserActions"; +import Autoscroll from "../components/Autoscroll"; +import Fade from "../components/Fade"; +import MaterialIcon from 'react-native-vector-icons/MaterialCommunityIcons'; +import Icons from '../themes/Icons'; +import Colors from "../themes/Colors"; +import Metrics from "../themes/Metrics"; function Game(props){ + const [squareChallenge, setSquareChallenge] = useState(() => {return genSquareChallenge()}); + const challengeState = useRef(-1); + const squareMemo = useMemo(renderPairs, [challengeState.current]); + const [timerState, setTimerState] = useState(0); + const localTimer = useRef(null); + const startTime = useRef(0); + const answers = useRef(0); + const [scrollOrigin, setScrollOrigin] = useState(0); + const scrollDestination = useRef(Metrics.animated.gameScrollInterval); + const [headerText, setHeaderText] = useState('Ready?'); + const [headerColor, setHeaderColor] = useState(styles.green); + const [headerTextColor, setHeaderTextColor] = useState(styles.darkText); + const dispatch = useDispatch(); + + useEffect(() => { + let headerTimeout = null; + + switch(timerState){ + case 0: + headerTimeout = setTimeout(() => { + setHeaderColor(styles.yellow); + setHeaderText('Set'); + setTimerState(1); + }, 1000); + break; + case 1: + headerTimeout = setTimeout(() => { + setHeaderColor(styles.red); + setHeaderTextColor(styles.lightText); + setHeaderText('Go!'); + challengeState.current = 0; + setTimerState(2); + }, 1000); + break; + case 2: + headerTimeout = setTimeout(() => { + setHeaderColor(styles.dark); + startTime.current = (Date.now()); + setHeaderText(0 + ' s'); + setTimerState(3); + }, 1000); + break; + case 3: + headerTimeout = setInterval(() => { + let elapsed = Math.round((Date.now() - startTime.current) / (1000)); + setHeaderText(elapsed + ' s'); + }, 1000); + break; + default: + break; + } + + localTimer.current = headerTimeout; + + return () => { + clearTimeout(localTimer.current); + clearInterval(localTimer.current); + } + }, [timerState]); + + + + function selectAnswer(pairIndex, correct){ + if (pairIndex === challengeState.current){ + if (correct) { + answers.current = answers.current + 1; + } + + let newOrigin = scrollDestination.current; + let newDestination = scrollDestination.current - Metrics.animated.gameScrollInterval; + + scrollDestination.current = newDestination; + challengeState.current = challengeState.current + 1; + setScrollOrigin(newOrigin); + + if (challengeState.current >= 20) { + completeChallenge(); + } + } + } + + function completeChallenge(){ + let unformatted = (Date.now() - startTime.current) / (1000); + let finalTime = Number.parseFloat(unformatted).toFixed(3); + clearInterval(localTimer.current); + setHeaderColor(styles.darkGreen); + setHeaderText(finalTime + ' s'); + setTimerState(4); + dispatch(squareFinished(answers.current, finalTime)); + } + + function generateSquare(pairIndex){ + return ( + selectAnswer(pairIndex, true)} + style={[styles.darkGreen, styles.answerButton, styles.dropShadow, styles.centeredItems, styles.centeredJustify]} + > + + + ) + } + + function generateShape(index, pairIndex){ + return ( + selectAnswer(pairIndex, false)} + style={[styles.darkGreen, styles.answerButton, styles.dropShadow, styles.centeredItems, styles.centeredJustify]} + > + + + ) + } + + function generatePair(answer, shapeIndex, pairIndex) { + if (answer === 0) { + return ( + + + {generateSquare(pairIndex)} + {generateShape(shapeIndex, pairIndex)} + + + ); + } else { + return ( + + + {generateShape(shapeIndex, pairIndex)} + {generateSquare(pairIndex)} + + + ); + } + } + + function renderPairs(){ + return squareChallenge.map((pair, index) => { + return generatePair(pair.squarePos, pair.shapeType, index); + }); + } + return ( - - test - + + + + {headerText} + + + + + + {squareMemo} + + + + Finish + + + + + + + {answers.current + ' / ' + squareChallenge.length} + + + ); } diff --git a/squarenotsquare/src/screens/HighScore.js b/squarenotsquare/src/screens/HighScore.js index 4ec3a80..cf4ec72 100644 --- a/squarenotsquare/src/screens/HighScore.js +++ b/squarenotsquare/src/screens/HighScore.js @@ -1,14 +1,74 @@ -import React from "react"; -import { Text, View } from "react-native"; -import { useState } from "react"; +import React, { useEffect, useRef, useState } from "react"; +import { BackHandler, SafeAreaView, Text, TouchableOpacity, View } from "react-native"; +import { styles } from './styles/AppStyles'; +import Slider from "../components/Slider"; +import { useDispatch } from "react-redux"; +import {goHome} from '../redux/actions/SystemActions'; +import DbAPI from "../realm/DbAPI"; +import { ScrollView } from "react-native-gesture-handler"; -function HighScore(props){ +function HighScore(){ + const dispatch = useDispatch(); + const scores = useRef([]); + const [scoresLoaded, setScoresLoaded] = useState(false); + + useEffect(() => { + BackHandler.addEventListener('hardwareBackPress', () => {return true}); + }, []) + + useEffect(() => { + if (!scoresLoaded) { + loadScores() + .then(() => { + setScoresLoaded(true); + }); + } + }, [scoresLoaded]) + + function onPressMainMenu(){ + dispatch(goHome()); + } + + async function loadScores(){ + scores.current = DbAPI.getHighScores(); + } + + function renderScore(score, index){ + return ( + + {(index+1) + '. '} + + {score.value + ' - ' + score.user} + + + ) + } + + function renderScores(){ + return scores.current.map((score, index) => { + return renderScore(score, index); + }) + } return ( - - test - - ); + + + + + + Main Menu + + + + + {renderScores()} + + + + ) } export default HighScore; \ No newline at end of file diff --git a/squarenotsquare/src/screens/Home.js b/squarenotsquare/src/screens/Home.js index e836d60..911fc96 100644 --- a/squarenotsquare/src/screens/Home.js +++ b/squarenotsquare/src/screens/Home.js @@ -1,14 +1,103 @@ -import React from "react"; -import { Text, View } from "react-native"; -import { useState } from "react"; +import React, { useEffect, useState } from "react"; +import { BackHandler, SafeAreaView, Text, TextInput, TouchableOpacity, View } from "react-native"; +import { styles } from './styles/AppStyles'; +import MaterialIcon from 'react-native-vector-icons/MaterialCommunityIcons'; +import Icons from '../themes/Icons'; +import Colors from "../themes/Colors"; +import Metrics from "../themes/Metrics"; +import Slider from "../components/Slider"; +import { useDispatch, useSelector } from "react-redux"; +import {squareStartPressed} from '../redux/actions/UserActions'; +import { goToScores } from "../redux/actions/SystemActions"; +import ModePicker from '../components/ScrollingPicker'; -function Home(props){ +function Home(){ + const dispatch = useDispatch(); + const [mode, setMode] = useState('square'); + const userRedux = useSelector((state) => state.user); + const [username, setUsername] = useState(() => {return userRedux.username}) + + useEffect(() => { + BackHandler.addEventListener('hardwareBackPress', () => {return true}); + }, []) + + function onPressStart(){ + dispatch(squareStartPressed(mode, username)); + } + + function onPressHighScores(){ + dispatch(goToScores()); + } + + function setGameMode(newMode) { + setMode(newMode); + } + + const now = new Date(Date.now()); return ( - - test - - ); + + + + + Square + + {' not '} + + + Square + + + + + + + {mode === 'square' ? 'Squares' : 'Addition'} + + + + + + + + Start + + + + + + + High Scores + + + + + + + setUsername(updated)} + /> + + + + 0.0.1a Atonal Software Aug 10 2022 + + + + ) } export default Home; \ No newline at end of file diff --git a/squarenotsquare/src/screens/Score.js b/squarenotsquare/src/screens/Score.js new file mode 100644 index 0000000..acdfbe8 --- /dev/null +++ b/squarenotsquare/src/screens/Score.js @@ -0,0 +1,113 @@ +import React, { useEffect, useRef } from "react"; +import { useSelector } from "react-redux"; +import { BackHandler, SafeAreaView, Text, TouchableOpacity, View } from "react-native"; +import { styles } from './styles/AppStyles'; +import Slider from "../components/Slider"; +import { useDispatch } from "react-redux"; +import {goHome, goToScores} from '../redux/actions/SystemActions'; + +function Score(props){ + const dispatch = useDispatch(); + const userRedux = useSelector((state) => state.user); + const timerScore = useRef(calculateTimerScore()); + const answerScore = useRef(calculateAnswerScore()); + const finalScore = useRef(calculateFinalScore(timerScore.current, answerScore.current)); + + + useEffect(() => { + BackHandler.addEventListener('hardwareBackPress', () => {return true}); + }, []) + + function calculateTimerScore(user = userRedux){ + if (user !== null){ + let score = Math.round((60 - user.lastGameTime) * 1000); + if (score < 0) { + return 0; + } else { + return score; + } + } else { + return 0; + } + } + + function calculateAnswerScore(user = userRedux) { + if (user !== null) { + let score = (user.lastGameAnswers * 1000); + return score; + } else { + return 0; + } + } + + function calculateFinalScore(timerScore, answerScore) { + let score = timerScore + answerScore; + return score; + } + + function onPressMainMenu(){ + dispatch(goHome()); + } + + function onPressHighScores(){ + dispatch(goToScores()); + } + + const now = new Date(Date.now()); + + return ( + + + + + TIME + + + {'(60 - ' + userRedux.lastGameTime + ') X 1000 = ' + timerScore.current} + + + + + ANSWERS + + + {'('+ userRedux.lastGameAnswers + ') X 1000 = ' + answerScore.current} + + + + + + TOTAL + + + {finalScore.current} + + + + + + + + Main Menu + + + + + + + High Scores + + + + + + ) +} + +export default Score; \ No newline at end of file diff --git a/squarenotsquare/src/screens/Settings.js b/squarenotsquare/src/screens/Settings.js deleted file mode 100644 index a08d504..0000000 --- a/squarenotsquare/src/screens/Settings.js +++ /dev/null @@ -1,14 +0,0 @@ -import React from "react"; -import { Text, View } from "react-native"; -import { useState } from "react"; - -function Settings(props){ - - return ( - - test - - ); -} - -export default Settings; \ No newline at end of file diff --git a/squarenotsquare/src/screens/Splash.js b/squarenotsquare/src/screens/Splash.js index fa261a7..7386c22 100644 --- a/squarenotsquare/src/screens/Splash.js +++ b/squarenotsquare/src/screens/Splash.js @@ -1,12 +1,21 @@ import React from "react"; -import { Text, View } from "react-native"; -import { useState } from "react"; +import { Image, Platform, View } from "react-native"; +import { styles } from './styles/AppStyles'; function Splash(props){ + let splashLogo = null; + if (Platform.OS === 'android') { + splashLogo = {uri: 'asset:/squarelogo.png'}; + } else { + splashLogo = {url: 'squarelogo'} + } return ( - - test + + ); } diff --git a/squarenotsquare/src/screens/styles/AppStyles.js b/squarenotsquare/src/screens/styles/AppStyles.js index 1fee9d5..2f6240a 100644 --- a/squarenotsquare/src/screens/styles/AppStyles.js +++ b/squarenotsquare/src/screens/styles/AppStyles.js @@ -28,10 +28,19 @@ export const styles = StyleSheet.create({ stretch: {alignSelf: 'stretch'}, absolute: { position: 'absolute', - top: Metrics.screenSections.headerHeight, - bottom: 0, - left: 0, - right: 0, + top: 0, + right: 0 + }, + + dropShadow: { + elevation: Metrics.shadows.elevation, + shadowOffset: { + width: Metrics.shadows.offsetWidth, + height: Metrics.shadows.offsetHeight + }, + shadowColor: Colors.material.dark, + shadowOpacity: Metrics.shadows.opacity, + shadowRadius: Metrics.shadows.radius }, spaceBetween: {justifyContent: 'space-between'}, @@ -50,12 +59,84 @@ export const styles = StyleSheet.create({ subFont: {fontSize: Fonts.subFont.size}, italic: {fontStyle: 'italic'}, - greyText: {color: Colors.material.grey600}, + darkText: {color: Colors.fonts.dark}, + lightText: {color: Colors.fonts.light}, + greyText: {color: Colors.fonts.grey}, redText: {color: Colors.material.red800}, blueText: {color: Colors.material.blue400}, boldText: {fontWeight: 'bold'}, - body: { - backgroundColor: Colors.material.light, + body: {backgroundColor: Colors.material.grey400}, + lightBackground: {backgroundColor: Colors.material.light}, + green: {backgroundColor: Colors.material.green400}, + yellow: {backgroundColor: Colors.material.yellow600}, + red: {backgroundColor: Colors.material.red800}, + darkGreen: {backgroundColor: Colors.material.green400dark}, + dark: {backgroundColor: Colors.material.dark}, + + splashLogo: { + width: Metrics.images.splashLogo.width, + height: Metrics.images.splashLogo.height + }, + + smallMargin: {margin: Metrics.margins.default}, + gameView: {margin: Metrics.margins.gameStartMargin}, + buttonMargin: { + marginBottom: Metrics.margins.buttonMargin, + marginTop: Metrics.margins.buttonMargin + }, + modePickerMargin: { + marginLeft: Metrics.icons.buttonIcon * 0.5, + marginRight: Metrics.icons.buttonIcon * 0.5 + }, + + footer: { + margin: Metrics.margins.default, + height: Metrics.screenSections.footerHeight, + borderTopWidth: Metrics.borders.width, + borderTopColor: Colors.material.grey400 + }, + + menuButton: { + borderRadius: Metrics.buttons.borderRadius, + width: Metrics.buttons.menuButton.width, + height: Metrics.buttons.menuButton.height + }, + + answerButton: { + borderRadius: Metrics.buttons.borderRadius, + width: Metrics.buttons.answerButton.width, + height: Metrics.buttons.answerButton.height + }, + + usernameInput: { + borderBottomWidth: Metrics.borders.width, + borderBottomColor: Colors.material.grey400 + }, + + addQuestionHeight: { + height: Metrics.screenSections.addQuestionHeight + }, + + nineKeyButton: { + borderRadius: Metrics.buttons.borderRadius, + width: Metrics.buttons.nineKeyButton.width, + height: Metrics.buttons.nineKeyButton.height, + margin: Metrics.margins.nineKeyMargin + }, + + settingsContainer: { + zIndex: 1000, + width: Metrics.icons.buttonIcon, + height: Metrics.icons.buttonIcon + }, + + modePicker: { + width: Metrics.icons.buttonIcon * 2, + overflow: "visible" + }, + + timerView: { + height: Metrics.screenSections.timerHeight } }) \ No newline at end of file diff --git a/squarenotsquare/src/services/Keystore.js b/squarenotsquare/src/services/Keystore.js index 70cd3f3..32d4f37 100644 --- a/squarenotsquare/src/services/Keystore.js +++ b/squarenotsquare/src/services/Keystore.js @@ -1,8 +1,13 @@ -import RNSecureKeyStore, {ACCESSIBLE} from 'react-native-secure-key-store'; +import { + setInternetCredentials, + getInternetCredentials, + resetInternetCredentials, + ACCESSIBLE +} from "react-native-keychain"; export async function removeKey(key) { let outcome = null; - await RNSecureKeyStore.remove(key).then( + await resetInternetCredentials(key).then( (res) => { outcome = true; }, @@ -16,7 +21,7 @@ export async function removeKey(key) { export async function setKey(key, value) { let outcome = null; - await RNSecureKeyStore.set(key, value, { + await setInternetCredentials(key, value, 'none', { accessible: ACCESSIBLE.WHEN_UNLOCKED_THIS_DEVICE_ONLY, }).then( (res) => { @@ -32,9 +37,13 @@ export async function setKey(key, value) { export async function getKey(key) { let value = null; - await RNSecureKeyStore.get(key).then( + await getInternetCredentials(key).then( (res) => { - value = res; + if (res === false) { + value = false; + } else { + value = res.username; + } }, (err) => { value = null; diff --git a/squarenotsquare/src/themes/Colors.js b/squarenotsquare/src/themes/Colors.js index 157821a..a81f16c 100644 --- a/squarenotsquare/src/themes/Colors.js +++ b/squarenotsquare/src/themes/Colors.js @@ -5,13 +5,18 @@ class AppColors { //200 blue200: '#90caf9', + grey200: '#eeeeee', //400 blue400: '#5c6bc0', grey400: '#bdbdbd', + green400: '#66bb6a', + green400light: '#98ee99', + green400dark: '#338a3e', //600 grey600: '#757575', + yellow600: '#fdd835', //700 grey700: '#616161', @@ -28,6 +33,7 @@ class AppColors { fonts = { dark: '#000000', + grey: '#757575', light: '#ffffff' }; } diff --git a/squarenotsquare/src/themes/Icons.js b/squarenotsquare/src/themes/Icons.js index 6820b80..1e74f22 100644 --- a/squarenotsquare/src/themes/Icons.js +++ b/squarenotsquare/src/themes/Icons.js @@ -1,9 +1,22 @@ class AppIcons { squareIcons = { + square: 'square', settings: 'cog-outline', toggleOn: 'toggle-switch-on', - toggleOfff: 'toggle-switch-off' + toggleOff: 'toggle-switch-off', + check: 'check', + plus: 'plus', + edit: 'pencil' }; + + wrongShapes = { + rectangle: 'rectangle', + triangle: 'triangle', + circle: 'circle', + hexagon: 'hexagon', + pentagon: 'pentagon', + octagon: 'octagon' + } } const Icons = new AppIcons(); diff --git a/squarenotsquare/src/themes/Metrics.js b/squarenotsquare/src/themes/Metrics.js index 98fcf37..c2ef277 100644 --- a/squarenotsquare/src/themes/Metrics.js +++ b/squarenotsquare/src/themes/Metrics.js @@ -14,16 +14,74 @@ class AppMetrics { this.screenWidth = width; this.screenHeight = height; } + + this.shadows = { + elevation: 5, + offsetWidth: 5, + offsetHeight: 5, + opacity: 0.5, + radius: 5 + } + + this.icons = { + splashIcon: this.normalize(100), + buttonIcon: this.normalize(20), + inputIcon: this.normalize(15) + } + + this.images = { + splashLogo: { + width: this.screenWidth * 0.33, + height: this.screenWidth * 0.33 + } + } + + this.margins = { + default: this.normalize(5), + buttonMargin: this.normalize(20), + gameStartMargin: this.normalize(30), + nineKeyMargin: this.normalize(2) + } + + this.buttons = { + borderRadius: 10, + menuButton: { + height: this.normalize(30), + width: this.screenWidth * 0.7 + }, + answerButton: { + width: this.normalize(40), + height: this.normalize(40) + }, + nineKeyButton: { + width: this.screenWidth * 0.28, + height: this.screenHeight * 0.08 + } + } + + this.animated = { + gameScrollInterval: ( + this.buttons.answerButton.height + + (this.margins.buttonMargin * 2) + ) + } + + this.screenSections = { + headerHeight: this.normalize(20), + sectionWidth: this.screenWidth, + footerHeight: this.normalize(10), + timerHeight: this.normalize(20), + addQuestionHeight: this.buttons.answerButton.height + } + + this.borders = { + width: 1 + } } normalize(size){ return (size * this.scalar); } - - screenSections = { - headerHeight: this.normalize(20), - sectionWidth: this.screenWidth - } } const Metrics = new AppMetrics();