From 73aee09d9ca3f5958184f1a01d35caec82cda209 Mon Sep 17 00:00:00 2001 From: haneulai Date: Wed, 9 Jul 2025 11:33:00 +0900 Subject: [PATCH] init --- .circleci/config.yml | 92 + .dockerignore | 2 + .eslintrc | 59 + .flowconfig | 12 + .gitattributes | 2 + .github/FUNDING.yml | 4 + .github/ISSUE_TEMPLATE/bug_report.md | 52 + .github/ISSUE_TEMPLATE/feature_request.md | 19 + .github/ISSUE_TEMPLATE/question.md | 21 + .github/stale.yml | 45 + .gitignore | 51 + .npmignore | 7 + .prettierrc | 5 + CHANGELOG.md | 316 + Dockerfile | 10 + LICENSE | 22 + README.md | 2 + THIRD-PARTY-LICENSES | 246 + android/.classpath | 6 + android/.project | 23 + .../org.eclipse.buildship.core.prefs | 2 + android/build.gradle | 90 + android/gradle.properties | 2 + android/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 53636 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + android/gradlew | 160 + android/gradlew.bat | 90 + .../barcodedetector/BarcodeFormatUtils.java | 72 + .../barcodedetector/RNBarcodeDetector.java | 80 + .../tasks/BarcodeDetectorAsyncTask.java | 128 + .../camera/tasks/FaceDetectorAsyncTask.java | 97 + .../camera/tasks/TextRecognizerAsyncTask.java | 178 + .../facedetector/FaceDetectorModule.java | 74 + .../facedetector/FaceDetectorUtils.java | 146 + .../facedetector/RNFaceDetector.java | 108 + .../tasks/FileFaceDetectionAsyncTask.java | 150 + android/src/main/AndroidManifest.xml | 6 + .../android/cameraview/AspectRatio.java | 189 + .../google/android/cameraview/Camera1.java | 1582 +++ .../google/android/cameraview/Camera2.java | 1558 +++ .../android/cameraview/Camera2Api23.java | 47 + .../google/android/cameraview/CameraView.java | 872 ++ .../android/cameraview/CameraViewImpl.java | 162 + .../google/android/cameraview/Constants.java | 47 + .../DisplayOrientationDetector.java | 125 + .../android/cameraview/PreviewImpl.java | 87 + .../com/google/android/cameraview/Size.java | 119 + .../google/android/cameraview/SizeMap.java | 82 + .../cameraview/SurfaceViewPreview.java | 88 + .../cameraview/TextureViewPreview.java | 146 + .../lwansbrough/RCTCamera/MutableImage.java | 327 + .../com/lwansbrough/RCTCamera/RCTCamera.java | 536 + .../RCTCamera/RCTCameraModule.java | 871 ++ .../lwansbrough/RCTCamera/RCTCameraUtils.java | 72 + .../lwansbrough/RCTCamera/RCTCameraView.java | 218 + .../RCTCamera/RCTCameraViewFinder.java | 566 + .../RCTCamera/RCTCameraViewManager.java | 133 + .../RCTSensorOrientationChecker.java | 85 + .../org/reactnative/camera/CameraModule.java | 425 + .../reactnative/camera/CameraViewManager.java | 226 + .../org/reactnative/camera/Constants.java | 48 + .../reactnative/camera/RNCameraPackage.java | 43 + .../org/reactnative/camera/RNCameraView.java | 614 ++ .../camera/RNCameraViewHelper.java | 477 + .../camera/events/BarCodeReadEvent.java | 100 + .../events/BarcodeDetectionErrorEvent.java | 53 + .../camera/events/BarcodesDetectedEvent.java | 73 + .../camera/events/CameraMountErrorEvent.java | 51 + .../camera/events/CameraReadyEvent.java | 42 + .../events/FaceDetectionErrorEvent.java | 52 + .../camera/events/FacesDetectedEvent.java | 65 + .../camera/events/PictureSavedEvent.java | 46 + .../camera/events/PictureTakenEvent.java | 42 + .../camera/events/PreviewColorEvent.java | 58 + .../camera/events/RecordingEndEvent.java | 42 + .../camera/events/RecordingStartEvent.java | 46 + .../camera/events/TextRecognizedEvent.java | 54 + .../camera/tasks/BarCodeScannerAsyncTask.java | 187 + .../BarCodeScannerAsyncTaskDelegate.java | 8 + .../BarcodeDetectorAsyncTaskDelegate.java | 13 + .../tasks/FaceDetectorAsyncTaskDelegate.java | 11 + .../camera/tasks/PictureSavedDelegate.java | 7 + .../tasks/ResolveTakenPictureAsyncTask.java | 360 + .../TextRecognizerAsyncTaskDelegate.java | 8 + .../camera/utils/ImageDimensions.java | 64 + .../reactnative/camera/utils/ObjectUtils.java | 15 + .../reactnative/camera/utils/RNFileUtils.java | 34 + .../camera/utils/ScopedContext.java | 27 + .../java/org/reactnative/frame/RNFrame.java | 28 + .../org/reactnative/frame/RNFrameFactory.java | 43 + .../src/main/res/layout-v14/texture_view.xml | 23 + android/src/main/res/layout/surface_view.xml | 23 + android/src/main/res/values/attrs.xml | 58 + android/src/main/res/values/public.xml | 21 + android/src/main/res/values/styles.xml | 24 + .../barcodedetector/BarcodeFormatUtils.java | 95 + .../barcodedetector/RNBarcodeDetector.java | 67 + .../tasks/BarcodeDetectorAsyncTask.java | 354 + .../camera/tasks/FaceDetectorAsyncTask.java | 139 + .../camera/tasks/TextRecognizerAsyncTask.java | 267 + .../facedetector/FaceDetectorModule.java | 74 + .../facedetector/FaceDetectorUtils.java | 166 + .../facedetector/RNFaceDetector.java | 97 + .../tasks/FileFaceDetectionAsyncTask.java | 167 + commitlint.config.js | 5 + docker-compose.yml | 17 + docs/API.md | 346 + docs/AndroidXMigration.md | 101 + docs/Contributing.md | 11 + docs/GradleUpgradeGuide.md | 109 + docs/QA.md | 152 + docs/RNCamera.md | 795 ++ docs/Recipes.md | 149 + docs/Tidelift.md | 56 + docs/expo_usage.md | 35 + docs/installation.md | 447 + docs/migration.md | 156 + docs/migrationV2.md | 109 + docs/react-navigation.md | 28 + docs/tests.md | 258 + examples/advanced/.gitignore | 4 + examples/advanced/advanced/.buckconfig | 6 + examples/advanced/advanced/.eslintrc.js | 4 + examples/advanced/advanced/.flowconfig | 75 + examples/advanced/advanced/.gitattributes | 1 + examples/advanced/advanced/.gitignore | 59 + examples/advanced/advanced/.prettierrc.js | 6 + examples/advanced/advanced/.watchmanconfig | 1 + examples/advanced/advanced/android/app/BUCK | 55 + .../advanced/android/app/build.gradle | 203 + .../advanced/android/app/build_defs.bzl | 19 + .../advanced/android/app/debug.keystore | Bin 0 -> 2257 bytes .../advanced/android/app/proguard-rules.pro | 10 + .../android/app/src/debug/AndroidManifest.xml | 8 + .../android/app/src/main/AndroidManifest.xml | 34 + .../app/src/main/assets/fonts/AntDesign.ttf | Bin 0 -> 70344 bytes .../app/src/main/assets/fonts/Entypo.ttf | Bin 0 -> 65584 bytes .../app/src/main/assets/fonts/EvilIcons.ttf | Bin 0 -> 13456 bytes .../app/src/main/assets/fonts/Feather.ttf | Bin 0 -> 58272 bytes .../app/src/main/assets/fonts/FontAwesome.ttf | Bin 0 -> 165548 bytes .../main/assets/fonts/FontAwesome5_Brands.ttf | Bin 0 -> 125016 bytes .../assets/fonts/FontAwesome5_Regular.ttf | Bin 0 -> 34092 bytes .../main/assets/fonts/FontAwesome5_Solid.ttf | Bin 0 -> 186228 bytes .../app/src/main/assets/fonts/Fontisto.ttf | Bin 0 -> 313528 bytes .../app/src/main/assets/fonts/Foundation.ttf | Bin 0 -> 56976 bytes .../app/src/main/assets/fonts/Ionicons.ttf | Bin 0 -> 112472 bytes .../assets/fonts/MaterialCommunityIcons.ttf | Bin 0 -> 680692 bytes .../src/main/assets/fonts/MaterialIcons.ttf | Bin 0 -> 128180 bytes .../app/src/main/assets/fonts/Octicons.ttf | Bin 0 -> 28364 bytes .../app/src/main/assets/fonts/Roboto.ttf | Bin 0 -> 145348 bytes .../src/main/assets/fonts/Roboto_medium.ttf | Bin 0 -> 137308 bytes .../src/main/assets/fonts/SimpleLineIcons.ttf | Bin 0 -> 54056 bytes .../app/src/main/assets/fonts/Zocial.ttf | Bin 0 -> 25552 bytes .../main/assets/fonts/rubicon-icon-font.ttf | Bin 0 -> 10208 bytes .../main/java/com/advanced/MainActivity.java | 32 + .../java/com/advanced/MainApplication.java | 74 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3056 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 5024 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2096 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2858 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4569 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 7098 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6464 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10676 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9250 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 15523 bytes .../app/src/main/res/values/strings.xml | 3 + .../app/src/main/res/values/styles.xml | 10 + .../advanced/advanced/android/build.gradle | 38 + .../advanced/android/gradle.properties | 21 + .../android/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 55616 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + examples/advanced/advanced/android/gradlew | 188 + .../advanced/advanced/android/gradlew.bat | 100 + .../advanced/advanced/android/settings.gradle | 3 + examples/advanced/advanced/app.json | 4 + examples/advanced/advanced/babel.config.js | 3 + examples/advanced/advanced/index.js | 6 + examples/advanced/advanced/ios/Podfile | 40 + examples/advanced/advanced/ios/Podfile.lock | 356 + .../ios/advanced.xcodeproj/project.pbxproj | 508 + .../xcshareddata/xcschemes/advanced.xcscheme | 101 + .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../advanced/ios/advanced/AppDelegate.h | 15 + .../advanced/ios/advanced/AppDelegate.m | 42 + .../ios/advanced/Base.lproj/LaunchScreen.xib | 43 + .../AppIcon.appiconset/Contents.json | 38 + .../advanced/Images.xcassets/Contents.json | 6 + .../advanced/advanced/ios/advanced/Info.plist | 85 + .../advanced/advanced/ios/advanced/main.m | 16 + examples/advanced/advanced/metro.config.js | 17 + examples/advanced/advanced/package-lock.json | 9140 ++++++++++++++++ examples/advanced/advanced/package.json | 35 + examples/advanced/advanced/src/App.js | 73 + .../advanced/src/baseComponents/Content.js | 44 + .../advanced/src/baseComponents/Header.js | 88 + .../src/baseComponents/KeyboardShiftView.js | 339 + .../advanced/src/baseComponents/MainHeader.js | 125 + .../advanced/src/baseComponents/ZoomView.js | 47 + .../src/baseComponents/orientation.js | 97 + .../advanced/src/baseComponents/utils.js | 41 + examples/advanced/advanced/src/conf.js | 130 + .../src/native-base-theme/components/Badge.js | 52 + .../src/native-base-theme/components/Body.js | 12 + .../native-base-theme/components/Button.js | 615 ++ .../src/native-base-theme/components/Card.js | 60 + .../native-base-theme/components/CardItem.js | 112 + .../native-base-theme/components/CheckBox.js | 37 + .../native-base-theme/components/Container.js | 28 + .../native-base-theme/components/Content.js | 22 + .../src/native-base-theme/components/Fab.js | 29 + .../native-base-theme/components/Footer.js | 129 + .../native-base-theme/components/FooterTab.js | 112 + .../src/native-base-theme/components/Form.js | 90 + .../src/native-base-theme/components/H1.js | 37 + .../src/native-base-theme/components/H2.js | 37 + .../src/native-base-theme/components/H3.js | 37 + .../native-base-theme/components/Header.js | 381 + .../src/native-base-theme/components/Icon.js | 58 + .../src/native-base-theme/components/Input.js | 33 + .../components/InputGroup.js | 132 + .../src/native-base-theme/components/Item.js | 246 + .../src/native-base-theme/components/Label.js | 33 + .../src/native-base-theme/components/Left.js | 12 + .../native-base-theme/components/ListItem.js | 442 + .../components/Picker.android.js | 16 + .../components/Picker.ios.js | 9 + .../native-base-theme/components/Picker.js | 16 + .../src/native-base-theme/components/Radio.js | 28 + .../src/native-base-theme/components/Right.js | 15 + .../native-base-theme/components/Segment.js | 56 + .../native-base-theme/components/Separator.js | 48 + .../native-base-theme/components/Spinner.js | 11 + .../native-base-theme/components/Subtitle.js | 18 + .../native-base-theme/components/SwipeRow.js | 48 + .../native-base-theme/components/Switch.js | 11 + .../src/native-base-theme/components/Tab.js | 12 + .../native-base-theme/components/TabBar.js | 57 + .../components/TabContainer.js | 26 + .../components/TabHeading.js | 39 + .../src/native-base-theme/components/Text.js | 80 + .../native-base-theme/components/Textarea.js | 43 + .../native-base-theme/components/Thumbnail.js | 41 + .../src/native-base-theme/components/Title.js | 30 + .../src/native-base-theme/components/Toast.js | 41 + .../src/native-base-theme/components/View.js | 13 + .../src/native-base-theme/components/index.js | 258 + .../native-base-theme/variables/platform.js | 414 + examples/advanced/advanced/src/package.json | 3 + examples/advanced/advanced/src/routes.js | 33 + .../advanced/advanced/src/screens/Camera.js | 965 ++ .../advanced/advanced/src/screens/Home.js | 75 + examples/advanced/readme.md | 18 + examples/basic/.gitignore | 43 + examples/basic/App.js | 545 + examples/basic/README.md | 28 + examples/basic/__tests__/App.js | 10 + examples/basic/android/app/BUCK | 65 + examples/basic/android/app/build.gradle | 149 + examples/basic/android/app/proguard-rules.pro | 70 + .../android/app/src/main/AndroidManifest.xml | 34 + .../com/rncameraexample/MainActivity.java | 15 + .../com/rncameraexample/MainApplication.java | 47 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3418 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2206 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4842 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7718 bytes .../app/src/main/res/values/strings.xml | 3 + .../app/src/main/res/values/styles.xml | 8 + examples/basic/android/build.gradle | 45 + examples/basic/android/gradle.properties | 22 + .../android/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 52266 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + examples/basic/android/gradlew | 164 + examples/basic/android/gradlew.bat | 90 + examples/basic/android/keystores/BUCK | 8 + .../keystores/debug.keystore.properties | 4 + examples/basic/android/settings.gradle | 5 + examples/basic/app.json | 4 + examples/basic/babel.config.js | 3 + examples/basic/index.js | 4 + .../basic/ios/RNCameraExample-tvOS/Info.plist | 54 + .../ios/RNCameraExample-tvOSTests/Info.plist | 24 + .../RNCameraExample.xcodeproj/project.pbxproj | 1543 +++ .../xcschemes/RNCameraExample-tvOS.xcscheme | 129 + .../xcschemes/RNCameraExample.xcscheme | 129 + .../basic/ios/RNCameraExample/AppDelegate.h | 16 + .../basic/ios/RNCameraExample/AppDelegate.m | 37 + .../Base.lproj/LaunchScreen.xib | 42 + .../AppIcon.appiconset/Contents.json | 38 + .../Images.xcassets/Contents.json | 6 + examples/basic/ios/RNCameraExample/Info.plist | 57 + examples/basic/ios/RNCameraExample/main.m | 18 + .../basic/ios/RNCameraExampleTests/Info.plist | 24 + .../RNCameraExampleTests.m | 70 + examples/basic/metro.config.js | 30 + examples/basic/package.json | 25 + examples/basic/rn-cli.config.js | 27 + examples/basic/yarn.lock | 6124 +++++++++++ examples/mlkit/.buckconfig | 6 + examples/mlkit/.flowconfig | 70 + examples/mlkit/.gitattributes | 1 + examples/mlkit/.gitignore | 58 + examples/mlkit/.watchmanconfig | 1 + examples/mlkit/App.js | 487 + examples/mlkit/README.md | 32 + examples/mlkit/__tests__/App.js | 15 + examples/mlkit/android/app/BUCK | 55 + examples/mlkit/android/app/build.gradle | 155 + examples/mlkit/android/app/build_defs.bzl | 19 + examples/mlkit/android/app/proguard-rules.pro | 17 + .../android/app/src/main/AndroidManifest.xml | 32 + .../src/main/java/com/mlkit/MainActivity.java | 15 + .../main/java/com/mlkit/MainApplication.java | 48 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3056 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 5024 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2096 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2858 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4569 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 7098 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6464 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10676 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9250 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 15523 bytes .../app/src/main/res/values/strings.xml | 3 + .../app/src/main/res/values/styles.xml | 8 + examples/mlkit/android/build.gradle | 34 + examples/mlkit/android/gradle.properties | 21 + .../android/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54329 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + examples/mlkit/android/gradlew | 172 + examples/mlkit/android/gradlew.bat | 84 + examples/mlkit/android/keystores/BUCK | 8 + .../keystores/debug.keystore.properties | 4 + examples/mlkit/android/settings.gradle | 5 + examples/mlkit/app.json | 4 + examples/mlkit/babel.config.js | 3 + examples/mlkit/index.js | 10 + examples/mlkit/ios/Podfile | 35 + examples/mlkit/ios/Podfile.lock | 260 + examples/mlkit/ios/mlkit-tvOS/Info.plist | 54 + examples/mlkit/ios/mlkit-tvOSTests/Info.plist | 24 + .../mlkit/ios/mlkit.xcodeproj/project.pbxproj | 1566 +++ .../xcschemes/mlkit-tvOS.xcscheme | 129 + .../xcshareddata/xcschemes/mlkit.xcscheme | 129 + .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + examples/mlkit/ios/mlkit/AppDelegate.h | 14 + examples/mlkit/ios/mlkit/AppDelegate.m | 38 + .../ios/mlkit/Base.lproj/LaunchScreen.xib | 42 + .../AppIcon.appiconset/Contents.json | 38 + .../ios/mlkit/Images.xcassets/Contents.json | 6 + examples/mlkit/ios/mlkit/Info.plist | 70 + examples/mlkit/ios/mlkit/main.m | 16 + examples/mlkit/ios/mlkitTests/Info.plist | 24 + examples/mlkit/ios/mlkitTests/mlkitTests.m | 68 + examples/mlkit/metro.config.js | 30 + examples/mlkit/package.json | 24 + examples/mlkit/rn-cli.config.js | 27 + examples/mlkit/yarn.lock | 6266 +++++++++++ examples/rectOfInterest/.buckconfig | 6 + examples/rectOfInterest/.eslintrc.js | 4 + examples/rectOfInterest/.flowconfig | 75 + examples/rectOfInterest/.gitattributes | 1 + examples/rectOfInterest/.gitignore | 59 + examples/rectOfInterest/.prettierrc.js | 6 + examples/rectOfInterest/.watchmanconfig | 1 + examples/rectOfInterest/App.js | 90 + examples/rectOfInterest/__tests__/App-test.js | 14 + examples/rectOfInterest/android/app/BUCK | 55 + .../rectOfInterest/android/app/build.gradle | 202 + .../rectOfInterest/android/app/build_defs.bzl | 19 + .../rectOfInterest/android/app/debug.keystore | Bin 0 -> 2257 bytes .../android/app/proguard-rules.pro | 10 + .../android/app/src/debug/AndroidManifest.xml | 8 + .../android/app/src/main/AndroidManifest.xml | 26 + .../java/com/rectofinterest/MainActivity.java | 15 + .../com/rectofinterest/MainApplication.java | 74 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3056 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 5024 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2096 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2858 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4569 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 7098 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6464 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10676 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9250 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 15523 bytes .../app/src/main/res/values/strings.xml | 3 + .../app/src/main/res/values/styles.xml | 9 + examples/rectOfInterest/android/build.gradle | 38 + .../rectOfInterest/android/gradle.properties | 21 + .../android/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 55616 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + examples/rectOfInterest/android/gradlew | 188 + examples/rectOfInterest/android/gradlew.bat | 100 + .../rectOfInterest/android/settings.gradle | 3 + examples/rectOfInterest/app.json | 4 + examples/rectOfInterest/babel.config.js | 3 + examples/rectOfInterest/index.js | 9 + examples/rectOfInterest/ios/Podfile | 53 + examples/rectOfInterest/ios/Podfile.lock | 350 + .../ios/rectOfInterest-tvOS/Info.plist | 53 + .../ios/rectOfInterest-tvOSTests/Info.plist | 24 + .../rectOfInterest.xcodeproj/project.pbxproj | 922 ++ .../xcschemes/rectOfInterest-tvOS.xcscheme | 129 + .../xcschemes/rectOfInterest.xcscheme | 129 + .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../ios/rectOfInterest/AppDelegate.h | 15 + .../ios/rectOfInterest/AppDelegate.m | 42 + .../Base.lproj/LaunchScreen.xib | 42 + .../AppIcon.appiconset/Contents.json | 38 + .../Images.xcassets/Contents.json | 6 + .../ios/rectOfInterest/Info.plist | 59 + .../rectOfInterest/ios/rectOfInterest/main.m | 16 + .../ios/rectOfInterestTests/Info.plist | 24 + .../rectOfInterestTests/rectOfInterestTests.m | 72 + examples/rectOfInterest/metro.config.js | 17 + examples/rectOfInterest/package-lock.json | 8611 +++++++++++++++ examples/rectOfInterest/package.json | 30 + ios/RCT/CameraFocusSquare.h | 3 + ios/RCT/CameraFocusSquare.m | 48 + ios/RCT/NSMutableDictionary+ImageMetadata.m | 90 + ios/RCT/RCTCamera.h | 12 + ios/RCT/RCTCamera.m | 192 + ios/RCT/RCTCameraManager.h | 97 + ios/RCT/RCTCameraManager.m | 1148 ++ ios/RCT/RCTSensorOrientationChecker.h | 21 + ios/RCT/RCTSensorOrientationChecker.m | 105 + ios/RN/BarcodeDetectorManagerMlkit.h | 17 + ios/RN/BarcodeDetectorManagerMlkit.m | 439 + ios/RN/FaceDetectorManagerMlkit.h | 34 + ios/RN/FaceDetectorManagerMlkit.m | 327 + ios/RN/RNCamera.h | 110 + ios/RN/RNCamera.m | 2200 ++++ ios/RN/RNCameraManager.h | 64 + ios/RN/RNCameraManager.m | 605 + ios/RN/RNCameraUtils.h | 28 + ios/RN/RNCameraUtils.m | 159 + ios/RN/RNFaceDetectorModuleMLKit.h | 5 + ios/RN/RNFaceDetectorModuleMLKit.m | 143 + ios/RN/RNFileSystem.h | 17 + ios/RN/RNFileSystem.m | 40 + ios/RN/RNImageUtils.h | 23 + ios/RN/RNImageUtils.m | 119 + ios/RN/RNSensorOrientationChecker.h | 21 + ios/RN/RNSensorOrientationChecker.m | 114 + ios/RN/TextDetectorManager.h | 12 + ios/RN/TextDetectorManager.m | 125 + ios/RNCamera.xcodeproj/project.pbxproj | 346 + package.json | 111 + react-native-camera.podspec | 52 + src/FaceDetector.js | 60 + src/RNCamera.js | 896 ++ src/index.js | 6 + types/index.d.ts | 474 + website/README.md | 193 + website/core/Footer.js | 92 + website/i18n/en.json | 82 + website/package.json | 14 + website/pages/en/help.js | 54 + website/pages/en/index.js | 142 + website/pages/en/users.js | 48 + website/sidebars.json | 9 + website/siteConfig.js | 106 + website/static/css/code-block-buttons.css | 38 + website/static/css/custom.css | 25 + website/static/img/community.png | Bin 0 -> 14557 bytes website/static/img/favicon.ico | Bin 0 -> 766 bytes website/static/img/oss_logo.png | Bin 0 -> 4370 bytes website/static/img/undraw_code_review.svg | 1 + website/static/img/undraw_monitor.svg | 1 + website/static/img/undraw_note_list.svg | 1 + website/static/img/undraw_online.svg | 1 + website/static/img/undraw_open_source.svg | 1 + .../static/img/undraw_operating_system.svg | 1 + website/static/img/undraw_react.svg | 1 + website/static/img/undraw_tweetstorm.svg | 1 + .../static/img/undraw_youtube_tutorial.svg | 1 + website/static/js/code-blocks-buttons.js | 54 + website/yarn.lock | 6039 ++++++++++ windows/.gitignore | 78 + windows/.npmignore | 9 + windows/RNCamera.sln | 115 + windows/RNCamera/BarcodeFormatExtensions.cs | 39 + windows/RNCamera/CameraForView.cs | 396 + windows/RNCamera/CameraForViewManager.cs | 52 + windows/RNCamera/CameraRotationHelper.cs | 229 + windows/RNCamera/GeolocationHelper.cs | 72 + windows/RNCamera/JObjectExtensions.cs | 13 + windows/RNCamera/MediaCaptureExtensions.cs | 26 + windows/RNCamera/Properties/AssemblyInfo.cs | 30 + windows/RNCamera/Properties/RNCamera.rd.xml | 28 + windows/RNCamera/RCTCameraModule.cs | 484 + windows/RNCamera/RCTCameraViewManager.cs | 182 + windows/RNCamera/RNCamera.csproj | 174 + windows/RNCamera/RNCameraPackage.cs | 56 + .../CameraRotationHelper.cpp | 242 + .../CameraRotationHelper.h | 62 + .../CameraRotationHelper.idl | 14 + .../ReactNativeCameraCPP/PropertySheet.props | 16 + .../ReactCameraConstants.h | 139 + .../ReactNativeCameraCPP/ReactCameraModule.h | 98 + .../ReactNativeCameraCPP/ReactCameraView.cpp | 541 + .../ReactNativeCameraCPP/ReactCameraView.h | 68 + .../ReactCameraViewManager.cpp | 156 + .../ReactCameraViewManager.h | 55 + .../ReactNativeCameraCPP.def | 3 + .../ReactNativeCameraCPP.vcxproj | 163 + .../ReactNativeCameraCPP.vcxproj.filters | 39 + .../ReactPackageProvider.cpp | 21 + .../ReactPackageProvider.h | 20 + .../ReactPackageProvider.idl | 5 + windows/ReactNativeCameraCPP/packages.config | 4 + windows/ReactNativeCameraCPP/pch.cpp | 1 + windows/ReactNativeCameraCPP/pch.h | 31 + yarn.lock | 9686 +++++++++++++++++ 519 files changed, 95823 insertions(+) create mode 100644 .circleci/config.yml create mode 100644 .dockerignore create mode 100644 .eslintrc create mode 100644 .flowconfig create mode 100644 .gitattributes create mode 100644 .github/FUNDING.yml create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/ISSUE_TEMPLATE/question.md create mode 100644 .github/stale.yml create mode 100644 .gitignore create mode 100644 .npmignore create mode 100644 .prettierrc create mode 100644 CHANGELOG.md create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 README.md create mode 100644 THIRD-PARTY-LICENSES create mode 100644 android/.classpath create mode 100644 android/.project create mode 100644 android/.settings/org.eclipse.buildship.core.prefs create mode 100644 android/build.gradle create mode 100644 android/gradle.properties create mode 100644 android/gradle/wrapper/gradle-wrapper.jar create mode 100644 android/gradle/wrapper/gradle-wrapper.properties create mode 100644 android/gradlew create mode 100644 android/gradlew.bat create mode 100644 android/src/general/java/org/reactnative/barcodedetector/BarcodeFormatUtils.java create mode 100644 android/src/general/java/org/reactnative/barcodedetector/RNBarcodeDetector.java create mode 100644 android/src/general/java/org/reactnative/camera/tasks/BarcodeDetectorAsyncTask.java create mode 100644 android/src/general/java/org/reactnative/camera/tasks/FaceDetectorAsyncTask.java create mode 100644 android/src/general/java/org/reactnative/camera/tasks/TextRecognizerAsyncTask.java create mode 100644 android/src/general/java/org/reactnative/facedetector/FaceDetectorModule.java create mode 100644 android/src/general/java/org/reactnative/facedetector/FaceDetectorUtils.java create mode 100644 android/src/general/java/org/reactnative/facedetector/RNFaceDetector.java create mode 100644 android/src/general/java/org/reactnative/facedetector/tasks/FileFaceDetectionAsyncTask.java create mode 100644 android/src/main/AndroidManifest.xml create mode 100644 android/src/main/java/com/google/android/cameraview/AspectRatio.java create mode 100644 android/src/main/java/com/google/android/cameraview/Camera1.java create mode 100644 android/src/main/java/com/google/android/cameraview/Camera2.java create mode 100644 android/src/main/java/com/google/android/cameraview/Camera2Api23.java create mode 100644 android/src/main/java/com/google/android/cameraview/CameraView.java create mode 100644 android/src/main/java/com/google/android/cameraview/CameraViewImpl.java create mode 100644 android/src/main/java/com/google/android/cameraview/Constants.java create mode 100644 android/src/main/java/com/google/android/cameraview/DisplayOrientationDetector.java create mode 100644 android/src/main/java/com/google/android/cameraview/PreviewImpl.java create mode 100644 android/src/main/java/com/google/android/cameraview/Size.java create mode 100644 android/src/main/java/com/google/android/cameraview/SizeMap.java create mode 100644 android/src/main/java/com/google/android/cameraview/SurfaceViewPreview.java create mode 100644 android/src/main/java/com/google/android/cameraview/TextureViewPreview.java create mode 100644 android/src/main/java/com/lwansbrough/RCTCamera/MutableImage.java create mode 100644 android/src/main/java/com/lwansbrough/RCTCamera/RCTCamera.java create mode 100644 android/src/main/java/com/lwansbrough/RCTCamera/RCTCameraModule.java create mode 100644 android/src/main/java/com/lwansbrough/RCTCamera/RCTCameraUtils.java create mode 100644 android/src/main/java/com/lwansbrough/RCTCamera/RCTCameraView.java create mode 100644 android/src/main/java/com/lwansbrough/RCTCamera/RCTCameraViewFinder.java create mode 100644 android/src/main/java/com/lwansbrough/RCTCamera/RCTCameraViewManager.java create mode 100644 android/src/main/java/com/lwansbrough/RCTCamera/RCTSensorOrientationChecker.java create mode 100644 android/src/main/java/org/reactnative/camera/CameraModule.java create mode 100644 android/src/main/java/org/reactnative/camera/CameraViewManager.java create mode 100644 android/src/main/java/org/reactnative/camera/Constants.java create mode 100644 android/src/main/java/org/reactnative/camera/RNCameraPackage.java create mode 100644 android/src/main/java/org/reactnative/camera/RNCameraView.java create mode 100644 android/src/main/java/org/reactnative/camera/RNCameraViewHelper.java create mode 100644 android/src/main/java/org/reactnative/camera/events/BarCodeReadEvent.java create mode 100644 android/src/main/java/org/reactnative/camera/events/BarcodeDetectionErrorEvent.java create mode 100644 android/src/main/java/org/reactnative/camera/events/BarcodesDetectedEvent.java create mode 100644 android/src/main/java/org/reactnative/camera/events/CameraMountErrorEvent.java create mode 100644 android/src/main/java/org/reactnative/camera/events/CameraReadyEvent.java create mode 100644 android/src/main/java/org/reactnative/camera/events/FaceDetectionErrorEvent.java create mode 100644 android/src/main/java/org/reactnative/camera/events/FacesDetectedEvent.java create mode 100644 android/src/main/java/org/reactnative/camera/events/PictureSavedEvent.java create mode 100644 android/src/main/java/org/reactnative/camera/events/PictureTakenEvent.java create mode 100644 android/src/main/java/org/reactnative/camera/events/PreviewColorEvent.java create mode 100644 android/src/main/java/org/reactnative/camera/events/RecordingEndEvent.java create mode 100644 android/src/main/java/org/reactnative/camera/events/RecordingStartEvent.java create mode 100644 android/src/main/java/org/reactnative/camera/events/TextRecognizedEvent.java create mode 100644 android/src/main/java/org/reactnative/camera/tasks/BarCodeScannerAsyncTask.java create mode 100644 android/src/main/java/org/reactnative/camera/tasks/BarCodeScannerAsyncTaskDelegate.java create mode 100644 android/src/main/java/org/reactnative/camera/tasks/BarcodeDetectorAsyncTaskDelegate.java create mode 100644 android/src/main/java/org/reactnative/camera/tasks/FaceDetectorAsyncTaskDelegate.java create mode 100644 android/src/main/java/org/reactnative/camera/tasks/PictureSavedDelegate.java create mode 100644 android/src/main/java/org/reactnative/camera/tasks/ResolveTakenPictureAsyncTask.java create mode 100644 android/src/main/java/org/reactnative/camera/tasks/TextRecognizerAsyncTaskDelegate.java create mode 100644 android/src/main/java/org/reactnative/camera/utils/ImageDimensions.java create mode 100644 android/src/main/java/org/reactnative/camera/utils/ObjectUtils.java create mode 100644 android/src/main/java/org/reactnative/camera/utils/RNFileUtils.java create mode 100644 android/src/main/java/org/reactnative/camera/utils/ScopedContext.java create mode 100644 android/src/main/java/org/reactnative/frame/RNFrame.java create mode 100644 android/src/main/java/org/reactnative/frame/RNFrameFactory.java create mode 100644 android/src/main/res/layout-v14/texture_view.xml create mode 100644 android/src/main/res/layout/surface_view.xml create mode 100644 android/src/main/res/values/attrs.xml create mode 100644 android/src/main/res/values/public.xml create mode 100644 android/src/main/res/values/styles.xml create mode 100644 android/src/mlkit/java/org/reactnative/barcodedetector/BarcodeFormatUtils.java create mode 100644 android/src/mlkit/java/org/reactnative/barcodedetector/RNBarcodeDetector.java create mode 100644 android/src/mlkit/java/org/reactnative/camera/tasks/BarcodeDetectorAsyncTask.java create mode 100644 android/src/mlkit/java/org/reactnative/camera/tasks/FaceDetectorAsyncTask.java create mode 100644 android/src/mlkit/java/org/reactnative/camera/tasks/TextRecognizerAsyncTask.java create mode 100644 android/src/mlkit/java/org/reactnative/facedetector/FaceDetectorModule.java create mode 100644 android/src/mlkit/java/org/reactnative/facedetector/FaceDetectorUtils.java create mode 100644 android/src/mlkit/java/org/reactnative/facedetector/RNFaceDetector.java create mode 100644 android/src/mlkit/java/org/reactnative/facedetector/tasks/FileFaceDetectionAsyncTask.java create mode 100644 commitlint.config.js create mode 100644 docker-compose.yml create mode 100644 docs/API.md create mode 100644 docs/AndroidXMigration.md create mode 100644 docs/Contributing.md create mode 100644 docs/GradleUpgradeGuide.md create mode 100644 docs/QA.md create mode 100644 docs/RNCamera.md create mode 100644 docs/Recipes.md create mode 100644 docs/Tidelift.md create mode 100644 docs/expo_usage.md create mode 100644 docs/installation.md create mode 100644 docs/migration.md create mode 100644 docs/migrationV2.md create mode 100644 docs/react-navigation.md create mode 100644 docs/tests.md create mode 100644 examples/advanced/.gitignore create mode 100644 examples/advanced/advanced/.buckconfig create mode 100644 examples/advanced/advanced/.eslintrc.js create mode 100644 examples/advanced/advanced/.flowconfig create mode 100644 examples/advanced/advanced/.gitattributes create mode 100644 examples/advanced/advanced/.gitignore create mode 100644 examples/advanced/advanced/.prettierrc.js create mode 100644 examples/advanced/advanced/.watchmanconfig create mode 100644 examples/advanced/advanced/android/app/BUCK create mode 100644 examples/advanced/advanced/android/app/build.gradle create mode 100644 examples/advanced/advanced/android/app/build_defs.bzl create mode 100644 examples/advanced/advanced/android/app/debug.keystore create mode 100644 examples/advanced/advanced/android/app/proguard-rules.pro create mode 100644 examples/advanced/advanced/android/app/src/debug/AndroidManifest.xml create mode 100644 examples/advanced/advanced/android/app/src/main/AndroidManifest.xml create mode 100644 examples/advanced/advanced/android/app/src/main/assets/fonts/AntDesign.ttf create mode 100644 examples/advanced/advanced/android/app/src/main/assets/fonts/Entypo.ttf create mode 100644 examples/advanced/advanced/android/app/src/main/assets/fonts/EvilIcons.ttf create mode 100644 examples/advanced/advanced/android/app/src/main/assets/fonts/Feather.ttf create mode 100644 examples/advanced/advanced/android/app/src/main/assets/fonts/FontAwesome.ttf create mode 100644 examples/advanced/advanced/android/app/src/main/assets/fonts/FontAwesome5_Brands.ttf create mode 100644 examples/advanced/advanced/android/app/src/main/assets/fonts/FontAwesome5_Regular.ttf create mode 100644 examples/advanced/advanced/android/app/src/main/assets/fonts/FontAwesome5_Solid.ttf create mode 100644 examples/advanced/advanced/android/app/src/main/assets/fonts/Fontisto.ttf create mode 100644 examples/advanced/advanced/android/app/src/main/assets/fonts/Foundation.ttf create mode 100644 examples/advanced/advanced/android/app/src/main/assets/fonts/Ionicons.ttf create mode 100644 examples/advanced/advanced/android/app/src/main/assets/fonts/MaterialCommunityIcons.ttf create mode 100644 examples/advanced/advanced/android/app/src/main/assets/fonts/MaterialIcons.ttf create mode 100644 examples/advanced/advanced/android/app/src/main/assets/fonts/Octicons.ttf create mode 100644 examples/advanced/advanced/android/app/src/main/assets/fonts/Roboto.ttf create mode 100644 examples/advanced/advanced/android/app/src/main/assets/fonts/Roboto_medium.ttf create mode 100644 examples/advanced/advanced/android/app/src/main/assets/fonts/SimpleLineIcons.ttf create mode 100644 examples/advanced/advanced/android/app/src/main/assets/fonts/Zocial.ttf create mode 100644 examples/advanced/advanced/android/app/src/main/assets/fonts/rubicon-icon-font.ttf create mode 100644 examples/advanced/advanced/android/app/src/main/java/com/advanced/MainActivity.java create mode 100644 examples/advanced/advanced/android/app/src/main/java/com/advanced/MainApplication.java create mode 100644 examples/advanced/advanced/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 examples/advanced/advanced/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 examples/advanced/advanced/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 examples/advanced/advanced/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 examples/advanced/advanced/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 examples/advanced/advanced/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 examples/advanced/advanced/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 examples/advanced/advanced/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 examples/advanced/advanced/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 examples/advanced/advanced/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 examples/advanced/advanced/android/app/src/main/res/values/strings.xml create mode 100644 examples/advanced/advanced/android/app/src/main/res/values/styles.xml create mode 100644 examples/advanced/advanced/android/build.gradle create mode 100644 examples/advanced/advanced/android/gradle.properties create mode 100644 examples/advanced/advanced/android/gradle/wrapper/gradle-wrapper.jar create mode 100644 examples/advanced/advanced/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 examples/advanced/advanced/android/gradlew create mode 100644 examples/advanced/advanced/android/gradlew.bat create mode 100644 examples/advanced/advanced/android/settings.gradle create mode 100644 examples/advanced/advanced/app.json create mode 100644 examples/advanced/advanced/babel.config.js create mode 100644 examples/advanced/advanced/index.js create mode 100644 examples/advanced/advanced/ios/Podfile create mode 100644 examples/advanced/advanced/ios/Podfile.lock create mode 100644 examples/advanced/advanced/ios/advanced.xcodeproj/project.pbxproj create mode 100644 examples/advanced/advanced/ios/advanced.xcodeproj/xcshareddata/xcschemes/advanced.xcscheme create mode 100644 examples/advanced/advanced/ios/advanced.xcworkspace/contents.xcworkspacedata create mode 100644 examples/advanced/advanced/ios/advanced.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 examples/advanced/advanced/ios/advanced/AppDelegate.h create mode 100644 examples/advanced/advanced/ios/advanced/AppDelegate.m create mode 100644 examples/advanced/advanced/ios/advanced/Base.lproj/LaunchScreen.xib create mode 100644 examples/advanced/advanced/ios/advanced/Images.xcassets/AppIcon.appiconset/Contents.json create mode 100644 examples/advanced/advanced/ios/advanced/Images.xcassets/Contents.json create mode 100644 examples/advanced/advanced/ios/advanced/Info.plist create mode 100644 examples/advanced/advanced/ios/advanced/main.m create mode 100644 examples/advanced/advanced/metro.config.js create mode 100644 examples/advanced/advanced/package-lock.json create mode 100644 examples/advanced/advanced/package.json create mode 100644 examples/advanced/advanced/src/App.js create mode 100644 examples/advanced/advanced/src/baseComponents/Content.js create mode 100644 examples/advanced/advanced/src/baseComponents/Header.js create mode 100644 examples/advanced/advanced/src/baseComponents/KeyboardShiftView.js create mode 100644 examples/advanced/advanced/src/baseComponents/MainHeader.js create mode 100644 examples/advanced/advanced/src/baseComponents/ZoomView.js create mode 100644 examples/advanced/advanced/src/baseComponents/orientation.js create mode 100644 examples/advanced/advanced/src/baseComponents/utils.js create mode 100644 examples/advanced/advanced/src/conf.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Badge.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Body.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Button.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Card.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/CardItem.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/CheckBox.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Container.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Content.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Fab.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Footer.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/FooterTab.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Form.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/H1.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/H2.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/H3.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Header.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Icon.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Input.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/InputGroup.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Item.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Label.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Left.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/ListItem.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Picker.android.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Picker.ios.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Picker.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Radio.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Right.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Segment.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Separator.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Spinner.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Subtitle.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/SwipeRow.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Switch.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Tab.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/TabBar.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/TabContainer.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/TabHeading.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Text.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Textarea.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Thumbnail.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Title.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/Toast.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/View.js create mode 100644 examples/advanced/advanced/src/native-base-theme/components/index.js create mode 100644 examples/advanced/advanced/src/native-base-theme/variables/platform.js create mode 100644 examples/advanced/advanced/src/package.json create mode 100644 examples/advanced/advanced/src/routes.js create mode 100644 examples/advanced/advanced/src/screens/Camera.js create mode 100644 examples/advanced/advanced/src/screens/Home.js create mode 100644 examples/advanced/readme.md create mode 100644 examples/basic/.gitignore create mode 100644 examples/basic/App.js create mode 100644 examples/basic/README.md create mode 100644 examples/basic/__tests__/App.js create mode 100644 examples/basic/android/app/BUCK create mode 100644 examples/basic/android/app/build.gradle create mode 100644 examples/basic/android/app/proguard-rules.pro create mode 100644 examples/basic/android/app/src/main/AndroidManifest.xml create mode 100644 examples/basic/android/app/src/main/java/com/rncameraexample/MainActivity.java create mode 100644 examples/basic/android/app/src/main/java/com/rncameraexample/MainApplication.java create mode 100644 examples/basic/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 examples/basic/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 examples/basic/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 examples/basic/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 examples/basic/android/app/src/main/res/values/strings.xml create mode 100644 examples/basic/android/app/src/main/res/values/styles.xml create mode 100644 examples/basic/android/build.gradle create mode 100644 examples/basic/android/gradle.properties create mode 100644 examples/basic/android/gradle/wrapper/gradle-wrapper.jar create mode 100644 examples/basic/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 examples/basic/android/gradlew create mode 100644 examples/basic/android/gradlew.bat create mode 100644 examples/basic/android/keystores/BUCK create mode 100644 examples/basic/android/keystores/debug.keystore.properties create mode 100644 examples/basic/android/settings.gradle create mode 100644 examples/basic/app.json create mode 100644 examples/basic/babel.config.js create mode 100644 examples/basic/index.js create mode 100644 examples/basic/ios/RNCameraExample-tvOS/Info.plist create mode 100644 examples/basic/ios/RNCameraExample-tvOSTests/Info.plist create mode 100644 examples/basic/ios/RNCameraExample.xcodeproj/project.pbxproj create mode 100644 examples/basic/ios/RNCameraExample.xcodeproj/xcshareddata/xcschemes/RNCameraExample-tvOS.xcscheme create mode 100644 examples/basic/ios/RNCameraExample.xcodeproj/xcshareddata/xcschemes/RNCameraExample.xcscheme create mode 100644 examples/basic/ios/RNCameraExample/AppDelegate.h create mode 100644 examples/basic/ios/RNCameraExample/AppDelegate.m create mode 100644 examples/basic/ios/RNCameraExample/Base.lproj/LaunchScreen.xib create mode 100644 examples/basic/ios/RNCameraExample/Images.xcassets/AppIcon.appiconset/Contents.json create mode 100644 examples/basic/ios/RNCameraExample/Images.xcassets/Contents.json create mode 100644 examples/basic/ios/RNCameraExample/Info.plist create mode 100644 examples/basic/ios/RNCameraExample/main.m create mode 100644 examples/basic/ios/RNCameraExampleTests/Info.plist create mode 100644 examples/basic/ios/RNCameraExampleTests/RNCameraExampleTests.m create mode 100644 examples/basic/metro.config.js create mode 100644 examples/basic/package.json create mode 100644 examples/basic/rn-cli.config.js create mode 100644 examples/basic/yarn.lock create mode 100644 examples/mlkit/.buckconfig create mode 100644 examples/mlkit/.flowconfig create mode 100644 examples/mlkit/.gitattributes create mode 100644 examples/mlkit/.gitignore create mode 100644 examples/mlkit/.watchmanconfig create mode 100644 examples/mlkit/App.js create mode 100644 examples/mlkit/README.md create mode 100644 examples/mlkit/__tests__/App.js create mode 100644 examples/mlkit/android/app/BUCK create mode 100644 examples/mlkit/android/app/build.gradle create mode 100644 examples/mlkit/android/app/build_defs.bzl create mode 100644 examples/mlkit/android/app/proguard-rules.pro create mode 100644 examples/mlkit/android/app/src/main/AndroidManifest.xml create mode 100644 examples/mlkit/android/app/src/main/java/com/mlkit/MainActivity.java create mode 100644 examples/mlkit/android/app/src/main/java/com/mlkit/MainApplication.java create mode 100644 examples/mlkit/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 examples/mlkit/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 examples/mlkit/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 examples/mlkit/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 examples/mlkit/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 examples/mlkit/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 examples/mlkit/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 examples/mlkit/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 examples/mlkit/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 examples/mlkit/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 examples/mlkit/android/app/src/main/res/values/strings.xml create mode 100644 examples/mlkit/android/app/src/main/res/values/styles.xml create mode 100644 examples/mlkit/android/build.gradle create mode 100644 examples/mlkit/android/gradle.properties create mode 100644 examples/mlkit/android/gradle/wrapper/gradle-wrapper.jar create mode 100644 examples/mlkit/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 examples/mlkit/android/gradlew create mode 100644 examples/mlkit/android/gradlew.bat create mode 100644 examples/mlkit/android/keystores/BUCK create mode 100644 examples/mlkit/android/keystores/debug.keystore.properties create mode 100644 examples/mlkit/android/settings.gradle create mode 100644 examples/mlkit/app.json create mode 100644 examples/mlkit/babel.config.js create mode 100644 examples/mlkit/index.js create mode 100644 examples/mlkit/ios/Podfile create mode 100644 examples/mlkit/ios/Podfile.lock create mode 100644 examples/mlkit/ios/mlkit-tvOS/Info.plist create mode 100644 examples/mlkit/ios/mlkit-tvOSTests/Info.plist create mode 100644 examples/mlkit/ios/mlkit.xcodeproj/project.pbxproj create mode 100644 examples/mlkit/ios/mlkit.xcodeproj/xcshareddata/xcschemes/mlkit-tvOS.xcscheme create mode 100644 examples/mlkit/ios/mlkit.xcodeproj/xcshareddata/xcschemes/mlkit.xcscheme create mode 100644 examples/mlkit/ios/mlkit.xcworkspace/contents.xcworkspacedata create mode 100644 examples/mlkit/ios/mlkit.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 examples/mlkit/ios/mlkit/AppDelegate.h create mode 100644 examples/mlkit/ios/mlkit/AppDelegate.m create mode 100644 examples/mlkit/ios/mlkit/Base.lproj/LaunchScreen.xib create mode 100644 examples/mlkit/ios/mlkit/Images.xcassets/AppIcon.appiconset/Contents.json create mode 100644 examples/mlkit/ios/mlkit/Images.xcassets/Contents.json create mode 100644 examples/mlkit/ios/mlkit/Info.plist create mode 100644 examples/mlkit/ios/mlkit/main.m create mode 100644 examples/mlkit/ios/mlkitTests/Info.plist create mode 100644 examples/mlkit/ios/mlkitTests/mlkitTests.m create mode 100644 examples/mlkit/metro.config.js create mode 100644 examples/mlkit/package.json create mode 100644 examples/mlkit/rn-cli.config.js create mode 100644 examples/mlkit/yarn.lock create mode 100644 examples/rectOfInterest/.buckconfig create mode 100644 examples/rectOfInterest/.eslintrc.js create mode 100644 examples/rectOfInterest/.flowconfig create mode 100644 examples/rectOfInterest/.gitattributes create mode 100644 examples/rectOfInterest/.gitignore create mode 100644 examples/rectOfInterest/.prettierrc.js create mode 100644 examples/rectOfInterest/.watchmanconfig create mode 100644 examples/rectOfInterest/App.js create mode 100644 examples/rectOfInterest/__tests__/App-test.js create mode 100644 examples/rectOfInterest/android/app/BUCK create mode 100644 examples/rectOfInterest/android/app/build.gradle create mode 100644 examples/rectOfInterest/android/app/build_defs.bzl create mode 100644 examples/rectOfInterest/android/app/debug.keystore create mode 100644 examples/rectOfInterest/android/app/proguard-rules.pro create mode 100644 examples/rectOfInterest/android/app/src/debug/AndroidManifest.xml create mode 100644 examples/rectOfInterest/android/app/src/main/AndroidManifest.xml create mode 100644 examples/rectOfInterest/android/app/src/main/java/com/rectofinterest/MainActivity.java create mode 100644 examples/rectOfInterest/android/app/src/main/java/com/rectofinterest/MainApplication.java create mode 100644 examples/rectOfInterest/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 examples/rectOfInterest/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 examples/rectOfInterest/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 examples/rectOfInterest/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 examples/rectOfInterest/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 examples/rectOfInterest/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 examples/rectOfInterest/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 examples/rectOfInterest/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 examples/rectOfInterest/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 examples/rectOfInterest/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 examples/rectOfInterest/android/app/src/main/res/values/strings.xml create mode 100644 examples/rectOfInterest/android/app/src/main/res/values/styles.xml create mode 100644 examples/rectOfInterest/android/build.gradle create mode 100644 examples/rectOfInterest/android/gradle.properties create mode 100644 examples/rectOfInterest/android/gradle/wrapper/gradle-wrapper.jar create mode 100644 examples/rectOfInterest/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 examples/rectOfInterest/android/gradlew create mode 100644 examples/rectOfInterest/android/gradlew.bat create mode 100644 examples/rectOfInterest/android/settings.gradle create mode 100644 examples/rectOfInterest/app.json create mode 100644 examples/rectOfInterest/babel.config.js create mode 100644 examples/rectOfInterest/index.js create mode 100644 examples/rectOfInterest/ios/Podfile create mode 100644 examples/rectOfInterest/ios/Podfile.lock create mode 100644 examples/rectOfInterest/ios/rectOfInterest-tvOS/Info.plist create mode 100644 examples/rectOfInterest/ios/rectOfInterest-tvOSTests/Info.plist create mode 100644 examples/rectOfInterest/ios/rectOfInterest.xcodeproj/project.pbxproj create mode 100644 examples/rectOfInterest/ios/rectOfInterest.xcodeproj/xcshareddata/xcschemes/rectOfInterest-tvOS.xcscheme create mode 100644 examples/rectOfInterest/ios/rectOfInterest.xcodeproj/xcshareddata/xcschemes/rectOfInterest.xcscheme create mode 100644 examples/rectOfInterest/ios/rectOfInterest.xcworkspace/contents.xcworkspacedata create mode 100644 examples/rectOfInterest/ios/rectOfInterest.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 examples/rectOfInterest/ios/rectOfInterest/AppDelegate.h create mode 100644 examples/rectOfInterest/ios/rectOfInterest/AppDelegate.m create mode 100644 examples/rectOfInterest/ios/rectOfInterest/Base.lproj/LaunchScreen.xib create mode 100644 examples/rectOfInterest/ios/rectOfInterest/Images.xcassets/AppIcon.appiconset/Contents.json create mode 100644 examples/rectOfInterest/ios/rectOfInterest/Images.xcassets/Contents.json create mode 100644 examples/rectOfInterest/ios/rectOfInterest/Info.plist create mode 100644 examples/rectOfInterest/ios/rectOfInterest/main.m create mode 100644 examples/rectOfInterest/ios/rectOfInterestTests/Info.plist create mode 100644 examples/rectOfInterest/ios/rectOfInterestTests/rectOfInterestTests.m create mode 100644 examples/rectOfInterest/metro.config.js create mode 100644 examples/rectOfInterest/package-lock.json create mode 100644 examples/rectOfInterest/package.json create mode 100644 ios/RCT/CameraFocusSquare.h create mode 100644 ios/RCT/CameraFocusSquare.m create mode 100644 ios/RCT/NSMutableDictionary+ImageMetadata.m create mode 100644 ios/RCT/RCTCamera.h create mode 100644 ios/RCT/RCTCamera.m create mode 100644 ios/RCT/RCTCameraManager.h create mode 100644 ios/RCT/RCTCameraManager.m create mode 100644 ios/RCT/RCTSensorOrientationChecker.h create mode 100644 ios/RCT/RCTSensorOrientationChecker.m create mode 100644 ios/RN/BarcodeDetectorManagerMlkit.h create mode 100644 ios/RN/BarcodeDetectorManagerMlkit.m create mode 100644 ios/RN/FaceDetectorManagerMlkit.h create mode 100644 ios/RN/FaceDetectorManagerMlkit.m create mode 100644 ios/RN/RNCamera.h create mode 100644 ios/RN/RNCamera.m create mode 100644 ios/RN/RNCameraManager.h create mode 100644 ios/RN/RNCameraManager.m create mode 100644 ios/RN/RNCameraUtils.h create mode 100644 ios/RN/RNCameraUtils.m create mode 100644 ios/RN/RNFaceDetectorModuleMLKit.h create mode 100644 ios/RN/RNFaceDetectorModuleMLKit.m create mode 100644 ios/RN/RNFileSystem.h create mode 100644 ios/RN/RNFileSystem.m create mode 100644 ios/RN/RNImageUtils.h create mode 100644 ios/RN/RNImageUtils.m create mode 100644 ios/RN/RNSensorOrientationChecker.h create mode 100644 ios/RN/RNSensorOrientationChecker.m create mode 100644 ios/RN/TextDetectorManager.h create mode 100644 ios/RN/TextDetectorManager.m create mode 100644 ios/RNCamera.xcodeproj/project.pbxproj create mode 100644 package.json create mode 100644 react-native-camera.podspec create mode 100644 src/FaceDetector.js create mode 100644 src/RNCamera.js create mode 100644 src/index.js create mode 100644 types/index.d.ts create mode 100644 website/README.md create mode 100644 website/core/Footer.js create mode 100644 website/i18n/en.json create mode 100644 website/package.json create mode 100644 website/pages/en/help.js create mode 100644 website/pages/en/index.js create mode 100644 website/pages/en/users.js create mode 100644 website/sidebars.json create mode 100644 website/siteConfig.js create mode 100644 website/static/css/code-block-buttons.css create mode 100644 website/static/css/custom.css create mode 100644 website/static/img/community.png create mode 100644 website/static/img/favicon.ico create mode 100644 website/static/img/oss_logo.png create mode 100644 website/static/img/undraw_code_review.svg create mode 100644 website/static/img/undraw_monitor.svg create mode 100644 website/static/img/undraw_note_list.svg create mode 100644 website/static/img/undraw_online.svg create mode 100644 website/static/img/undraw_open_source.svg create mode 100644 website/static/img/undraw_operating_system.svg create mode 100644 website/static/img/undraw_react.svg create mode 100644 website/static/img/undraw_tweetstorm.svg create mode 100644 website/static/img/undraw_youtube_tutorial.svg create mode 100644 website/static/js/code-blocks-buttons.js create mode 100644 website/yarn.lock create mode 100644 windows/.gitignore create mode 100644 windows/.npmignore create mode 100644 windows/RNCamera.sln create mode 100644 windows/RNCamera/BarcodeFormatExtensions.cs create mode 100644 windows/RNCamera/CameraForView.cs create mode 100644 windows/RNCamera/CameraForViewManager.cs create mode 100644 windows/RNCamera/CameraRotationHelper.cs create mode 100644 windows/RNCamera/GeolocationHelper.cs create mode 100644 windows/RNCamera/JObjectExtensions.cs create mode 100644 windows/RNCamera/MediaCaptureExtensions.cs create mode 100644 windows/RNCamera/Properties/AssemblyInfo.cs create mode 100644 windows/RNCamera/Properties/RNCamera.rd.xml create mode 100644 windows/RNCamera/RCTCameraModule.cs create mode 100644 windows/RNCamera/RCTCameraViewManager.cs create mode 100644 windows/RNCamera/RNCamera.csproj create mode 100644 windows/RNCamera/RNCameraPackage.cs create mode 100644 windows/ReactNativeCameraCPP/CameraRotationHelper.cpp create mode 100644 windows/ReactNativeCameraCPP/CameraRotationHelper.h create mode 100644 windows/ReactNativeCameraCPP/CameraRotationHelper.idl create mode 100644 windows/ReactNativeCameraCPP/PropertySheet.props create mode 100644 windows/ReactNativeCameraCPP/ReactCameraConstants.h create mode 100644 windows/ReactNativeCameraCPP/ReactCameraModule.h create mode 100644 windows/ReactNativeCameraCPP/ReactCameraView.cpp create mode 100644 windows/ReactNativeCameraCPP/ReactCameraView.h create mode 100644 windows/ReactNativeCameraCPP/ReactCameraViewManager.cpp create mode 100644 windows/ReactNativeCameraCPP/ReactCameraViewManager.h create mode 100644 windows/ReactNativeCameraCPP/ReactNativeCameraCPP.def create mode 100644 windows/ReactNativeCameraCPP/ReactNativeCameraCPP.vcxproj create mode 100644 windows/ReactNativeCameraCPP/ReactNativeCameraCPP.vcxproj.filters create mode 100644 windows/ReactNativeCameraCPP/ReactPackageProvider.cpp create mode 100644 windows/ReactNativeCameraCPP/ReactPackageProvider.h create mode 100644 windows/ReactNativeCameraCPP/ReactPackageProvider.idl create mode 100644 windows/ReactNativeCameraCPP/packages.config create mode 100644 windows/ReactNativeCameraCPP/pch.cpp create mode 100644 windows/ReactNativeCameraCPP/pch.h create mode 100644 yarn.lock diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000..189cb55 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,92 @@ +version: 2 +executorType: docker +jobs: + build-app: + resource_class: medium + environment: + - GRADLE_OPTS: '-Dorg.gradle.daemon=false -Dorg.gradle.jvmargs="-Xmx3072m -XX:+HeapDumpOnOutOfMemoryError"' + - REACT_NATIVE_MAX_WORKERS: 2 + - ANDROID_BUILD_TOOLS_VERSION: '28.0.3' + working_directory: ~/app + docker: + - image: reactnativecommunity/react-native-android + steps: + - checkout + - restore_cache: + keys: + - v1-npm-{{ .Branch }}-{{ checksum "yarn.lock" }} + - v1-npm + - run: + name: Install Dependencies + command: yarn install --ignore-engines + - save_cache: + key: v1-npm + paths: + - node_modules/ + - save_cache: + key: v1-npm-{{ .Branch }}-{{ checksum "yarn.lock" }} + paths: + - node_modules/ + - run: + name: Lint + command: yarn lint + - restore_cache: + keys: + - v1-gradle-{{ checksum "android/gradle/wrapper/gradle-wrapper.properties" }}-{{ checksum "examples/basic/android/gradle/wrapper/gradle-wrapper.properties" }} + - v1-gradle-wrapper + - restore_cache: + keys: + - v1-gradle-cache-{{ checksum "android/build.gradle" }}-{{ checksum "examples/basic/android/build.gradle" }} + - v1-gradle-cache + - run: + name: Run Checks + command: | + cd android + chmod +x ./gradlew && ./gradlew check + - store_artifacts: + path: android/build/reports + - run: + name: Run Yarn to Generate react.gradle + command: cd examples/basic/android && yarn + - run: + name: Build Sample App + command: | + cd examples/basic/android && chmod +x ./gradlew && ./gradlew clean && ./gradlew build + - store_artifacts: + path: examples/basic/android/app/build/reports + destination: app + - save_cache: + key: v1-gradle-wrapper-{{ checksum "examples/basic/android/gradle/wrapper/gradle-wrapper.properties" }} + paths: + - ~/.gradle/wrapper + - save_cache: + key: v1-gradle-cache-{{ checksum "examples/basic/android/build.gradle" }} + paths: + - ~/.gradle/caches + - deploy: + command: | + if [ "${CIRCLE_BRANCH}" == "master" ]; then + yarn ci:publish + fi + deploy-docs: + working_directory: ~/app + docker: + - image: circleci/node:8.11.1 + steps: + - checkout + - run: + name: Deploying to GitHub Pages + command: | + git config --global user.email "${GH_EMAIL}@users.noreply.github.com" + git config --global user.name "${GH_NAME}" + echo "machine github.com login $GH_NAME password $GH_TOKEN_DOCS" > ~/.netrc + cd website && yarn install && GIT_USER=${GH_NAME} yarn run publish-gh-pages +workflows: + version: 2 + build-and-deploy-docs: + jobs: + - build-app + - deploy-docs: + filters: + branches: + only: master diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..27d2dae --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +*/node_modules +*.log diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..6184705 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,59 @@ +{ + "parser": "babel-eslint", + "env": { + "browser": true, + "node": true, + "jest": true, + "es6": true + }, + "plugins": ["react", "react-native", "flowtype", "import"], + "parserOptions": { + "ecmaVersion": 6, + "sourceType": "module", + "ecmaFeatures": { + "modules": true + } + }, + "extends": [ + "eslint:recommended", + "plugin:react/recommended", + "plugin:import/errors" + ], + "rules": { + "comma-dangle": [2, "always-multiline"], + "quotes": [2, "single", { "allowTemplateLiterals": true }], + "react/prop-types": 0, + "no-case-declarations": 0, + "react/jsx-no-bind": 0, + "react/display-name": 0, + "new-cap": 0, + "react-native/no-unused-styles": 2, + "react-native/split-platform-components": 0, + "react-native/no-inline-styles": 0, + "react-native/no-color-literals": 0, + "no-unexpected-multiline": 0, + "no-class-assign": 1, + "no-console": 2, + "object-curly-spacing": [1, "always"], + "flowtype/define-flow-type": 1, + "flowtype/use-flow-type": 1, + "import/first": 2, + "import/default": 0, + "no-unused-vars": ["error", { "ignoreRestSiblings": true }], + "import/named": 0, + "import/namespace": [2, { "allowComputed": true }], + "no-extra-boolean-cast": 0, + "import/no-duplicates": 2, + "react/no-deprecated": 0 + }, + "settings": { + "import/resolver": { + "node": { + "extensions": [".js", ".android.js", ".ios.js", ".json"] + } + } + }, + "globals": { + "__DEV__": true + } +} diff --git a/.flowconfig b/.flowconfig new file mode 100644 index 0000000..af6992b --- /dev/null +++ b/.flowconfig @@ -0,0 +1,12 @@ +[ignore] +.*/node_modules/.* + +[include] + +[libs] + +[lints] + +[options] + +[strict] diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..ece6752 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Disable git large files for now! +# RNCameraExample/ios/Frameworks/FaceDetector/Frameworks/frameworks/FaceDetector.framework/FaceDetector filter=lfs diff=lfs merge=lfs -text diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..7fee250 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,4 @@ +patreon: # Replace with a single Patreon username +open_collective: react-native-camera +tidelift: npm/react-native-camera +custom: # Replace with a single custom sponsorship URL diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..50dd580 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,52 @@ +--- +name: Bug report +about: Create a report to help us improve +--- + +# Bug Report + +**To Do First** + +- [ ] Did you try latest release? +- [ ] Did you try master? +- [ ] Did you look for existing matching issues? + +**Platforms** + + + + + +**Versions** + + + +- Android: +- iOS: +- react-native-camera: +- react-native: +- react: + + +**Description/Current Behaviour** + + + +**Expected Behaviour** + + + +**Steps to Reproduce** + + + + + + +**Additionals** + + + +> Love react-native-camera? Please consider supporting our collective: 👉 https://opencollective.com/react-native-camera/donate +> Want this issue to be resolved faster? Please consider adding a bounty to it https://issuehunt.io/repos/33218414 diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..6b90eb1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,19 @@ +--- +name: Feature request +about: Suggest an idea for this project + +--- + +# Feature-Request + +**Describe the Feature** + + +**Possible Implementations** + + +**Related Issues** + + +> Love react-native-camera? Please consider supporting our collective: 👉 https://opencollective.com/react-native-camera/donate +> Want this feature to be resolved faster? Please consider adding a bounty to it https://issuehunt.io/repos/33218414 diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md new file mode 100644 index 0000000..0d36aa9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question.md @@ -0,0 +1,21 @@ +--- +name: Question +about: Ask your question + +--- + +# Question + +**To Do First** +- [ ] Take a look in the [README](https://github.com/react-native-community/react-native-camera/blob/master/README.md) +- [ ] Take a look in the [docs](https://github.com/react-native-community/react-native-camera/blob/master/docs/RNCamera.md) +- [ ] Take a look in the [QA](https://github.com/react-native-community/react-native-camera/blob/master/docs/QA.md) + +**Ask your Question** + + +**Tags** + + +> Love react-native-camera? Please consider supporting our collective: 👉 https://opencollective.com/react-native-camera/donate +> Want this issue to be resolved faster? Please consider adding a bounty to it https://issuehunt.io/repos/33218414 diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 0000000..f643907 --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,45 @@ +# Configuration for probot-stale based on: https://github.com/facebook/react-native/blob/master/.github/stale.yml + +# Number of days of inactivity before an Issue or Pull Request becomes stale +daysUntilStale: 60 + +# Number of days of inactivity before an Issue or Pull Request with the stale label is closed. +daysUntilClose: 7 + +# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable +exemptLabels: + - pinned + - security + - For Discussion + - semantic-release + - Needs revision + +# Set to true to ignore issues in a project (defaults to false) +exemptProjects: false + +# Set to true to ignore issues in a milestone (defaults to false) +exemptMilestones: false + +# Set to true to ignore issues with an assignee (defaults to false) +exemptAssignees: false + +# Label to use when marking as stale +staleLabel: stale + +# Comment to post when marking as stale. Set to `false` to disable +markComment: > + This issue has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs. Thank you + for your contributions. You may also mark this issue as a "discussion" and i + will leave this open. + +# Comment to post when closing a stale Issue or Pull Request. +closeComment: > + Closing this issue after a prolonged period of inactivity. Fell free to reopen + this issue, if this still affecting you. + +# Limit the number of actions per hour, from 1-30. Default is 30 +limitPerRun: 30 + +# Limit to only `issues` or `pulls` +only: issues \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..31a14ba --- /dev/null +++ b/.gitignore @@ -0,0 +1,51 @@ +# OSX +# +.DS_Store + +# Xcode +# +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate +project.xcworkspace + +# Android/IJ +# +*.iml +.idea +.gradle +local.properties + +# node.js +# +node_modules/ +npm-debug.log + +# yarn +yarn-error.log + +# BUCK +buck-out/ +\.buckd/ +android/app/libs +android/keystores/debug.keystore +package-json.lock + +# vscode +.vscode +examples/mlkit/android/app/google-services.json +examples/mlkit/ios/Pods +examples/mlkit/ios/mlkit/GoogleService-Info.plist diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..57dc7a1 --- /dev/null +++ b/.npmignore @@ -0,0 +1,7 @@ +/.github +/examples +circle.yml +commitlint.config.js +/android/build +/website +/docs diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..2fec1f2 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,5 @@ +{ + "singleQuote": true, + "trailingComma": "all", + "printWidth": 100 +} diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..40936f7 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,316 @@ +[**THE CHANGELOG OF FURTHER VERSIONS (STARTING WITH 1.4.0) IS MAINTAINED WITH GITHUB RELEASES AND CAN BE FOUND HERE**](https://github.com/react-native-community/react-native-camera/releases) + + +#### 1.3.1-9 (2018-10-24) + +##### Chores + +* **package:** bump to 1.3.0 ([501d4ad8](https://github.com/react-native-community/react-native-camera/commit/501d4ad8deb013f36abda18794fbf58c04bd190b)) +* **yarn:** update yarn.lock ([fafe4c11](https://github.com/react-native-community/react-native-camera/commit/fafe4c119230a7378ab18ea1dd0634d8eb55a538)) + +##### Documentation Changes + +* add slide-up zoom recipe ([737a5a2e](https://github.com/react-native-community/react-native-camera/commit/737a5a2ef51d52b5a82b2b16972ebe0df40a2fd4)) + +##### Bug Fixes + +* Do not rely in to jcenter but google ([#1874](https://github.com/react-native-community/react-native-camera/pull/1874)) ([92615246](https://github.com/react-native-community/react-native-camera/commit/9261524609ac4d9f29a33fb94847ef78a50b38f3)) +* Error retrieving camcorder profile params ([#1835](https://github.com/react-native-community/react-native-camera/pull/1835)) ([8de827e6](https://github.com/react-native-community/react-native-camera/commit/8de827e6c2a027b30668c108b147fb02affb8a35)) +* **build:** fix no face detection project ([a7a7abf6](https://github.com/react-native-community/react-native-camera/commit/a7a7abf648e5f2c2f4b6f7e11bc3ed9669916a24)) + +##### Reverts + +* check if face or text detector libraries are included independently ([#1882](https://github.com/react-native-community/react-native-camera/pull/1882)) ([9efd7554](https://github.com/react-native-community/react-native-camera/commit/9efd7554586deed6d8e59cce579b21479365f984)) + +### 1.3.0-8 (2018-09-26) + +##### Build System / Dependencies + +* **package:** 1.2.0 ([da8e79cd](https://github.com/react-native-community/react-native-camera/commit/da8e79cd7aa2d62fb1209892c83c440b8f80e0b6)) +* **change-log:** 1.2.0 ([1da60b2f](https://github.com/react-native-community/react-native-camera/commit/1da60b2feb260748a3da268486717d854193e7b6)) + +##### Chores + +* **ts:** add doNotSave to ts type definitions ([f0c18b7c](https://github.com/react-native-community/react-native-camera/commit/f0c18b7c2074bb88a92df526525dcf8845afd854)) +* **update:** update package.json packages ([#1739](https://github.com/react-native-community/react-native-camera/pull/1739)) ([843cbf4f](https://github.com/react-native-community/react-native-camera/commit/843cbf4ff685a3f211f3b5c31613943d1672bb88)) + +##### New Features + +* adds autoFocusPointOfInterest to iOS ([39cc29de](https://github.com/react-native-community/react-native-camera/commit/39cc29deca9c1de9bb4b1e3a9f31f07b32f7ddc6)) + +##### Bug Fixes + +* **rn-camera:** + * bump platform version to 9.0. closes [#1806](https://github.com/react-native-community/react-native-camera/pull/1806) ([bdbc2564](https://github.com/react-native-community/react-native-camera/commit/bdbc2564ba113e1316306333febb1763b1003aaf)) + * use `componentDidMount` instead of `componentWillMount`. closes [#1809](https://github.com/react-native-community/react-native-camera/pull/1809) closes [#1760](https://github.com/react-native-community/react-native-camera/pull/1760) ([2d311ff1](https://github.com/react-native-community/react-native-camera/commit/2d311ff1866977d77d6b0018dbc2a7a2ee511040)) +* added some missing typescript declarations ([#1792](https://github.com/react-native-community/react-native-camera/pull/1792)) ([a5c67376](https://github.com/react-native-community/react-native-camera/commit/a5c67376af4bdddef163480441cc773004b86471)) +* android base64 string format for consistency with ios ([#1776](https://github.com/react-native-community/react-native-camera/pull/1776)) ([d4b4ee11](https://github.com/react-native-community/react-native-camera/commit/d4b4ee116861919d0ba70f3edea774d1ab252182)) +* update docs and add check for focus mode support ([ca5a12b4](https://github.com/react-native-community/react-native-camera/commit/ca5a12b400c599e6ec76d60214c3b479891f4d02)) + +### 1.2.0-7 (2018-08-09) + +##### Build System / Dependencies + +* **change-log:** v1.1.5-2 ([e49e35a0](https://github.com/react-native-community/react-native-camera/commit/e49e35a085b1793cc8692d2c1600eb2e14ffbe75)) + +##### Documentation Changes + +* **expo:** explain how to migrate to and from expo camera module ([#1605](https://github.com/react-native-community/react-native-camera/pull/1605)) ([4a9322cb](https://github.com/react-native-community/react-native-camera/commit/4a9322cb8b7d455fc28f7e67a15bff2fd9d7ea3e)) + +##### New Features + +* **preview:** + * add android code ([497a7039](https://github.com/react-native-community/react-native-camera/commit/497a703964e925b6e3e62e39a54a9734a7ed6c40)) + * add new props to JS ([9bf9a2e3](https://github.com/react-native-community/react-native-camera/commit/9bf9a2e3162b919d98cab104029250394b2dd3a8)) + * add preview methods and more fixes ([b9fb708f](https://github.com/react-native-community/react-native-camera/commit/b9fb708ffc3fd6865191ce6e2bd0a2404a9c657c)) + +##### Bug Fixes + +* **rn-camera:** + * fix codec backwards compat ([91f5bf45](https://github.com/react-native-community/react-native-camera/commit/91f5bf45672a8b83253ed17c3f90eee64b0f07bf)) + * fix types, conversions and casts ([83d0618e](https://github.com/react-native-community/react-native-camera/commit/83d0618e988656dfd9a216b85394ceb5f3a05e9b)) +* **picture-size:** + * create None default value ([ad87c8e3](https://github.com/react-native-community/react-native-camera/commit/ad87c8e3421f2ff1836674a01cb86deb619cdc4e)) + * export method and change default value ([9efb7f14](https://github.com/react-native-community/react-native-camera/commit/9efb7f141f8970ad160c852fa837427a79f3d0dc)) + +##### Other Changes + +* Implement video stabilization mode property for ios ([#1606](https://github.com/react-native-community/react-native-camera/pull/1606)) ([a090faa0](https://github.com/react-native-community/react-native-camera/commit/a090faa09b417afd41af3739ec2b895de9dca6b6)) + +#### 1.1.5-2 (2018-06-14) + +##### Build System / Dependencies + +* **change-log:** + * v1.1.4-6 ([86bf1d28](https://github.com/react-native-community/react-native-camera/commit/86bf1d284baf64caa94e3815c9ebed5b0e662369)) + * v1.1.3-5 ([98b18950](https://github.com/react-native-community/react-native-camera/commit/98b1895038ccf47f94d7d27811f3540d3847feb7)) + * v1.1.2-4 ([4f6b213d](https://github.com/react-native-community/react-native-camera/commit/4f6b213dc63e7ae96c77a1cf1627c14fcda99a94)) + * v1.1.1-3 ([821a1b24](https://github.com/react-native-community/react-native-camera/commit/821a1b24e6251ad2a9ba9087c9a427a3b20d0778)) + * v1.1.0 ([01e6c843](https://github.com/react-native-community/react-native-camera/commit/01e6c8434d87f4723feff7fec568028bfb140cb5)) + * v1.1.0-2 ([deb42144](https://github.com/react-native-community/react-native-camera/commit/deb42144769c3ccc2e593d5dbf586abab244f219)) + +##### Chores + +* **cameraview:** + * integrate google's cameraview directly on rncamera? ([d11ed319](https://github.com/react-native-community/react-native-camera/commit/d11ed31917c26df151b4fb46ab166d2921a9ac99)) + * update camera view ([501ffe83](https://github.com/react-native-community/react-native-camera/commit/501ffe8336b9d8bc9743c1ed803fe20b77f2c270)) +* **lint:** + * more lint checks ([3bb9a648](https://github.com/react-native-community/react-native-camera/commit/3bb9a6484af306ac66083dd05ac6c46de542f3b4)) + * fix some warnings ([7967e2fb](https://github.com/react-native-community/react-native-camera/commit/7967e2fbce44b15a77ae0cbddf76f0b37fc530ba)) + * fix lint to make ci work ([919d07b1](https://github.com/react-native-community/react-native-camera/commit/919d07b162f4a39a2454bebdb387224e21a4ba7a)) +* **package:** enforce no errors on lint and update packages ([00f4f4c1](https://github.com/react-native-community/react-native-camera/commit/00f4f4c13714a9d4e03a2cd76f2b19de7a78cfe4)) +* **gms:** change default gms to 12.0.0 ([94c8968b](https://github.com/react-native-community/react-native-camera/commit/94c8968b2633cfa4e16d1e4275eb831065232014)) + +##### Documentation Changes + +* **expo:** explain how to migrate to and from expo camera module ([#1605](https://github.com/react-native-community/react-native-camera/pull/1605)) ([4a9322cb](https://github.com/react-native-community/react-native-camera/commit/4a9322cb8b7d455fc28f7e67a15bff2fd9d7ea3e)) +* **recipes:** add some recipes ([ef5c2fef](https://github.com/react-native-community/react-native-camera/commit/ef5c2fef14530110b0c5aec3a044ca27dcfa8d72)) + +##### New Features + +* **preview:** + * add android code ([497a7039](https://github.com/react-native-community/react-native-camera/commit/497a703964e925b6e3e62e39a54a9734a7ed6c40)) + * add new props to JS ([9bf9a2e3](https://github.com/react-native-community/react-native-camera/commit/9bf9a2e3162b919d98cab104029250394b2dd3a8)) + * add preview methods and more fixes ([b9fb708f](https://github.com/react-native-community/react-native-camera/commit/b9fb708ffc3fd6865191ce6e2bd0a2404a9c657c)) +* **types:** + * add types for [#1547](https://github.com/react-native-community/react-native-camera/pull/1547) ([#1548](https://github.com/react-native-community/react-native-camera/pull/1548)) ([3ce3c80d](https://github.com/react-native-community/react-native-camera/commit/3ce3c80db670cc05dead7636d70dc8fc911a2c6b)) + * add types for [#1523](https://github.com/react-native-community/react-native-camera/pull/1523) ([f61004de](https://github.com/react-native-community/react-native-camera/commit/f61004de623a2011e99a6a8092048b513025f5ed)) + * add types for [#1518](https://github.com/react-native-community/react-native-camera/pull/1518) (FaCC) ([842dc1cb](https://github.com/react-native-community/react-native-camera/commit/842dc1cb581bd28653549dee86f70c2ff5d65ee2)) + * add types for [#1441](https://github.com/react-native-community/react-native-camera/pull/1441) ([be3e0ebf](https://github.com/react-native-community/react-native-camera/commit/be3e0ebfb8ff42a48211b55054325548cd304694)) + * add types for [#1428](https://github.com/react-native-community/react-native-camera/pull/1428) ([6cc3d89b](https://github.com/react-native-community/react-native-camera/commit/6cc3d89bec2a55b31c2e7c4f0e597eafc8c31323)) + * add types for text detection feature ([c0ace2e9](https://github.com/react-native-community/react-native-camera/commit/c0ace2e94c47a9122a386bcbe99911182da80744)) +* **rn-camera:** use and export constants ([c8c6fdea](https://github.com/react-native-community/react-native-camera/commit/c8c6fdea0bf15de60c638f504f38dcb9ac80a3e4)) +* **rn_camera:** add function as children ([45cc8f25](https://github.com/react-native-community/react-native-camera/commit/45cc8f25d2de71b9eee29e1fe14e2f4f3d2feee9)) +* **ci:** add first circleci lint and check script ([ee385eec](https://github.com/react-native-community/react-native-camera/commit/ee385eec05b9be5e1f96524206e50aa96085ce19)) +* **android:** make android gradle check work ([1c7f231a](https://github.com/react-native-community/react-native-camera/commit/1c7f231af460127bebf1f9970367bf64987de34b)) +* **play-sound:** play sound on capture (android) ([69242183](https://github.com/react-native-community/react-native-camera/commit/69242183cc65460040795b866095f34090a9598d)) + +##### Bug Fixes + +* **rn-camera:** + * fix codec backwards compat ([91f5bf45](https://github.com/react-native-community/react-native-camera/commit/91f5bf45672a8b83253ed17c3f90eee64b0f07bf)) + * fix types, conversions and casts ([83d0618e](https://github.com/react-native-community/react-native-camera/commit/83d0618e988656dfd9a216b85394ceb5f3a05e9b)) + * inject correct status ([858cc4c9](https://github.com/react-native-community/react-native-camera/commit/858cc4c9c8fd456390b274ee4cfddb62fee198ee)) +* **picture-size:** + * create None default value ([ad87c8e3](https://github.com/react-native-community/react-native-camera/commit/ad87c8e3421f2ff1836674a01cb86deb619cdc4e)) + * export method and change default value ([9efb7f14](https://github.com/react-native-community/react-native-camera/commit/9efb7f141f8970ad160c852fa837427a79f3d0dc)) +* **cache:** store video recordings in same directory as photos ([bba84a98](https://github.com/react-native-community/react-native-camera/commit/bba84a983446c25f76aa77793f49d4252cd63ea3)) +* **rn_camera:** improve naming ([3811d82c](https://github.com/react-native-community/react-native-camera/commit/3811d82c75ceedc27b8aa5550e352159d5daf2b8)) +* **search-paths:** remove unnecessary search paths and add missing one ([dee298b4](https://github.com/react-native-community/react-native-camera/commit/dee298b4fefca4659468fd43e914fd1c970ca930)) +* **styles:** place style sheet above everything,prevent undefined styles ([01501892](https://github.com/react-native-community/react-native-camera/commit/01501892b5711db765cc367a24ba7c3233678791)) +* **warnings:** remove inline styles ([716c4e38](https://github.com/react-native-community/react-native-camera/commit/716c4e389da45fd7d240a8b4acf60a620fa2c372)) +* **barcode:** better name google variables and correct init ([38e96ed2](https://github.com/react-native-community/react-native-camera/commit/38e96ed24d6b59e108a0ac175eefff22d7b33c27)) +* **Android:** image stretched instead of cropped ([73eb5fd2](https://github.com/react-native-community/react-native-camera/commit/73eb5fd272c28a6369705d30379dcabae3429301)) +* **barcode-prop:** fix default value and add more values ([2c87b44b](https://github.com/react-native-community/react-native-camera/commit/2c87b44b1660f44e9f2bc8e7fce207c872933806)) +* **docs:** + * move skipProcessing to 'Supported options' ([8054200f](https://github.com/react-native-community/react-native-camera/commit/8054200f81a754ae2d29532b636f55331e996703)) + * Header on the wrong position ([589a0819](https://github.com/react-native-community/react-native-camera/commit/589a08192930f96aa4f7cf255aa4ac0adfd31a12)) +* **types:** fix types for [#1402](https://github.com/react-native-community/react-native-camera/pull/1402) ([26f9a1e5](https://github.com/react-native-community/react-native-camera/commit/26f9a1e53b3f3b21b86f28d27236849995e7baf9)) +* **ios:** add video output early to avoid underexposed beginning ([9ef5b29a](https://github.com/react-native-community/react-native-camera/commit/9ef5b29ad5d66f0e6d52e504dab00b862148c60f)) + +##### Other Changes + +* Implement video stabilization mode property for ios ([#1606](https://github.com/react-native-community/react-native-camera/pull/1606)) ([a090faa0](https://github.com/react-native-community/react-native-camera/commit/a090faa09b417afd41af3739ec2b895de9dca6b6)) +* Fix java.lang.ArrayIndexOutOfBoundsException with image rotation ([6ce014d3](https://github.com/react-native-community/react-native-camera/commit/6ce014d3ca3805f908fbdcd30da9b982de3bc2da)) + +#### 1.1.4-6 (2018-05-21) + +#### 1.1.3-5 (2018-05-18) + +##### New Features + +* **types:** + * add types for [#1547](https://github.com/react-native-community/react-native-camera/pull/1547) ([#1548](https://github.com/react-native-community/react-native-camera/pull/1548)) ([3ce3c80d](https://github.com/react-native-community/react-native-camera/commit/3ce3c80db670cc05dead7636d70dc8fc911a2c6b)) + * add types for [#1523](https://github.com/react-native-community/react-native-camera/pull/1523) ([f61004de](https://github.com/react-native-community/react-native-camera/commit/f61004de623a2011e99a6a8092048b513025f5ed)) + * add types for [#1518](https://github.com/react-native-community/react-native-camera/pull/1518) (FaCC) ([842dc1cb](https://github.com/react-native-community/react-native-camera/commit/842dc1cb581bd28653549dee86f70c2ff5d65ee2)) +* **rn-camera:** use and export constants ([c8c6fdea](https://github.com/react-native-community/react-native-camera/commit/c8c6fdea0bf15de60c638f504f38dcb9ac80a3e4)) +* **rn_camera:** add function as children ([45cc8f25](https://github.com/react-native-community/react-native-camera/commit/45cc8f25d2de71b9eee29e1fe14e2f4f3d2feee9)) + +##### Bug Fixes + +* **rn-camera:** inject correct status ([858cc4c9](https://github.com/react-native-community/react-native-camera/commit/858cc4c9c8fd456390b274ee4cfddb62fee198ee)) +* **cache:** store video recordings in same directory as photos ([bba84a98](https://github.com/react-native-community/react-native-camera/commit/bba84a983446c25f76aa77793f49d4252cd63ea3)) +* **rn_camera:** improve naming ([3811d82c](https://github.com/react-native-community/react-native-camera/commit/3811d82c75ceedc27b8aa5550e352159d5daf2b8)) + +##### Other Changes + +* Fix java.lang.ArrayIndexOutOfBoundsException with image rotation ([6ce014d3](https://github.com/react-native-community/react-native-camera/commit/6ce014d3ca3805f908fbdcd30da9b982de3bc2da)) + +#### 1.1.2-4 (2018-04-25) + +##### Chores + +* **cameraview:** integrate google's cameraview directly on rncamera? ([d11ed319](https://github.com/react-native-community/react-native-camera/commit/d11ed31917c26df151b4fb46ab166d2921a9ac99)) + +##### Bug Fixes + +* **search-paths:** remove unnecessary search paths and add missing one ([dee298b4](https://github.com/react-native-community/react-native-camera/commit/dee298b4fefca4659468fd43e914fd1c970ca930)) + +#### 1.1.1-3 (2018-04-15) + +##### Build System / Dependencies + +* **change-log:** v1.1.0 ([01e6c843](https://github.com/react-native-community/react-native-camera/commit/01e6c8434d87f4723feff7fec568028bfb140cb5)) + +##### Chores + +* **lint:** + * more lint checks ([3bb9a648](https://github.com/react-native-community/react-native-camera/commit/3bb9a6484af306ac66083dd05ac6c46de542f3b4)) + * fix some warnings ([7967e2fb](https://github.com/react-native-community/react-native-camera/commit/7967e2fbce44b15a77ae0cbddf76f0b37fc530ba)) + * fix lint to make ci work ([919d07b1](https://github.com/react-native-community/react-native-camera/commit/919d07b162f4a39a2454bebdb387224e21a4ba7a)) +* **package:** enforce no errors on lint and update packages ([00f4f4c1](https://github.com/react-native-community/react-native-camera/commit/00f4f4c13714a9d4e03a2cd76f2b19de7a78cfe4)) + +##### New Features + +* **ci:** add first circleci lint and check script ([ee385eec](https://github.com/react-native-community/react-native-camera/commit/ee385eec05b9be5e1f96524206e50aa96085ce19)) +* **android:** make android gradle check work ([1c7f231a](https://github.com/react-native-community/react-native-camera/commit/1c7f231af460127bebf1f9970367bf64987de34b)) + +##### Bug Fixes + +* **styles:** place style sheet above everything,prevent undefined styles ([01501892](https://github.com/react-native-community/react-native-camera/commit/01501892b5711db765cc367a24ba7c3233678791)) +* **warnings:** remove inline styles ([716c4e38](https://github.com/react-native-community/react-native-camera/commit/716c4e389da45fd7d240a8b4acf60a620fa2c372)) + +### 1.1.0-2 (2018-04-15) + +##### Chores + +* **gms:** change default gms to 12.0.0 ([94c8968b](https://github.com/react-native-community/react-native-camera/commit/94c8968b2633cfa4e16d1e4275eb831065232014)) +* **cameraview:** update camera view ([501ffe83](https://github.com/react-native-community/react-native-camera/commit/501ffe8336b9d8bc9743c1ed803fe20b77f2c270)) + +##### Documentation Changes + +* **recipes:** add some recipes ([ef5c2fef](https://github.com/react-native-community/react-native-camera/commit/ef5c2fef14530110b0c5aec3a044ca27dcfa8d72)) + +##### New Features + +* **types:** + * add types for [#1441](https://github.com/react-native-community/react-native-camera/pull/1441) ([be3e0ebf](https://github.com/react-native-community/react-native-camera/commit/be3e0ebfb8ff42a48211b55054325548cd304694)) + * add types for [#1428](https://github.com/react-native-community/react-native-camera/pull/1428) ([6cc3d89b](https://github.com/react-native-community/react-native-camera/commit/6cc3d89bec2a55b31c2e7c4f0e597eafc8c31323)) + * add types for text detection feature ([c0ace2e9](https://github.com/react-native-community/react-native-camera/commit/c0ace2e94c47a9122a386bcbe99911182da80744)) +* **play-sound:** play sound on capture (android) ([69242183](https://github.com/react-native-community/react-native-camera/commit/69242183cc65460040795b866095f34090a9598d)) + +##### Bug Fixes + +* **barcode:** better name google variables and correct init ([38e96ed2](https://github.com/react-native-community/react-native-camera/commit/38e96ed24d6b59e108a0ac175eefff22d7b33c27)) +* **Android:** image stretched instead of cropped ([73eb5fd2](https://github.com/react-native-community/react-native-camera/commit/73eb5fd272c28a6369705d30379dcabae3429301)) +* **barcode-prop:** fix default value and add more values ([2c87b44b](https://github.com/react-native-community/react-native-camera/commit/2c87b44b1660f44e9f2bc8e7fce207c872933806)) +* **docs:** + * move skipProcessing to 'Supported options' ([8054200f](https://github.com/react-native-community/react-native-camera/commit/8054200f81a754ae2d29532b636f55331e996703)) + * Header on the wrong position ([589a0819](https://github.com/react-native-community/react-native-camera/commit/589a08192930f96aa4f7cf255aa4ac0adfd31a12)) +* **types:** fix types for [#1402](https://github.com/react-native-community/react-native-camera/pull/1402) ([26f9a1e5](https://github.com/react-native-community/react-native-camera/commit/26f9a1e53b3f3b21b86f28d27236849995e7baf9)) +* **ios:** add video output early to avoid underexposed beginning ([9ef5b29a](https://github.com/react-native-community/react-native-camera/commit/9ef5b29ad5d66f0e6d52e504dab00b862148c60f)) + +#### 1.0.3-1 (2018-03-24) + +##### Chores + +* restored original CameraModule.java ([7bea109e](https://github.com/react-native-community/react-native-camera/commit/7bea109e47a5b7302069f9774a4c7fb2d1652275)) + +##### Documentation Changes + +* **rncamera:** + * specifying onTextRecognized callback prototype ([48611212](https://github.com/react-native-community/react-native-camera/commit/48611212f56eed8d9594693c84fe3f00cbb8448b)) + * docs for text recognition usage ([68639b82](https://github.com/react-native-community/react-native-camera/commit/68639b82ed98ef53ac1a0cc1762c35c5941b61b6)) +* **codec:** document ios codec option ([2b9d8db2](https://github.com/react-native-community/react-native-camera/commit/2b9d8db21389af624fd7ee3fe0eafa8348a3b776)) + +##### New Features + +* **chore:** try to automate changelog ([cc5f6e62](https://github.com/react-native-community/react-native-camera/commit/cc5f6e62eb78a7de884a3b770eaa12c03a626721)) +* **android:** + * integrating Google Vision's text recognition ([fcaa9452](https://github.com/react-native-community/react-native-camera/commit/fcaa9452865247ba8aa63e6fd323bd86ea0f7401)) + +* **Android:** +* **types:** update types for video recording codec ([f9252254](https://github.com/react-native-community/react-native-camera/commit/f925225484ca1599652039b612fc7deba635de6f)) +* **rn-camera:** add codec option for ios ([c0d5aabf](https://github.com/react-native-community/react-native-camera/commit/c0d5aabf0b32f71326ff153d31e3cb5c588062da)) + +##### Bug Fixes + +* **typo:** fix typo on package.json ([706278d8](https://github.com/react-native-community/react-native-camera/commit/706278d807edac5bc9eb606e29b3326790d7816c)) +* **textrecognition:** height of text block ([01e763b1](https://github.com/react-native-community/react-native-camera/commit/01e763b1430cdb65d82c78c08a5215da65706e6d)) +* issue [#1246](https://github.com/react-native-community/react-native-camera/pull/1246) - torch will be disabled when starting the record ([8c696017](https://github.com/react-native-community/react-native-camera/commit/8c6960178922492bf49fc44fbab25b638209dc4e)) +* **ios-project:** fix path to parent's ios project ([4496c321](https://github.com/react-native-community/react-native-camera/commit/4496c3217195853a36c261415f126140ddebbcc4)) + +#### 1.0.2 (2018-03-10) + +##### Chores + +* **flow:** add missing types to Picture options ([6bff4d93](https://github.com/react-native-community/react-native-camera/commit/6bff4d935ac421f4aea395c58f5916df78cdae0a)) +* **types:** add new keys to TakePictureOptions ([cc272036](https://github.com/react-native-community/react-native-camera/commit/cc272036581f68dbdce1b596644a158a42c471dc)) +* **face-detector:** make face detection stoppage smoother ([3b3c38dd](https://github.com/react-native-community/react-native-camera/commit/3b3c38dd7d08edd1dad3b6c7fb944515fcb1e9c4)) + +##### New Features + +* **types:** + * add FaceDetector declarations ([ba218750](https://github.com/react-native-community/react-native-camera/commit/ba21875001df2e260feb87d71411ff89fe6942ea)) + * add TypeScript definition files ([a94bad5e](https://github.com/react-native-community/react-native-camera/commit/a94bad5e3739927dd50b850f68ed57a59f782e99)) + +##### Bug Fixes + +* **types:** + * fix onBarCodeRead type ([a9947b47](https://github.com/react-native-community/react-native-camera/commit/a9947b47d569227ed6b83ef2988a8cbd3e6b7b41)) + * fix definition for RNCameraProps.ratio ([4d1616c5](https://github.com/react-native-community/react-native-camera/commit/4d1616c57a059127db07f52ca18a8b092ba559ad)) +* **android-camera:** revert to old camera api ([8d9c06ad](https://github.com/react-native-community/react-native-camera/commit/8d9c06ad903b40abc8bef67927d4621c494aeb3b)) + +#### 1.0.1 (2018-02-14) + +##### New Features + +* **release-script:** add script to package json ([b0503dc8](https://github.com/react-native-community/react-native-camera/commit/b0503dc8aefc1d2a992c1778e00c5d0f8dfd6901)) +* **changelog:** add changelog script ([d2263937](https://github.com/react-native-community/react-native-camera/commit/d226393783748f973cc99032343fc55e45828717)) +* **mirror:** add option to give "mirrorImage" flag to takePicture. ([0b6f0abd](https://github.com/react-native-community/react-native-camera/commit/0b6f0abda07b8a9ff3daa1722a254087f30eec08)) + +##### Bug Fixes + +* **focusWarning:** fix focus depth warning being shown for ios. ([79698b81](https://github.com/react-native-community/react-native-camera/commit/79698b815b44507037a6e89fda40b5c505703c00)) +* **imports:** delete some useless imports which may cause problems ([a5b9f7e7](https://github.com/react-native-community/react-native-camera/commit/a5b9f7e717bc11aad9a8e5d9e9a449ad7fd9c9fa)) + +### master + +### 1.0.0 +- RNCamera as main camera implementation for both iOS and Android (base on expo module) +- FaceDetector feature for both iOS and Android (based on expo module) +- RCTCamera deprecated + +### 0.13.0 +- added RNCamera implementation for android +- added FaceDetector for android diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..d369844 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,10 @@ +FROM node:8.11.4 + +WORKDIR /app/website + +EXPOSE 3000 35729 +COPY ./docs /app/docs +COPY ./website /app/website +RUN yarn install + +CMD ["yarn", "start"] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8b2e1ab --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Loch Wansbrough + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/README.md b/README.md new file mode 100644 index 0000000..d09df99 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ + +This is edit of [https://react-native-community.github.io/react-native-camera/] for indivisual purpose diff --git a/THIRD-PARTY-LICENSES b/THIRD-PARTY-LICENSES new file mode 100644 index 0000000..917eccf --- /dev/null +++ b/THIRD-PARTY-LICENSES @@ -0,0 +1,246 @@ +=============================================================================== + + expo/expo + https://github.com/expo/expo + +------------------------------------------------------------------------------- + +BSD License + +For Exponent software + +Copyright (c) 2015-present, 650 Industries, Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the names 650 Industries, Exponent, nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=============================================================================== + + google/cameraview + https://github.com/google/cameraview + +------------------------------------------------------------------------------- + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/android/.classpath b/android/.classpath new file mode 100644 index 0000000..eb19361 --- /dev/null +++ b/android/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/android/.project b/android/.project new file mode 100644 index 0000000..f876b5b --- /dev/null +++ b/android/.project @@ -0,0 +1,23 @@ + + + react-native-camera + Project react-native-camera created by Buildship. + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.buildship.core.gradleprojectnature + + diff --git a/android/.settings/org.eclipse.buildship.core.prefs b/android/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..1675490 --- /dev/null +++ b/android/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,2 @@ +connection.project.dir=../../../android +eclipse.preferences.version=1 diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 0000000..ae4e202 --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,90 @@ +def safeExtGet(prop, fallback) { + rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback +} + +buildscript { + // The Android Gradle plugin is only required when opening the android folder stand-alone. + // This avoids unnecessary downloads and potential conflicts when the library is included as a + // module dependency in an application project. + if (project == rootProject) { + repositories { + google() + jcenter() + } + + dependencies { + //noinspection GradleDependency + classpath("com.android.tools.build:gradle:3.5.2") + } + } +} + +apply plugin: 'com.android.library' + +android { + compileSdkVersion safeExtGet('compileSdkVersion', 28) + buildToolsVersion safeExtGet('buildToolsVersion', '28.0.3') + + defaultConfig { + minSdkVersion safeExtGet('minSdkVersion', 16) + targetSdkVersion safeExtGet('targetSdkVersion', 28) + } + + flavorDimensions "react-native-camera" + + productFlavors { + general { + dimension "react-native-camera" + } + mlkit { + dimension "react-native-camera" + } + } + + sourceSets { + main { + java.srcDirs = ['src/main/java'] + } + general { + java.srcDirs = ['src/general/java'] + } + mlkit { + java.srcDirs = ['src/mlkit/java'] + } + } + + lintOptions { + abortOnError false + warning 'InvalidPackage' + } + + packagingOptions { + exclude 'META-INF/androidx.exifinterface_exifinterface.version' + exclude 'META-INF/proguard/androidx-annotations.pro' + } +} + +repositories { + google() + jcenter() + mavenCentral() + maven { url "https://jitpack.io" } + maven { + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm + url "$rootDir/../node_modules/react-native/android" + } +} + +dependencies { + def googlePlayServicesVisionVersion = safeExtGet('googlePlayServicesVisionVersion', safeExtGet('googlePlayServicesVersion', '17.0.2')) + + implementation 'com.facebook.react:react-native:+' + implementation "com.google.zxing:core:3.3.3" + implementation "com.drewnoakes:metadata-extractor:2.11.0" + generalImplementation "com.google.android.gms:play-services-vision:$googlePlayServicesVisionVersion" + implementation "androidx.exifinterface:exifinterface:1.0.0" + implementation "androidx.annotation:annotation:1.0.0" + implementation "androidx.legacy:legacy-support-v4:1.0.0" + mlkitImplementation "com.google.firebase:firebase-ml-vision:${safeExtGet('firebase-ml-vision', '19.0.3')}" + mlkitImplementation "com.google.firebase:firebase-ml-vision-face-model:${safeExtGet('firebase-ml-vision-face-model', '17.0.2')}" +} diff --git a/android/gradle.properties b/android/gradle.properties new file mode 100644 index 0000000..5465fec --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,2 @@ +android.enableJetifier=true +android.useAndroidX=true \ No newline at end of file diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..13372aef5e24af05341d49695ee84e5f9b594659 GIT binary patch literal 53636 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ⅅ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 H-+%o-(+5aQ literal 0 HcmV?d00001 diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..73e5ff4 --- /dev/null +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Wed Jan 23 23:35:17 CST 2019 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip diff --git a/android/gradlew b/android/gradlew new file mode 100644 index 0000000..9d82f78 --- /dev/null +++ b/android/gradlew @@ -0,0 +1,160 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/android/gradlew.bat b/android/gradlew.bat new file mode 100644 index 0000000..8a0b282 --- /dev/null +++ b/android/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/android/src/general/java/org/reactnative/barcodedetector/BarcodeFormatUtils.java b/android/src/general/java/org/reactnative/barcodedetector/BarcodeFormatUtils.java new file mode 100644 index 0000000..5d90bcd --- /dev/null +++ b/android/src/general/java/org/reactnative/barcodedetector/BarcodeFormatUtils.java @@ -0,0 +1,72 @@ +package org.reactnative.barcodedetector; + +import android.util.SparseArray; +import com.google.android.gms.vision.barcode.Barcode; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +public class BarcodeFormatUtils { + + public static final SparseArray FORMATS; + public static final Map REVERSE_FORMATS; + + private static final String UNKNOWN_FORMAT_STRING = "UNKNOWN_FORMAT"; + private static final int UNKNOWN_FORMAT_INT = -1; + + static { + // Initialize integer to string map + SparseArray map = new SparseArray<>(); + map.put(Barcode.CODE_128, "CODE_128"); + map.put(Barcode.CODE_39, "CODE_39"); + map.put(Barcode.CODE_93, "CODE_93"); + map.put(Barcode.CODABAR, "CODABAR"); + map.put(Barcode.DATA_MATRIX, "DATA_MATRIX"); + map.put(Barcode.EAN_13, "EAN_13"); + map.put(Barcode.EAN_8, "EAN_8"); + map.put(Barcode.ITF, "ITF"); + map.put(Barcode.QR_CODE, "QR_CODE"); + map.put(Barcode.UPC_A, "UPC_A"); + map.put(Barcode.UPC_E, "UPC_E"); + map.put(Barcode.PDF417, "PDF417"); + map.put(Barcode.AZTEC, "AZTEC"); + map.put(Barcode.ALL_FORMATS, "ALL"); + map.put(Barcode.CALENDAR_EVENT, "CALENDAR_EVENT"); + map.put(Barcode.CONTACT_INFO, "CONTACT_INFO"); + map.put(Barcode.DRIVER_LICENSE, "DRIVER_LICENSE"); + map.put(Barcode.EMAIL, "EMAIL"); + map.put(Barcode.GEO, "GEO"); + map.put(Barcode.ISBN, "ISBN"); + map.put(Barcode.PHONE, "PHONE"); + map.put(Barcode.PRODUCT, "PRODUCT"); + map.put(Barcode.SMS, "SMS"); + map.put(Barcode.TEXT, "TEXT"); + map.put(Barcode.UPC_A, "UPC_A"); + map.put(Barcode.URL, "URL"); + map.put(Barcode.WIFI, "WIFI"); + map.put(-1, "None"); + FORMATS = map; + + + // Initialize string to integer map + Map rmap = new HashMap<>(); + for (int i = 0; i < map.size(); i++) { + rmap.put(map.valueAt(i), map.keyAt(i)); + } + + REVERSE_FORMATS = Collections.unmodifiableMap(rmap); + } + + public static String get(int format) { + return FORMATS.get(format, UNKNOWN_FORMAT_STRING); + } + + public static int get(String format) { + if (REVERSE_FORMATS.containsKey(format)) { + return REVERSE_FORMATS.get(format); + } + + return UNKNOWN_FORMAT_INT; + } +} diff --git a/android/src/general/java/org/reactnative/barcodedetector/RNBarcodeDetector.java b/android/src/general/java/org/reactnative/barcodedetector/RNBarcodeDetector.java new file mode 100644 index 0000000..1424796 --- /dev/null +++ b/android/src/general/java/org/reactnative/barcodedetector/RNBarcodeDetector.java @@ -0,0 +1,80 @@ +package org.reactnative.barcodedetector; + +import android.content.Context; +import android.util.SparseArray; +import com.google.android.gms.vision.barcode.Barcode; +import com.google.android.gms.vision.barcode.BarcodeDetector; +import org.reactnative.camera.utils.ImageDimensions; +import org.reactnative.frame.RNFrame; + +public class RNBarcodeDetector { + + public static int NORMAL_MODE = 0; + public static int ALTERNATE_MODE = 1; + public static int INVERTED_MODE = 2; + public static int ALL_FORMATS = Barcode.ALL_FORMATS; + + private BarcodeDetector mBarcodeDetector = null; + private ImageDimensions mPreviousDimensions; + private BarcodeDetector.Builder mBuilder; + + private int mBarcodeType = Barcode.ALL_FORMATS; + + public RNBarcodeDetector(Context context) { + mBuilder = new BarcodeDetector.Builder(context) + .setBarcodeFormats(mBarcodeType); + } + + // Public API + + public boolean isOperational() { + if (mBarcodeDetector == null) { + createBarcodeDetector(); + } + + return mBarcodeDetector.isOperational(); + } + + public SparseArray detect(RNFrame frame) { + // If the frame has different dimensions, create another barcode detector. + // Otherwise we will most likely get nasty "inconsistent image dimensions" error from detector + // and no barcode will be detected. + if (!frame.getDimensions().equals(mPreviousDimensions)) { + releaseBarcodeDetector(); + } + + if (mBarcodeDetector == null) { + createBarcodeDetector(); + mPreviousDimensions = frame.getDimensions(); + } + + return mBarcodeDetector.detect(frame.getFrame()); + } + + public void setBarcodeType(int barcodeType) { + if (barcodeType != mBarcodeType) { + release(); + mBuilder.setBarcodeFormats(barcodeType); + mBarcodeType = barcodeType; + } + } + + + public void release() { + releaseBarcodeDetector(); + mPreviousDimensions = null; + } + + // Lifecycle methods + + private void releaseBarcodeDetector() { + if (mBarcodeDetector != null) { + mBarcodeDetector.release(); + mBarcodeDetector = null; + } + } + + private void createBarcodeDetector() { + mBarcodeDetector = mBuilder.build(); + } +} diff --git a/android/src/general/java/org/reactnative/camera/tasks/BarcodeDetectorAsyncTask.java b/android/src/general/java/org/reactnative/camera/tasks/BarcodeDetectorAsyncTask.java new file mode 100644 index 0000000..5d15bd8 --- /dev/null +++ b/android/src/general/java/org/reactnative/camera/tasks/BarcodeDetectorAsyncTask.java @@ -0,0 +1,128 @@ +package org.reactnative.camera.tasks; + +import android.graphics.Rect; +import android.util.SparseArray; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.google.android.gms.vision.barcode.Barcode; + +import org.reactnative.barcodedetector.BarcodeFormatUtils; +import org.reactnative.camera.utils.ImageDimensions; +import org.reactnative.frame.RNFrame; +import org.reactnative.frame.RNFrameFactory; +import org.reactnative.barcodedetector.RNBarcodeDetector; + +public class BarcodeDetectorAsyncTask extends android.os.AsyncTask> { + + private byte[] mImageData; + private int mWidth; + private int mHeight; + private int mRotation; + private RNBarcodeDetector mBarcodeDetector; + private BarcodeDetectorAsyncTaskDelegate mDelegate; + private double mScaleX; + private double mScaleY; + private ImageDimensions mImageDimensions; + private int mPaddingLeft; + private int mPaddingTop; + + public BarcodeDetectorAsyncTask( + BarcodeDetectorAsyncTaskDelegate delegate, + RNBarcodeDetector barcodeDetector, + byte[] imageData, + int width, + int height, + int rotation, + float density, + int facing, + int viewWidth, + int viewHeight, + int viewPaddingLeft, + int viewPaddingTop + ) { + mImageData = imageData; + mWidth = width; + mHeight = height; + mRotation = rotation; + mDelegate = delegate; + mBarcodeDetector = barcodeDetector; + mImageDimensions = new ImageDimensions(width, height, rotation, facing); + mScaleX = (double) (viewWidth) / (mImageDimensions.getWidth() * density); + mScaleY = (double) (viewHeight) / (mImageDimensions.getHeight() * density); + mPaddingLeft = viewPaddingLeft; + mPaddingTop = viewPaddingTop; + } + + @Override + protected SparseArray doInBackground(Void... ignored) { + if (isCancelled() || mDelegate == null || mBarcodeDetector == null || !mBarcodeDetector.isOperational()) { + return null; + } + + RNFrame frame = RNFrameFactory.buildFrame(mImageData, mWidth, mHeight, mRotation); + return mBarcodeDetector.detect(frame); + } + + @Override + protected void onPostExecute(SparseArray barcodes) { + super.onPostExecute(barcodes); + + if (barcodes == null) { + mDelegate.onBarcodeDetectionError(mBarcodeDetector); + } else { + if (barcodes.size() > 0) { + mDelegate.onBarcodesDetected(serializeEventData(barcodes)); + } + mDelegate.onBarcodeDetectingTaskCompleted(); + } + } + + private WritableArray serializeEventData(SparseArray barcodes) { + WritableArray barcodesList = Arguments.createArray(); + + for (int i = 0; i < barcodes.size(); i++) { + Barcode barcode = barcodes.valueAt(i); + WritableMap serializedBarcode = Arguments.createMap(); + + serializedBarcode.putString("data", barcode.displayValue); + serializedBarcode.putString("rawData", barcode.rawValue); + serializedBarcode.putString("type", BarcodeFormatUtils.get(barcode.format)); + serializedBarcode.putMap("bounds", processBounds(barcode.getBoundingBox())); + barcodesList.pushMap(serializedBarcode); + } + + return barcodesList; + } + + private WritableMap processBounds(Rect frame) { + WritableMap origin = Arguments.createMap(); + int x = frame.left; + int y = frame.top; + + if (frame.left < mWidth / 2) { + x = x + mPaddingLeft / 2; + } else if (frame.left > mWidth /2) { + x = x - mPaddingLeft / 2; + } + + if (frame.top < mHeight / 2) { + y = y + mPaddingTop / 2; + } else if (frame.top > mHeight / 2) { + y = y - mPaddingTop / 2; + } + + origin.putDouble("x", x * mScaleX); + origin.putDouble("y", y * mScaleY); + + WritableMap size = Arguments.createMap(); + size.putDouble("width", frame.width() * mScaleX); + size.putDouble("height", frame.height() * mScaleY); + + WritableMap bounds = Arguments.createMap(); + bounds.putMap("origin", origin); + bounds.putMap("size", size); + return bounds; + } +} diff --git a/android/src/general/java/org/reactnative/camera/tasks/FaceDetectorAsyncTask.java b/android/src/general/java/org/reactnative/camera/tasks/FaceDetectorAsyncTask.java new file mode 100644 index 0000000..5432bf6 --- /dev/null +++ b/android/src/general/java/org/reactnative/camera/tasks/FaceDetectorAsyncTask.java @@ -0,0 +1,97 @@ +package org.reactnative.camera.tasks; + +import android.util.SparseArray; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.google.android.cameraview.CameraView; +import com.google.android.gms.vision.face.Face; + +import org.reactnative.camera.utils.ImageDimensions; +import org.reactnative.facedetector.FaceDetectorUtils; +import org.reactnative.frame.RNFrame; +import org.reactnative.frame.RNFrameFactory; +import org.reactnative.facedetector.RNFaceDetector; + +public class FaceDetectorAsyncTask extends android.os.AsyncTask> { + private byte[] mImageData; + private int mWidth; + private int mHeight; + private int mRotation; + private RNFaceDetector mFaceDetector; + private FaceDetectorAsyncTaskDelegate mDelegate; + private ImageDimensions mImageDimensions; + private double mScaleX; + private double mScaleY; + private int mPaddingLeft; + private int mPaddingTop; + + public FaceDetectorAsyncTask( + FaceDetectorAsyncTaskDelegate delegate, + RNFaceDetector faceDetector, + byte[] imageData, + int width, + int height, + int rotation, + float density, + int facing, + int viewWidth, + int viewHeight, + int viewPaddingLeft, + int viewPaddingTop + ) { + mImageData = imageData; + mWidth = width; + mHeight = height; + mRotation = rotation; + mDelegate = delegate; + mFaceDetector = faceDetector; + mImageDimensions = new ImageDimensions(width, height, rotation, facing); + mScaleX = (double) (viewWidth) / (mImageDimensions.getWidth() * density); + mScaleY = (double) (viewHeight) / (mImageDimensions.getHeight() * density); + mPaddingLeft = viewPaddingLeft; + mPaddingTop = viewPaddingTop; + } + + @Override + protected SparseArray doInBackground(Void... ignored) { + if (isCancelled() || mDelegate == null || mFaceDetector == null || !mFaceDetector.isOperational()) { + return null; + } + + RNFrame frame = RNFrameFactory.buildFrame(mImageData, mWidth, mHeight, mRotation); + return mFaceDetector.detect(frame); + } + + @Override + protected void onPostExecute(SparseArray faces) { + super.onPostExecute(faces); + + if (faces == null) { + mDelegate.onFaceDetectionError(mFaceDetector); + } else { + if (faces.size() > 0) { + mDelegate.onFacesDetected(serializeEventData(faces)); + } + mDelegate.onFaceDetectingTaskCompleted(); + } + } + + private WritableArray serializeEventData(SparseArray faces) { + WritableArray facesList = Arguments.createArray(); + + for(int i = 0; i < faces.size(); i++) { + Face face = faces.valueAt(i); + WritableMap serializedFace = FaceDetectorUtils.serializeFace(face, mScaleX, mScaleY, mWidth, mHeight, mPaddingLeft, mPaddingTop); + if (mImageDimensions.getFacing() == CameraView.FACING_FRONT) { + serializedFace = FaceDetectorUtils.rotateFaceX(serializedFace, mImageDimensions.getWidth(), mScaleX); + } else { + serializedFace = FaceDetectorUtils.changeAnglesDirection(serializedFace); + } + facesList.pushMap(serializedFace); + } + + return facesList; + } +} diff --git a/android/src/general/java/org/reactnative/camera/tasks/TextRecognizerAsyncTask.java b/android/src/general/java/org/reactnative/camera/tasks/TextRecognizerAsyncTask.java new file mode 100644 index 0000000..b8c2e9e --- /dev/null +++ b/android/src/general/java/org/reactnative/camera/tasks/TextRecognizerAsyncTask.java @@ -0,0 +1,178 @@ +package org.reactnative.camera.tasks; + +import android.util.SparseArray; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReadableArray; +import com.facebook.react.bridge.ReadableMap; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.uimanager.ThemedReactContext; +import com.google.android.cameraview.CameraView; +import com.google.android.gms.vision.text.Line; +import com.google.android.gms.vision.text.Text; +import com.google.android.gms.vision.text.TextBlock; +import com.google.android.gms.vision.text.TextRecognizer; + +import org.reactnative.camera.utils.ImageDimensions; +import org.reactnative.facedetector.FaceDetectorUtils; +import org.reactnative.frame.RNFrame; +import org.reactnative.frame.RNFrameFactory; + + +public class TextRecognizerAsyncTask extends android.os.AsyncTask> { + + private TextRecognizerAsyncTaskDelegate mDelegate; + private ThemedReactContext mThemedReactContext; + private TextRecognizer mTextRecognizer; + private byte[] mImageData; + private int mWidth; + private int mHeight; + private int mRotation; + private ImageDimensions mImageDimensions; + private double mScaleX; + private double mScaleY; + private int mPaddingLeft; + private int mPaddingTop; + + public TextRecognizerAsyncTask( + TextRecognizerAsyncTaskDelegate delegate, + ThemedReactContext themedReactContext, + byte[] imageData, + int width, + int height, + int rotation, + float density, + int facing, + int viewWidth, + int viewHeight, + int viewPaddingLeft, + int viewPaddingTop + ) { + mDelegate = delegate; + mThemedReactContext = themedReactContext; + mImageData = imageData; + mWidth = width; + mHeight = height; + mRotation = rotation; + mImageDimensions = new ImageDimensions(width, height, rotation, facing); + mScaleX = (double) (viewWidth) / (mImageDimensions.getWidth() * density); + mScaleY = (double) (viewHeight) / (mImageDimensions.getHeight() * density); + mPaddingLeft = viewPaddingLeft; + mPaddingTop = viewPaddingTop; + } + + @Override + protected SparseArray doInBackground(Void... ignored) { + if (isCancelled() || mDelegate == null) { + return null; + } + mTextRecognizer = new TextRecognizer.Builder(mThemedReactContext).build(); + RNFrame frame = RNFrameFactory.buildFrame(mImageData, mWidth, mHeight, mRotation); + return mTextRecognizer.detect(frame.getFrame()); + } + + @Override + protected void onPostExecute(SparseArray textBlocks) { + super.onPostExecute(textBlocks); + if (mTextRecognizer != null) { + mTextRecognizer.release(); + } + if (textBlocks != null) { + WritableArray textBlocksList = Arguments.createArray(); + for (int i = 0; i < textBlocks.size(); ++i) { + TextBlock textBlock = textBlocks.valueAt(i); + WritableMap serializedTextBlock = serializeText(textBlock); + if (mImageDimensions.getFacing() == CameraView.FACING_FRONT) { + serializedTextBlock = rotateTextX(serializedTextBlock); + } + textBlocksList.pushMap(serializedTextBlock); + } + mDelegate.onTextRecognized(textBlocksList); + } + mDelegate.onTextRecognizerTaskCompleted(); + } + + private WritableMap serializeText(Text text) { + WritableMap encodedText = Arguments.createMap(); + + WritableArray components = Arguments.createArray(); + for (Text component : text.getComponents()) { + components.pushMap(serializeText(component)); + } + encodedText.putArray("components", components); + + encodedText.putString("value", text.getValue()); + + int x = text.getBoundingBox().left; + int y = text.getBoundingBox().top; + + if (text.getBoundingBox().left < mWidth / 2) { + x = x + mPaddingLeft / 2; + } else if (text.getBoundingBox().left > mWidth /2) { + x = x - mPaddingLeft / 2; + } + + if (text.getBoundingBox().height() < mHeight / 2) { + y = y + mPaddingTop / 2; + } else if (text.getBoundingBox().height() > mHeight / 2) { + y = y - mPaddingTop / 2; + } + + WritableMap origin = Arguments.createMap(); + origin.putDouble("x", x * this.mScaleX); + origin.putDouble("y", y * this.mScaleY); + + WritableMap size = Arguments.createMap(); + size.putDouble("width", text.getBoundingBox().width() * this.mScaleX); + size.putDouble("height", text.getBoundingBox().height() * this.mScaleY); + + WritableMap bounds = Arguments.createMap(); + bounds.putMap("origin", origin); + bounds.putMap("size", size); + + encodedText.putMap("bounds", bounds); + + String type_; + if (text instanceof TextBlock) { + type_ = "block"; + } else if (text instanceof Line) { + type_ = "line"; + } else /*if (text instanceof Element)*/ { + type_ = "element"; + } + encodedText.putString("type", type_); + + return encodedText; + } + + private WritableMap rotateTextX(WritableMap text) { + ReadableMap faceBounds = text.getMap("bounds"); + + ReadableMap oldOrigin = faceBounds.getMap("origin"); + WritableMap mirroredOrigin = FaceDetectorUtils.positionMirroredHorizontally( + oldOrigin, mImageDimensions.getWidth(), mScaleX); + + double translateX = -faceBounds.getMap("size").getDouble("width"); + WritableMap translatedMirroredOrigin = FaceDetectorUtils.positionTranslatedHorizontally(mirroredOrigin, translateX); + + WritableMap newBounds = Arguments.createMap(); + newBounds.merge(faceBounds); + newBounds.putMap("origin", translatedMirroredOrigin); + + text.putMap("bounds", newBounds); + + ReadableArray oldComponents = text.getArray("components"); + WritableArray newComponents = Arguments.createArray(); + for (int i = 0; i < oldComponents.size(); ++i) { + WritableMap component = Arguments.createMap(); + component.merge(oldComponents.getMap(i)); + rotateTextX(component); + newComponents.pushMap(component); + } + text.putArray("components", newComponents); + + return text; + } + +} diff --git a/android/src/general/java/org/reactnative/facedetector/FaceDetectorModule.java b/android/src/general/java/org/reactnative/facedetector/FaceDetectorModule.java new file mode 100644 index 0000000..62aac6d --- /dev/null +++ b/android/src/general/java/org/reactnative/facedetector/FaceDetectorModule.java @@ -0,0 +1,74 @@ +package org.reactnative.facedetector; + +import org.reactnative.facedetector.tasks.FileFaceDetectionAsyncTask; +import com.facebook.react.bridge.Promise; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.ReadableMap; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Nullable; + +public class FaceDetectorModule extends ReactContextBaseJavaModule { + private static final String TAG = "RNFaceDetector"; +// private ScopedContext mScopedContext; +private static ReactApplicationContext mScopedContext; + + public FaceDetectorModule(ReactApplicationContext reactContext) { + super(reactContext); + mScopedContext = reactContext; + } + + @Override + public String getName() { + return TAG; + } + + @Nullable + @Override + public Map getConstants() { + return Collections.unmodifiableMap(new HashMap() { + { + put("Mode", getFaceDetectionModeConstants()); + put("Landmarks", getFaceDetectionLandmarksConstants()); + put("Classifications", getFaceDetectionClassificationsConstants()); + } + + private Map getFaceDetectionModeConstants() { + return Collections.unmodifiableMap(new HashMap() { + { + put("fast", RNFaceDetector.FAST_MODE); + put("accurate", RNFaceDetector.ACCURATE_MODE); + } + }); + } + + private Map getFaceDetectionClassificationsConstants() { + return Collections.unmodifiableMap(new HashMap() { + { + put("all", RNFaceDetector.ALL_CLASSIFICATIONS); + put("none", RNFaceDetector.NO_CLASSIFICATIONS); + } + }); + } + + private Map getFaceDetectionLandmarksConstants() { + return Collections.unmodifiableMap(new HashMap() { + { + put("all", RNFaceDetector.ALL_LANDMARKS); + put("none", RNFaceDetector.NO_LANDMARKS); + } + }); + } + }); + } + + @ReactMethod + public void detectFaces(ReadableMap options, final Promise promise) { + new FileFaceDetectionAsyncTask(mScopedContext, options, promise).execute(); + } +} diff --git a/android/src/general/java/org/reactnative/facedetector/FaceDetectorUtils.java b/android/src/general/java/org/reactnative/facedetector/FaceDetectorUtils.java new file mode 100644 index 0000000..f6b1985 --- /dev/null +++ b/android/src/general/java/org/reactnative/facedetector/FaceDetectorUtils.java @@ -0,0 +1,146 @@ +package org.reactnative.facedetector; + +import android.graphics.PointF; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReadableMap; +import com.facebook.react.bridge.WritableMap; +import com.google.android.gms.vision.face.Face; +import com.google.android.gms.vision.face.Landmark; + +public class FaceDetectorUtils { + // All the landmarks reported by Google Mobile Vision in constants' order. + // https://developers.google.com/android/reference/com/google/android/gms/vision/face/Landmark + private static final String[] landmarkNames = { + "bottomMouthPosition", "leftCheekPosition", "leftEarPosition", "leftEarTipPosition", + "leftEyePosition", "leftMouthPosition", "noseBasePosition", "rightCheekPosition", + "rightEarPosition", "rightEarTipPosition", "rightEyePosition", "rightMouthPosition" + }; + + public static WritableMap serializeFace(Face face) { + return serializeFace(face, 1, 1, 0, 0, 0, 0); + } + + public static WritableMap serializeFace(Face face, double scaleX, double scaleY, int width, int height, int paddingLeft, int paddingTop) { + WritableMap encodedFace = Arguments.createMap(); + + encodedFace.putInt("faceID", face.getId()); + encodedFace.putDouble("rollAngle", face.getEulerZ()); + encodedFace.putDouble("yawAngle", face.getEulerY()); + + if (face.getIsSmilingProbability() >= 0) { + encodedFace.putDouble("smilingProbability", face.getIsSmilingProbability()); + } + if (face.getIsLeftEyeOpenProbability() >= 0) { + encodedFace.putDouble("leftEyeOpenProbability", face.getIsLeftEyeOpenProbability()); + } + if (face.getIsRightEyeOpenProbability() >= 0) { + encodedFace.putDouble("rightEyeOpenProbability", face.getIsRightEyeOpenProbability()); + } + + for(Landmark landmark : face.getLandmarks()) { + encodedFace.putMap(landmarkNames[landmark.getType()], mapFromPoint(landmark.getPosition(), scaleX, scaleY, width, height, paddingLeft, paddingTop)); + } + + WritableMap origin = Arguments.createMap(); + Float x = face.getPosition().x; + Float y = face.getPosition().y; + if (face.getPosition().x < width / 2) { + x = x + paddingLeft / 2; + } else if (face.getPosition().x > width / 2) { + x = x - paddingLeft / 2; + } + + if (face.getPosition().y < height / 2) { + y = y + paddingTop / 2; + } else if (face.getPosition().y > height / 2) { + y = y - paddingTop / 2; + } + origin.putDouble("x", x * scaleX); + origin.putDouble("y", y * scaleY); + + WritableMap size = Arguments.createMap(); + size.putDouble("width", face.getWidth() * scaleX); + size.putDouble("height", face.getHeight() * scaleY); + + WritableMap bounds = Arguments.createMap(); + bounds.putMap("origin", origin); + bounds.putMap("size", size); + + encodedFace.putMap("bounds", bounds); + + return encodedFace; + } + + public static WritableMap rotateFaceX(WritableMap face, int sourceWidth, double scaleX) { + ReadableMap faceBounds = face.getMap("bounds"); + + ReadableMap oldOrigin = faceBounds.getMap("origin"); + WritableMap mirroredOrigin = positionMirroredHorizontally(oldOrigin, sourceWidth, scaleX); + + double translateX = -faceBounds.getMap("size").getDouble("width"); + WritableMap translatedMirroredOrigin = positionTranslatedHorizontally(mirroredOrigin, translateX); + + WritableMap newBounds = Arguments.createMap(); + newBounds.merge(faceBounds); + newBounds.putMap("origin", translatedMirroredOrigin); + + for (String landmarkName : landmarkNames) { + ReadableMap landmark = face.hasKey(landmarkName) ? face.getMap(landmarkName) : null; + if (landmark != null) { + WritableMap mirroredPosition = positionMirroredHorizontally(landmark, sourceWidth, scaleX); + face.putMap(landmarkName, mirroredPosition); + } + } + + face.putMap("bounds", newBounds); + + return face; + } + + public static WritableMap changeAnglesDirection(WritableMap face) { + face.putDouble("rollAngle", (-face.getDouble("rollAngle") + 360) % 360); + face.putDouble("yawAngle", (-face.getDouble("yawAngle") + 360) % 360); + return face; + } + + public static WritableMap mapFromPoint(PointF point, double scaleX, double scaleY, int width, int height, int paddingLeft, int paddingTop) { + WritableMap map = Arguments.createMap(); + Float x = point.x; + Float y = point.y; + if (point.x < width / 2) { + x = (x + paddingLeft / 2); + } else if (point.x > width / 2) { + x = (x - paddingLeft / 2); + } + + if (point.y < height / 2) { + y = (y + paddingTop / 2); + } else if (point.y > height / 2) { + y = (y - paddingTop / 2); + } + map.putDouble("x", point.x * scaleX); + map.putDouble("y", point.y * scaleY); + return map; + } + + public static WritableMap positionTranslatedHorizontally(ReadableMap position, double translateX) { + WritableMap newPosition = Arguments.createMap(); + newPosition.merge(position); + newPosition.putDouble("x", position.getDouble("x") + translateX); + return newPosition; + } + + public static WritableMap positionMirroredHorizontally(ReadableMap position, int containerWidth, double scaleX) { + WritableMap newPosition = Arguments.createMap(); + newPosition.merge(position); + newPosition.putDouble("x", valueMirroredHorizontally(position.getDouble("x"), containerWidth, scaleX)); + return newPosition; + } + + public static double valueMirroredHorizontally(double elementX, int containerWidth, double scaleX) { + double originalX = elementX / scaleX; + double mirroredX = containerWidth - originalX; + return mirroredX * scaleX; + } +} diff --git a/android/src/general/java/org/reactnative/facedetector/RNFaceDetector.java b/android/src/general/java/org/reactnative/facedetector/RNFaceDetector.java new file mode 100644 index 0000000..f114d18 --- /dev/null +++ b/android/src/general/java/org/reactnative/facedetector/RNFaceDetector.java @@ -0,0 +1,108 @@ +package org.reactnative.facedetector; + +import android.content.Context; +import android.util.SparseArray; + +import org.reactnative.camera.utils.ImageDimensions; +import com.google.android.gms.vision.face.Face; +import com.google.android.gms.vision.face.FaceDetector; +import org.reactnative.frame.RNFrame; + +public class RNFaceDetector { + public static int ALL_CLASSIFICATIONS = FaceDetector.ALL_CLASSIFICATIONS; + public static int NO_CLASSIFICATIONS = FaceDetector.NO_CLASSIFICATIONS; + public static int ALL_LANDMARKS = FaceDetector.ALL_LANDMARKS; + public static int NO_LANDMARKS = FaceDetector.NO_LANDMARKS; + public static int ACCURATE_MODE = FaceDetector.ACCURATE_MODE; + public static int FAST_MODE = FaceDetector.FAST_MODE; + + private FaceDetector mFaceDetector = null; + private ImageDimensions mPreviousDimensions; + private FaceDetector.Builder mBuilder = null; + + private int mClassificationType = NO_CLASSIFICATIONS; + private int mLandmarkType = NO_LANDMARKS; + private float mMinFaceSize = 0.15f; + private int mMode = FAST_MODE; + + public RNFaceDetector(Context context) { + mBuilder = new FaceDetector.Builder(context); + mBuilder.setMinFaceSize(mMinFaceSize); + mBuilder.setMode(mMode); + mBuilder.setLandmarkType(mLandmarkType); + mBuilder.setClassificationType(mClassificationType); + } + + // Public API + + public boolean isOperational() { + if (mFaceDetector == null) { + createFaceDetector(); + } + + return mFaceDetector.isOperational(); + } + + public SparseArray detect(RNFrame frame) { + // If the frame has different dimensions, create another face detector. + // Otherwise we will get nasty "inconsistent image dimensions" error from detector + // and no face will be detected. + if (!frame.getDimensions().equals(mPreviousDimensions)) { + releaseFaceDetector(); + } + + if (mFaceDetector == null) { + createFaceDetector(); + mPreviousDimensions = frame.getDimensions(); + } + + return mFaceDetector.detect(frame.getFrame()); + } + + public void setTracking(boolean trackingEnabled) { + release(); + mBuilder.setTrackingEnabled(trackingEnabled); + } + + public void setClassificationType(int classificationType) { + if (classificationType != mClassificationType) { + release(); + mBuilder.setClassificationType(classificationType); + mClassificationType = classificationType; + } + } + + public void setLandmarkType(int landmarkType) { + if (landmarkType != mLandmarkType) { + release(); + mBuilder.setLandmarkType(landmarkType); + mLandmarkType = landmarkType; + } + } + + public void setMode(int mode) { + if (mode != mMode) { + release(); + mBuilder.setMode(mode); + mMode = mode; + } + } + + public void release() { + releaseFaceDetector(); + mPreviousDimensions = null; + } + + // Lifecycle methods + + private void releaseFaceDetector() { + if (mFaceDetector != null) { + mFaceDetector.release(); + mFaceDetector = null; + } + } + + private void createFaceDetector() { + mFaceDetector = mBuilder.build(); + } +} diff --git a/android/src/general/java/org/reactnative/facedetector/tasks/FileFaceDetectionAsyncTask.java b/android/src/general/java/org/reactnative/facedetector/tasks/FileFaceDetectionAsyncTask.java new file mode 100644 index 0000000..1d55af9 --- /dev/null +++ b/android/src/general/java/org/reactnative/facedetector/tasks/FileFaceDetectionAsyncTask.java @@ -0,0 +1,150 @@ +package org.reactnative.facedetector.tasks; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import androidx.exifinterface.media.ExifInterface; +import android.net.Uri; +import android.os.AsyncTask; +import android.util.Log; +import android.util.SparseArray; + +import org.reactnative.facedetector.RNFaceDetector; +import org.reactnative.frame.RNFrame; +import org.reactnative.frame.RNFrameFactory; +import org.reactnative.facedetector.FaceDetectorUtils; +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.Promise; +import com.facebook.react.bridge.ReadableMap; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.google.android.gms.vision.face.Face; + +import java.io.File; +import java.io.IOException; + +public class FileFaceDetectionAsyncTask extends AsyncTask> { + private static final String ERROR_TAG = "E_FACE_DETECTION_FAILED"; + + private static final String MODE_OPTION_KEY = "mode"; + private static final String DETECT_LANDMARKS_OPTION_KEY = "detectLandmarks"; + private static final String RUN_CLASSIFICATIONS_OPTION_KEY = "runClassifications"; + + private String mUri; + private String mPath; + private Promise mPromise; + private int mWidth = 0; + private int mHeight = 0; + private Context mContext; + private ReadableMap mOptions; + private int mOrientation = ExifInterface.ORIENTATION_UNDEFINED; + private RNFaceDetector mRNFaceDetector; + + public FileFaceDetectionAsyncTask(Context context, ReadableMap options, Promise promise) { + mUri = options.getString("uri"); + mPromise = promise; + mOptions = options; + mContext = context; + } + + @Override + protected void onPreExecute() { + if (mUri == null) { + mPromise.reject(ERROR_TAG, "You have to provide an URI of an image."); + cancel(true); + return; + } + + Uri uri = Uri.parse(mUri); + mPath = uri.getPath(); + + if (mPath == null) { + mPromise.reject(ERROR_TAG, "Invalid URI provided: `" + mUri + "`."); + cancel(true); + return; + } + + // We have to check if the requested image is in a directory safely accessible by our app. + boolean fileIsInSafeDirectories = + mPath.startsWith(mContext.getCacheDir().getPath()) || mPath.startsWith(mContext.getFilesDir().getPath()); + + if (!fileIsInSafeDirectories) { + mPromise.reject(ERROR_TAG, "The image has to be in the local app's directories."); + cancel(true); + return; + } + + if(!new File(mPath).exists()) { + mPromise.reject(ERROR_TAG, "The file does not exist. Given path: `" + mPath + "`."); + cancel(true); + } + } + + @Override + protected SparseArray doInBackground(Void... voids) { + if (isCancelled()) { + return null; + } + + mRNFaceDetector = detectorForOptions(mOptions, mContext); + Bitmap bitmap = BitmapFactory.decodeFile(mPath); + mWidth = bitmap.getWidth(); + mHeight = bitmap.getHeight(); + + try { + ExifInterface exif = new ExifInterface(mPath); + mOrientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED); + } catch (IOException e) { + Log.e(ERROR_TAG, "Reading orientation from file `" + mPath + "` failed.", e); + } + + RNFrame frame = RNFrameFactory.buildFrame(bitmap); + return mRNFaceDetector.detect(frame); + } + + @Override + protected void onPostExecute(SparseArray faces) { + super.onPostExecute(faces); + WritableMap result = Arguments.createMap(); + WritableArray facesArray = Arguments.createArray(); + + for(int i = 0; i < faces.size(); i++) { + Face face = faces.valueAt(i); + WritableMap encodedFace = FaceDetectorUtils.serializeFace(face); + encodedFace.putDouble("yawAngle", (-encodedFace.getDouble("yawAngle") + 360) % 360); + encodedFace.putDouble("rollAngle", (-encodedFace.getDouble("rollAngle") + 360) % 360); + facesArray.pushMap(encodedFace); + } + + result.putArray("faces", facesArray); + + WritableMap image = Arguments.createMap(); + image.putInt("width", mWidth); + image.putInt("height", mHeight); + image.putInt("orientation", mOrientation); + image.putString("uri", mUri); + result.putMap("image", image); + + mRNFaceDetector.release(); + mPromise.resolve(result); + } + + private static RNFaceDetector detectorForOptions(ReadableMap options, Context context) { + RNFaceDetector detector = new RNFaceDetector(context); + detector.setTracking(false); + + if(options.hasKey(MODE_OPTION_KEY)) { + detector.setMode(options.getInt(MODE_OPTION_KEY)); + } + + if(options.hasKey(RUN_CLASSIFICATIONS_OPTION_KEY)) { + detector.setClassificationType(options.getInt(RUN_CLASSIFICATIONS_OPTION_KEY)); + } + + if(options.hasKey(DETECT_LANDMARKS_OPTION_KEY)) { + detector.setLandmarkType(options.getInt(DETECT_LANDMARKS_OPTION_KEY)); + } + + return detector; + } +} diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml new file mode 100644 index 0000000..fe6303a --- /dev/null +++ b/android/src/main/AndroidManifest.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/android/src/main/java/com/google/android/cameraview/AspectRatio.java b/android/src/main/java/com/google/android/cameraview/AspectRatio.java new file mode 100644 index 0000000..e15398d --- /dev/null +++ b/android/src/main/java/com/google/android/cameraview/AspectRatio.java @@ -0,0 +1,189 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.cameraview; + +import android.os.Parcel; +import android.os.Parcelable; +import androidx.annotation.NonNull; +import androidx.collection.SparseArrayCompat; + +/** + * Immutable class for describing proportional relationship between width and height. + */ +public class AspectRatio implements Comparable, Parcelable { + + private final static SparseArrayCompat> sCache + = new SparseArrayCompat<>(16); + + private final int mX; + private final int mY; + + /** + * Returns an instance of {@link AspectRatio} specified by {@code x} and {@code y} values. + * The values {@code x} and {@code} will be reduced by their greatest common divider. + * + * @param x The width + * @param y The height + * @return An instance of {@link AspectRatio} + */ + public static AspectRatio of(int x, int y) { + int gcd = gcd(x, y); + x /= gcd; + y /= gcd; + SparseArrayCompat arrayX = sCache.get(x); + if (arrayX == null) { + AspectRatio ratio = new AspectRatio(x, y); + arrayX = new SparseArrayCompat<>(); + arrayX.put(y, ratio); + sCache.put(x, arrayX); + return ratio; + } else { + AspectRatio ratio = arrayX.get(y); + if (ratio == null) { + ratio = new AspectRatio(x, y); + arrayX.put(y, ratio); + } + return ratio; + } + } + + /** + * Parse an {@link AspectRatio} from a {@link String} formatted like "4:3". + * + * @param s The string representation of the aspect ratio + * @return The aspect ratio + * @throws IllegalArgumentException when the format is incorrect. + */ + public static AspectRatio parse(String s) { + int position = s.indexOf(':'); + if (position == -1) { + throw new IllegalArgumentException("Malformed aspect ratio: " + s); + } + try { + int x = Integer.parseInt(s.substring(0, position)); + int y = Integer.parseInt(s.substring(position + 1)); + return AspectRatio.of(x, y); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("Malformed aspect ratio: " + s, e); + } + } + + private AspectRatio(int x, int y) { + mX = x; + mY = y; + } + + public int getX() { + return mX; + } + + public int getY() { + return mY; + } + + public boolean matches(Size size) { + int gcd = gcd(size.getWidth(), size.getHeight()); + int x = size.getWidth() / gcd; + int y = size.getHeight() / gcd; + return mX == x && mY == y; + } + + @Override + public boolean equals(Object o) { + if (o == null) { + return false; + } + if (this == o) { + return true; + } + if (o instanceof AspectRatio) { + AspectRatio ratio = (AspectRatio) o; + return mX == ratio.mX && mY == ratio.mY; + } + return false; + } + + @Override + public String toString() { + return mX + ":" + mY; + } + + public float toFloat() { + return (float) mX / mY; + } + + @Override + public int hashCode() { + // assuming most sizes are <2^16, doing a rotate will give us perfect hashing + return mY ^ ((mX << (Integer.SIZE / 2)) | (mX >>> (Integer.SIZE / 2))); + } + + @Override + public int compareTo(@NonNull AspectRatio another) { + if (equals(another)) { + return 0; + } else if (toFloat() - another.toFloat() > 0) { + return 1; + } + return -1; + } + + /** + * @return The inverse of this {@link AspectRatio}. + */ + public AspectRatio inverse() { + //noinspection SuspiciousNameCombination + return AspectRatio.of(mY, mX); + } + + private static int gcd(int a, int b) { + while (b != 0) { + int c = b; + b = a % b; + a = c; + } + return a; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeInt(mX); + dest.writeInt(mY); + } + + public static final Parcelable.Creator CREATOR + = new Parcelable.Creator() { + + @Override + public AspectRatio createFromParcel(Parcel source) { + int x = source.readInt(); + int y = source.readInt(); + return AspectRatio.of(x, y); + } + + @Override + public AspectRatio[] newArray(int size) { + return new AspectRatio[size]; + } + }; + +} diff --git a/android/src/main/java/com/google/android/cameraview/Camera1.java b/android/src/main/java/com/google/android/cameraview/Camera1.java new file mode 100644 index 0000000..e67c41f --- /dev/null +++ b/android/src/main/java/com/google/android/cameraview/Camera1.java @@ -0,0 +1,1582 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.cameraview; + +import android.annotation.SuppressLint; +import android.graphics.Rect; +import android.graphics.SurfaceTexture; +import android.hardware.Camera; +import android.media.CamcorderProfile; +import android.media.MediaRecorder; +import android.media.MediaActionSound; +import android.os.Build; +import android.os.Handler; +import androidx.collection.SparseArrayCompat; +import android.util.Log; +import android.view.SurfaceHolder; + +import com.facebook.react.bridge.ReadableMap; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; +import java.util.Set; +import java.util.SortedSet; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.reactnative.camera.utils.ObjectUtils; + + +@SuppressWarnings("deprecation") +class Camera1 extends CameraViewImpl implements MediaRecorder.OnInfoListener, + MediaRecorder.OnErrorListener, Camera.PreviewCallback { + + private static final int INVALID_CAMERA_ID = -1; + + private static final SparseArrayCompat FLASH_MODES = new SparseArrayCompat<>(); + + static { + FLASH_MODES.put(Constants.FLASH_OFF, Camera.Parameters.FLASH_MODE_OFF); + FLASH_MODES.put(Constants.FLASH_ON, Camera.Parameters.FLASH_MODE_ON); + FLASH_MODES.put(Constants.FLASH_TORCH, Camera.Parameters.FLASH_MODE_TORCH); + FLASH_MODES.put(Constants.FLASH_AUTO, Camera.Parameters.FLASH_MODE_AUTO); + FLASH_MODES.put(Constants.FLASH_RED_EYE, Camera.Parameters.FLASH_MODE_RED_EYE); + } + + private static final SparseArrayCompat WB_MODES = new SparseArrayCompat<>(); + + static { + WB_MODES.put(Constants.WB_AUTO, Camera.Parameters.WHITE_BALANCE_AUTO); + WB_MODES.put(Constants.WB_CLOUDY, Camera.Parameters.WHITE_BALANCE_CLOUDY_DAYLIGHT); + WB_MODES.put(Constants.WB_SUNNY, Camera.Parameters.WHITE_BALANCE_DAYLIGHT); + WB_MODES.put(Constants.WB_SHADOW, Camera.Parameters.WHITE_BALANCE_SHADE); + WB_MODES.put(Constants.WB_FLUORESCENT, Camera.Parameters.WHITE_BALANCE_FLUORESCENT); + WB_MODES.put(Constants.WB_INCANDESCENT, Camera.Parameters.WHITE_BALANCE_INCANDESCENT); + } + + private static final int FOCUS_AREA_SIZE_DEFAULT = 300; + private static final int FOCUS_METERING_AREA_WEIGHT_DEFAULT = 1000; + private static final int DELAY_MILLIS_BEFORE_RESETTING_FOCUS = 3000; + + private Handler mHandler = new Handler(); + + private int mCameraId; + private String _mCameraId; + + private final AtomicBoolean isPictureCaptureInProgress = new AtomicBoolean(false); + + Camera mCamera; + + // do not instantiate this every time since it allocates unnecessary resources + MediaActionSound sound = new MediaActionSound(); + + private Camera.Parameters mCameraParameters; + + private final Camera.CameraInfo mCameraInfo = new Camera.CameraInfo(); + + private MediaRecorder mMediaRecorder; + + private String mVideoPath; + + private final AtomicBoolean mIsRecording = new AtomicBoolean(false); + + private final SizeMap mPreviewSizes = new SizeMap(); + + private boolean mIsPreviewActive = false; + private boolean mShowingPreview = true; // preview enabled by default + + private final SizeMap mPictureSizes = new SizeMap(); + + private Size mPictureSize; + + private AspectRatio mAspectRatio; + + private boolean mAutoFocus; + + private int mFacing; + + private int mFlash; + + private float mExposure; + + private int mDisplayOrientation; + + private int mDeviceOrientation; + + private int mOrientation = Constants.ORIENTATION_AUTO; + + private float mZoom; + + private int mWhiteBalance; + + private boolean mIsScanning; + + private Boolean mPlaySoundOnCapture = false; + + private boolean mustUpdateSurface; + private boolean surfaceWasDestroyed; + + private SurfaceTexture mPreviewTexture; + + Camera1(Callback callback, PreviewImpl preview, Handler bgHandler) { + super(callback, preview, bgHandler); + + preview.setCallback(new PreviewImpl.Callback() { + @Override + public void onSurfaceChanged() { + + // if we got our surface destroyed + // we must re-start the camera and surface + // otherwise, just update our surface + + + synchronized(Camera1.this){ + if(!surfaceWasDestroyed){ + updateSurface(); + } + else{ + mBgHandler.post(new Runnable() { + @Override + public void run() { + start(); + } + }); + } + } + } + + @Override + public void onSurfaceDestroyed() { + + // need to this early so we don't get buffer errors due to sufrace going away. + // Then call stop in bg thread since it might be quite slow and will freeze + // the UI or cause an ANR while it is happening. + synchronized(Camera1.this){ + if(mCamera != null){ + + // let the instance know our surface was destroyed + // and we might need to re-create it and restart the camera + surfaceWasDestroyed = true; + + try{ + mCamera.setPreviewCallback(null); + // note: this might give a debug message that can be ignored. + mCamera.setPreviewDisplay(null); + } + catch(Exception e){ + Log.e("CAMERA_1::", "onSurfaceDestroyed preview cleanup failed", e); + } + } + } + mBgHandler.post(new Runnable() { + @Override + public void run() { + stop(); + } + }); + } + }); + } + + private void updateSurface(){ + if (mCamera != null) { + + // do not update surface if we are currently capturing + // since it will break capture events/video due to the + // pause preview calls + // capture callbacks will handle it if needed afterwards. + if(!isPictureCaptureInProgress.get() && !mIsRecording.get()){ + mBgHandler.post(new Runnable() { + @Override + public void run() { + synchronized(Camera1.this){ + // check for camera null again since it might have changed + if(mCamera != null){ + mustUpdateSurface = false; + setUpPreview(); + adjustCameraParameters(); + + // only start preview if we are showing it + if(mShowingPreview){ + startCameraPreview(); + } + } + } + } + }); + } + else{ + mustUpdateSurface = true; + } + } + } + + @Override + boolean start() { + + synchronized(this){ + chooseCamera(); + if (!openCamera()) { + mCallback.onMountError(); + // returning false will result in invoking this method again + return true; + } + + // if our preview layer is not ready + // do not set it up. Surface handler will do it for us + // once ready. + // This prevents some redundant camera work + if (mPreview.isReady()) { + setUpPreview(); + if(mShowingPreview){ + startCameraPreview(); + } + } + return true; + } + + } + + @Override + void stop() { + + // make sure no other threads are trying to do this at the same time + // such as another call to stop from surface destroyed + // or host destroyed. Should avoid crashes with concurrent calls + synchronized(this){ + if (mMediaRecorder != null) { + try{ + mMediaRecorder.stop(); + } + catch(RuntimeException e){ + Log.e("CAMERA_1::", "mMediaRecorder.stop() failed", e); + } + + try{ + mMediaRecorder.reset(); + mMediaRecorder.release(); + } + catch(RuntimeException e){ + Log.e("CAMERA_1::", "mMediaRecorder.release() failed", e); + } + + mMediaRecorder = null; + + if (mIsRecording.get()) { + mCallback.onRecordingEnd(); + + int deviceOrientation = displayOrientationToOrientationEnum(mDeviceOrientation); + mCallback.onVideoRecorded(mVideoPath, mOrientation != Constants.ORIENTATION_AUTO ? mOrientation : deviceOrientation, deviceOrientation); + } + } + + if (mCamera != null) { + mIsPreviewActive = false; + try{ + mCamera.stopPreview(); + mCamera.setPreviewCallback(null); + } + catch(Exception e){ + Log.e("CAMERA_1::", "stop preview cleanup failed", e); + } + } + + releaseCamera(); + } + } + + // Suppresses Camera#setPreviewTexture + @SuppressLint("NewApi") + void setUpPreview() { + try { + surfaceWasDestroyed = false; + + if(mCamera != null){ + if (mPreviewTexture != null) { + mCamera.setPreviewTexture(mPreviewTexture); + } else if (mPreview.getOutputClass() == SurfaceHolder.class) { + final boolean needsToStopPreview = mIsPreviewActive && Build.VERSION.SDK_INT < 14; + if (needsToStopPreview) { + mCamera.stopPreview(); + mIsPreviewActive = false; + } + mCamera.setPreviewDisplay(mPreview.getSurfaceHolder()); + if (needsToStopPreview) { + startCameraPreview(); + } + } else { + mCamera.setPreviewTexture((SurfaceTexture) mPreview.getSurfaceTexture()); + } + } + } catch (Exception e) { + Log.e("CAMERA_1::", "setUpPreview failed", e); + } + } + + private void startCameraPreview() { + // only start the preview if we didn't yet. + if(!mIsPreviewActive && mCamera != null){ + try{ + mIsPreviewActive = true; + mCamera.startPreview(); + if (mIsScanning) { + mCamera.setPreviewCallback(this); + } + } + catch(Exception e){ + mIsPreviewActive = false; + Log.e("CAMERA_1::", "startCameraPreview failed", e); + } + } + } + + @Override + public void resumePreview() { + mBgHandler.post(new Runnable() { + @Override + public void run() { + synchronized(this){ + mShowingPreview = true; + startCameraPreview(); + } + } + }); + } + + @Override + public void pausePreview() { + synchronized(this){ + mIsPreviewActive = false; + mShowingPreview = false; + + if(mCamera != null){ + mCamera.stopPreview(); + } + } + } + + @Override + boolean isCameraOpened() { + return mCamera != null; + } + + @Override + void setFacing(int facing) { + if (mFacing == facing) { + return; + } + mFacing = facing; + + mBgHandler.post(new Runnable() { + @Override + public void run() { + if (isCameraOpened()) { + stop(); + start(); + } + } + }); + + } + + @Override + int getFacing() { + return mFacing; + } + + @Override + void setCameraId(String id) { + + if(!ObjectUtils.equals(_mCameraId, id)){ + _mCameraId = id; + + // only update if our camera ID actually changes + // from what we currently have. + // Passing null will always yield true + if(!ObjectUtils.equals(_mCameraId, String.valueOf(mCameraId))){ + // this will call chooseCamera + mBgHandler.post(new Runnable() { + @Override + public void run() { + if (isCameraOpened()) { + stop(); + start(); + } + } + }); + } + } + + } + + @Override + String getCameraId() { + return _mCameraId; + } + + @Override + Set getSupportedAspectRatios() { + SizeMap idealAspectRatios = mPreviewSizes; + for (AspectRatio aspectRatio : idealAspectRatios.ratios()) { + if (mPictureSizes.sizes(aspectRatio) == null) { + idealAspectRatios.remove(aspectRatio); + } + } + return idealAspectRatios.ratios(); + } + + + @Override + List getCameraIds() { + List ids = new ArrayList<>(); + + Camera.CameraInfo info = new Camera.CameraInfo(); + + for (int i = 0, count = Camera.getNumberOfCameras(); i < count; i++) { + Properties p = new Properties(); + Camera.getCameraInfo(i, info); + p.put("id", String.valueOf(i)); + p.put("type", String.valueOf(info.facing)); + ids.add(p); + } + return ids; + } + + @Override + SortedSet getAvailablePictureSizes(AspectRatio ratio) { + return mPictureSizes.sizes(ratio); + } + + @Override + void setPictureSize(Size size) { + if (size == null) { + if (mAspectRatio == null) { + return; + } + SortedSet sizes = mPictureSizes.sizes(mAspectRatio); + if(sizes != null && !sizes.isEmpty()) + { + mPictureSize = sizes.last(); + } + } else { + mPictureSize = size; + } + synchronized(this){ + if (mCameraParameters != null && mCamera != null) { + mCameraParameters.setPictureSize(mPictureSize.getWidth(), mPictureSize.getHeight()); + try{ + mCamera.setParameters(mCameraParameters); + } + catch(RuntimeException e ) { + Log.e("CAMERA_1::", "setParameters failed", e); + } + + } + } + } + + @Override + Size getPictureSize() { + return mPictureSize; + } + + @Override + boolean setAspectRatio(final AspectRatio ratio) { + if (mAspectRatio == null || !isCameraOpened()) { + // Handle this later when camera is opened + mAspectRatio = ratio; + return true; + } else if (!mAspectRatio.equals(ratio)) { + final Set sizes = mPreviewSizes.sizes(ratio); + if (sizes == null) { + // do nothing, ratio remains unchanged. Consistent with Camera2 and initial mount behaviour + Log.w("CAMERA_1::", "setAspectRatio received an unsupported value and will be ignored."); + } else { + mAspectRatio = ratio; + mBgHandler.post(new Runnable() { + @Override + public void run() { + synchronized(Camera1.this){ + if(mCamera != null){ + adjustCameraParameters(); + } + } + } + }); + return true; + } + } + return false; + } + + @Override + AspectRatio getAspectRatio() { + return mAspectRatio; + } + + @Override + void setAutoFocus(boolean autoFocus) { + if (mAutoFocus == autoFocus) { + return; + } + synchronized(this){ + if (setAutoFocusInternal(autoFocus)) { + try{ + if(mCamera != null){ + mCamera.setParameters(mCameraParameters); + } + } + catch(RuntimeException e ) { + Log.e("CAMERA_1::", "setParameters failed", e); + } + } + } + } + + @Override + boolean getAutoFocus() { + if (!isCameraOpened()) { + return mAutoFocus; + } + String focusMode = mCameraParameters.getFocusMode(); + return focusMode != null && focusMode.contains("continuous"); + } + + @Override + void setFlash(int flash) { + if (flash == mFlash) { + return; + } + if (setFlashInternal(flash)) { + try{ + if(mCamera != null){ + mCamera.setParameters(mCameraParameters); + } + } + catch(RuntimeException e ) { + Log.e("CAMERA_1::", "setParameters failed", e); + } + } + } + + @Override + int getFlash() { + return mFlash; + } + + @Override + float getExposureCompensation() { + return mExposure; + } + + @Override + void setExposureCompensation(float exposure) { + + if (exposure == mExposure) { + return; + } + if (setExposureInternal(exposure)) { + try{ + if(mCamera != null){ + mCamera.setParameters(mCameraParameters); + } + } + catch(RuntimeException e ) { + Log.e("CAMERA_1::", "setParameters failed", e); + } + } + + } + + @Override + public void setFocusDepth(float value) { + // not supported for Camera1 + } + + @Override + float getFocusDepth() { + return 0; + } + + @Override + void setZoom(float zoom) { + if (zoom == mZoom) { + return; + } + if (setZoomInternal(zoom)) { + try{ + if(mCamera != null){ + mCamera.setParameters(mCameraParameters); + } + } + catch(RuntimeException e ) { + Log.e("CAMERA_1::", "setParameters failed", e); + } + } + } + + @Override + float getZoom() { + return mZoom; + } + + + @Override + public void setWhiteBalance(int whiteBalance) { + if (whiteBalance == mWhiteBalance) { + return; + } + if (setWhiteBalanceInternal(whiteBalance)) { + try{ + if(mCamera != null){ + mCamera.setParameters(mCameraParameters); + } + } + catch(RuntimeException e ) { + Log.e("CAMERA_1::", "setParameters failed", e); + } + } + } + + @Override + public int getWhiteBalance() { + return mWhiteBalance; + } + + @Override + void setScanning(boolean isScanning) { + if (isScanning == mIsScanning) { + return; + } + setScanningInternal(isScanning); + } + + @Override + boolean getScanning() { + return mIsScanning; + } + + @Override + void takePicture(final ReadableMap options) { + if (!isCameraOpened()) { + throw new IllegalStateException( + "Camera is not ready. Call start() before takePicture()."); + } + if (!mIsPreviewActive) { + throw new IllegalStateException("Preview is paused - resume it before taking a picture."); + } + + // UPDATE: Take picture right away instead of requesting/waiting for focus. + // This will match closer what the native camera does, + // and will capture whatever is on the preview without changing the camera focus. + // This change will also help with autoFocusPointOfInterest not being usable to capture (Issue #2420) + // and with takePicture never returning/resolving if the focus was reset (Issue #2421) + takePictureInternal(options); + } + + int orientationEnumToRotation(int orientation) { + switch(orientation) { + case Constants.ORIENTATION_UP: + return 0; + case Constants.ORIENTATION_DOWN: + return 180; + case Constants.ORIENTATION_LEFT: + return 270; + case Constants.ORIENTATION_RIGHT: + return 90; + default: + return Constants.ORIENTATION_UP; + } + } + + int displayOrientationToOrientationEnum(int rotation) { + switch (rotation) { + case 0: + return Constants.ORIENTATION_UP; + case 90: + return Constants.ORIENTATION_RIGHT; + case 180: + return Constants.ORIENTATION_DOWN; + case 270: + return Constants.ORIENTATION_LEFT; + default: + return 1; + } + } + + void takePictureInternal(final ReadableMap options) { + // if not capturing already, atomically set it to true + if (!mIsRecording.get() && isPictureCaptureInProgress.compareAndSet(false, true)) { + + try{ + if (options.hasKey("orientation") && options.getInt("orientation") != Constants.ORIENTATION_AUTO) { + mOrientation = options.getInt("orientation"); + int rotation = orientationEnumToRotation(mOrientation); + mCameraParameters.setRotation(calcCameraRotation(rotation)); + try{ + mCamera.setParameters(mCameraParameters); + } + catch(RuntimeException e ) { + Log.e("CAMERA_1::", "setParameters rotation failed", e); + } + } + + // set quality on capture since we might not process the image bitmap if not needed now. + // This also achieves a much faster JPEG compression speed since it's done on the hardware + if(options.hasKey("quality")){ + mCameraParameters.setJpegQuality((int) (options.getDouble("quality") * 100)); + try{ + mCamera.setParameters(mCameraParameters); + } + catch(RuntimeException e ) { + Log.e("CAMERA_1::", "setParameters quality failed", e); + } + } + + mCamera.takePicture(null, null, null, new Camera.PictureCallback() { + @Override + public void onPictureTaken(byte[] data, Camera camera) { + + // this shouldn't be needed and messes up autoFocusPointOfInterest + // camera.cancelAutoFocus(); + + if(mPlaySoundOnCapture){ + sound.play(MediaActionSound.SHUTTER_CLICK); + } + + if (options.hasKey("pauseAfterCapture") && !options.getBoolean("pauseAfterCapture")) { + camera.startPreview(); + mIsPreviewActive = true; + if (mIsScanning) { + camera.setPreviewCallback(Camera1.this); + } + } else { + camera.stopPreview(); + mIsPreviewActive = false; + camera.setPreviewCallback(null); + } + + isPictureCaptureInProgress.set(false); + + mOrientation = Constants.ORIENTATION_AUTO; + mCallback.onPictureTaken(data, displayOrientationToOrientationEnum(mDeviceOrientation)); + + if(mustUpdateSurface){ + updateSurface(); + } + } + }); + } + catch(Exception e){ + isPictureCaptureInProgress.set(false); + throw e; + } + } + else{ + throw new IllegalStateException("Camera capture failed. Camera is already capturing."); + } + } + + @Override + boolean record(String path, int maxDuration, int maxFileSize, boolean recordAudio, CamcorderProfile profile, int orientation) { + + // make sure compareAndSet is last because we are setting it + if (!isPictureCaptureInProgress.get() && mIsRecording.compareAndSet(false, true)) { + if (orientation != Constants.ORIENTATION_AUTO) { + mOrientation = orientation; + } + try { + setUpMediaRecorder(path, maxDuration, maxFileSize, recordAudio, profile); + mMediaRecorder.prepare(); + mMediaRecorder.start(); + + // after our media recorder is set and started, we must update + // some camera parameters again because the recorder's exclusive access (after unlock is called) + // might interfere with the camera parameters (e.g., flash and zoom) + // This should also be safe to call since both recording and + // camera parameters are getting set by the same thread and process. + // https://stackoverflow.com/a/14855668/1777914 + try{ + mCamera.setParameters(mCameraParameters); + } catch (Exception e) { + Log.e("CAMERA_1::", "Record setParameters failed", e); + } + + int deviceOrientation = displayOrientationToOrientationEnum(mDeviceOrientation); + mCallback.onRecordingStart(path, mOrientation != Constants.ORIENTATION_AUTO ? mOrientation : deviceOrientation, deviceOrientation); + + + return true; + } catch (Exception e) { + mIsRecording.set(false); + Log.e("CAMERA_1::", "Record start failed", e); + return false; + } + } + return false; + } + + @Override + void stopRecording() { + if (mIsRecording.compareAndSet(true, false)) { + stopMediaRecorder(); + if (mCamera != null) { + mCamera.lock(); + } + if(mustUpdateSurface){ + updateSurface(); + } + } + } + + @Override + int getCameraOrientation() { + return mCameraInfo.orientation; + } + + @Override + void setDisplayOrientation(final int displayOrientation) { + synchronized(this){ + if (mDisplayOrientation == displayOrientation) { + return; + } + mDisplayOrientation = displayOrientation; + if (isCameraOpened()) { + boolean needsToStopPreview = mIsPreviewActive && Build.VERSION.SDK_INT < 14; + if (needsToStopPreview) { + mCamera.stopPreview(); + mIsPreviewActive = false; + } + + try{ + mCamera.setDisplayOrientation(calcDisplayOrientation(displayOrientation)); + } + catch(RuntimeException e ) { + Log.e("CAMERA_1::", "setDisplayOrientation failed", e); + } + if (needsToStopPreview) { + startCameraPreview(); + } + } + } + } + + @Override + void setDeviceOrientation(final int deviceOrientation) { + synchronized(this){ + if (mDeviceOrientation == deviceOrientation) { + return; + } + mDeviceOrientation = deviceOrientation; + if (isCameraOpened() && mOrientation == Constants.ORIENTATION_AUTO && !mIsRecording.get() && !isPictureCaptureInProgress.get()) { + mCameraParameters.setRotation(calcCameraRotation(deviceOrientation)); + try{ + mCamera.setParameters(mCameraParameters); + } + catch(RuntimeException e ) { + Log.e("CAMERA_1::", "setParameters failed", e); + } + } + } + } + + @Override + public void setPreviewTexture(final SurfaceTexture surfaceTexture) { + + mBgHandler.post(new Runnable() { + @Override + public void run() { + try{ + if (mCamera == null) { + mPreviewTexture = surfaceTexture; + return; + } + + mCamera.stopPreview(); + mIsPreviewActive = false; + + if (surfaceTexture == null) { + mCamera.setPreviewTexture((SurfaceTexture) mPreview.getSurfaceTexture()); + } else { + mCamera.setPreviewTexture(surfaceTexture); + } + + mPreviewTexture = surfaceTexture; + startCameraPreview(); + } catch (IOException e) { + Log.e("CAMERA_1::", "setPreviewTexture failed", e); + } + } + }); + } + + @Override + public Size getPreviewSize() { + Camera.Size cameraSize = mCameraParameters.getPreviewSize(); + return new Size(cameraSize.width, cameraSize.height); + } + + /** + * This rewrites {@link #mCameraId} and {@link #mCameraInfo}. + */ + private void chooseCamera() { + if(_mCameraId == null){ + int count = Camera.getNumberOfCameras(); + if(count == 0){ + //throw new RuntimeException("No camera available."); + mCameraId = INVALID_CAMERA_ID; + Log.w("CAMERA_1::", "getNumberOfCameras returned 0. No camera available."); + return; + } + + for (int i = 0; i < count; i++) { + Camera.getCameraInfo(i, mCameraInfo); + if (mCameraInfo.facing == mFacing) { + mCameraId = i; + return; + } + } + // no camera found, set the one we have + mCameraId = 0; + Camera.getCameraInfo(mCameraId, mCameraInfo); + } + else{ + try{ + mCameraId = Integer.parseInt(_mCameraId); + Camera.getCameraInfo(mCameraId, mCameraInfo); + } + catch(Exception e){ + mCameraId = INVALID_CAMERA_ID; + } + } + } + + private boolean openCamera() { + if (mCamera != null) { + releaseCamera(); + } + + // in case we got an invalid camera ID + // due to no cameras or invalid ID provided, + // return false so we can raise a mount error + if(mCameraId == INVALID_CAMERA_ID){ + return false; + } + + try { + mCamera = Camera.open(mCameraId); + mCameraParameters = mCamera.getParameters(); + + // Supported preview sizes + mPreviewSizes.clear(); + for (Camera.Size size : mCameraParameters.getSupportedPreviewSizes()) { + mPreviewSizes.add(new Size(size.width, size.height)); + } + + // Supported picture sizes; + mPictureSizes.clear(); + for (Camera.Size size : mCameraParameters.getSupportedPictureSizes()) { + mPictureSizes.add(new Size(size.width, size.height)); + } + + // to be consistent with Camera2, and to prevent crashes on some devices + // do not allow preview sizes that are not also in the picture sizes set + for (AspectRatio aspectRatio : mPreviewSizes.ratios()) { + if (mPictureSizes.sizes(aspectRatio) == null) { + mPreviewSizes.remove(aspectRatio); + } + } + + // AspectRatio + if (mAspectRatio == null) { + mAspectRatio = Constants.DEFAULT_ASPECT_RATIO; + } + adjustCameraParameters(); + mCamera.setDisplayOrientation(calcDisplayOrientation(mDisplayOrientation)); + mCallback.onCameraOpened(); + return true; + } catch (RuntimeException e) { + return false; + } + } + + private AspectRatio chooseAspectRatio() { + AspectRatio r = null; + for (AspectRatio ratio : mPreviewSizes.ratios()) { + r = ratio; + if (ratio.equals(Constants.DEFAULT_ASPECT_RATIO)) { + return ratio; + } + } + return r; + } + + void adjustCameraParameters() { + SortedSet sizes = mPreviewSizes.sizes(mAspectRatio); + if (sizes == null) { // Not supported + Log.w("CAMERA_1::", "adjustCameraParameters received an unsupported aspect ratio value and will be ignored."); + mAspectRatio = chooseAspectRatio(); + sizes = mPreviewSizes.sizes(mAspectRatio); + } + Size size = chooseOptimalSize(sizes); + + // Always re-apply camera parameters + mPictureSize = mPictureSizes.sizes(mAspectRatio).last(); + boolean needsToStopPreview = mIsPreviewActive; + if (needsToStopPreview) { + mCamera.stopPreview(); + mIsPreviewActive = false; + } + mCameraParameters.setPreviewSize(size.getWidth(), size.getHeight()); + mCameraParameters.setPictureSize(mPictureSize.getWidth(), mPictureSize.getHeight()); + if (mOrientation != Constants.ORIENTATION_AUTO) { + mCameraParameters.setRotation(calcCameraRotation(orientationEnumToRotation(mOrientation))); + } else { + mCameraParameters.setRotation(calcCameraRotation(mDeviceOrientation)); + } + + setAutoFocusInternal(mAutoFocus); + setFlashInternal(mFlash); + setExposureInternal(mExposure); + setAspectRatio(mAspectRatio); + setZoomInternal(mZoom); + setWhiteBalanceInternal(mWhiteBalance); + setScanningInternal(mIsScanning); + setPlaySoundInternal(mPlaySoundOnCapture); + + try{ + mCamera.setParameters(mCameraParameters); + } + catch(RuntimeException e ) { + Log.e("CAMERA_1::", "setParameters failed", e); + } + if (needsToStopPreview) { + startCameraPreview(); + } + } + + @SuppressWarnings("SuspiciousNameCombination") + private Size chooseOptimalSize(SortedSet sizes) { + if (!mPreview.isReady()) { // Not yet laid out + return sizes.first(); // Return the smallest size + } + int desiredWidth; + int desiredHeight; + final int surfaceWidth = mPreview.getWidth(); + final int surfaceHeight = mPreview.getHeight(); + if (isLandscape(mDisplayOrientation)) { + desiredWidth = surfaceHeight; + desiredHeight = surfaceWidth; + } else { + desiredWidth = surfaceWidth; + desiredHeight = surfaceHeight; + } + Size result = null; + for (Size size : sizes) { // Iterate from small to large + if (desiredWidth <= size.getWidth() && desiredHeight <= size.getHeight()) { + return size; + + } + result = size; + } + return result; + } + + private void releaseCamera() { + if (mCamera != null) { + mCamera.release(); + mCamera = null; + mPictureSize = null; + mCallback.onCameraClosed(); + + // reset these flags + isPictureCaptureInProgress.set(false); + mIsRecording.set(false); + } + } + + // Most credit: https://github.com/CameraKit/camerakit-android/blob/master/camerakit-core/src/main/api16/com/wonderkiln/camerakit/Camera1.java + void setFocusArea(final float x, final float y) { + mBgHandler.post(new Runnable() { + @Override + public void run() { + synchronized(Camera1.this){ + if (mCamera != null) { + Camera.Parameters parameters = null; + + // This might crash on some devices if the camera is not + // available/locked, with a RuntimeException("getParameters failed (empty parameters)") + try{ + parameters = mCamera.getParameters(); + } + catch(Exception e){ + Log.e("CAMERA_1::", "setFocusArea.getParameters failed", e); + parameters = null; + } + + if (parameters == null) return; + + String focusMode = parameters.getFocusMode(); + Rect rect = calculateFocusArea(x, y); + + List meteringAreas = new ArrayList<>(); + meteringAreas.add(new Camera.Area(rect, FOCUS_METERING_AREA_WEIGHT_DEFAULT)); + + if (parameters.getMaxNumFocusAreas() != 0 && focusMode != null && + (focusMode.equals(Camera.Parameters.FOCUS_MODE_AUTO) || + focusMode.equals(Camera.Parameters.FOCUS_MODE_MACRO) || + focusMode.equals(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE) || + focusMode.equals(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) + ) { + parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); + parameters.setFocusAreas(meteringAreas); + if (parameters.getMaxNumMeteringAreas() > 0) { + parameters.setMeteringAreas(meteringAreas); + } + if (!parameters.getSupportedFocusModes().contains(Camera.Parameters.FOCUS_MODE_AUTO)) { + return; //cannot autoFocus + } + try{ + mCamera.setParameters(parameters); + } + catch(RuntimeException e ) { + Log.e("CAMERA_1::", "setParameters failed", e); + } + + try{ + mCamera.autoFocus(new Camera.AutoFocusCallback() { + @Override + public void onAutoFocus(boolean success, Camera camera) { + //resetFocus(success, camera); + } + }); + } + catch(RuntimeException e ) { + Log.e("CAMERA_1::", "autoFocus failed", e); + } + } else if (parameters.getMaxNumMeteringAreas() > 0) { + if (!parameters.getSupportedFocusModes().contains(Camera.Parameters.FOCUS_MODE_AUTO)) { + return; //cannot autoFocus + } + parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); + parameters.setFocusAreas(meteringAreas); + parameters.setMeteringAreas(meteringAreas); + + try{ + mCamera.setParameters(parameters); + } + catch(RuntimeException e ) { + Log.e("CAMERA_1::", "setParameters failed", e); + } + + try{ + mCamera.autoFocus(new Camera.AutoFocusCallback() { + @Override + public void onAutoFocus(boolean success, Camera camera) { + //resetFocus(success, camera); + } + }); + } + catch(RuntimeException e ) { + Log.e("CAMERA_1::", "autoFocus failed", e); + } + } else { + try{ + mCamera.autoFocus(new Camera.AutoFocusCallback() { + @Override + public void onAutoFocus(boolean success, Camera camera) { + //mCamera.cancelAutoFocus(); + } + }); + } + catch(RuntimeException e ) { + Log.e("CAMERA_1::", "autoFocus failed", e); + } + } + } + } + } + }); + } + + private void resetFocus(final boolean success, final Camera camera) { + mHandler.removeCallbacksAndMessages(null); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + if (mCamera != null) { + mCamera.cancelAutoFocus(); + + Camera.Parameters parameters = null; + try{ + parameters = mCamera.getParameters(); + } + catch(Exception e){ + Log.e("CAMERA_1::", "resetFocus.getParameters failed", e); + parameters = null; + } + if (parameters == null) return; + + if (parameters.getFocusMode() != Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE) { + parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE); + parameters.setFocusAreas(null); + parameters.setMeteringAreas(null); + try{ + mCamera.setParameters(parameters); + } + catch(RuntimeException e ) { + Log.e("CAMERA_1::", "setParameters failed", e); + } + } + + mCamera.cancelAutoFocus(); + } + } + }, DELAY_MILLIS_BEFORE_RESETTING_FOCUS); + } + + private Rect calculateFocusArea(float x, float y) { + int padding = FOCUS_AREA_SIZE_DEFAULT / 2; + int centerX = (int) (x * 2000); + int centerY = (int) (y * 2000); + + int left = centerX - padding; + int top = centerY - padding; + int right = centerX + padding; + int bottom = centerY + padding; + + if (left < 0) left = 0; + if (right > 2000) right = 2000; + if (top < 0) top = 0; + if (bottom > 2000) bottom = 2000; + + return new Rect(left - 1000, top - 1000, right - 1000, bottom - 1000); + } + + /** + * Calculate display orientation + * https://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation(int) + * + * This calculation is used for orienting the preview + * + * Note: This is not the same calculation as the camera rotation + * + * @param screenOrientationDegrees Screen orientation in degrees + * @return Number of degrees required to rotate preview + */ + private int calcDisplayOrientation(int screenOrientationDegrees) { + if (mCameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { + return (360 - (mCameraInfo.orientation + screenOrientationDegrees) % 360) % 360; + } else { // back-facing + return (mCameraInfo.orientation - screenOrientationDegrees + 360) % 360; + } + } + + /** + * Calculate camera rotation + * + * This calculation is applied to the output JPEG either via Exif Orientation tag + * or by actually transforming the bitmap. (Determined by vendor camera API implementation) + * + * Note: This is not the same calculation as the display orientation + * + * @param screenOrientationDegrees Screen orientation in degrees + * @return Number of degrees to rotate image in order for it to view correctly. + */ + private int calcCameraRotation(int screenOrientationDegrees) { + if (mCameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK) { + return (mCameraInfo.orientation + screenOrientationDegrees) % 360; + } + // back-facing + final int landscapeFlip = isLandscape(screenOrientationDegrees) ? 180 : 0; + return (mCameraInfo.orientation + screenOrientationDegrees + landscapeFlip) % 360; + } + + /** + * Test if the supplied orientation is in landscape. + * + * @param orientationDegrees Orientation in degrees (0,90,180,270) + * @return True if in landscape, false if portrait + */ + private boolean isLandscape(int orientationDegrees) { + return (orientationDegrees == Constants.LANDSCAPE_90 || + orientationDegrees == Constants.LANDSCAPE_270); + } + + /** + * @return {@code true} if {@link #mCameraParameters} was modified. + */ + private boolean setAutoFocusInternal(boolean autoFocus) { + mAutoFocus = autoFocus; + if (isCameraOpened()) { + final List modes = mCameraParameters.getSupportedFocusModes(); + if (autoFocus && modes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) { + mCameraParameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE); + } else if (modes.contains(Camera.Parameters.FOCUS_MODE_FIXED)) { + mCameraParameters.setFocusMode(Camera.Parameters.FOCUS_MODE_FIXED); + } else if (modes.contains(Camera.Parameters.FOCUS_MODE_INFINITY)) { + mCameraParameters.setFocusMode(Camera.Parameters.FOCUS_MODE_INFINITY); + } else { + mCameraParameters.setFocusMode(modes.get(0)); + } + return true; + } else { + return false; + } + } + + /** + * @return {@code true} if {@link #mCameraParameters} was modified. + */ + private boolean setFlashInternal(int flash) { + if (isCameraOpened()) { + List modes = mCameraParameters.getSupportedFlashModes(); + String mode = FLASH_MODES.get(flash); + if(modes == null) { + return false; + } + if (modes.contains(mode)) { + mCameraParameters.setFlashMode(mode); + mFlash = flash; + return true; + } + String currentMode = FLASH_MODES.get(mFlash); + if (!modes.contains(currentMode)) { + mCameraParameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); + return true; + } + return false; + } else { + mFlash = flash; + return false; + } + } + + private boolean setExposureInternal(float exposure) { + mExposure = exposure; + if (isCameraOpened()){ + int minExposure = mCameraParameters.getMinExposureCompensation(); + int maxExposure = mCameraParameters.getMaxExposureCompensation(); + + if (minExposure != maxExposure) { + int scaledValue = 0; + if (mExposure >= 0 && mExposure <= 1) { + scaledValue = (int) (mExposure * (maxExposure - minExposure)) + minExposure; + } + + mCameraParameters.setExposureCompensation(scaledValue); + return true; + } + } + return false; + } + + + /** + * @return {@code true} if {@link #mCameraParameters} was modified. + */ + private boolean setZoomInternal(float zoom) { + if (isCameraOpened() && mCameraParameters.isZoomSupported()) { + int maxZoom = mCameraParameters.getMaxZoom(); + int scaledValue = (int) (zoom * maxZoom); + mCameraParameters.setZoom(scaledValue); + mZoom = zoom; + return true; + } else { + mZoom = zoom; + return false; + } + } + + /** + * @return {@code true} if {@link #mCameraParameters} was modified. + */ + private boolean setWhiteBalanceInternal(int whiteBalance) { + mWhiteBalance = whiteBalance; + if (isCameraOpened()) { + final List modes = mCameraParameters.getSupportedWhiteBalance(); + String mode = WB_MODES.get(whiteBalance); + if (modes != null && modes.contains(mode)) { + mCameraParameters.setWhiteBalance(mode); + return true; + } + String currentMode = WB_MODES.get(mWhiteBalance); + if (modes == null || !modes.contains(currentMode)) { + mCameraParameters.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_AUTO); + return true; + } + return false; + } else { + return false; + } + } + + private void setScanningInternal(boolean isScanning) { + mIsScanning = isScanning; + if (isCameraOpened()) { + if (mIsScanning) { + mCamera.setPreviewCallback(this); + } else { + mCamera.setPreviewCallback(null); + } + } + } + + private void setPlaySoundInternal(boolean playSoundOnCapture){ + mPlaySoundOnCapture = playSoundOnCapture; + if(mCamera != null){ + try{ + // Always disable shutter sound, and play our own. + // This is because not all devices honor this value when set to true + boolean res = mCamera.enableShutterSound(false); + + // if we fail to disable the shutter sound + // set mPlaySoundOnCapture to false since it means + // we cannot change it and the system will play it + // playing the sound ourselves also makes it consistent with Camera2 + if(!res){ + mPlaySoundOnCapture = false; + } + } + catch(Exception ex){ + Log.e("CAMERA_1::", "setPlaySoundInternal failed", ex); + mPlaySoundOnCapture = false; + } + } + } + + @Override + void setPlaySoundOnCapture(boolean playSoundOnCapture) { + if (playSoundOnCapture == mPlaySoundOnCapture) { + return; + } + setPlaySoundInternal(playSoundOnCapture); + } + + @Override + public boolean getPlaySoundOnCapture(){ + return mPlaySoundOnCapture; + } + + @Override + public void onPreviewFrame(byte[] data, Camera camera) { + Camera.Size previewSize = mCameraParameters.getPreviewSize(); + mCallback.onFramePreview(data, previewSize.width, previewSize.height, mDeviceOrientation); + } + + private void setUpMediaRecorder(String path, int maxDuration, int maxFileSize, boolean recordAudio, CamcorderProfile profile) { + + mMediaRecorder = new MediaRecorder(); + mCamera.unlock(); + + mMediaRecorder.setCamera(mCamera); + + mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); + if (recordAudio) { + mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); + } + + mMediaRecorder.setOutputFile(path); + mVideoPath = path; + + CamcorderProfile camProfile; + if (CamcorderProfile.hasProfile(mCameraId, profile.quality)) { + camProfile = CamcorderProfile.get(mCameraId, profile.quality); + } else { + camProfile = CamcorderProfile.get(mCameraId, CamcorderProfile.QUALITY_HIGH); + } + camProfile.videoBitRate = profile.videoBitRate; + setCamcorderProfile(camProfile, recordAudio); + + mMediaRecorder.setOrientationHint(calcCameraRotation(mOrientation != Constants.ORIENTATION_AUTO ? orientationEnumToRotation(mOrientation) : mDeviceOrientation)); + + if (maxDuration != -1) { + mMediaRecorder.setMaxDuration(maxDuration); + } + if (maxFileSize != -1) { + mMediaRecorder.setMaxFileSize(maxFileSize); + } + + mMediaRecorder.setOnInfoListener(this); + mMediaRecorder.setOnErrorListener(this); + + } + + private void stopMediaRecorder() { + + synchronized(this){ + if (mMediaRecorder != null) { + try { + mMediaRecorder.stop(); + } catch (RuntimeException ex) { + Log.e("CAMERA_1::", "stopMediaRecorder stop failed", ex); + } + + try{ + mMediaRecorder.reset(); + mMediaRecorder.release(); + } catch (RuntimeException ex) { + Log.e("CAMERA_1::", "stopMediaRecorder reset failed", ex); + } + + mMediaRecorder = null; + } + + mCallback.onRecordingEnd(); + + int deviceOrientation = displayOrientationToOrientationEnum(mDeviceOrientation); + + if (mVideoPath == null || !new File(mVideoPath).exists()) { + mCallback.onVideoRecorded(null, mOrientation != Constants.ORIENTATION_AUTO ? mOrientation : deviceOrientation, deviceOrientation); + return; + } + + mCallback.onVideoRecorded(mVideoPath, mOrientation != Constants.ORIENTATION_AUTO ? mOrientation : deviceOrientation, deviceOrientation); + mVideoPath = null; + } + } + + private void setCamcorderProfile(CamcorderProfile profile, boolean recordAudio) { + mMediaRecorder.setOutputFormat(profile.fileFormat); + mMediaRecorder.setVideoFrameRate(profile.videoFrameRate); + mMediaRecorder.setVideoSize(profile.videoFrameWidth, profile.videoFrameHeight); + mMediaRecorder.setVideoEncodingBitRate(profile.videoBitRate); + mMediaRecorder.setVideoEncoder(profile.videoCodec); + if (recordAudio) { + mMediaRecorder.setAudioEncodingBitRate(profile.audioBitRate); + mMediaRecorder.setAudioChannels(profile.audioChannels); + mMediaRecorder.setAudioSamplingRate(profile.audioSampleRate); + mMediaRecorder.setAudioEncoder(profile.audioCodec); + } + } + + @Override + public void onInfo(MediaRecorder mr, int what, int extra) { + if ( what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED || + what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED) { + stopRecording(); + } + } + + + @Override + public void onError(MediaRecorder mr, int what, int extra) { + stopRecording(); + } +} diff --git a/android/src/main/java/com/google/android/cameraview/Camera2.java b/android/src/main/java/com/google/android/cameraview/Camera2.java new file mode 100644 index 0000000..cd5b1f2 --- /dev/null +++ b/android/src/main/java/com/google/android/cameraview/Camera2.java @@ -0,0 +1,1558 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.cameraview; + +import android.annotation.TargetApi; +import android.content.Context; +import android.graphics.ImageFormat; +import android.graphics.Rect; +import android.graphics.SurfaceTexture; +import android.hardware.camera2.CameraAccessException; +import android.hardware.camera2.CameraCaptureSession; +import android.hardware.camera2.CameraCharacteristics; +import android.hardware.camera2.CameraDevice; +import android.hardware.camera2.CameraManager; +import android.hardware.camera2.CameraMetadata; +import android.hardware.camera2.CaptureFailure; +import android.hardware.camera2.CaptureRequest; +import android.hardware.camera2.CaptureResult; +import android.hardware.camera2.TotalCaptureResult; +import android.hardware.camera2.params.MeteringRectangle; +import android.hardware.camera2.params.StreamConfigurationMap; +import android.media.CamcorderProfile; +import android.media.Image; +import android.media.ImageReader; +import android.media.MediaRecorder; +import android.media.MediaActionSound; +import androidx.annotation.NonNull; +import android.util.Log; +import android.util.SparseIntArray; +import android.view.Surface; +import android.os.Handler; +import android.os.Looper; + +import com.facebook.react.bridge.ReadableMap; + +import java.io.File; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.Arrays; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Properties; +import java.util.Set; +import java.util.SortedSet; + +import org.reactnative.camera.utils.ObjectUtils; + + + +@SuppressWarnings("MissingPermission") +@TargetApi(21) +class Camera2 extends CameraViewImpl implements MediaRecorder.OnInfoListener, MediaRecorder.OnErrorListener { + + private static final String TAG = "Camera2"; + + private static final SparseIntArray INTERNAL_FACINGS = new SparseIntArray(); + + static { + INTERNAL_FACINGS.put(Constants.FACING_BACK, CameraCharacteristics.LENS_FACING_BACK); + INTERNAL_FACINGS.put(Constants.FACING_FRONT, CameraCharacteristics.LENS_FACING_FRONT); + } + + /** + * Max preview width that is guaranteed by Camera2 API + */ + private static final int MAX_PREVIEW_WIDTH = 1920; + + /** + * Max preview height that is guaranteed by Camera2 API + */ + private static final int MAX_PREVIEW_HEIGHT = 1080; + + private static final int FOCUS_AREA_SIZE_DEFAULT = 300; + + private static final int FOCUS_METERING_AREA_WEIGHT_DEFAULT = 1000; + + private final CameraManager mCameraManager; + + private final CameraDevice.StateCallback mCameraDeviceCallback + = new CameraDevice.StateCallback() { + + @Override + public void onOpened(@NonNull CameraDevice camera) { + mCamera = camera; + mCallback.onCameraOpened(); + startCaptureSession(); + } + + @Override + public void onClosed(@NonNull CameraDevice camera) { + mCallback.onCameraClosed(); + } + + @Override + public void onDisconnected(@NonNull CameraDevice camera) { + mCamera = null; + } + + @Override + public void onError(@NonNull CameraDevice camera, int error) { + Log.e(TAG, "onError: " + camera.getId() + " (" + error + ")"); + mCamera = null; + } + + }; + + private final CameraCaptureSession.StateCallback mSessionCallback + = new CameraCaptureSession.StateCallback() { + + @Override + public void onConfigured(@NonNull CameraCaptureSession session) { + if (mCamera == null) { + return; + } + mCaptureSession = session; + mInitialCropRegion = mPreviewRequestBuilder.get(CaptureRequest.SCALER_CROP_REGION); + updateAutoFocus(); + updateFlash(); + updateFocusDepth(); + updateWhiteBalance(); + updateZoom(); + try { + mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), + mCaptureCallback, null); + } catch (CameraAccessException e) { + Log.e(TAG, "Failed to start camera preview because it couldn't access camera", e); + } catch (IllegalStateException e) { + Log.e(TAG, "Failed to start camera preview.", e); + } + } + + @Override + public void onConfigureFailed(@NonNull CameraCaptureSession session) { + Log.e(TAG, "Failed to configure capture session."); + } + + @Override + public void onClosed(@NonNull CameraCaptureSession session) { + if (mCaptureSession != null && mCaptureSession.equals(session)) { + mCaptureSession = null; + } + } + + }; + + PictureCaptureCallback mCaptureCallback = new PictureCaptureCallback() { + + @Override + public void onPrecaptureRequired() { + mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER, + CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_START); + setState(STATE_PRECAPTURE); + try { + mCaptureSession.capture(mPreviewRequestBuilder.build(), this, null); + mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER, + CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_IDLE); + } catch (CameraAccessException e) { + Log.e(TAG, "Failed to run precapture sequence.", e); + } + } + + @Override + public void onReady() { + captureStillPicture(); + } + + }; + + private final ImageReader.OnImageAvailableListener mOnImageAvailableListener + = new ImageReader.OnImageAvailableListener() { + + @Override + public void onImageAvailable(ImageReader reader) { + try (Image image = reader.acquireNextImage()) { + Image.Plane[] planes = image.getPlanes(); + if (planes.length > 0) { + ByteBuffer buffer = planes[0].getBuffer(); + byte[] data = new byte[buffer.remaining()]; + buffer.get(data); + if (image.getFormat() == ImageFormat.JPEG) { + // @TODO: implement deviceOrientation + mCallback.onPictureTaken(data, 0); + } else { + mCallback.onFramePreview(data, image.getWidth(), image.getHeight(), mDisplayOrientation); + } + image.close(); + } + } + } + + }; + + + private String mCameraId; + private String _mCameraId; + + private CameraCharacteristics mCameraCharacteristics; + + CameraDevice mCamera; + + MediaActionSound sound = new MediaActionSound(); + + CameraCaptureSession mCaptureSession; + + CaptureRequest.Builder mPreviewRequestBuilder; + + Set mAvailableCameras = new HashSet<>(); + + private ImageReader mStillImageReader; + + private ImageReader mScanImageReader; + + private int mImageFormat; + + private MediaRecorder mMediaRecorder; + + private String mVideoPath; + + private boolean mIsRecording; + + private final SizeMap mPreviewSizes = new SizeMap(); + + private final SizeMap mPictureSizes = new SizeMap(); + + private Size mPictureSize; + + private int mFacing; + + private AspectRatio mAspectRatio = Constants.DEFAULT_ASPECT_RATIO; + + private AspectRatio mInitialRatio; + + private boolean mAutoFocus; + + private int mFlash; + + private float mExposure; + + private int mCameraOrientation; + + private int mDisplayOrientation; + + private int mDeviceOrientation; + + private float mFocusDepth; + + private float mZoom; + + private int mWhiteBalance; + + private boolean mIsScanning; + + private Boolean mPlaySoundOnCapture = false; + + private Surface mPreviewSurface; + + private Rect mInitialCropRegion; + + Camera2(Callback callback, PreviewImpl preview, Context context, Handler bgHandler) { + super(callback, preview, bgHandler); + mCameraManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE); + mCameraManager.registerAvailabilityCallback(new CameraManager.AvailabilityCallback() { + @Override + public void onCameraAvailable(@NonNull String cameraId) { + super.onCameraAvailable(cameraId); + mAvailableCameras.add(cameraId); + } + + @Override + public void onCameraUnavailable(@NonNull String cameraId) { + super.onCameraUnavailable(cameraId); + mAvailableCameras.remove(cameraId); + } + }, null); + mImageFormat = mIsScanning ? ImageFormat.YUV_420_888 : ImageFormat.JPEG; + mPreview.setCallback(new PreviewImpl.Callback() { + @Override + public void onSurfaceChanged() { + startCaptureSession(); + } + + @Override + public void onSurfaceDestroyed() { + stop(); + } + }); + } + + @Override + boolean start() { + if (!chooseCameraIdByFacing()) { + mAspectRatio = mInitialRatio; + mCallback.onMountError(); + return false; + } + collectCameraInfo(); + setAspectRatio(mInitialRatio); + mInitialRatio = null; + prepareStillImageReader(); + prepareScanImageReader(); + startOpeningCamera(); + return true; + } + + @Override + void stop() { + if (mCaptureSession != null) { + mCaptureSession.close(); + mCaptureSession = null; + } + if (mCamera != null) { + mCamera.close(); + mCamera = null; + } + if (mStillImageReader != null) { + mStillImageReader.close(); + mStillImageReader = null; + } + + if (mScanImageReader != null) { + mScanImageReader.close(); + mScanImageReader = null; + } + + if (mMediaRecorder != null) { + mMediaRecorder.stop(); + mMediaRecorder.reset(); + mMediaRecorder.release(); + mMediaRecorder = null; + + if (mIsRecording) { + mCallback.onRecordingEnd(); + + // @TODO: implement videoOrientation and deviceOrientation calculation + mCallback.onVideoRecorded(mVideoPath, 0, 0); + mIsRecording = false; + } + } + } + + @Override + boolean isCameraOpened() { + return mCamera != null; + } + + @Override + void setFacing(int facing) { + if (mFacing == facing) { + return; + } + mFacing = facing; + if (isCameraOpened()) { + stop(); + start(); + } + } + + @Override + int getFacing() { + return mFacing; + } + + @Override + void setCameraId(String id) { + if(!ObjectUtils.equals(_mCameraId, id)){ + _mCameraId = id; + + // only update if our camera ID actually changes + // from what we currently have. + // Passing null will always yield true + if(!ObjectUtils.equals(_mCameraId, mCameraId)){ + // this will call chooseCameraIdByFacing + if (isCameraOpened()) { + stop(); + start(); + } + } + } + } + + @Override + String getCameraId() { + return _mCameraId; + } + + @Override + Set getSupportedAspectRatios() { + return mPreviewSizes.ratios(); + } + + @Override + List getCameraIds() { + try{ + + List ids = new ArrayList<>(); + + String[] cameraIds = mCameraManager.getCameraIdList(); + for (String id : cameraIds) { + Properties p = new Properties(); + + CameraCharacteristics characteristics = mCameraManager.getCameraCharacteristics(id); + Integer internal = characteristics.get(CameraCharacteristics.LENS_FACING); + + p.put("id", id); + p.put("type", String.valueOf(internal == CameraCharacteristics.LENS_FACING_FRONT ? Constants.FACING_FRONT : Constants.FACING_BACK)); + ids.add(p); + } + return ids; + } + catch (CameraAccessException e) { + throw new RuntimeException("Failed to get a list of camera ids", e); + } + } + + @Override + SortedSet getAvailablePictureSizes(AspectRatio ratio) { + return mPictureSizes.sizes(ratio); + } + + @Override + void setPictureSize(Size size) { + if (mCaptureSession != null) { + try { + mCaptureSession.stopRepeating(); + } catch (CameraAccessException e) { + e.printStackTrace(); + } + mCaptureSession.close(); + mCaptureSession = null; + } + if (mStillImageReader != null) { + mStillImageReader.close(); + } + if (size == null) { + if (mAspectRatio == null || mPictureSize == null) { + return; + } + mPictureSizes.sizes(mAspectRatio).last(); + } else { + mPictureSize = size; + } + prepareStillImageReader(); + startCaptureSession(); + } + + @Override + Size getPictureSize() { + return mPictureSize; + } + + @Override + boolean setAspectRatio(AspectRatio ratio) { + if (ratio != null && mPreviewSizes.isEmpty()) { + mInitialRatio = ratio; + return false; + } + if (ratio == null || ratio.equals(mAspectRatio) || + !mPreviewSizes.ratios().contains(ratio)) { + // TODO: Better error handling + return false; + } + mAspectRatio = ratio; + prepareStillImageReader(); + prepareScanImageReader(); + if (mCaptureSession != null) { + mCaptureSession.close(); + mCaptureSession = null; + startCaptureSession(); + } + return true; + } + + @Override + AspectRatio getAspectRatio() { + return mAspectRatio; + } + + @Override + void setAutoFocus(boolean autoFocus) { + if (mAutoFocus == autoFocus) { + return; + } + mAutoFocus = autoFocus; + if (mPreviewRequestBuilder != null) { + updateAutoFocus(); + if (mCaptureSession != null) { + try { + mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), + mCaptureCallback, null); + } catch (CameraAccessException e) { + mAutoFocus = !mAutoFocus; // Revert + } + } + } + } + + @Override + boolean getAutoFocus() { + return mAutoFocus; + } + + @Override + void setFlash(int flash) { + if (mFlash == flash) { + return; + } + int saved = mFlash; + mFlash = flash; + if (mPreviewRequestBuilder != null) { + updateFlash(); + if (mCaptureSession != null) { + try { + mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), + mCaptureCallback, null); + } catch (CameraAccessException e) { + mFlash = saved; // Revert + } + } + } + } + + @Override + int getFlash() { + return mFlash; + } + + @Override + float getExposureCompensation() { + return mExposure; + } + + @Override + void setExposureCompensation(float exposure) { + Log.e("CAMERA_2:: ", "Adjusting exposure is not currently supported for Camera2"); + } + + + @Override + void takePicture(ReadableMap options) { + mCaptureCallback.setOptions(options); + + if (mAutoFocus) { + lockFocus(); + } else { + captureStillPicture(); + } + } + + @Override + boolean record(String path, int maxDuration, int maxFileSize, boolean recordAudio, CamcorderProfile profile, int orientation) { + if (!mIsRecording) { + setUpMediaRecorder(path, maxDuration, maxFileSize, recordAudio, profile); + try { + mMediaRecorder.prepare(); + + if (mCaptureSession != null) { + mCaptureSession.close(); + mCaptureSession = null; + } + + Size size = chooseOptimalSize(); + mPreview.setBufferSize(size.getWidth(), size.getHeight()); + Surface surface = getPreviewSurface(); + Surface mMediaRecorderSurface = mMediaRecorder.getSurface(); + + mPreviewRequestBuilder = mCamera.createCaptureRequest(CameraDevice.TEMPLATE_RECORD); + mPreviewRequestBuilder.addTarget(surface); + mPreviewRequestBuilder.addTarget(mMediaRecorderSurface); + mCamera.createCaptureSession(Arrays.asList(surface, mMediaRecorderSurface), + mSessionCallback, null); + mMediaRecorder.start(); + mIsRecording = true; + + // @TODO: implement videoOrientation and deviceOrientation calculation + // same TODO as onVideoRecorded + mCallback.onRecordingStart(mVideoPath, 0, 0); + + return true; + } catch (CameraAccessException | IOException e) { + e.printStackTrace(); + return false; + } + } + return false; + } + + @Override + void stopRecording() { + if (mIsRecording) { + stopMediaRecorder(); + + if (mCaptureSession != null) { + mCaptureSession.close(); + mCaptureSession = null; + } + startCaptureSession(); + } + } + + @Override + public void setFocusDepth(float value) { + if (mFocusDepth == value) { + return; + } + float saved = mFocusDepth; + mFocusDepth = value; + if (mCaptureSession != null) { + updateFocusDepth(); + try { + mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), + mCaptureCallback, null); + } catch (CameraAccessException e) { + mFocusDepth = saved; // Revert + } + } + } + + @Override + float getFocusDepth() { + return mFocusDepth; + } + + @Override + public void setZoom(float zoom) { + if (mZoom == zoom) { + return; + } + float saved = mZoom; + mZoom = zoom; + if (mCaptureSession != null) { + updateZoom(); + try { + mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), + mCaptureCallback, null); + } catch (CameraAccessException e) { + mZoom = saved; // Revert + } + } + } + + @Override + float getZoom() { + return mZoom; + } + + @Override + public void setWhiteBalance(int whiteBalance) { + if (mWhiteBalance == whiteBalance) { + return; + } + int saved = mWhiteBalance; + mWhiteBalance = whiteBalance; + if (mCaptureSession != null) { + updateWhiteBalance(); + try { + mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), + mCaptureCallback, null); + } catch (CameraAccessException e) { + mWhiteBalance = saved; // Revert + } + } + } + + @Override + public int getWhiteBalance() { + return mWhiteBalance; + } + + @Override + void setPlaySoundOnCapture(boolean playSoundOnCapture) { + mPlaySoundOnCapture = playSoundOnCapture; + } + + @Override + public boolean getPlaySoundOnCapture(){ + return mPlaySoundOnCapture; + } + + @Override + void setScanning(boolean isScanning) { + if (mIsScanning == isScanning) { + return; + } + mIsScanning = isScanning; + if (!mIsScanning) { + mImageFormat = ImageFormat.JPEG; + } else { + mImageFormat = ImageFormat.YUV_420_888; + } + if (mCaptureSession != null) { + mCaptureSession.close(); + mCaptureSession = null; + } + startCaptureSession(); + } + + @Override + boolean getScanning() { + return mIsScanning; + } + + @Override + int getCameraOrientation() { + return mCameraOrientation; + } + + @Override + void setDisplayOrientation(int displayOrientation) { + mDisplayOrientation = displayOrientation; + mPreview.setDisplayOrientation(mDisplayOrientation); + } + + + @Override + void setDeviceOrientation(int deviceOrientation) { + mDeviceOrientation = deviceOrientation; + //mPreview.setDisplayOrientation(deviceOrientation); // this is not needed and messes up the display orientation + } + + + // This is a helper method to query Camera2 legacy status so we don't need + // to instantiate and set all its props in order to check if it is legacy or not + // and then fallback to Camera1. This way, legacy devices can fall back to Camera1 right away + // This method makes sure all cameras are not legacy, so further checks are not needed. + public static boolean isLegacy(Context context){ + try{ + CameraManager manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE); + String[] ids = manager.getCameraIdList(); + for (String id : ids) { + CameraCharacteristics characteristics = manager.getCameraCharacteristics(id); + Integer level = characteristics.get( + CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL); + if (level == null || + level == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY) { + Log.w(TAG, "Camera2 can only run in legacy mode and should not be used."); + return true; + } + } + return false; + } + catch(CameraAccessException ex){ + Log.e(TAG, "Failed to check camera legacy status, returning true.", ex); + return true; + } + } + + /** + *

Chooses a camera ID by the specified camera facing ({@link #mFacing}).

+ *

This rewrites {@link #mCameraId}, {@link #mCameraCharacteristics}, and optionally + * {@link #mFacing}.

+ */ + private boolean chooseCameraIdByFacing() { + if(_mCameraId == null){ + try { + int internalFacing = INTERNAL_FACINGS.get(mFacing); + final String[] ids = mCameraManager.getCameraIdList(); + if (ids.length == 0) { // No camera + Log.e(TAG, "No cameras available."); + return false; + } + for (String id : ids) { + CameraCharacteristics characteristics = mCameraManager.getCameraCharacteristics(id); + + Integer internal = characteristics.get(CameraCharacteristics.LENS_FACING); + if (internal == null) { + Log.e(TAG, "Unexpected state: LENS_FACING null"); + continue; + } + if (internal == internalFacing) { + mCameraId = id; + mCameraCharacteristics = characteristics; + return true; + } + } + // Not found + mCameraId = ids[0]; + mCameraCharacteristics = mCameraManager.getCameraCharacteristics(mCameraId); + + Integer internal = mCameraCharacteristics.get(CameraCharacteristics.LENS_FACING); + if (internal == null) { + Log.e(TAG, "Unexpected state: LENS_FACING null"); + return false; + } + for (int i = 0, count = INTERNAL_FACINGS.size(); i < count; i++) { + if (INTERNAL_FACINGS.valueAt(i) == internal) { + mFacing = INTERNAL_FACINGS.keyAt(i); + return true; + } + } + // The operation can reach here when the only camera device is an external one. + // We treat it as facing back. + mFacing = Constants.FACING_BACK; + return true; + } catch (CameraAccessException e) { + Log.e(TAG, "Failed to get a list of camera devices", e); + return false; + } + } + else{ + + try{ + // need to set the mCameraCharacteristics variable as above and also do the same checks + // for legacy hardware + mCameraCharacteristics = mCameraManager.getCameraCharacteristics(_mCameraId); + + // set our facing variable so orientation also works as expected + Integer internal = mCameraCharacteristics.get(CameraCharacteristics.LENS_FACING); + if (internal == null) { + Log.e(TAG, "Unexpected state: LENS_FACING null"); + return false; + } + for (int i = 0, count = INTERNAL_FACINGS.size(); i < count; i++) { + if (INTERNAL_FACINGS.valueAt(i) == internal) { + mFacing = INTERNAL_FACINGS.keyAt(i); + break; + } + } + + mCameraId = _mCameraId; + return true; + } + catch(Exception e){ + Log.e(TAG, "Failed to get camera characteristics", e); + return false; + } + } + } + + /** + *

Collects some information from {@link #mCameraCharacteristics}.

+ *

This rewrites {@link #mPreviewSizes}, {@link #mPictureSizes}, + * {@link #mCameraOrientation}, and optionally, {@link #mAspectRatio}.

+ */ + private void collectCameraInfo() { + StreamConfigurationMap map = mCameraCharacteristics.get( + CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); + if (map == null) { + throw new IllegalStateException("Failed to get configuration map: " + mCameraId); + } + mPreviewSizes.clear(); + for (android.util.Size size : map.getOutputSizes(mPreview.getOutputClass())) { + int width = size.getWidth(); + int height = size.getHeight(); + if (width <= MAX_PREVIEW_WIDTH && height <= MAX_PREVIEW_HEIGHT) { + mPreviewSizes.add(new Size(width, height)); + } + } + mPictureSizes.clear(); + collectPictureSizes(mPictureSizes, map); + if (mPictureSize == null) { + mPictureSize = mPictureSizes.sizes(mAspectRatio).last(); + } + for (AspectRatio ratio : mPreviewSizes.ratios()) { + if (!mPictureSizes.ratios().contains(ratio)) { + mPreviewSizes.remove(ratio); + } + } + + if (!mPreviewSizes.ratios().contains(mAspectRatio)) { + mAspectRatio = mPreviewSizes.ratios().iterator().next(); + } + + mCameraOrientation = mCameraCharacteristics.get(CameraCharacteristics.SENSOR_ORIENTATION); + } + + protected void collectPictureSizes(SizeMap sizes, StreamConfigurationMap map) { + for (android.util.Size size : map.getOutputSizes(mImageFormat)) { + mPictureSizes.add(new Size(size.getWidth(), size.getHeight())); + } + } + + private void prepareStillImageReader() { + if (mStillImageReader != null) { + mStillImageReader.close(); + } + mStillImageReader = ImageReader.newInstance(mPictureSize.getWidth(), mPictureSize.getHeight(), + ImageFormat.JPEG, 1); + mStillImageReader.setOnImageAvailableListener(mOnImageAvailableListener, null); + } + + private void prepareScanImageReader() { + if (mScanImageReader != null) { + mScanImageReader.close(); + } + Size largest = mPreviewSizes.sizes(mAspectRatio).last(); + mScanImageReader = ImageReader.newInstance(largest.getWidth(), largest.getHeight(), + ImageFormat.YUV_420_888, 1); + mScanImageReader.setOnImageAvailableListener(mOnImageAvailableListener, null); + } + + /** + *

Starts opening a camera device.

+ *

The result will be processed in {@link #mCameraDeviceCallback}.

+ */ + private void startOpeningCamera() { + try { + mCameraManager.openCamera(mCameraId, mCameraDeviceCallback, null); + } catch (CameraAccessException e) { + throw new RuntimeException("Failed to open camera: " + mCameraId, e); + } + } + + /** + *

Starts a capture session for camera preview.

+ *

This rewrites {@link #mPreviewRequestBuilder}.

+ *

The result will be continuously processed in {@link #mSessionCallback}.

+ */ + void startCaptureSession() { + if (!isCameraOpened() || !mPreview.isReady() || mStillImageReader == null || mScanImageReader == null) { + return; + } + Size previewSize = chooseOptimalSize(); + mPreview.setBufferSize(previewSize.getWidth(), previewSize.getHeight()); + Surface surface = getPreviewSurface(); + try { + mPreviewRequestBuilder = mCamera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); + mPreviewRequestBuilder.addTarget(surface); + + if (mIsScanning) { + mPreviewRequestBuilder.addTarget(mScanImageReader.getSurface()); + } + mCamera.createCaptureSession(Arrays.asList(surface, mStillImageReader.getSurface(), + mScanImageReader.getSurface()), mSessionCallback, null); + } catch (CameraAccessException e) { + Log.e(TAG, "Failed to start capture session", e); + mCallback.onMountError(); + } + } + + @Override + public void resumePreview() { + unlockFocus(); + } + + @Override + public void pausePreview() { + try { + mCaptureSession.stopRepeating(); + } catch (CameraAccessException e) { + e.printStackTrace(); + } + } + + public Surface getPreviewSurface() { + if (mPreviewSurface != null) { + return mPreviewSurface; + } + return mPreview.getSurface(); + } + + @Override + public void setPreviewTexture(SurfaceTexture surfaceTexture) { + if (surfaceTexture != null) { + Surface previewSurface = new Surface(surfaceTexture); + mPreviewSurface = previewSurface; + } else { + mPreviewSurface = null; + } + + // it may be called from another thread, so make sure we're in main looper + Handler handler = new Handler(Looper.getMainLooper()); + handler.post(new Runnable() { + @Override + public void run() { + if (mCaptureSession != null) { + mCaptureSession.close(); + mCaptureSession = null; + } + startCaptureSession(); + } + }); + } + + @Override + public Size getPreviewSize() { + return new Size(mPreview.getWidth(), mPreview.getHeight()); + } + + /** + * Chooses the optimal preview size based on {@link #mPreviewSizes} and the surface size. + * + * @return The picked size for camera preview. + */ + private Size chooseOptimalSize() { + int surfaceLonger, surfaceShorter; + final int surfaceWidth = mPreview.getWidth(); + final int surfaceHeight = mPreview.getHeight(); + if (surfaceWidth < surfaceHeight) { + surfaceLonger = surfaceHeight; + surfaceShorter = surfaceWidth; + } else { + surfaceLonger = surfaceWidth; + surfaceShorter = surfaceHeight; + } + SortedSet candidates = mPreviewSizes.sizes(mAspectRatio); + + // Pick the smallest of those big enough + for (Size size : candidates) { + if (size.getWidth() >= surfaceLonger && size.getHeight() >= surfaceShorter) { + return size; + } + } + // If no size is big enough, pick the largest one. + return candidates.last(); + } + + /** + * Updates the internal state of auto-focus to {@link #mAutoFocus}. + */ + void updateAutoFocus() { + if (mAutoFocus) { + int[] modes = mCameraCharacteristics.get( + CameraCharacteristics.CONTROL_AF_AVAILABLE_MODES); + // Auto focus is not supported + if (modes == null || modes.length == 0 || + (modes.length == 1 && modes[0] == CameraCharacteristics.CONTROL_AF_MODE_OFF)) { + mAutoFocus = false; + mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, + CaptureRequest.CONTROL_AF_MODE_OFF); + } else { + mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, + CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE); + } + } else { + mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, + CaptureRequest.CONTROL_AF_MODE_OFF); + } + } + + /** + * Updates the internal state of flash to {@link #mFlash}. + */ + void updateFlash() { + switch (mFlash) { + case Constants.FLASH_OFF: + mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, + CaptureRequest.CONTROL_AE_MODE_ON); + mPreviewRequestBuilder.set(CaptureRequest.FLASH_MODE, + CaptureRequest.FLASH_MODE_OFF); + break; + case Constants.FLASH_ON: + mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, + CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH); + mPreviewRequestBuilder.set(CaptureRequest.FLASH_MODE, + CaptureRequest.FLASH_MODE_OFF); + break; + case Constants.FLASH_TORCH: + mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, + CaptureRequest.CONTROL_AE_MODE_ON); + mPreviewRequestBuilder.set(CaptureRequest.FLASH_MODE, + CaptureRequest.FLASH_MODE_TORCH); + break; + case Constants.FLASH_AUTO: + mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, + CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH); + mPreviewRequestBuilder.set(CaptureRequest.FLASH_MODE, + CaptureRequest.FLASH_MODE_OFF); + break; + case Constants.FLASH_RED_EYE: + mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, + CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE); + mPreviewRequestBuilder.set(CaptureRequest.FLASH_MODE, + CaptureRequest.FLASH_MODE_OFF); + break; + } + } + + /** + * Updates the internal state of focus depth to {@link #mFocusDepth}. + */ + void updateFocusDepth() { + if (mAutoFocus) { + return; + } + Float minimumLens = mCameraCharacteristics.get(CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE); + if (minimumLens == null) { + throw new NullPointerException("Unexpected state: LENS_INFO_MINIMUM_FOCUS_DISTANCE null"); + } + float value = mFocusDepth * minimumLens; + mPreviewRequestBuilder.set(CaptureRequest.LENS_FOCUS_DISTANCE, value); + } + + /** + * Updates the internal state of zoom to {@link #mZoom}. + */ + void updateZoom() { + float maxZoom = mCameraCharacteristics.get(CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM); + float scaledZoom = mZoom * (maxZoom - 1.0f) + 1.0f; + Rect currentPreview = mCameraCharacteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE); + if (currentPreview != null) { + int currentWidth = currentPreview.width(); + int currentHeight = currentPreview.height(); + int zoomedWidth = (int) (currentWidth / scaledZoom); + int zoomedHeight = (int) (currentHeight / scaledZoom); + int widthOffset = (currentWidth - zoomedWidth) / 2; + int heightOffset = (currentHeight - zoomedHeight) / 2; + + Rect zoomedPreview = new Rect( + currentPreview.left + widthOffset, + currentPreview.top + heightOffset, + currentPreview.right - widthOffset, + currentPreview.bottom - heightOffset + ); + + // ¯\_(ツ)_/¯ for some devices calculating the Rect for zoom=1 results in a bit different + // Rect that device claims as its no-zoom crop region and the preview freezes + if (scaledZoom != 1.0f) { + mPreviewRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION, zoomedPreview); + } else { + mPreviewRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION, mInitialCropRegion); + } + } + } + + /** + * Updates the internal state of white balance to {@link #mWhiteBalance}. + */ + void updateWhiteBalance() { + switch (mWhiteBalance) { + case Constants.WB_AUTO: + mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AWB_MODE, + CaptureRequest.CONTROL_AWB_MODE_AUTO); + break; + case Constants.WB_CLOUDY: + mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AWB_MODE, + CaptureRequest.CONTROL_AWB_MODE_CLOUDY_DAYLIGHT); + break; + case Constants.WB_FLUORESCENT: + mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AWB_MODE, + CaptureRequest.CONTROL_AWB_MODE_FLUORESCENT); + break; + case Constants.WB_INCANDESCENT: + mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AWB_MODE, + CaptureRequest.CONTROL_AWB_MODE_INCANDESCENT); + break; + case Constants.WB_SHADOW: + mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AWB_MODE, + CaptureRequest.CONTROL_AWB_MODE_SHADE); + break; + case Constants.WB_SUNNY: + mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AWB_MODE, + CaptureRequest.CONTROL_AWB_MODE_DAYLIGHT); + break; + } + } + + /** + * Locks the focus as the first step for a still image capture. + */ + private void lockFocus() { + mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, + CaptureRequest.CONTROL_AF_TRIGGER_START); + try { + mCaptureCallback.setState(PictureCaptureCallback.STATE_LOCKING); + mCaptureSession.capture(mPreviewRequestBuilder.build(), mCaptureCallback, null); + } catch (CameraAccessException e) { + Log.e(TAG, "Failed to lock focus.", e); + } + } + + + /** + * Auto focus on input coordinates + */ + + // Much credit - https://gist.github.com/royshil/8c760c2485257c85a11cafd958548482 + void setFocusArea(float x, float y) { + if (mCaptureSession == null) { + return; + } + CameraCaptureSession.CaptureCallback captureCallbackHandler = new CameraCaptureSession.CaptureCallback() { + @Override + public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result) { + super.onCaptureCompleted(session, request, result); + + if (request.getTag() == "FOCUS_TAG") { + mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, null); + try { + mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), null, null); + } catch (CameraAccessException e) { + Log.e(TAG, "Failed to manual focus.", e); + } + } + } + + @Override + public void onCaptureFailed(CameraCaptureSession session, CaptureRequest request, CaptureFailure failure) { + super.onCaptureFailed(session, request, failure); + Log.e(TAG, "Manual AF failure: " + failure); + } + }; + + try { + mCaptureSession.stopRepeating(); + } catch (CameraAccessException e) { + Log.e(TAG, "Failed to manual focus.", e); + } + + mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_CANCEL); + mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_OFF); + try { + mCaptureSession.capture(mPreviewRequestBuilder.build(), captureCallbackHandler, null); + } catch (CameraAccessException e) { + Log.e(TAG, "Failed to manual focus.", e); + } + + if (isMeteringAreaAFSupported()) { + MeteringRectangle focusAreaTouch = calculateFocusArea(x, y); + mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_REGIONS, new MeteringRectangle[]{focusAreaTouch}); + } + mPreviewRequestBuilder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO); + mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_AUTO); + mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_START); + mPreviewRequestBuilder.setTag("FOCUS_TAG"); + + try { + mCaptureSession.capture(mPreviewRequestBuilder.build(), captureCallbackHandler, null); + } catch (CameraAccessException e) { + Log.e(TAG, "Failed to manual focus.", e); + } + } + + private boolean isMeteringAreaAFSupported() { + return mCameraCharacteristics.get(CameraCharacteristics.CONTROL_MAX_REGIONS_AF) >= 1; + } + + private MeteringRectangle calculateFocusArea(float x, float y) { + final Rect sensorArraySize = mCameraCharacteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE); + + // Current iOS spec has a requirement on sensor orientation that doesn't change, spec followed here. + final int xCoordinate = (int)(y * (float)sensorArraySize.height()); + final int yCoordinate = (int)(x * (float)sensorArraySize.width()); + final int halfTouchWidth = 150; //TODO: this doesn't represent actual touch size in pixel. Values range in [3, 10]... + final int halfTouchHeight = 150; + MeteringRectangle focusAreaTouch = new MeteringRectangle(Math.max(yCoordinate - halfTouchWidth, 0), + Math.max(xCoordinate - halfTouchHeight, 0), + halfTouchWidth * 2, + halfTouchHeight * 2, + MeteringRectangle.METERING_WEIGHT_MAX - 1); + + return focusAreaTouch; + } + + /** + * Captures a still picture. + */ + void captureStillPicture() { + try { + CaptureRequest.Builder captureRequestBuilder = mCamera.createCaptureRequest( + CameraDevice.TEMPLATE_STILL_CAPTURE); + if (mIsScanning) { + mImageFormat = ImageFormat.JPEG; + captureRequestBuilder.removeTarget(mScanImageReader.getSurface()); + } + captureRequestBuilder.addTarget(mStillImageReader.getSurface()); + captureRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, + mPreviewRequestBuilder.get(CaptureRequest.CONTROL_AF_MODE)); + switch (mFlash) { + case Constants.FLASH_OFF: + captureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, + CaptureRequest.CONTROL_AE_MODE_ON); + captureRequestBuilder.set(CaptureRequest.FLASH_MODE, + CaptureRequest.FLASH_MODE_OFF); + break; + case Constants.FLASH_ON: + captureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, + CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH); + break; + case Constants.FLASH_TORCH: + captureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, + CaptureRequest.CONTROL_AE_MODE_ON); + captureRequestBuilder.set(CaptureRequest.FLASH_MODE, + CaptureRequest.FLASH_MODE_TORCH); + break; + case Constants.FLASH_AUTO: + captureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, + CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH); + break; + case Constants.FLASH_RED_EYE: + captureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, + CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH); + break; + } + captureRequestBuilder.set(CaptureRequest.JPEG_ORIENTATION, getOutputRotation()); + + + if(mCaptureCallback.getOptions().hasKey("quality")){ + int quality = (int) (mCaptureCallback.getOptions().getDouble("quality") * 100); + captureRequestBuilder.set(CaptureRequest.JPEG_QUALITY, (byte)quality); + } + + captureRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION, mPreviewRequestBuilder.get(CaptureRequest.SCALER_CROP_REGION)); + // Stop preview and capture a still picture. + mCaptureSession.stopRepeating(); + mCaptureSession.capture(captureRequestBuilder.build(), + new CameraCaptureSession.CaptureCallback() { + @Override + public void onCaptureCompleted(@NonNull CameraCaptureSession session, + @NonNull CaptureRequest request, + @NonNull TotalCaptureResult result) { + if (mCaptureCallback.getOptions().hasKey("pauseAfterCapture") + && !mCaptureCallback.getOptions().getBoolean("pauseAfterCapture")) { + unlockFocus(); + } + if (mPlaySoundOnCapture) { + sound.play(MediaActionSound.SHUTTER_CLICK); + } + } + }, null); + } catch (CameraAccessException e) { + Log.e(TAG, "Cannot capture a still picture.", e); + } + } + + private int getOutputRotation() { + @SuppressWarnings("ConstantConditions") + int sensorOrientation = mCameraCharacteristics.get(CameraCharacteristics.SENSOR_ORIENTATION); + + // updated and copied from Camera1 + if (mFacing == Constants.FACING_BACK) { + return (sensorOrientation + mDeviceOrientation) % 360; + } else { + final int landscapeFlip = isLandscape(mDeviceOrientation) ? 180 : 0; + return (sensorOrientation + mDeviceOrientation + landscapeFlip) % 360; + } + } + + /** + * Test if the supplied orientation is in landscape. + * + * @param orientationDegrees Orientation in degrees (0,90,180,270) + * @return True if in landscape, false if portrait + */ + private boolean isLandscape(int orientationDegrees) { + return (orientationDegrees == Constants.LANDSCAPE_90 || + orientationDegrees == Constants.LANDSCAPE_270); + } + + private void setUpMediaRecorder(String path, int maxDuration, int maxFileSize, boolean recordAudio, CamcorderProfile profile) { + mMediaRecorder = new MediaRecorder(); + + mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE); + if (recordAudio) { + mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); + } + + mMediaRecorder.setOutputFile(path); + mVideoPath = path; + + CamcorderProfile camProfile = profile; + if (!CamcorderProfile.hasProfile(Integer.parseInt(mCameraId), profile.quality)) { + camProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH); + } + camProfile.videoBitRate = profile.videoBitRate; + setCamcorderProfile(camProfile, recordAudio); + + mMediaRecorder.setOrientationHint(getOutputRotation()); + + if (maxDuration != -1) { + mMediaRecorder.setMaxDuration(maxDuration); + } + if (maxFileSize != -1) { + mMediaRecorder.setMaxFileSize(maxFileSize); + } + + mMediaRecorder.setOnInfoListener(this); + mMediaRecorder.setOnErrorListener(this); + } + + private void setCamcorderProfile(CamcorderProfile profile, boolean recordAudio) { + mMediaRecorder.setOutputFormat(profile.fileFormat); + mMediaRecorder.setVideoFrameRate(profile.videoFrameRate); + mMediaRecorder.setVideoSize(profile.videoFrameWidth, profile.videoFrameHeight); + mMediaRecorder.setVideoEncodingBitRate(profile.videoBitRate); + mMediaRecorder.setVideoEncoder(profile.videoCodec); + if (recordAudio) { + mMediaRecorder.setAudioEncodingBitRate(profile.audioBitRate); + mMediaRecorder.setAudioChannels(profile.audioChannels); + mMediaRecorder.setAudioSamplingRate(profile.audioSampleRate); + mMediaRecorder.setAudioEncoder(profile.audioCodec); + } + } + + private void stopMediaRecorder() { + mIsRecording = false; + try { + mCaptureSession.stopRepeating(); + mCaptureSession.abortCaptures(); + mMediaRecorder.stop(); + } catch (Exception e) { + e.printStackTrace(); + } + mMediaRecorder.reset(); + mMediaRecorder.release(); + mMediaRecorder = null; + + mCallback.onRecordingEnd(); + + if (mVideoPath == null || !new File(mVideoPath).exists()) { + // @TODO: implement videoOrientation and deviceOrientation calculation + mCallback.onVideoRecorded(null, 0 , 0); + return; + } + // @TODO: implement videoOrientation and deviceOrientation calculation + mCallback.onVideoRecorded(mVideoPath, 0, 0); + mVideoPath = null; + } + + /** + * Unlocks the auto-focus and restart camera preview. This is supposed to be called after + * capturing a still picture. + */ + void unlockFocus() { + mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, + CaptureRequest.CONTROL_AF_TRIGGER_CANCEL); + try { + mCaptureSession.capture(mPreviewRequestBuilder.build(), mCaptureCallback, null); + updateAutoFocus(); + updateFlash(); + if (mIsScanning) { + mImageFormat = ImageFormat.YUV_420_888; + startCaptureSession(); + } else { + mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, + CaptureRequest.CONTROL_AF_TRIGGER_IDLE); + mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), mCaptureCallback, + null); + mCaptureCallback.setState(PictureCaptureCallback.STATE_PREVIEW); + } + } catch (CameraAccessException e) { + Log.e(TAG, "Failed to restart camera preview.", e); + } + } + + /** + * Called when an something occurs while recording. + */ + public void onInfo(MediaRecorder mr, int what, int extra) { + if ( what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED || + what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED) { + stopRecording(); + } + } + + /** + * Called when an error occurs while recording. + */ + public void onError(MediaRecorder mr, int what, int extra) { + stopRecording(); + } + + /** + * A {@link CameraCaptureSession.CaptureCallback} for capturing a still picture. + */ + private static abstract class PictureCaptureCallback + extends CameraCaptureSession.CaptureCallback { + + static final int STATE_PREVIEW = 0; + static final int STATE_LOCKING = 1; + static final int STATE_LOCKED = 2; + static final int STATE_PRECAPTURE = 3; + static final int STATE_WAITING = 4; + static final int STATE_CAPTURING = 5; + + private int mState; + private ReadableMap mOptions = null; + + PictureCaptureCallback() { + } + + void setState(int state) { + mState = state; + } + + void setOptions(ReadableMap options) { mOptions = options; } + + ReadableMap getOptions() { return mOptions; } + + @Override + public void onCaptureProgressed(@NonNull CameraCaptureSession session, + @NonNull CaptureRequest request, @NonNull CaptureResult partialResult) { + process(partialResult); + } + + @Override + public void onCaptureCompleted(@NonNull CameraCaptureSession session, + @NonNull CaptureRequest request, @NonNull TotalCaptureResult result) { + process(result); + } + + private void process(@NonNull CaptureResult result) { + switch (mState) { + case STATE_LOCKING: { + Integer af = result.get(CaptureResult.CONTROL_AF_STATE); + if (af == null) { + break; + } + if (af == CaptureResult.CONTROL_AF_STATE_FOCUSED_LOCKED || + af == CaptureResult.CONTROL_AF_STATE_NOT_FOCUSED_LOCKED) { + Integer ae = result.get(CaptureResult.CONTROL_AE_STATE); + if (ae == null || ae == CaptureResult.CONTROL_AE_STATE_CONVERGED) { + setState(STATE_CAPTURING); + onReady(); + } else { + setState(STATE_LOCKED); + onPrecaptureRequired(); + } + } + break; + } + case STATE_PRECAPTURE: { + Integer ae = result.get(CaptureResult.CONTROL_AE_STATE); + if (ae == null || ae == CaptureResult.CONTROL_AE_STATE_PRECAPTURE || + ae == CaptureRequest.CONTROL_AE_STATE_FLASH_REQUIRED || + ae == CaptureResult.CONTROL_AE_STATE_CONVERGED) { + setState(STATE_WAITING); + } + break; + } + case STATE_WAITING: { + Integer ae = result.get(CaptureResult.CONTROL_AE_STATE); + if (ae == null || ae != CaptureResult.CONTROL_AE_STATE_PRECAPTURE) { + setState(STATE_CAPTURING); + onReady(); + } + break; + } + } + } + + /** + * Called when it is ready to take a still picture. + */ + public abstract void onReady(); + + /** + * Called when it is necessary to run the precapture sequence. + */ + public abstract void onPrecaptureRequired(); + + } + +} diff --git a/android/src/main/java/com/google/android/cameraview/Camera2Api23.java b/android/src/main/java/com/google/android/cameraview/Camera2Api23.java new file mode 100644 index 0000000..396ea8b --- /dev/null +++ b/android/src/main/java/com/google/android/cameraview/Camera2Api23.java @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.cameraview; + +import android.annotation.TargetApi; +import android.content.Context; +import android.graphics.ImageFormat; +import android.hardware.camera2.params.StreamConfigurationMap; +import android.os.Handler; + + +@TargetApi(23) +class Camera2Api23 extends Camera2 { + + Camera2Api23(Callback callback, PreviewImpl preview, Context context, Handler bgHandler) { + super(callback, preview, context, bgHandler); + } + + @Override + protected void collectPictureSizes(SizeMap sizes, StreamConfigurationMap map) { + // Try to get hi-res output sizes + android.util.Size[] outputSizes = map.getHighResolutionOutputSizes(ImageFormat.JPEG); + if (outputSizes != null) { + for (android.util.Size size : map.getHighResolutionOutputSizes(ImageFormat.JPEG)) { + sizes.add(new Size(size.getWidth(), size.getHeight())); + } + } + if (sizes.isEmpty()) { + super.collectPictureSizes(sizes, map); + } + } + +} diff --git a/android/src/main/java/com/google/android/cameraview/CameraView.java b/android/src/main/java/com/google/android/cameraview/CameraView.java new file mode 100644 index 0000000..7e44d4a --- /dev/null +++ b/android/src/main/java/com/google/android/cameraview/CameraView.java @@ -0,0 +1,872 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.cameraview; + +import android.app.Activity; +import android.content.Context; +import android.graphics.Rect; +import android.hardware.Camera; +import android.media.CamcorderProfile; +import android.os.Build; +import android.os.HandlerThread; +import android.os.Handler; +import android.os.Parcel; +import android.os.Parcelable; +import androidx.annotation.IntDef; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.os.ParcelableCompat; +import androidx.core.os.ParcelableCompatCreatorCallbacks; +import androidx.core.view.ViewCompat; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.widget.FrameLayout; +import android.graphics.SurfaceTexture; + +import com.facebook.react.bridge.ReadableMap; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; +import java.util.Set; +import java.util.SortedSet; + +public class CameraView extends FrameLayout { + + /** The camera device faces the opposite direction as the device's screen. */ + public static final int FACING_BACK = Constants.FACING_BACK; + + /** The camera device faces the same direction as the device's screen. */ + public static final int FACING_FRONT = Constants.FACING_FRONT; + + /** Direction the camera faces relative to device screen. */ + @IntDef({FACING_BACK, FACING_FRONT}) + @Retention(RetentionPolicy.SOURCE) + public @interface Facing { + } + + /** Flash will not be fired. */ + public static final int FLASH_OFF = Constants.FLASH_OFF; + + /** Flash will always be fired during snapshot. */ + public static final int FLASH_ON = Constants.FLASH_ON; + + /** Constant emission of light during preview, auto-focus and snapshot. */ + public static final int FLASH_TORCH = Constants.FLASH_TORCH; + + /** Flash will be fired automatically when required. */ + public static final int FLASH_AUTO = Constants.FLASH_AUTO; + + /** Flash will be fired in red-eye reduction mode. */ + public static final int FLASH_RED_EYE = Constants.FLASH_RED_EYE; + + /** The mode for for the camera device's flash control */ + @Retention(RetentionPolicy.SOURCE) + @IntDef({FLASH_OFF, FLASH_ON, FLASH_TORCH, FLASH_AUTO, FLASH_RED_EYE}) + public @interface Flash { + } + + CameraViewImpl mImpl; + + private final CallbackBridge mCallbacks; + + private boolean mAdjustViewBounds; + + private Context mContext; + + private final DisplayOrientationDetector mDisplayOrientationDetector; + + protected HandlerThread mBgThread; + protected Handler mBgHandler; + + + public CameraView(Context context, boolean fallbackToOldApi) { + this(context, null, fallbackToOldApi); + } + + public CameraView(Context context, AttributeSet attrs, boolean fallbackToOldApi) { + this(context, attrs, 0, fallbackToOldApi); + } + + @SuppressWarnings("WrongConstant") + public CameraView(Context context, AttributeSet attrs, int defStyleAttr, boolean fallbackToOldApi) { + super(context, attrs, defStyleAttr); + + // bg hanadler for non UI heavy work + mBgThread = new HandlerThread("RNCamera-Handler-Thread"); + mBgThread.start(); + mBgHandler = new Handler(mBgThread.getLooper()); + + + if (isInEditMode()){ + mCallbacks = null; + mDisplayOrientationDetector = null; + return; + } + mAdjustViewBounds = true; + mContext = context; + + // Internal setup + final PreviewImpl preview = createPreviewImpl(context); + mCallbacks = new CallbackBridge(); + if (fallbackToOldApi || Build.VERSION.SDK_INT < 21 || Camera2.isLegacy(context)) { + mImpl = new Camera1(mCallbacks, preview, mBgHandler); + } else if (Build.VERSION.SDK_INT < 23) { + mImpl = new Camera2(mCallbacks, preview, context, mBgHandler); + } else { + mImpl = new Camera2Api23(mCallbacks, preview, context, mBgHandler); + } + + // Display orientation detector + mDisplayOrientationDetector = new DisplayOrientationDetector(context) { + @Override + public void onDisplayOrientationChanged(int displayOrientation, int deviceOrientation) { + mImpl.setDisplayOrientation(displayOrientation); + mImpl.setDeviceOrientation(deviceOrientation); + } + }; + } + + public void cleanup(){ + if(mBgThread != null){ + if(Build.VERSION.SDK_INT < 18){ + mBgThread.quit(); + } + else{ + mBgThread.quitSafely(); + } + + mBgThread = null; + } + } + + @NonNull + private PreviewImpl createPreviewImpl(Context context) { + PreviewImpl preview; + if (Build.VERSION.SDK_INT < 14) { + preview = new SurfaceViewPreview(context, this); + } else { + preview = new TextureViewPreview(context, this); + } + return preview; + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + if (!isInEditMode()) { + mDisplayOrientationDetector.enable(ViewCompat.getDisplay(this)); + } + } + + @Override + protected void onDetachedFromWindow() { + if (!isInEditMode()) { + mDisplayOrientationDetector.disable(); + } + super.onDetachedFromWindow(); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + if (isInEditMode()){ + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + return; + } + // Handle android:adjustViewBounds + if (mAdjustViewBounds) { + if (!isCameraOpened()) { + mCallbacks.reserveRequestLayoutOnOpen(); + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + return; + } + final int widthMode = MeasureSpec.getMode(widthMeasureSpec); + final int heightMode = MeasureSpec.getMode(heightMeasureSpec); + if (widthMode == MeasureSpec.EXACTLY && heightMode != MeasureSpec.EXACTLY) { + final AspectRatio ratio = getAspectRatio(); + assert ratio != null; + int height = (int) (MeasureSpec.getSize(widthMeasureSpec) * ratio.toFloat()); + if (heightMode == MeasureSpec.AT_MOST) { + height = Math.min(height, MeasureSpec.getSize(heightMeasureSpec)); + } + super.onMeasure(widthMeasureSpec, + MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)); + } else if (widthMode != MeasureSpec.EXACTLY && heightMode == MeasureSpec.EXACTLY) { + final AspectRatio ratio = getAspectRatio(); + assert ratio != null; + int width = (int) (MeasureSpec.getSize(heightMeasureSpec) * ratio.toFloat()); + if (widthMode == MeasureSpec.AT_MOST) { + width = Math.min(width, MeasureSpec.getSize(widthMeasureSpec)); + } + super.onMeasure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), + heightMeasureSpec); + } else { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + } else { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + // Measure the TextureView + int width = getMeasuredWidth(); + int height = getMeasuredHeight(); + AspectRatio ratio = getAspectRatio(); + if (mDisplayOrientationDetector.getLastKnownDisplayOrientation() % 180 == 0) { + ratio = ratio.inverse(); + } + assert ratio != null; + if (height < width * ratio.getY() / ratio.getX()) { + mImpl.getView().measure( + MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(width * ratio.getY() / ratio.getX(), + MeasureSpec.EXACTLY)); + } else { + mImpl.getView().measure( + MeasureSpec.makeMeasureSpec(height * ratio.getX() / ratio.getY(), + MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)); + } + } + + @Override + protected Parcelable onSaveInstanceState() { + SavedState state = new SavedState(super.onSaveInstanceState()); + state.facing = getFacing(); + state.cameraId = getCameraId(); + state.ratio = getAspectRatio(); + state.autoFocus = getAutoFocus(); + state.flash = getFlash(); + state.exposure = getExposureCompensation(); + state.focusDepth = getFocusDepth(); + state.zoom = getZoom(); + state.whiteBalance = getWhiteBalance(); + state.playSoundOnCapture = getPlaySoundOnCapture(); + state.scanning = getScanning(); + state.pictureSize = getPictureSize(); + return state; + } + + @Override + protected void onRestoreInstanceState(Parcelable state) { + if (!(state instanceof SavedState)) { + super.onRestoreInstanceState(state); + return; + } + SavedState ss = (SavedState) state; + super.onRestoreInstanceState(ss.getSuperState()); + setFacing(ss.facing); + setCameraId(ss.cameraId); + setAspectRatio(ss.ratio); + setAutoFocus(ss.autoFocus); + setFlash(ss.flash); + setExposureCompensation(ss.exposure); + setFocusDepth(ss.focusDepth); + setZoom(ss.zoom); + setWhiteBalance(ss.whiteBalance); + setPlaySoundOnCapture(ss.playSoundOnCapture); + setScanning(ss.scanning); + setPictureSize(ss.pictureSize); + } + + public void setUsingCamera2Api(boolean useCamera2) { + if (Build.VERSION.SDK_INT < 21) { + return; + } + + boolean wasOpened = isCameraOpened(); + Parcelable state = onSaveInstanceState(); + + if (useCamera2 && !Camera2.isLegacy(mContext)) { + if (wasOpened) { + stop(); + } + if (Build.VERSION.SDK_INT < 23) { + mImpl = new Camera2(mCallbacks, mImpl.mPreview, mContext, mBgHandler); + } else { + mImpl = new Camera2Api23(mCallbacks, mImpl.mPreview, mContext, mBgHandler); + } + + onRestoreInstanceState(state); + } else { + if (mImpl instanceof Camera1) { + return; + } + + if (wasOpened) { + stop(); + } + mImpl = new Camera1(mCallbacks, mImpl.mPreview, mBgHandler); + } + if(wasOpened){ + start(); + } + } + + /** + * Open a camera device and start showing camera preview. This is typically called from + * {@link Activity#onResume()}. + */ + public void start() { + mImpl.start(); + + // this fallback is no longer needed and was too buggy/slow + // if (!mImpl.start()) { + // if (mImpl.getView() != null) { + // this.removeView(mImpl.getView()); + // } + // //store the state and restore this state after fall back to Camera1 + // Parcelable state = onSaveInstanceState(); + // // Camera2 uses legacy hardware layer; fall back to Camera1 + // mImpl = new Camera1(mCallbacks, createPreviewImpl(getContext()), mBgHandler); + // onRestoreInstanceState(state); + // mImpl.start(); + // } + } + + /** + * Stop camera preview and close the device. This is typically called from + * {@link Activity#onPause()}. + */ + public void stop() { + mImpl.stop(); + } + + /** + * @return {@code true} if the camera is opened. + */ + public boolean isCameraOpened() { + return mImpl.isCameraOpened(); + } + + /** + * Add a new callback. + * + * @param callback The {@link Callback} to add. + * @see #removeCallback(Callback) + */ + public void addCallback(@NonNull Callback callback) { + mCallbacks.add(callback); + } + + /** + * Remove a callback. + * + * @param callback The {@link Callback} to remove. + * @see #addCallback(Callback) + */ + public void removeCallback(@NonNull Callback callback) { + mCallbacks.remove(callback); + } + + /** + * @param adjustViewBounds {@code true} if you want the CameraView to adjust its bounds to + * preserve the aspect ratio of camera. + * @see #getAdjustViewBounds() + */ + public void setAdjustViewBounds(boolean adjustViewBounds) { + if (mAdjustViewBounds != adjustViewBounds) { + mAdjustViewBounds = adjustViewBounds; + requestLayout(); + } + } + + /** + * @return True when this CameraView is adjusting its bounds to preserve the aspect ratio of + * camera. + * @see #setAdjustViewBounds(boolean) + */ + public boolean getAdjustViewBounds() { + return mAdjustViewBounds; + } + + public View getView() { + if (mImpl != null) { + return mImpl.getView(); + } + return null; + } + + /** + * Chooses camera by the direction it faces. + * + * @param facing The camera facing. Must be either {@link #FACING_BACK} or + * {@link #FACING_FRONT}. + */ + public void setFacing(@Facing int facing) { + mImpl.setFacing(facing); + } + + /** + * Gets the direction that the current camera faces. + * + * @return The camera facing. + */ + @Facing + public int getFacing() { + //noinspection WrongConstant + return mImpl.getFacing(); + } + + /** + * Chooses camera by its camera iD + * + * @param id The camera ID + */ + public void setCameraId(String id) { + mImpl.setCameraId(id); + } + + /** + * Gets the currently set camera ID + * + * @return The camera facing. + */ + public String getCameraId() { + return mImpl.getCameraId(); + } + + /** + * Gets all the aspect ratios supported by the current camera. + */ + public Set getSupportedAspectRatios() { + return mImpl.getSupportedAspectRatios(); + } + + /** + * Gets all the camera IDs supported by the phone as a String + */ + public List getCameraIds() { + return mImpl.getCameraIds(); + } + + /** + * Sets the aspect ratio of camera. + * + * @param ratio The {@link AspectRatio} to be set. + */ + public void setAspectRatio(@NonNull AspectRatio ratio) { + if (mImpl.setAspectRatio(ratio)) { + requestLayout(); + } + } + + /** + * Gets the current aspect ratio of camera. + * + * @return The current {@link AspectRatio}. Can be {@code null} if no camera is opened yet. + */ + @Nullable + public AspectRatio getAspectRatio() { + return mImpl.getAspectRatio(); + } + + /** + * Gets all the picture sizes for particular ratio supported by the current camera. + * + * @param ratio {@link AspectRatio} for which the available image sizes will be returned. + */ + public SortedSet getAvailablePictureSizes(@NonNull AspectRatio ratio) { + return mImpl.getAvailablePictureSizes(ratio); + } + + /** + * Sets the size of taken pictures. + * + * @param size The {@link Size} to be set. + */ + public void setPictureSize(@NonNull Size size) { + mImpl.setPictureSize(size); + } + + /** + * Gets the size of pictures that will be taken. + */ + public Size getPictureSize() { + return mImpl.getPictureSize(); + } + + /** + * Enables or disables the continuous auto-focus mode. When the current camera doesn't support + * auto-focus, calling this method will be ignored. + * + * @param autoFocus {@code true} to enable continuous auto-focus mode. {@code false} to + * disable it. + */ + public void setAutoFocus(boolean autoFocus) { + mImpl.setAutoFocus(autoFocus); + } + + /** + * Returns whether the continuous auto-focus mode is enabled. + * + * @return {@code true} if the continuous auto-focus mode is enabled. {@code false} if it is + * disabled, or if it is not supported by the current camera. + */ + public boolean getAutoFocus() { + return mImpl.getAutoFocus(); + } + + /** + * Sets the flash mode. + * + * @param flash The desired flash mode. + */ + public void setFlash(@Flash int flash) { + mImpl.setFlash(flash); + } + + /** + * Gets the current flash mode. + * + * @return The current flash mode. + */ + @Flash + public int getFlash() { + //noinspection WrongConstant + return mImpl.getFlash(); + } + + public void setExposureCompensation(float exposure) { + mImpl.setExposureCompensation(exposure); + } + + public float getExposureCompensation() { + return mImpl.getExposureCompensation(); + } + + + /** + * Gets the camera orientation relative to the devices native orientation. + * + * @return The orientation of the camera. + */ + public int getCameraOrientation() { + return mImpl.getCameraOrientation(); + } + + /** + * Sets the auto focus point. + * + * @param x sets the x coordinate for camera auto focus + * @param y sets the y coordinate for camera auto focus + */ + public void setAutoFocusPointOfInterest(float x, float y) { + mImpl.setFocusArea(x, y); + } + + public void setFocusDepth(float value) { + mImpl.setFocusDepth(value); + } + + public float getFocusDepth() { return mImpl.getFocusDepth(); } + + public void setZoom(float zoom) { + mImpl.setZoom(zoom); + } + + public float getZoom() { + return mImpl.getZoom(); + } + + public void setWhiteBalance(int whiteBalance) { + mImpl.setWhiteBalance(whiteBalance); + } + + public int getWhiteBalance() { + return mImpl.getWhiteBalance(); + } + + public void setPlaySoundOnCapture(boolean playSoundOnCapture) { + mImpl.setPlaySoundOnCapture(playSoundOnCapture); + } + + public boolean getPlaySoundOnCapture() { + return mImpl.getPlaySoundOnCapture(); + } + + public void setScanning(boolean isScanning) { mImpl.setScanning(isScanning);} + + public boolean getScanning() { return mImpl.getScanning(); } + + /** + * Take a picture. The result will be returned to + * {@link Callback#onPictureTaken(CameraView, byte[], int)}. + */ + public void takePicture(ReadableMap options) { + mImpl.takePicture(options); + } + + /** + * Record a video and save it to file. The result will be returned to + * {@link Callback#onVideoRecorded(CameraView, String, int, int)}. + * @param path Path to file that video will be saved to. + * @param maxDuration Maximum duration of the recording, in seconds. + * @param maxFileSize Maximum recording file size, in bytes. + * @param profile Quality profile of the recording. + * + * fires {@link Callback#onRecordingStart(CameraView, String, int, int)} and {@link Callback#onRecordingEnd(CameraView)}. + */ + public boolean record(String path, int maxDuration, int maxFileSize, + boolean recordAudio, CamcorderProfile profile, int orientation) { + return mImpl.record(path, maxDuration, maxFileSize, recordAudio, profile, orientation); + } + + public void stopRecording() { + mImpl.stopRecording(); + } + + public void resumePreview() { + mImpl.resumePreview(); + } + + public void pausePreview() { + mImpl.pausePreview(); + } + + public void setPreviewTexture(SurfaceTexture surfaceTexture) { + mImpl.setPreviewTexture(surfaceTexture); + } + + public Size getPreviewSize() { + return mImpl.getPreviewSize(); + } + + private class CallbackBridge implements CameraViewImpl.Callback { + + private final ArrayList mCallbacks = new ArrayList<>(); + + private boolean mRequestLayoutOnOpen; + + CallbackBridge() { + } + + public void add(Callback callback) { + mCallbacks.add(callback); + } + + public void remove(Callback callback) { + mCallbacks.remove(callback); + } + + @Override + public void onCameraOpened() { + if (mRequestLayoutOnOpen) { + mRequestLayoutOnOpen = false; + requestLayout(); + } + for (Callback callback : mCallbacks) { + callback.onCameraOpened(CameraView.this); + } + } + + @Override + public void onCameraClosed() { + for (Callback callback : mCallbacks) { + callback.onCameraClosed(CameraView.this); + } + } + + @Override + public void onPictureTaken(byte[] data, int deviceOrientation) { + for (Callback callback : mCallbacks) { + callback.onPictureTaken(CameraView.this, data, deviceOrientation); + } + } + + @Override + public void onRecordingStart(String path, int videoOrientation, int deviceOrientation) { + for (Callback callback : mCallbacks) { + callback.onRecordingStart(CameraView.this, path, videoOrientation, deviceOrientation); + } + } + + @Override + public void onRecordingEnd() { + for (Callback callback : mCallbacks) { + callback.onRecordingEnd(CameraView.this); + } + } + + @Override + public void onVideoRecorded(String path, int videoOrientation, int deviceOrientation) { + for (Callback callback : mCallbacks) { + callback.onVideoRecorded(CameraView.this, path, videoOrientation, deviceOrientation); + } + } + + @Override + public void onFramePreview(byte[] data, int width, int height, int orientation) { + for (Callback callback : mCallbacks) { + callback.onFramePreview(CameraView.this, data, width, height, orientation); + } + } + + @Override + public void onMountError() { + for (Callback callback : mCallbacks) { + callback.onMountError(CameraView.this); + } + } + + public void reserveRequestLayoutOnOpen() { + mRequestLayoutOnOpen = true; + } + } + + protected static class SavedState extends BaseSavedState { + + @Facing + int facing; + + String cameraId; + + AspectRatio ratio; + + boolean autoFocus; + + @Flash + int flash; + + float exposure; + + float focusDepth; + + float zoom; + + int whiteBalance; + + boolean playSoundOnCapture; + + boolean scanning; + + Size pictureSize; + + @SuppressWarnings("WrongConstant") + public SavedState(Parcel source, ClassLoader loader) { + super(source); + facing = source.readInt(); + cameraId = source.readString(); + ratio = source.readParcelable(loader); + autoFocus = source.readByte() != 0; + flash = source.readInt(); + exposure = source.readFloat(); + focusDepth = source.readFloat(); + zoom = source.readFloat(); + whiteBalance = source.readInt(); + playSoundOnCapture = source.readByte() != 0; + scanning = source.readByte() != 0; + pictureSize = source.readParcelable(loader); + } + + public SavedState(Parcelable superState) { + super(superState); + } + + @Override + public void writeToParcel(Parcel out, int flags) { + super.writeToParcel(out, flags); + out.writeInt(facing); + out.writeString(cameraId); + out.writeParcelable(ratio, 0); + out.writeByte((byte) (autoFocus ? 1 : 0)); + out.writeInt(flash); + out.writeFloat(exposure); + out.writeFloat(focusDepth); + out.writeFloat(zoom); + out.writeInt(whiteBalance); + out.writeByte((byte) (playSoundOnCapture ? 1 : 0)); + out.writeByte((byte) (scanning ? 1 : 0)); + out.writeParcelable(pictureSize, flags); + } + + public static final Creator CREATOR + = ParcelableCompat.newCreator(new ParcelableCompatCreatorCallbacks() { + + @Override + public SavedState createFromParcel(Parcel in, ClassLoader loader) { + return new SavedState(in, loader); + } + + @Override + public SavedState[] newArray(int size) { + return new SavedState[size]; + } + + }); + + } + + /** + * Callback for monitoring events about {@link CameraView}. + */ + @SuppressWarnings("UnusedParameters") + public abstract static class Callback { + + /** + * Called when camera is opened. + * + * @param cameraView The associated {@link CameraView}. + */ + public void onCameraOpened(CameraView cameraView) {} + + /** + * Called when camera is closed. + * + * @param cameraView The associated {@link CameraView}. + */ + public void onCameraClosed(CameraView cameraView) {} + + /** + * Called when a picture is taken. + * + * @param cameraView The associated {@link CameraView}. + * @param data JPEG data. + */ + public void onPictureTaken(CameraView cameraView, byte[] data, int deviceOrientation) {} + + /** + * Called when a video recording starts + * + * @param cameraView The associated {@link CameraView}. + * @param path Path to recoredd video file. + */ + public void onRecordingStart(CameraView cameraView, String path, int videoOrientation, int deviceOrientation) {} + + /** + * Called when a video recording ends, but before video is saved/processed. + * + * @param cameraView The associated {@link CameraView}. + * @param path Path to recoredd video file. + */ + public void onRecordingEnd(CameraView cameraView){} + + /** + * Called when a video is recorded. + * + * @param cameraView The associated {@link CameraView}. + * @param path Path to recoredd video file. + */ + public void onVideoRecorded(CameraView cameraView, String path, int videoOrientation, int deviceOrientation) {} + + public void onFramePreview(CameraView cameraView, byte[] data, int width, int height, int orientation) {} + + public void onMountError(CameraView cameraView) {} + } + +} diff --git a/android/src/main/java/com/google/android/cameraview/CameraViewImpl.java b/android/src/main/java/com/google/android/cameraview/CameraViewImpl.java new file mode 100644 index 0000000..03b9414 --- /dev/null +++ b/android/src/main/java/com/google/android/cameraview/CameraViewImpl.java @@ -0,0 +1,162 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.cameraview; + +import android.media.CamcorderProfile; +import android.view.View; +import android.graphics.SurfaceTexture; +import android.os.Handler; + +import com.facebook.react.bridge.ReadableMap; + +import java.util.List; +import java.util.Properties; +import java.util.Set; +import java.util.SortedSet; + + +abstract class CameraViewImpl { + + protected final Callback mCallback; + protected final PreviewImpl mPreview; + + // Background handler that the implementation an use to run heavy tasks in background + // in a thread/looper provided by the view. + // Most calls should not require this since the view will already schedule it + // on the bg thread. However, the implementation might need to do some heavy work + // by itself. + protected final Handler mBgHandler; + + CameraViewImpl(Callback callback, PreviewImpl preview, Handler bgHandler) { + mCallback = callback; + mPreview = preview; + mBgHandler = bgHandler; + } + + View getView() { + return mPreview.getView(); + } + + /** + * @return {@code true} if the implementation was able to start the camera session. + */ + abstract boolean start(); + + abstract void stop(); + + abstract boolean isCameraOpened(); + + abstract void setFacing(int facing); + + abstract int getFacing(); + + abstract void setCameraId(String id); + + abstract String getCameraId(); + + abstract Set getSupportedAspectRatios(); + + abstract List getCameraIds(); + + abstract SortedSet getAvailablePictureSizes(AspectRatio ratio); + + abstract void setPictureSize(Size size); + + abstract Size getPictureSize(); + + /** + * @return {@code true} if the aspect ratio was changed. + */ + abstract boolean setAspectRatio(AspectRatio ratio); + + abstract AspectRatio getAspectRatio(); + + abstract void setAutoFocus(boolean autoFocus); + + abstract boolean getAutoFocus(); + + abstract void setFlash(int flash); + + abstract int getFlash(); + + abstract void setExposureCompensation(float exposure); + + abstract float getExposureCompensation(); + + abstract void takePicture(ReadableMap options); + + abstract boolean record(String path, int maxDuration, int maxFileSize, + boolean recordAudio, CamcorderProfile profile, int orientation); + + abstract void stopRecording(); + + abstract int getCameraOrientation(); + + abstract void setDisplayOrientation(int displayOrientation); + + abstract void setDeviceOrientation(int deviceOrientation); + + abstract void setFocusArea(float x, float y); + + abstract void setFocusDepth(float value); + + abstract float getFocusDepth(); + + abstract void setZoom(float zoom); + + abstract float getZoom(); + + abstract void setWhiteBalance(int whiteBalance); + + abstract int getWhiteBalance(); + + abstract void setPlaySoundOnCapture(boolean playSoundOnCapture); + + abstract boolean getPlaySoundOnCapture(); + + abstract void setScanning(boolean isScanning); + + abstract boolean getScanning(); + + abstract public void resumePreview(); + + abstract public void pausePreview(); + + abstract public void setPreviewTexture(SurfaceTexture surfaceTexture); + + abstract public Size getPreviewSize(); + + interface Callback { + + void onCameraOpened(); + + void onCameraClosed(); + + void onPictureTaken(byte[] data, int deviceOrientation); + + void onVideoRecorded(String path, int videoOrientation, int deviceOrientation); + + void onRecordingStart(String path, int videoOrientation, int deviceOrientation); + + void onRecordingEnd(); + + void onFramePreview(byte[] data, int width, int height, int orientation); + + void onMountError(); + } + +} diff --git a/android/src/main/java/com/google/android/cameraview/Constants.java b/android/src/main/java/com/google/android/cameraview/Constants.java new file mode 100644 index 0000000..ca4acb2 --- /dev/null +++ b/android/src/main/java/com/google/android/cameraview/Constants.java @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.cameraview; + +public interface Constants { + + AspectRatio DEFAULT_ASPECT_RATIO = AspectRatio.of(4, 3); + + int FACING_BACK = 0; + int FACING_FRONT = 1; + + int FLASH_OFF = 0; + int FLASH_ON = 1; + int FLASH_TORCH = 2; + int FLASH_AUTO = 3; + int FLASH_RED_EYE = 4; + + int LANDSCAPE_90 = 90; + int LANDSCAPE_270 = 270; + + int WB_AUTO = 0; + int WB_CLOUDY = 1; + int WB_SUNNY = 2; + int WB_SHADOW = 3; + int WB_FLUORESCENT = 4; + int WB_INCANDESCENT = 5; + + int ORIENTATION_AUTO = 0; + int ORIENTATION_UP = 1; + int ORIENTATION_DOWN = 2; + int ORIENTATION_LEFT = 3; + int ORIENTATION_RIGHT = 4; +} diff --git a/android/src/main/java/com/google/android/cameraview/DisplayOrientationDetector.java b/android/src/main/java/com/google/android/cameraview/DisplayOrientationDetector.java new file mode 100644 index 0000000..c8d0942 --- /dev/null +++ b/android/src/main/java/com/google/android/cameraview/DisplayOrientationDetector.java @@ -0,0 +1,125 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.cameraview; + +import android.content.Context; +import android.util.SparseIntArray; +import android.view.Display; +import android.view.OrientationEventListener; +import android.view.Surface; + + +/** + * Monitors the value returned from {@link Display#getRotation()}. + */ +abstract class DisplayOrientationDetector { + + private final OrientationEventListener mOrientationEventListener; + + /** Mapping from Surface.Rotation_n to degrees. */ + static final SparseIntArray DISPLAY_ORIENTATIONS = new SparseIntArray(); + + static { + DISPLAY_ORIENTATIONS.put(Surface.ROTATION_0, 0); + DISPLAY_ORIENTATIONS.put(Surface.ROTATION_90, 90); + DISPLAY_ORIENTATIONS.put(Surface.ROTATION_180, 180); + DISPLAY_ORIENTATIONS.put(Surface.ROTATION_270, 270); + } + + Display mDisplay; + + private int mLastKnownDisplayOrientation = 0; + + private int mLastKnownDeviceOrientation = 0; + + public DisplayOrientationDetector(Context context) { + mOrientationEventListener = new OrientationEventListener(context) { + + /** This is either Surface.Rotation_0, _90, _180, _270, or -1 (invalid). */ + private int mLastKnownRotation = -1; + + @Override + public void onOrientationChanged(int orientation) { + if (orientation == OrientationEventListener.ORIENTATION_UNKNOWN || + mDisplay == null) { + return; + } + boolean hasChanged = false; + + /** set device orientation */ + final int deviceOrientation; + if (orientation > 315 || orientation < 45) { + deviceOrientation = 0; + } else if (orientation > 45 && orientation < 135) { + deviceOrientation = 90; + } else if (orientation > 135 && orientation < 225) { + deviceOrientation = 180; + } else if (orientation > 225 && orientation < 315) { + deviceOrientation = 270; + } else { + deviceOrientation = 0; + } + + if (mLastKnownDeviceOrientation != deviceOrientation) { + mLastKnownDeviceOrientation = deviceOrientation; + hasChanged = true; + } + + /** set screen orientation */ + final int rotation = mDisplay.getRotation(); + if (mLastKnownRotation != rotation) { + mLastKnownRotation = rotation; + hasChanged = true; + } + + if (hasChanged) { + dispatchOnDisplayOrientationChanged(DISPLAY_ORIENTATIONS.get(rotation)); + } + } + }; + } + + public void enable(Display display) { + mDisplay = display; + mOrientationEventListener.enable(); + // Immediately dispatch the first callback + dispatchOnDisplayOrientationChanged(DISPLAY_ORIENTATIONS.get(display.getRotation())); + } + + public void disable() { + mOrientationEventListener.disable(); + mDisplay = null; + } + + public int getLastKnownDisplayOrientation() { + return mLastKnownDisplayOrientation; + } + + void dispatchOnDisplayOrientationChanged(int displayOrientation) { + mLastKnownDisplayOrientation = displayOrientation; + onDisplayOrientationChanged(displayOrientation, mLastKnownDeviceOrientation); + } + + /** + * Called when display orientation is changed. + * + * @param displayOrientation One of 0, 90, 180, and 270. + * @param deviceOrientation One of 0, 90, 180, and 270. + */ + public abstract void onDisplayOrientationChanged(int displayOrientation, int deviceOrientation); + +} diff --git a/android/src/main/java/com/google/android/cameraview/PreviewImpl.java b/android/src/main/java/com/google/android/cameraview/PreviewImpl.java new file mode 100644 index 0000000..3b1e198 --- /dev/null +++ b/android/src/main/java/com/google/android/cameraview/PreviewImpl.java @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.cameraview; + +import android.view.Surface; +import android.view.SurfaceHolder; +import android.view.View; + + +/** + * Encapsulates all the operations related to camera preview in a backward-compatible manner. + */ +abstract class PreviewImpl { + + interface Callback { + void onSurfaceChanged(); + + void onSurfaceDestroyed(); + } + + private Callback mCallback; + + private int mWidth; + + private int mHeight; + + void setCallback(Callback callback) { + mCallback = callback; + } + + abstract Surface getSurface(); + + abstract View getView(); + + abstract Class getOutputClass(); + + abstract void setDisplayOrientation(int displayOrientation); + + abstract boolean isReady(); + + protected void dispatchSurfaceChanged() { + mCallback.onSurfaceChanged(); + } + + protected void dispatchSurfaceDestroyed() { + mCallback.onSurfaceDestroyed(); + } + + SurfaceHolder getSurfaceHolder() { + return null; + } + + Object getSurfaceTexture() { + return null; + } + + void setBufferSize(int width, int height) { + } + + void setSize(int width, int height) { + mWidth = width; + mHeight = height; + } + + int getWidth() { + return mWidth; + } + + int getHeight() { + return mHeight; + } + +} diff --git a/android/src/main/java/com/google/android/cameraview/Size.java b/android/src/main/java/com/google/android/cameraview/Size.java new file mode 100644 index 0000000..26f52b5 --- /dev/null +++ b/android/src/main/java/com/google/android/cameraview/Size.java @@ -0,0 +1,119 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.cameraview; + +import android.os.Parcel; +import android.os.Parcelable; +import androidx.annotation.NonNull; + +/** + * Immutable class for describing width and height dimensions in pixels. + */ +public class Size implements Comparable, Parcelable { + + private final int mWidth; + private final int mHeight; + + /** + * Create a new immutable Size instance. + * + * @param width The width of the size, in pixels + * @param height The height of the size, in pixels + */ + public Size(int width, int height) { + mWidth = width; + mHeight = height; + } + + public static Size parse(String s) { + int position = s.indexOf('x'); + if (position == -1) { + throw new IllegalArgumentException("Malformed size: " + s); + } + try { + int width = Integer.parseInt(s.substring(0, position)); + int height = Integer.parseInt(s.substring(position + 1)); + return new Size(width, height); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("Malformed size: " + s, e); + } + } + + public int getWidth() { + return mWidth; + } + + public int getHeight() { + return mHeight; + } + + @Override + public boolean equals(Object o) { + if (o == null) { + return false; + } + if (this == o) { + return true; + } + if (o instanceof Size) { + Size size = (Size) o; + return mWidth == size.mWidth && mHeight == size.mHeight; + } + return false; + } + + @Override + public String toString() { + return mWidth + "x" + mHeight; + } + + @Override + public int hashCode() { + // assuming most sizes are <2^16, doing a rotate will give us perfect hashing + return mHeight ^ ((mWidth << (Integer.SIZE / 2)) | (mWidth >>> (Integer.SIZE / 2))); + } + + @Override + public int compareTo(@NonNull Size another) { + return mWidth * mHeight - another.mWidth * another.mHeight; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeInt(mWidth); + dest.writeInt(mHeight); + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override + public Size createFromParcel(Parcel source) { + int width = source.readInt(); + int height = source.readInt(); + return new Size(width, height); + } + + @Override + public Size[] newArray(int size) { + return new Size[size]; + } + }; +} diff --git a/android/src/main/java/com/google/android/cameraview/SizeMap.java b/android/src/main/java/com/google/android/cameraview/SizeMap.java new file mode 100644 index 0000000..ae8fbf1 --- /dev/null +++ b/android/src/main/java/com/google/android/cameraview/SizeMap.java @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.cameraview; + +import androidx.collection.ArrayMap; + +import java.util.Set; +import java.util.SortedSet; +import java.util.TreeSet; + +/** + * A collection class that automatically groups {@link Size}s by their {@link AspectRatio}s. + */ +class SizeMap { + + private final ArrayMap> mRatios = new ArrayMap<>(); + + /** + * Add a new {@link Size} to this collection. + * + * @param size The size to add. + * @return {@code true} if it is added, {@code false} if it already exists and is not added. + */ + public boolean add(Size size) { + for (AspectRatio ratio : mRatios.keySet()) { + if (ratio.matches(size)) { + final SortedSet sizes = mRatios.get(ratio); + if (sizes.contains(size)) { + return false; + } else { + sizes.add(size); + return true; + } + } + } + // None of the existing ratio matches the provided size; add a new key + SortedSet sizes = new TreeSet<>(); + sizes.add(size); + mRatios.put(AspectRatio.of(size.getWidth(), size.getHeight()), sizes); + return true; + } + + /** + * Removes the specified aspect ratio and all sizes associated with it. + * + * @param ratio The aspect ratio to be removed. + */ + public void remove(AspectRatio ratio) { + mRatios.remove(ratio); + } + + Set ratios() { + return mRatios.keySet(); + } + + SortedSet sizes(AspectRatio ratio) { + return mRatios.get(ratio); + } + + void clear() { + mRatios.clear(); + } + + boolean isEmpty() { + return mRatios.isEmpty(); + } + +} diff --git a/android/src/main/java/com/google/android/cameraview/SurfaceViewPreview.java b/android/src/main/java/com/google/android/cameraview/SurfaceViewPreview.java new file mode 100644 index 0000000..4541317 --- /dev/null +++ b/android/src/main/java/com/google/android/cameraview/SurfaceViewPreview.java @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.cameraview; + +import android.content.Context; +import androidx.core.view.ViewCompat; +import android.view.Surface; +import android.view.SurfaceHolder; +import android.view.SurfaceView; +import android.view.View; +import android.view.ViewGroup; + +import org.reactnative.camera.R; + +class SurfaceViewPreview extends PreviewImpl { + + final SurfaceView mSurfaceView; + + SurfaceViewPreview(Context context, ViewGroup parent) { + final View view = View.inflate(context, R.layout.surface_view, parent); + mSurfaceView = (SurfaceView) view.findViewById(R.id.surface_view); + final SurfaceHolder holder = mSurfaceView.getHolder(); + //noinspection deprecation + holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); + holder.addCallback(new SurfaceHolder.Callback() { + @Override + public void surfaceCreated(SurfaceHolder h) { + } + + @Override + public void surfaceChanged(SurfaceHolder h, int format, int width, int height) { + setSize(width, height); + if (!ViewCompat.isInLayout(mSurfaceView)) { + dispatchSurfaceChanged(); + } + } + + @Override + public void surfaceDestroyed(SurfaceHolder h) { + setSize(0, 0); + } + }); + } + + @Override + Surface getSurface() { + return getSurfaceHolder().getSurface(); + } + + @Override + SurfaceHolder getSurfaceHolder() { + return mSurfaceView.getHolder(); + } + + @Override + View getView() { + return mSurfaceView; + } + + @Override + Class getOutputClass() { + return SurfaceHolder.class; + } + + @Override + void setDisplayOrientation(int displayOrientation) { + } + + @Override + boolean isReady() { + return getWidth() != 0 && getHeight() != 0; + } + +} diff --git a/android/src/main/java/com/google/android/cameraview/TextureViewPreview.java b/android/src/main/java/com/google/android/cameraview/TextureViewPreview.java new file mode 100644 index 0000000..7215ed3 --- /dev/null +++ b/android/src/main/java/com/google/android/cameraview/TextureViewPreview.java @@ -0,0 +1,146 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.cameraview; + +import android.annotation.TargetApi; +import android.content.Context; +import android.graphics.Matrix; +import android.graphics.SurfaceTexture; +import android.view.Surface; +import android.view.TextureView; +import android.view.View; +import android.view.ViewGroup; + +import org.reactnative.camera.R; + +@TargetApi(14) +class TextureViewPreview extends PreviewImpl { + + private final TextureView mTextureView; + + private int mDisplayOrientation; + + TextureViewPreview(Context context, ViewGroup parent) { + final View view = View.inflate(context, R.layout.texture_view, parent); + mTextureView = (TextureView) view.findViewById(R.id.texture_view); + mTextureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() { + + @Override + public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { + setSize(width, height); + configureTransform(); + dispatchSurfaceChanged(); + } + + @Override + public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { + setSize(width, height); + configureTransform(); + dispatchSurfaceChanged(); + } + + @Override + public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { + setSize(0, 0); + dispatchSurfaceDestroyed(); + return true; + } + + @Override + public void onSurfaceTextureUpdated(SurfaceTexture surface) { + } + }); + } + + // This method is called only from Camera2. + @TargetApi(15) + @Override + void setBufferSize(int width, int height) { + mTextureView.getSurfaceTexture().setDefaultBufferSize(width, height); + } + + @Override + Surface getSurface() { + return new Surface(mTextureView.getSurfaceTexture()); + } + + @Override + SurfaceTexture getSurfaceTexture() { + return mTextureView.getSurfaceTexture(); + } + + @Override + View getView() { + return mTextureView; + } + + @Override + Class getOutputClass() { + return SurfaceTexture.class; + } + + @Override + void setDisplayOrientation(int displayOrientation) { + mDisplayOrientation = displayOrientation; + configureTransform(); + } + + @Override + boolean isReady() { + return mTextureView.getSurfaceTexture() != null; + } + + /** + * Configures the transform matrix for TextureView based on {@link #mDisplayOrientation} and + * the surface size. + */ + void configureTransform() { + Matrix matrix = new Matrix(); + if (mDisplayOrientation % 180 == 90) { + final int width = getWidth(); + final int height = getHeight(); + // Rotate the camera preview when the screen is landscape. + matrix.setPolyToPoly( + new float[]{ + 0.f, 0.f, // top left + width, 0.f, // top right + 0.f, height, // bottom left + width, height, // bottom right + }, 0, + mDisplayOrientation == 90 ? + // Clockwise + new float[]{ + 0.f, height, // top left + 0.f, 0.f, // top right + width, height, // bottom left + width, 0.f, // bottom right + } : // mDisplayOrientation == 270 + // Counter-clockwise + new float[]{ + width, 0.f, // top left + width, height, // top right + 0.f, 0.f, // bottom left + 0.f, height, // bottom right + }, 0, + 4); + } else if (mDisplayOrientation == 180) { + matrix.postRotate(180, getWidth() / 2, getHeight() / 2); + } + mTextureView.setTransform(matrix); + } + +} diff --git a/android/src/main/java/com/lwansbrough/RCTCamera/MutableImage.java b/android/src/main/java/com/lwansbrough/RCTCamera/MutableImage.java new file mode 100644 index 0000000..f069d11 --- /dev/null +++ b/android/src/main/java/com/lwansbrough/RCTCamera/MutableImage.java @@ -0,0 +1,327 @@ +package com.lwansbrough.RCTCamera; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Matrix; +import androidx.exifinterface.media.ExifInterface; +import android.util.Base64; +import android.util.Log; + +import com.drew.imaging.ImageMetadataReader; +import com.drew.imaging.ImageProcessingException; +import com.drew.metadata.Directory; +import com.drew.metadata.Metadata; +import com.drew.metadata.MetadataException; +import com.drew.metadata.Tag; +import com.drew.metadata.exif.ExifIFD0Directory; +import com.drew.metadata.exif.ExifSubIFDDirectory; +import com.facebook.react.bridge.ReadableMap; + +import java.io.BufferedInputStream; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +public class MutableImage { + private static final String TAG = "RNCamera"; + + private final byte[] originalImageData; + private Bitmap currentRepresentation; + private Metadata originalImageMetaData; + private boolean hasBeenReoriented = false; + + public MutableImage(byte[] originalImageData) { + this.originalImageData = originalImageData; + this.currentRepresentation = toBitmap(originalImageData); + } + + public int getWidth() { + return this.currentRepresentation.getWidth(); + } + + public int getHeight() { + return this.currentRepresentation.getHeight(); + } + + public void mirrorImage() throws ImageMutationFailedException { + Matrix m = new Matrix(); + + m.preScale(-1, 1); + + Bitmap bitmap = Bitmap.createBitmap( + currentRepresentation, + 0, + 0, + getWidth(), + getHeight(), + m, + false + ); + + if (bitmap == null) + throw new ImageMutationFailedException("failed to mirror"); + + this.currentRepresentation = bitmap; + } + + public void fixOrientation() throws ImageMutationFailedException { + try { + Metadata metadata = originalImageMetaData(); + + ExifIFD0Directory exifIFD0Directory = metadata.getFirstDirectoryOfType(ExifIFD0Directory.class); + if (exifIFD0Directory == null) { + return; + } else if (exifIFD0Directory.containsTag(ExifIFD0Directory.TAG_ORIENTATION)) { + int exifOrientation = exifIFD0Directory.getInt(ExifIFD0Directory.TAG_ORIENTATION); + if(exifOrientation != 1) { + rotate(exifOrientation); + exifIFD0Directory.setInt(ExifIFD0Directory.TAG_ORIENTATION, 1); + } + } + } catch (ImageProcessingException | IOException | MetadataException e) { + throw new ImageMutationFailedException("failed to fix orientation", e); + } + } + + public void cropToPreview(double previewRatio) throws IllegalArgumentException { + int pictureWidth = getWidth(), pictureHeight = getHeight(); + int targetPictureWidth, targetPictureHeight; + + if (previewRatio * pictureHeight > pictureWidth) { + targetPictureWidth = pictureWidth; + targetPictureHeight = (int) (pictureWidth / previewRatio); + } else { + targetPictureHeight = pictureHeight; + targetPictureWidth = (int) (pictureHeight * previewRatio); + } + this.currentRepresentation = Bitmap.createBitmap( + this.currentRepresentation, + (pictureWidth - targetPictureWidth) / 2, + (pictureHeight - targetPictureHeight) / 2, + targetPictureWidth, + targetPictureHeight); + } + + //see http://www.impulseadventure.com/photo/exif-orientation.html + private void rotate(int exifOrientation) throws ImageMutationFailedException { + final Matrix bitmapMatrix = new Matrix(); + switch (exifOrientation) { + case 1: + return;//no rotation required + case 2: + bitmapMatrix.postScale(-1, 1); + break; + case 3: + bitmapMatrix.postRotate(180); + break; + case 4: + bitmapMatrix.postRotate(180); + bitmapMatrix.postScale(-1, 1); + break; + case 5: + bitmapMatrix.postRotate(90); + bitmapMatrix.postScale(-1, 1); + break; + case 6: + bitmapMatrix.postRotate(90); + break; + case 7: + bitmapMatrix.postRotate(270); + bitmapMatrix.postScale(-1, 1); + break; + case 8: + bitmapMatrix.postRotate(270); + break; + default: + break; + } + + Bitmap transformedBitmap = Bitmap.createBitmap( + currentRepresentation, + 0, + 0, + getWidth(), + getHeight(), + bitmapMatrix, + false + ); + + if (transformedBitmap == null) + throw new ImageMutationFailedException("failed to rotate"); + + this.currentRepresentation = transformedBitmap; + this.hasBeenReoriented = true; + } + + private static Bitmap toBitmap(byte[] data) { + try { + ByteArrayInputStream inputStream = new ByteArrayInputStream(data); + Bitmap photo = BitmapFactory.decodeStream(inputStream); + inputStream.close(); + return photo; + } catch (IOException e) { + throw new IllegalStateException("Will not happen", e); + } + } + + public String toBase64(int jpegQualityPercent) { + return Base64.encodeToString(toJpeg(currentRepresentation, jpegQualityPercent), Base64.NO_WRAP); + } + + public void writeDataToFile(File file, ReadableMap options, int jpegQualityPercent) throws IOException { + FileOutputStream fos = new FileOutputStream(file); + fos.write(toJpeg(currentRepresentation, jpegQualityPercent)); + fos.close(); + + try { + ExifInterface exif = new ExifInterface(file.getAbsolutePath()); + + // copy original exif data to the output exif... + for (Directory directory : originalImageMetaData().getDirectories()) { + for (Tag tag : directory.getTags()) { + int tagType = tag.getTagType(); + Object object = directory.getObject(tagType); + exif.setAttribute(tag.getTagName(), object.toString()); + } + } + + // Add missing exif data from a sub directory + ExifSubIFDDirectory directory = originalImageMetaData() + .getFirstDirectoryOfType(ExifSubIFDDirectory.class); + for (Tag tag : directory.getTags()) { + int tagType = tag.getTagType(); + // As some of exif data does not follow naming of the ExifInterface the names need + // to be transformed into Upper camel case format. + String tagName = tag.getTagName().replaceAll(" ", ""); + Object object = directory.getObject(tagType); + if (tagName.equals(ExifInterface.TAG_EXPOSURE_TIME)) { + exif.setAttribute(tagName, convertExposureTimeToDoubleFormat(object.toString())); + } else { + exif.setAttribute(tagName, object.toString()); + } + } + + writeLocationExifData(options, exif); + + if(hasBeenReoriented) + rewriteOrientation(exif); + + exif.saveAttributes(); + } catch (ImageProcessingException | IOException e) { + Log.e(TAG, "failed to save exif data", e); + } + } + + // Reformats exposure time value to match ExifInterface format. Example 1/11 -> 0.0909 + // Even the value is formatted as double it is returned as a String because exif.setAttribute requires it. + private String convertExposureTimeToDoubleFormat(String exposureTime) { + if(!exposureTime.contains("/")) + return ""; + + String exposureFractions[]= exposureTime.split("/"); + double divider = Double.parseDouble(exposureFractions[1]); + double exposureTimeAsDouble = 1.0f / divider; + return Double.toString(exposureTimeAsDouble); + } + + private void rewriteOrientation(ExifInterface exif) { + exif.setAttribute(ExifInterface.TAG_ORIENTATION, String.valueOf(ExifInterface.ORIENTATION_NORMAL)); + } + + private void writeLocationExifData(ReadableMap options, ExifInterface exif) { + if(!options.hasKey("metadata")) + return; + + ReadableMap metadata = options.getMap("metadata"); + if (!metadata.hasKey("location")) + return; + + ReadableMap location = metadata.getMap("location"); + if(!location.hasKey("coords")) + return; + + try { + ReadableMap coords = location.getMap("coords"); + double latitude = coords.getDouble("latitude"); + double longitude = coords.getDouble("longitude"); + + GPS.writeExifData(latitude, longitude, exif); + } catch (IOException e) { + Log.e(TAG, "Couldn't write location data", e); + } + } + + private Metadata originalImageMetaData() throws ImageProcessingException, IOException { + if(this.originalImageMetaData == null) {//this is expensive, don't do it more than once + originalImageMetaData = ImageMetadataReader.readMetadata( + new BufferedInputStream(new ByteArrayInputStream(originalImageData)), + originalImageData.length + ); + } + return originalImageMetaData; + } + + private static byte[] toJpeg(Bitmap bitmap, int quality) throws OutOfMemoryError { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream); + + try { + return outputStream.toByteArray(); + } finally { + try { + outputStream.close(); + } catch (IOException e) { + Log.e(TAG, "problem compressing jpeg", e); + } + } + } + + public static class ImageMutationFailedException extends Exception { + public ImageMutationFailedException(String detailMessage, Throwable throwable) { + super(detailMessage, throwable); + } + + public ImageMutationFailedException(String detailMessage) { + super(detailMessage); + } + } + + private static class GPS { + public static void writeExifData(double latitude, double longitude, ExifInterface exif) throws IOException { + exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE, toDegreeMinuteSecods(latitude)); + exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE_REF, latitudeRef(latitude)); + exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, toDegreeMinuteSecods(longitude)); + exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF, longitudeRef(longitude)); + } + + private static String latitudeRef(double latitude) { + return latitude < 0.0d ? "S" : "N"; + } + + private static String longitudeRef(double longitude) { + return longitude < 0.0d ? "W" : "E"; + } + + private static String toDegreeMinuteSecods(double latitude) { + latitude = Math.abs(latitude); + int degree = (int) latitude; + latitude *= 60; + latitude -= (degree * 60.0d); + int minute = (int) latitude; + latitude *= 60; + latitude -= (minute * 60.0d); + int second = (int) (latitude * 1000.0d); + + StringBuffer sb = new StringBuffer(); + sb.append(degree); + sb.append("/1,"); + sb.append(minute); + sb.append("/1,"); + sb.append(second); + sb.append("/1000,"); + return sb.toString(); + } + } +} diff --git a/android/src/main/java/com/lwansbrough/RCTCamera/RCTCamera.java b/android/src/main/java/com/lwansbrough/RCTCamera/RCTCamera.java new file mode 100644 index 0000000..96ff741 --- /dev/null +++ b/android/src/main/java/com/lwansbrough/RCTCamera/RCTCamera.java @@ -0,0 +1,536 @@ +/** + * Created by Fabrice Armisen (farmisen@gmail.com) on 1/4/16. + */ + +package com.lwansbrough.RCTCamera; + +import android.graphics.drawable.GradientDrawable; +import android.hardware.Camera; +import android.media.CamcorderProfile; +import android.util.Log; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.lang.Math; + +public class RCTCamera { + private static RCTCamera ourInstance; + private final HashMap _cameraInfos; + private final HashMap _cameraTypeToIndex; + private final Map _cameras; + private static final Resolution RESOLUTION_480P = new Resolution(853, 480); // 480p shoots for a 16:9 HD aspect ratio, but can otherwise fall back/down to any other supported camera sizes, such as 800x480 or 720x480, if (any) present. See getSupportedPictureSizes/getSupportedVideoSizes below. + private static final Resolution RESOLUTION_720P = new Resolution(1280, 720); + private static final Resolution RESOLUTION_1080P = new Resolution(1920, 1080); + private boolean _barcodeScannerEnabled = false; + private List _barCodeTypes = null; + private int _orientation = -1; + private int _actualDeviceOrientation = 0; + private int _adjustedDeviceOrientation = 0; + + public static RCTCamera getInstance() { + return ourInstance; + } + public static void createInstance(int deviceOrientation) { + ourInstance = new RCTCamera(deviceOrientation); + } + + + public synchronized Camera acquireCameraInstance(int type) { + if (null == _cameras.get(type) && null != _cameraTypeToIndex.get(type)) { + try { + Camera camera = Camera.open(_cameraTypeToIndex.get(type)); + _cameras.put(type, camera); + adjustPreviewLayout(type); + } catch (Exception e) { + Log.e("RCTCamera", "acquireCameraInstance failed", e); + } + } + return _cameras.get(type); + } + + public void releaseCameraInstance(int type) { + // Release seems async and creates race conditions. Remove from map first before releasing. + Camera releasingCamera = _cameras.get(type); + if (null != releasingCamera) { + _cameras.remove(type); + releasingCamera.release(); + } + } + + public int getPreviewWidth(int type) { + CameraInfoWrapper cameraInfo = _cameraInfos.get(type); + if (null == cameraInfo) { + return 0; + } + return cameraInfo.previewWidth; + } + + public int getPreviewHeight(int type) { + CameraInfoWrapper cameraInfo = _cameraInfos.get(type); + if (null == cameraInfo) { + return 0; + } + return cameraInfo.previewHeight; + } + + public int getPreviewVisibleHeight(int type) { + CameraInfoWrapper cameraInfo = _cameraInfos.get(type); + if (null == cameraInfo) { + return 0; + } + return cameraInfo.previewVisibleHeight; + } + + public int getPreviewVisibleWidth(int type) { + CameraInfoWrapper cameraInfo = _cameraInfos.get(type); + if (null == cameraInfo) { + return 0; + } + return cameraInfo.previewVisibleWidth; + } + + public Camera.Size getBestSize(List supportedSizes, int maxWidth, int maxHeight) { + Camera.Size bestSize = null; + for (Camera.Size size : supportedSizes) { + if (size.width > maxWidth || size.height > maxHeight) { + continue; + } + + if (bestSize == null) { + bestSize = size; + continue; + } + + int resultArea = bestSize.width * bestSize.height; + int newArea = size.width * size.height; + + if (newArea > resultArea) { + bestSize = size; + } + } + + return bestSize; + } + + private Camera.Size getSmallestSize(List supportedSizes) { + Camera.Size smallestSize = null; + for (Camera.Size size : supportedSizes) { + if (smallestSize == null) { + smallestSize = size; + continue; + } + + int resultArea = smallestSize.width * smallestSize.height; + int newArea = size.width * size.height; + + if (newArea < resultArea) { + smallestSize = size; + } + } + + return smallestSize; + } + + private Camera.Size getClosestSize(List supportedSizes, int matchWidth, int matchHeight) { + Camera.Size closestSize = null; + for (Camera.Size size : supportedSizes) { + if (closestSize == null) { + closestSize = size; + continue; + } + + double currentDelta = Math.sqrt(Math.pow(closestSize.width - matchWidth,2) + Math.pow(closestSize.height - matchHeight,2)); + double newDelta = Math.sqrt(Math.pow(size.width - matchWidth,2) + Math.pow(size.height - matchHeight,2)); + + if (newDelta < currentDelta) { + closestSize = size; + } + } + return closestSize; + } + + protected List getSupportedVideoSizes(Camera camera) { + Camera.Parameters params = camera.getParameters(); + // defer to preview instead of params.getSupportedVideoSizes() http://bit.ly/1rxOsq0 + // but prefer SupportedVideoSizes! + List sizes = params.getSupportedVideoSizes(); + if (sizes != null) { + return sizes; + } + + // Video sizes may be null, which indicates that all the supported + // preview sizes are supported for video recording. + return params.getSupportedPreviewSizes(); + } + + public int getOrientation() { + return _orientation; + } + + public void setOrientation(int orientation) { + if (_orientation == orientation) { + return; + } + _orientation = orientation; + adjustPreviewLayout(RCTCameraModule.RCT_CAMERA_TYPE_FRONT); + adjustPreviewLayout(RCTCameraModule.RCT_CAMERA_TYPE_BACK); + } + + public boolean isBarcodeScannerEnabled() { + return _barcodeScannerEnabled; + } + + public void setBarcodeScannerEnabled(boolean barcodeScannerEnabled) { + _barcodeScannerEnabled = barcodeScannerEnabled; + } + + public List getBarCodeTypes() { + return _barCodeTypes; + } + + public void setBarCodeTypes(List barCodeTypes) { + _barCodeTypes = barCodeTypes; + } + + public int getActualDeviceOrientation() { + return _actualDeviceOrientation; + } + + public void setAdjustedDeviceOrientation(int orientation) { + _adjustedDeviceOrientation = orientation; + } + + public int getAdjustedDeviceOrientation() { + return _adjustedDeviceOrientation; + } + + public void setActualDeviceOrientation(int actualDeviceOrientation) { + _actualDeviceOrientation = actualDeviceOrientation; + adjustPreviewLayout(RCTCameraModule.RCT_CAMERA_TYPE_FRONT); + adjustPreviewLayout(RCTCameraModule.RCT_CAMERA_TYPE_BACK); + } + + public void setCaptureMode(final int cameraType, final int captureMode) { + Camera camera = _cameras.get(cameraType); + if (camera == null) { + return; + } + + // Set (video) recording hint based on camera type. For video recording, setting + // this hint can help reduce the time it takes to start recording. + Camera.Parameters parameters = camera.getParameters(); + parameters.setRecordingHint(captureMode == RCTCameraModule.RCT_CAMERA_CAPTURE_MODE_VIDEO); + try{ + camera.setParameters(parameters); + } + catch(RuntimeException e ) { + Log.e("RCTCamera", "setParameters failed", e); + } + } + + public void setCaptureQuality(int cameraType, String captureQuality) { + Camera camera = this.acquireCameraInstance(cameraType); + if (camera == null) { + return; + } + + Camera.Parameters parameters = camera.getParameters(); + Camera.Size pictureSize = null; + List supportedSizes = parameters.getSupportedPictureSizes(); + switch (captureQuality) { + case RCTCameraModule.RCT_CAMERA_CAPTURE_QUALITY_LOW: + pictureSize = getSmallestSize(supportedSizes); + break; + case RCTCameraModule.RCT_CAMERA_CAPTURE_QUALITY_MEDIUM: + pictureSize = supportedSizes.get(supportedSizes.size() / 2); + break; + case RCTCameraModule.RCT_CAMERA_CAPTURE_QUALITY_HIGH: + pictureSize = getBestSize(parameters.getSupportedPictureSizes(), Integer.MAX_VALUE, Integer.MAX_VALUE); + break; + case RCTCameraModule.RCT_CAMERA_CAPTURE_QUALITY_PREVIEW: + Camera.Size optimalPreviewSize = getBestSize(parameters.getSupportedPreviewSizes(), Integer.MAX_VALUE, Integer.MAX_VALUE); + pictureSize = getClosestSize(parameters.getSupportedPictureSizes(), optimalPreviewSize.width, optimalPreviewSize.height); + break; + case RCTCameraModule.RCT_CAMERA_CAPTURE_QUALITY_480P: + pictureSize = getBestSize(supportedSizes, RESOLUTION_480P.width, RESOLUTION_480P.height); + break; + case RCTCameraModule.RCT_CAMERA_CAPTURE_QUALITY_720P: + pictureSize = getBestSize(supportedSizes, RESOLUTION_720P.width, RESOLUTION_720P.height); + break; + case RCTCameraModule.RCT_CAMERA_CAPTURE_QUALITY_1080P: + pictureSize = getBestSize(supportedSizes, RESOLUTION_1080P.width, RESOLUTION_1080P.height); + break; + } + + if (pictureSize != null) { + parameters.setPictureSize(pictureSize.width, pictureSize.height); + try{ + camera.setParameters(parameters); + } + catch(RuntimeException e ) { + Log.e("RCTCamera", "setParameters failed", e); + } + } + } + + public CamcorderProfile setCaptureVideoQuality(int cameraType, String captureQuality) { + Camera camera = this.acquireCameraInstance(cameraType); + if (camera == null) { + return null; + } + + Camera.Size videoSize = null; + List supportedSizes = getSupportedVideoSizes(camera); + CamcorderProfile cm = null; + switch (captureQuality) { + case RCTCameraModule.RCT_CAMERA_CAPTURE_QUALITY_LOW: + videoSize = getSmallestSize(supportedSizes); + cm = CamcorderProfile.get(_cameraTypeToIndex.get(cameraType), CamcorderProfile.QUALITY_480P); + break; + case RCTCameraModule.RCT_CAMERA_CAPTURE_QUALITY_MEDIUM: + videoSize = supportedSizes.get(supportedSizes.size() / 2); + cm = CamcorderProfile.get(_cameraTypeToIndex.get(cameraType), CamcorderProfile.QUALITY_720P); + break; + case RCTCameraModule.RCT_CAMERA_CAPTURE_QUALITY_HIGH: + videoSize = getBestSize(supportedSizes, Integer.MAX_VALUE, Integer.MAX_VALUE); + cm = CamcorderProfile.get(_cameraTypeToIndex.get(cameraType), CamcorderProfile.QUALITY_HIGH); + break; + case RCTCameraModule.RCT_CAMERA_CAPTURE_QUALITY_480P: + videoSize = getBestSize(supportedSizes, RESOLUTION_480P.width, RESOLUTION_480P.height); + cm = CamcorderProfile.get(_cameraTypeToIndex.get(cameraType), CamcorderProfile.QUALITY_480P); + break; + case RCTCameraModule.RCT_CAMERA_CAPTURE_QUALITY_720P: + videoSize = getBestSize(supportedSizes, RESOLUTION_720P.width, RESOLUTION_720P.height); + cm = CamcorderProfile.get(_cameraTypeToIndex.get(cameraType), CamcorderProfile.QUALITY_720P); + break; + case RCTCameraModule.RCT_CAMERA_CAPTURE_QUALITY_1080P: + videoSize = getBestSize(supportedSizes, RESOLUTION_1080P.width, RESOLUTION_1080P.height); + cm = CamcorderProfile.get(_cameraTypeToIndex.get(cameraType), CamcorderProfile.QUALITY_1080P); + break; + } + + if (cm == null){ + return null; + } + + if (videoSize != null) { + cm.videoFrameHeight = videoSize.height; + cm.videoFrameWidth = videoSize.width; + } + + return cm; + } + + public void setTorchMode(int cameraType, int torchMode) { + Camera camera = this.acquireCameraInstance(cameraType); + if (null == camera) { + return; + } + + Camera.Parameters parameters = camera.getParameters(); + String value = parameters.getFlashMode(); + switch (torchMode) { + case RCTCameraModule.RCT_CAMERA_TORCH_MODE_ON: + value = Camera.Parameters.FLASH_MODE_TORCH; + break; + case RCTCameraModule.RCT_CAMERA_TORCH_MODE_OFF: + value = Camera.Parameters.FLASH_MODE_OFF; + break; + } + + List flashModes = parameters.getSupportedFlashModes(); + if (flashModes != null && flashModes.contains(value)) { + parameters.setFlashMode(value); + try{ + camera.setParameters(parameters); + } + catch(RuntimeException e ) { + Log.e("RCTCamera", "setParameters failed", e); + } + } + } + + public void setFlashMode(int cameraType, int flashMode) { + Camera camera = this.acquireCameraInstance(cameraType); + if (null == camera) { + return; + } + + Camera.Parameters parameters = camera.getParameters(); + String value = parameters.getFlashMode(); + switch (flashMode) { + case RCTCameraModule.RCT_CAMERA_FLASH_MODE_AUTO: + value = Camera.Parameters.FLASH_MODE_AUTO; + break; + case RCTCameraModule.RCT_CAMERA_FLASH_MODE_ON: + value = Camera.Parameters.FLASH_MODE_ON; + break; + case RCTCameraModule.RCT_CAMERA_FLASH_MODE_OFF: + value = Camera.Parameters.FLASH_MODE_OFF; + break; + } + List flashModes = parameters.getSupportedFlashModes(); + if (flashModes != null && flashModes.contains(value)) { + parameters.setFlashMode(value); + try{ + camera.setParameters(parameters); + } + catch(RuntimeException e ) { + Log.e("RCTCamera", "setParameters failed", e); + } + } + } + + public void setZoom(int cameraType, int zoom) { + Camera camera = this.acquireCameraInstance(cameraType); + if (null == camera) { + return; + } + + Camera.Parameters parameters = camera.getParameters(); + int maxZoom = parameters.getMaxZoom(); + if (parameters.isZoomSupported()) { + if (zoom >=0 && zoom < maxZoom) { + parameters.setZoom(zoom); + try{ + camera.setParameters(parameters); + } + catch(RuntimeException e ) { + Log.e("RCTCamera", "setParameters failed", e); + } + } + } + } + + public void adjustCameraRotationToDeviceOrientation(int type, int deviceOrientation) { + Camera camera = _cameras.get(type); + if (null == camera) { + return; + } + + CameraInfoWrapper cameraInfo = _cameraInfos.get(type); + int rotation; + int orientation = cameraInfo.info.orientation; + if (cameraInfo.info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { + rotation = (orientation + deviceOrientation * 90) % 360; + } else { + rotation = (orientation - deviceOrientation * 90 + 360) % 360; + } + cameraInfo.rotation = rotation; + Camera.Parameters parameters = camera.getParameters(); + parameters.setRotation(cameraInfo.rotation); + + try { + camera.setParameters(parameters); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void adjustPreviewLayout(int type) { + Camera camera = _cameras.get(type); + if (null == camera) { + return; + } + + CameraInfoWrapper cameraInfo = _cameraInfos.get(type); + int displayRotation; + int rotation; + int orientation = cameraInfo.info.orientation; + if (cameraInfo.info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { + rotation = (orientation + _actualDeviceOrientation * 90) % 360; + displayRotation = (720 - orientation - _actualDeviceOrientation * 90) % 360; + } else { + rotation = (orientation - _actualDeviceOrientation * 90 + 360) % 360; + displayRotation = rotation; + } + cameraInfo.rotation = rotation; + // TODO: take in account the _orientation prop + + setAdjustedDeviceOrientation(rotation); + camera.setDisplayOrientation(displayRotation); + + Camera.Parameters parameters = camera.getParameters(); + parameters.setRotation(cameraInfo.rotation); + + // set preview size + // defaults to highest resolution available + Camera.Size optimalPreviewSize = getBestSize(parameters.getSupportedPreviewSizes(), Integer.MAX_VALUE, Integer.MAX_VALUE); + int width = optimalPreviewSize.width; + int height = optimalPreviewSize.height; + + parameters.setPreviewSize(width, height); + try { + camera.setParameters(parameters); + } catch (Exception e) { + e.printStackTrace(); + } + + if (cameraInfo.rotation == 0 || cameraInfo.rotation == 180) { + cameraInfo.previewWidth = width; + cameraInfo.previewHeight = height; + } else { + cameraInfo.previewWidth = height; + cameraInfo.previewHeight = width; + } + } + + public void setPreviewVisibleSize(int type, int width, int height) { + CameraInfoWrapper cameraInfo = _cameraInfos.get(type); + if (cameraInfo == null) { + return; + } + + cameraInfo.previewVisibleWidth = width; + cameraInfo.previewVisibleHeight = height; + } + + private RCTCamera(int deviceOrientation) { + _cameras = new HashMap<>(); + _cameraInfos = new HashMap<>(); + _cameraTypeToIndex = new HashMap<>(); + + _actualDeviceOrientation = deviceOrientation; + + // map camera types to camera indexes and collect cameras properties + for (int i = 0; i < Camera.getNumberOfCameras(); i++) { + Camera.CameraInfo info = new Camera.CameraInfo(); + Camera.getCameraInfo(i, info); + if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT && _cameraInfos.get(RCTCameraModule.RCT_CAMERA_TYPE_FRONT) == null) { + _cameraInfos.put(RCTCameraModule.RCT_CAMERA_TYPE_FRONT, new CameraInfoWrapper(info)); + _cameraTypeToIndex.put(RCTCameraModule.RCT_CAMERA_TYPE_FRONT, i); + acquireCameraInstance(RCTCameraModule.RCT_CAMERA_TYPE_FRONT); + releaseCameraInstance(RCTCameraModule.RCT_CAMERA_TYPE_FRONT); + } else if (info.facing == Camera.CameraInfo.CAMERA_FACING_BACK && _cameraInfos.get(RCTCameraModule.RCT_CAMERA_TYPE_BACK) == null) { + _cameraInfos.put(RCTCameraModule.RCT_CAMERA_TYPE_BACK, new CameraInfoWrapper(info)); + _cameraTypeToIndex.put(RCTCameraModule.RCT_CAMERA_TYPE_BACK, i); + acquireCameraInstance(RCTCameraModule.RCT_CAMERA_TYPE_BACK); + releaseCameraInstance(RCTCameraModule.RCT_CAMERA_TYPE_BACK); + } + } + } + + private class CameraInfoWrapper { + public final Camera.CameraInfo info; + public int rotation = 0; + public int previewWidth = -1; + public int previewHeight = -1; + public int previewVisibleWidth = -1; + public int previewVisibleHeight = -1; + + public CameraInfoWrapper(Camera.CameraInfo info) { + this.info = info; + } + } + + private static class Resolution { + public int width; + public int height; + + public Resolution(final int width, final int height) { + this.width = width; + this.height = height; + } + } +} diff --git a/android/src/main/java/com/lwansbrough/RCTCamera/RCTCameraModule.java b/android/src/main/java/com/lwansbrough/RCTCamera/RCTCameraModule.java new file mode 100644 index 0000000..d5a8a3d --- /dev/null +++ b/android/src/main/java/com/lwansbrough/RCTCamera/RCTCameraModule.java @@ -0,0 +1,871 @@ +/** + * Created by Fabrice Armisen (farmisen@gmail.com) on 1/4/16. + * Android video recording support by Marc Johnson (me@marc.mn) 4/2016 + */ + +package com.lwansbrough.RCTCamera; + +import android.content.ContentValues; +import android.content.res.Configuration; +import android.hardware.Camera; +import android.media.*; +import android.net.Uri; +import android.os.AsyncTask; +import android.os.Environment; +import android.provider.MediaStore; +import android.util.Base64; +import android.util.Log; +import android.view.Surface; + +import com.facebook.react.bridge.LifecycleEventListener; +import com.facebook.react.bridge.Promise; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.ReadableMap; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.bridge.WritableNativeMap; + +import java.io.*; +import java.text.SimpleDateFormat; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Nullable; + +public class RCTCameraModule extends ReactContextBaseJavaModule + implements MediaRecorder.OnInfoListener, MediaRecorder.OnErrorListener, LifecycleEventListener { + private static final String TAG = "RCTCameraModule"; + + public static final int RCT_CAMERA_ASPECT_FILL = 0; + public static final int RCT_CAMERA_ASPECT_FIT = 1; + public static final int RCT_CAMERA_ASPECT_STRETCH = 2; + public static final int RCT_CAMERA_CAPTURE_MODE_STILL = 0; + public static final int RCT_CAMERA_CAPTURE_MODE_VIDEO = 1; + public static final int RCT_CAMERA_CAPTURE_TARGET_MEMORY = 0; + public static final int RCT_CAMERA_CAPTURE_TARGET_DISK = 1; + public static final int RCT_CAMERA_CAPTURE_TARGET_CAMERA_ROLL = 2; + public static final int RCT_CAMERA_CAPTURE_TARGET_TEMP = 3; + public static final int RCT_CAMERA_ORIENTATION_AUTO = Integer.MAX_VALUE; + public static final int RCT_CAMERA_ORIENTATION_PORTRAIT = Surface.ROTATION_0; + public static final int RCT_CAMERA_ORIENTATION_PORTRAIT_UPSIDE_DOWN = Surface.ROTATION_180; + public static final int RCT_CAMERA_ORIENTATION_LANDSCAPE_LEFT = Surface.ROTATION_90; + public static final int RCT_CAMERA_ORIENTATION_LANDSCAPE_RIGHT = Surface.ROTATION_270; + public static final int RCT_CAMERA_TYPE_FRONT = 1; + public static final int RCT_CAMERA_TYPE_BACK = 2; + public static final int RCT_CAMERA_FLASH_MODE_OFF = 0; + public static final int RCT_CAMERA_FLASH_MODE_ON = 1; + public static final int RCT_CAMERA_FLASH_MODE_AUTO = 2; + public static final int RCT_CAMERA_TORCH_MODE_OFF = 0; + public static final int RCT_CAMERA_TORCH_MODE_ON = 1; + public static final int RCT_CAMERA_TORCH_MODE_AUTO = 2; + public static final String RCT_CAMERA_CAPTURE_QUALITY_PREVIEW = "preview"; + public static final String RCT_CAMERA_CAPTURE_QUALITY_HIGH = "high"; + public static final String RCT_CAMERA_CAPTURE_QUALITY_MEDIUM = "medium"; + public static final String RCT_CAMERA_CAPTURE_QUALITY_LOW = "low"; + public static final String RCT_CAMERA_CAPTURE_QUALITY_1080P = "1080p"; + public static final String RCT_CAMERA_CAPTURE_QUALITY_720P = "720p"; + public static final String RCT_CAMERA_CAPTURE_QUALITY_480P = "480p"; + public static final int MEDIA_TYPE_IMAGE = 1; + public static final int MEDIA_TYPE_VIDEO = 2; + + private static ReactApplicationContext _reactContext; + private RCTSensorOrientationChecker _sensorOrientationChecker; + + private MediaRecorder mMediaRecorder; + private long MRStartTime; + private File mVideoFile; + private Camera mCamera = null; + private Promise mRecordingPromise = null; + private ReadableMap mRecordingOptions; + private Boolean mSafeToCapture = true; + + public RCTCameraModule(ReactApplicationContext reactContext) { + super(reactContext); + _reactContext = reactContext; + _sensorOrientationChecker = new RCTSensorOrientationChecker(_reactContext); + _reactContext.addLifecycleEventListener(this); + } + + public static ReactApplicationContext getReactContextSingleton() { + return _reactContext; + } + + /** + * Callback invoked on new MediaRecorder info. + * + * See https://developer.android.com/reference/android/media/MediaRecorder.OnInfoListener.html + * for more information. + * + * @param mr MediaRecorder instance for which this callback is being invoked. + * @param what Type of info we have received. + * @param extra Extra code, specific to the info type. + */ + public void onInfo(MediaRecorder mr, int what, int extra) { + if ( what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED || + what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED) { + if (mRecordingPromise != null) { + releaseMediaRecorder(); // release the MediaRecorder object and resolve promise + } + } + } + + /** + * Callback invoked when a MediaRecorder instance encounters an error while recording. + * + * See https://developer.android.com/reference/android/media/MediaRecorder.OnErrorListener.html + * for more information. + * + * @param mr MediaRecorder instance for which this callback is being invoked. + * @param what Type of error that has occurred. + * @param extra Extra code, specific to the error type. + */ + public void onError(MediaRecorder mr, int what, int extra) { + // On any error, release the MediaRecorder object and resolve promise. In particular, this + // prevents leaving the camera in an unrecoverable state if we crash in the middle of + // recording. + if (mRecordingPromise != null) { + releaseMediaRecorder(); + } + } + + @Override + public String getName() { + return "RCTCameraModule"; + } + + @Nullable + @Override + public Map getConstants() { + return Collections.unmodifiableMap(new HashMap() { + { + put("Aspect", getAspectConstants()); + put("BarCodeType", getBarCodeConstants()); + put("Type", getTypeConstants()); + put("CaptureQuality", getCaptureQualityConstants()); + put("CaptureMode", getCaptureModeConstants()); + put("CaptureTarget", getCaptureTargetConstants()); + put("Orientation", getOrientationConstants()); + put("FlashMode", getFlashModeConstants()); + put("TorchMode", getTorchModeConstants()); + } + + private Map getAspectConstants() { + return Collections.unmodifiableMap(new HashMap() { + { + put("stretch", RCT_CAMERA_ASPECT_STRETCH); + put("fit", RCT_CAMERA_ASPECT_FIT); + put("fill", RCT_CAMERA_ASPECT_FILL); + } + }); + } + + private Map getBarCodeConstants() { + return Collections.unmodifiableMap(new HashMap() { + { + // @TODO add barcode types + } + }); + } + + private Map getTypeConstants() { + return Collections.unmodifiableMap(new HashMap() { + { + put("front", RCT_CAMERA_TYPE_FRONT); + put("back", RCT_CAMERA_TYPE_BACK); + } + }); + } + + private Map getCaptureQualityConstants() { + return Collections.unmodifiableMap(new HashMap() { + { + put("low", RCT_CAMERA_CAPTURE_QUALITY_LOW); + put("medium", RCT_CAMERA_CAPTURE_QUALITY_MEDIUM); + put("high", RCT_CAMERA_CAPTURE_QUALITY_HIGH); + put("photo", RCT_CAMERA_CAPTURE_QUALITY_HIGH); + put("preview", RCT_CAMERA_CAPTURE_QUALITY_PREVIEW); + put("480p", RCT_CAMERA_CAPTURE_QUALITY_480P); + put("720p", RCT_CAMERA_CAPTURE_QUALITY_720P); + put("1080p", RCT_CAMERA_CAPTURE_QUALITY_1080P); + } + }); + } + + private Map getCaptureModeConstants() { + return Collections.unmodifiableMap(new HashMap() { + { + put("still", RCT_CAMERA_CAPTURE_MODE_STILL); + put("video", RCT_CAMERA_CAPTURE_MODE_VIDEO); + } + }); + } + + private Map getCaptureTargetConstants() { + return Collections.unmodifiableMap(new HashMap() { + { + put("memory", RCT_CAMERA_CAPTURE_TARGET_MEMORY); + put("disk", RCT_CAMERA_CAPTURE_TARGET_DISK); + put("cameraRoll", RCT_CAMERA_CAPTURE_TARGET_CAMERA_ROLL); + put("temp", RCT_CAMERA_CAPTURE_TARGET_TEMP); + } + }); + } + + private Map getOrientationConstants() { + return Collections.unmodifiableMap(new HashMap() { + { + put("auto", RCT_CAMERA_ORIENTATION_AUTO); + put("landscapeLeft", RCT_CAMERA_ORIENTATION_LANDSCAPE_LEFT); + put("landscapeRight", RCT_CAMERA_ORIENTATION_LANDSCAPE_RIGHT); + put("portrait", RCT_CAMERA_ORIENTATION_PORTRAIT); + put("portraitUpsideDown", RCT_CAMERA_ORIENTATION_PORTRAIT_UPSIDE_DOWN); + } + }); + } + + private Map getFlashModeConstants() { + return Collections.unmodifiableMap(new HashMap() { + { + put("off", RCT_CAMERA_FLASH_MODE_OFF); + put("on", RCT_CAMERA_FLASH_MODE_ON); + put("auto", RCT_CAMERA_FLASH_MODE_AUTO); + } + }); + } + + private Map getTorchModeConstants() { + return Collections.unmodifiableMap(new HashMap() { + { + put("off", RCT_CAMERA_TORCH_MODE_OFF); + put("on", RCT_CAMERA_TORCH_MODE_ON); + put("auto", RCT_CAMERA_TORCH_MODE_AUTO); + } + }); + } + }); + } + + /** + * Prepare media recorder for video capture. + * + * See "Capturing Videos" at https://developer.android.com/guide/topics/media/camera.html for + * a guideline of steps and more information in general. + * + * @param options Options. + * @return Throwable; null if no errors. + */ + private Throwable prepareMediaRecorder(ReadableMap options, int deviceOrientation) { + // Prepare CamcorderProfile instance, setting essential options. + CamcorderProfile cm = RCTCamera.getInstance().setCaptureVideoQuality(options.getInt("type"), options.getString("quality")); + if (cm == null) { + return new RuntimeException("CamcorderProfile not found in prepareMediaRecorder."); + } + + // Unlock camera to make available for MediaRecorder. Note that this statement must be + // executed before calling setCamera when configuring the MediaRecorder instance. + mCamera.unlock(); + + // Create new MediaRecorder instance. + mMediaRecorder = new MediaRecorder(); + + // Attach callback to handle maxDuration (@see onInfo method in this file). + mMediaRecorder.setOnInfoListener(this); + // Attach error listener (@see onError method in this file). + mMediaRecorder.setOnErrorListener(this); + + // Set camera. + mMediaRecorder.setCamera(mCamera); + + // Set AV sources. + mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); + mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); + + // Adjust for orientation. + // mMediaRecorder.setOrientationHint(RCTCamera.getInstance().getAdjustedDeviceOrientation()); + switch (deviceOrientation) { + case 0: mMediaRecorder.setOrientationHint(90); + break; + case 1: mMediaRecorder.setOrientationHint(0); + break; + case 2: mMediaRecorder.setOrientationHint(270); + break; + case 3: mMediaRecorder.setOrientationHint(180); + break; + } + + // Set video output format and encoding using CamcorderProfile. + cm.fileFormat = MediaRecorder.OutputFormat.MPEG_4; + mMediaRecorder.setProfile(cm); + + // Set video output file. + mVideoFile = null; + switch (options.getInt("target")) { + case RCT_CAMERA_CAPTURE_TARGET_MEMORY: + mVideoFile = getTempMediaFile(MEDIA_TYPE_VIDEO); // temporarily + break; + case RCT_CAMERA_CAPTURE_TARGET_CAMERA_ROLL: + mVideoFile = getOutputCameraRollFile(MEDIA_TYPE_VIDEO); + break; + case RCT_CAMERA_CAPTURE_TARGET_TEMP: + mVideoFile = getTempMediaFile(MEDIA_TYPE_VIDEO); + break; + default: + case RCT_CAMERA_CAPTURE_TARGET_DISK: + mVideoFile = getOutputMediaFile(MEDIA_TYPE_VIDEO); + break; + } + if (mVideoFile == null) { + return new RuntimeException("Error while preparing output file in prepareMediaRecorder."); + } + mMediaRecorder.setOutputFile(mVideoFile.getPath()); + + if (options.hasKey("totalSeconds")) { + int totalSeconds = options.getInt("totalSeconds"); + mMediaRecorder.setMaxDuration(totalSeconds * 1000); + } + + if (options.hasKey("maxFileSize")) { + int maxFileSize = options.getInt("maxFileSize"); + mMediaRecorder.setMaxFileSize(maxFileSize); + } + + // Prepare the MediaRecorder instance with the provided configuration settings. + try { + mMediaRecorder.prepare(); + } catch (Exception ex) { + Log.e(TAG, "Media recorder prepare error.", ex); + releaseMediaRecorder(); + return ex; + } + + return null; + } + + private void record(final ReadableMap options, final Promise promise, final int deviceOrientation) { + if (mRecordingPromise != null) { + return; + } + + mCamera = RCTCamera.getInstance().acquireCameraInstance(options.getInt("type")); + if (mCamera == null) { + promise.reject(new RuntimeException("No camera found.")); + return; + } + + Throwable prepareError = prepareMediaRecorder(options, deviceOrientation); + if (prepareError != null) { + promise.reject(prepareError); + return; + } + + try { + mMediaRecorder.start(); + MRStartTime = System.currentTimeMillis(); + mRecordingOptions = options; + mRecordingPromise = promise; // only got here if mediaRecorder started + } catch (Exception ex) { + Log.e(TAG, "Media recorder start error.", ex); + promise.reject(ex); + } + } + + /** + * Release media recorder following video capture (or failure to start recording session). + * + * See "Capturing Videos" at https://developer.android.com/guide/topics/media/camera.html for + * a guideline of steps and more information in general. + */ + private void releaseMediaRecorder() { + // Must record at least a second or MediaRecorder throws exceptions on some platforms + long duration = System.currentTimeMillis() - MRStartTime; + if (duration < 1500) { + try { + Thread.sleep(1500 - duration); + } catch(InterruptedException ex) { + Log.e(TAG, "releaseMediaRecorder thread sleep error.", ex); + } + } + + // Release actual MediaRecorder instance. + if (mMediaRecorder != null) { + // Stop recording video. + try { + mMediaRecorder.stop(); // stop the recording + } catch (RuntimeException ex) { + Log.e(TAG, "Media recorder stop error.", ex); + } + + // Optionally, remove the configuration settings from the recorder. + mMediaRecorder.reset(); + + // Release the MediaRecorder. + mMediaRecorder.release(); + + // Reset variable. + mMediaRecorder = null; + } + + // Lock the camera so that future MediaRecorder sessions can use it by calling + // Camera.lock(). Note this is not required on Android 4.0+ unless the + // MediaRecorder.prepare() call fails. + if (mCamera != null) { + mCamera.lock(); + } + + if (mRecordingPromise == null) { + return; + } + + File f = new File(mVideoFile.getPath()); + if (!f.exists()) { + mRecordingPromise.reject(new RuntimeException("There is nothing recorded.")); + mRecordingPromise = null; + return; + } + + f.setReadable(true, false); // so mediaplayer can play it + f.setWritable(true, false); // so can clean it up + + WritableMap response = new WritableNativeMap(); + switch (mRecordingOptions.getInt("target")) { + case RCT_CAMERA_CAPTURE_TARGET_MEMORY: + byte[] encoded = convertFileToByteArray(mVideoFile); + response.putString("data", new String(encoded, Base64.NO_WRAP)); + mRecordingPromise.resolve(response); + f.delete(); + break; + case RCT_CAMERA_CAPTURE_TARGET_CAMERA_ROLL: + ContentValues values = new ContentValues(); + values.put(MediaStore.Video.Media.DATA, mVideoFile.getPath()); + values.put(MediaStore.Video.Media.TITLE, mRecordingOptions.hasKey("title") ? mRecordingOptions.getString("title") : "video"); + + if (mRecordingOptions.hasKey("description")) { + values.put(MediaStore.Video.Media.DESCRIPTION, mRecordingOptions.hasKey("description")); + } + + if (mRecordingOptions.hasKey("latitude")) { + values.put(MediaStore.Video.Media.LATITUDE, mRecordingOptions.getString("latitude")); + } + + if (mRecordingOptions.hasKey("longitude")) { + values.put(MediaStore.Video.Media.LONGITUDE, mRecordingOptions.getString("longitude")); + } + + values.put(MediaStore.Video.Media.MIME_TYPE, "video/mp4"); + _reactContext.getContentResolver().insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values); + addToMediaStore(mVideoFile.getAbsolutePath()); + response.putString("path", Uri.fromFile(mVideoFile).toString()); + mRecordingPromise.resolve(response); + break; + case RCT_CAMERA_CAPTURE_TARGET_TEMP: + case RCT_CAMERA_CAPTURE_TARGET_DISK: + response.putString("path", Uri.fromFile(mVideoFile).toString()); + mRecordingPromise.resolve(response); + } + + mRecordingPromise = null; + } + + public static byte[] convertFileToByteArray(File f) + { + byte[] byteArray = null; + try + { + InputStream inputStream = new FileInputStream(f); + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + byte[] b = new byte[1024*8]; + int bytesRead; + + while ((bytesRead = inputStream.read(b)) != -1) { + bos.write(b, 0, bytesRead); + } + + byteArray = bos.toByteArray(); + } + catch (IOException e) + { + e.printStackTrace(); + } + return byteArray; + } + + @ReactMethod + public void capture(final ReadableMap options, final Promise promise) { + if (RCTCamera.getInstance() == null) { + promise.reject("Camera is not ready yet."); + return; + } + + int orientation = options.hasKey("orientation") ? options.getInt("orientation") : RCTCamera.getInstance().getOrientation(); + if (orientation == RCT_CAMERA_ORIENTATION_AUTO) { + _sensorOrientationChecker.onResume(); + _sensorOrientationChecker.registerOrientationListener(new RCTSensorOrientationListener() { + @Override + public void orientationEvent() { + int deviceOrientation = _sensorOrientationChecker.getOrientation(); + _sensorOrientationChecker.unregisterOrientationListener(); + _sensorOrientationChecker.onPause(); + captureWithOrientation(options, promise, deviceOrientation); + } + }); + } else { + captureWithOrientation(options, promise, orientation); + } + } + + private void captureWithOrientation(final ReadableMap options, final Promise promise, int deviceOrientation) { + final Camera camera = RCTCamera.getInstance().acquireCameraInstance(options.getInt("type")); + if (null == camera) { + promise.reject("No camera found."); + return; + } + + if (options.getInt("mode") == RCT_CAMERA_CAPTURE_MODE_VIDEO) { + record(options, promise, deviceOrientation); + return; + } + + RCTCamera.getInstance().setCaptureQuality(options.getInt("type"), options.getString("quality")); + + if (options.hasKey("playSoundOnCapture") && options.getBoolean("playSoundOnCapture")) { + MediaActionSound sound = new MediaActionSound(); + sound.play(MediaActionSound.SHUTTER_CLICK); + } + + if (options.hasKey("quality")) { + RCTCamera.getInstance().setCaptureQuality(options.getInt("type"), options.getString("quality")); + } + + RCTCamera.getInstance().adjustCameraRotationToDeviceOrientation(options.getInt("type"), deviceOrientation); + camera.setPreviewCallback(null); + + Camera.PictureCallback captureCallback = new Camera.PictureCallback() { + @Override + public void onPictureTaken(final byte[] data, Camera camera) { + camera.stopPreview(); + camera.startPreview(); + + AsyncTask.execute(new Runnable() { + @Override + public void run() { + processImage(new MutableImage(data), options, promise); + } + }); + + mSafeToCapture = true; + } + }; + + Camera.ShutterCallback shutterCallback = new Camera.ShutterCallback() { + @Override + public void onShutter() { + try { + camera.setPreviewCallback(null); + camera.setPreviewTexture(null); + } catch (Exception e) { + e.printStackTrace(); + } + } + }; + + if(mSafeToCapture) { + try { + camera.takePicture(shutterCallback, null, captureCallback); + mSafeToCapture = false; + } catch(RuntimeException ex) { + Log.e(TAG, "Couldn't capture photo.", ex); + } + } + } + + /** + * synchronized in order to prevent the user crashing the app by taking many photos and them all being processed + * concurrently which would blow the memory (esp on smaller devices), and slow things down. + */ + private synchronized void processImage(MutableImage mutableImage, ReadableMap options, Promise promise) { + boolean shouldFixOrientation = options.hasKey("fixOrientation") && options.getBoolean("fixOrientation"); + if(shouldFixOrientation) { + try { + mutableImage.fixOrientation(); + } catch (MutableImage.ImageMutationFailedException e) { + promise.reject("Error fixing orientation image", e); + } + } + + boolean needsReorient = false; + double previewRatio, pictureRatio = (double) mutableImage.getWidth() / (double) mutableImage.getHeight(); + try { + int type = options.getInt("type"); + previewRatio = (double) RCTCamera.getInstance().getPreviewVisibleWidth(type) / (double) RCTCamera.getInstance().getPreviewVisibleHeight(type); + needsReorient = (previewRatio > 1) != (pictureRatio > 1); + } catch (IllegalArgumentException e) { + previewRatio = pictureRatio; + } + + boolean shouldCropToPreview = options.hasKey("cropToPreview") && options.getBoolean("cropToPreview"); + if (shouldCropToPreview) { + try { + mutableImage.cropToPreview(needsReorient ? 1.0 / previewRatio : previewRatio); + } catch (IllegalArgumentException e) { + promise.reject("Error cropping image to preview", e); + } + } + + boolean shouldMirror = options.hasKey("mirrorImage") && options.getBoolean("mirrorImage"); + if (shouldMirror) { + try { + mutableImage.mirrorImage(); + } catch (MutableImage.ImageMutationFailedException e) { + promise.reject("Error mirroring image", e); + } + } + + int jpegQualityPercent = 80; + if(options.hasKey("jpegQuality")) { + jpegQualityPercent = options.getInt("jpegQuality"); + } + + int imgWidth = (needsReorient) ? mutableImage.getHeight() : mutableImage.getWidth(); + int imgHeight = (needsReorient) ? mutableImage.getWidth() : mutableImage.getHeight(); + + switch (options.getInt("target")) { + case RCT_CAMERA_CAPTURE_TARGET_MEMORY: + String encoded = mutableImage.toBase64(jpegQualityPercent); + WritableMap response = new WritableNativeMap(); + response.putString("data", encoded); + response.putInt("width", imgWidth); + response.putInt("height", imgHeight); + promise.resolve(response); + break; + case RCT_CAMERA_CAPTURE_TARGET_CAMERA_ROLL: { + File cameraRollFile = getOutputCameraRollFile(MEDIA_TYPE_IMAGE); + if (cameraRollFile == null) { + promise.reject("Error creating media file."); + return; + } + + try { + mutableImage.writeDataToFile(cameraRollFile, options, jpegQualityPercent); + } catch (IOException | NullPointerException e) { + promise.reject("failed to save image file", e); + return; + } + + addToMediaStore(cameraRollFile.getAbsolutePath()); + + resolveImage(cameraRollFile, imgWidth, imgHeight, promise, true); + + break; + } + case RCT_CAMERA_CAPTURE_TARGET_DISK: { + File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE); + if (pictureFile == null) { + promise.reject("Error creating media file."); + return; + } + + try { + mutableImage.writeDataToFile(pictureFile, options, jpegQualityPercent); + } catch (IOException e) { + promise.reject("failed to save image file", e); + return; + } + + resolveImage(pictureFile, imgWidth, imgHeight, promise, false); + + break; + } + case RCT_CAMERA_CAPTURE_TARGET_TEMP: { + File tempFile = getTempMediaFile(MEDIA_TYPE_IMAGE); + if (tempFile == null) { + promise.reject("Error creating media file."); + return; + } + + try { + mutableImage.writeDataToFile(tempFile, options, jpegQualityPercent); + } catch (IOException e) { + promise.reject("failed to save image file", e); + return; + } + + resolveImage(tempFile, imgWidth, imgHeight, promise, false); + + break; + } + } + } + + @ReactMethod + public void stopCapture(final Promise promise) { + if (mRecordingPromise != null) { + releaseMediaRecorder(); // release the MediaRecorder object + promise.resolve("Finished recording."); + } else { + promise.resolve("Not recording."); + } + } + + @ReactMethod + public void hasFlash(ReadableMap options, final Promise promise) { + Camera camera = RCTCamera.getInstance().acquireCameraInstance(options.getInt("type")); + if (null == camera) { + promise.reject("No camera found."); + return; + } + List flashModes = camera.getParameters().getSupportedFlashModes(); + promise.resolve(null != flashModes && !flashModes.isEmpty()); + } + + @ReactMethod + public void setZoom(ReadableMap options, int zoom) { + RCTCamera instance = RCTCamera.getInstance(); + if (instance == null) return; + + Camera camera = instance.acquireCameraInstance(options.getInt("type")); + if (camera == null) return; + + Camera.Parameters parameters = camera.getParameters(); + int maxZoom = parameters.getMaxZoom(); + if (parameters.isZoomSupported()) { + if (zoom >=0 && zoom < maxZoom) { + parameters.setZoom(zoom); + try{ + camera.setParameters(parameters); + } + catch(RuntimeException e ) { + Log.e("RCTCameraModule", "setParameters failed", e); + } + } + } + } + + private File getOutputMediaFile(int type) { + // Get environment directory type id from requested media type. + String environmentDirectoryType; + if (type == MEDIA_TYPE_IMAGE) { + environmentDirectoryType = Environment.DIRECTORY_PICTURES; + } else if (type == MEDIA_TYPE_VIDEO) { + environmentDirectoryType = Environment.DIRECTORY_MOVIES; + } else { + Log.e(TAG, "Unsupported media type:" + type); + return null; + } + + return getOutputFile( + type, + Environment.getExternalStoragePublicDirectory(environmentDirectoryType) + ); + } + + private File getOutputCameraRollFile(int type) { + return getOutputFile( + type, + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM) + ); + } + + private File getOutputFile(int type, File storageDir) { + // Create the storage directory if it does not exist + if (!storageDir.exists()) { + if (!storageDir.mkdirs()) { + Log.e(TAG, "failed to create directory:" + storageDir.getAbsolutePath()); + return null; + } + } + + // Create a media file name + String fileName = String.format("%s", new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date())); + + if (type == MEDIA_TYPE_IMAGE) { + fileName = String.format("IMG_%s.jpg", fileName); + } else if (type == MEDIA_TYPE_VIDEO) { + fileName = String.format("VID_%s.mp4", fileName); + } else { + Log.e(TAG, "Unsupported media type:" + type); + return null; + } + + return new File(String.format("%s%s%s", storageDir.getPath(), File.separator, fileName)); + } + + private File getTempMediaFile(int type) { + try { + String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); + File outputDir = _reactContext.getCacheDir(); + File outputFile; + + if (type == MEDIA_TYPE_IMAGE) { + outputFile = File.createTempFile("IMG_" + timeStamp, ".jpg", outputDir); + } else if (type == MEDIA_TYPE_VIDEO) { + outputFile = File.createTempFile("VID_" + timeStamp, ".mp4", outputDir); + } else { + Log.e(TAG, "Unsupported media type:" + type); + return null; + } + return outputFile; + } catch (Exception e) { + Log.e(TAG, e.getMessage()); + return null; + } + } + + private void addToMediaStore(String path) { + MediaScannerConnection.scanFile(_reactContext, new String[] { path }, null, null); + } + + /** + * LifecycleEventListener overrides + */ + @Override + public void onHostResume() { + mSafeToCapture = true; + } + + @Override + public void onHostPause() { + // On pause, we stop any pending recording session + if (mRecordingPromise != null) { + releaseMediaRecorder(); + } + } + + @Override + public void onHostDestroy() { + // ... do nothing + } + + private void resolveImage(final File imageFile, final int imgWidth, final int imgHeight, final Promise promise, boolean addToMediaStore) { + final WritableMap response = new WritableNativeMap(); + response.putString("path", Uri.fromFile(imageFile).toString()); + response.putInt("width", imgWidth); + response.putInt("height", imgHeight); + + if(addToMediaStore) { + // borrowed from react-native CameraRollManager, it finds and returns the 'internal' + // representation of the image uri that was just saved. + // e.g. content://media/external/images/media/123 + MediaScannerConnection.scanFile( + _reactContext, + new String[]{imageFile.getAbsolutePath()}, + null, + new MediaScannerConnection.OnScanCompletedListener() { + @Override + public void onScanCompleted(String path, Uri uri) { + if (uri != null) { + response.putString("mediaUri", uri.toString()); + } + + promise.resolve(response); + } + }); + } else { + promise.resolve(response); + } + } + +} diff --git a/android/src/main/java/com/lwansbrough/RCTCamera/RCTCameraUtils.java b/android/src/main/java/com/lwansbrough/RCTCamera/RCTCameraUtils.java new file mode 100644 index 0000000..ffac854 --- /dev/null +++ b/android/src/main/java/com/lwansbrough/RCTCamera/RCTCameraUtils.java @@ -0,0 +1,72 @@ +package com.lwansbrough.RCTCamera; + +import android.graphics.Rect; +import android.graphics.RectF; +import android.hardware.Camera; +import android.view.MotionEvent; + +public class RCTCameraUtils { + private static final int FOCUS_AREA_MOTION_EVENT_EDGE_LENGTH = 100; + private static final int FOCUS_AREA_WEIGHT = 1000; + + /** + * Computes a Camera.Area corresponding to the new focus area to focus the camera on. This is + * done by deriving a square around the center of a MotionEvent pointer (with side length equal + * to FOCUS_AREA_MOTION_EVENT_EDGE_LENGTH), then transforming this rectangle's/square's + * coordinates into the (-1000, 1000) coordinate system used for camera focus areas. + * + * Also note that we operate on RectF instances for the most part, to avoid any integer + * division rounding errors going forward. We only round at the very end for playing into + * the final focus areas list. + * + * @throws RuntimeException if unable to compute valid intersection between MotionEvent region + * and SurfaceTexture region. + */ + protected static Camera.Area computeFocusAreaFromMotionEvent(final MotionEvent event, final int surfaceTextureWidth, final int surfaceTextureHeight) { + // Get position of first touch pointer. + final int pointerId = event.getPointerId(0); + final int pointerIndex = event.findPointerIndex(pointerId); + final float centerX = event.getX(pointerIndex); + final float centerY = event.getY(pointerIndex); + + // Build event rect. Note that coordinates increase right and down, such that left <= right + // and top <= bottom. + final RectF eventRect = new RectF( + centerX - FOCUS_AREA_MOTION_EVENT_EDGE_LENGTH, // left + centerY - FOCUS_AREA_MOTION_EVENT_EDGE_LENGTH, // top + centerX + FOCUS_AREA_MOTION_EVENT_EDGE_LENGTH, // right + centerY + FOCUS_AREA_MOTION_EVENT_EDGE_LENGTH // bottom + ); + + // Intersect this rect with the rect corresponding to the full area of the parent surface + // texture, making sure we are not placing any amount of the eventRect outside the parent + // surface's area. + final RectF surfaceTextureRect = new RectF( + (float) 0, // left + (float) 0, // top + (float) surfaceTextureWidth, // right + (float) surfaceTextureHeight // bottom + ); + final boolean intersectSuccess = eventRect.intersect(surfaceTextureRect); + if (!intersectSuccess) { + throw new RuntimeException( + "MotionEvent rect does not intersect with SurfaceTexture rect; unable to " + + "compute focus area" + ); + } + + // Transform into (-1000, 1000) focus area coordinate system. See + // https://developer.android.com/reference/android/hardware/Camera.Area.html. + // Note that if this is ever changed to a Rect instead of RectF, be cautious of integer + // division rounding! + final RectF focusAreaRect = new RectF( + (eventRect.left / surfaceTextureWidth) * 2000 - 1000, // left + (eventRect.top / surfaceTextureHeight) * 2000 - 1000, // top + (eventRect.right / surfaceTextureWidth) * 2000 - 1000, // right + (eventRect.bottom / surfaceTextureHeight) * 2000 - 1000 // bottom + ); + Rect focusAreaRectRounded = new Rect(); + focusAreaRect.round(focusAreaRectRounded); + return new Camera.Area(focusAreaRectRounded, FOCUS_AREA_WEIGHT); + } +} diff --git a/android/src/main/java/com/lwansbrough/RCTCamera/RCTCameraView.java b/android/src/main/java/com/lwansbrough/RCTCamera/RCTCameraView.java new file mode 100644 index 0000000..587d5b4 --- /dev/null +++ b/android/src/main/java/com/lwansbrough/RCTCamera/RCTCameraView.java @@ -0,0 +1,218 @@ +/** + * Created by Fabrice Armisen (farmisen@gmail.com) on 1/3/16. + */ + +package com.lwansbrough.RCTCamera; + +import android.content.Context; +import android.hardware.SensorManager; +import android.view.OrientationEventListener; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.view.View; + +import java.util.List; + +public class RCTCameraView extends ViewGroup { + private final OrientationEventListener _orientationListener; + private final Context _context; + private RCTCameraViewFinder _viewFinder = null; + private int _actualDeviceOrientation = -1; + private int _aspect = RCTCameraModule.RCT_CAMERA_ASPECT_FIT; + private int _captureMode = RCTCameraModule.RCT_CAMERA_CAPTURE_MODE_STILL; + private String _captureQuality = "high"; + private int _torchMode = -1; + private int _flashMode = -1; + private int _zoom = 0; + private boolean _clearWindowBackground = false; + + public RCTCameraView(Context context) { + super(context); + this._context = context; + RCTCamera.createInstance(getDeviceOrientation(context)); + + _orientationListener = new OrientationEventListener(context, SensorManager.SENSOR_DELAY_NORMAL) { + @Override + public void onOrientationChanged(int orientation) { + if (setActualDeviceOrientation(_context)) { + layoutViewFinder(); + } + } + }; + + if (_orientationListener.canDetectOrientation()) { + _orientationListener.enable(); + } else { + _orientationListener.disable(); + } + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + layoutViewFinder(left, top, right, bottom); + } + + @Override + public void onViewAdded(View child) { + if (this._viewFinder == child) return; + // remove and readd view to make sure it is in the back. + // @TODO figure out why there was a z order issue in the first place and fix accordingly. + this.removeView(this._viewFinder); + this.addView(this._viewFinder, 0); + } + + public void setAspect(int aspect) { + this._aspect = aspect; + layoutViewFinder(); + } + + public void setCameraType(final int type) { + if (null != this._viewFinder) { + this._viewFinder.setCameraType(type); + RCTCamera.getInstance().adjustPreviewLayout(type); + } else { + _viewFinder = new RCTCameraViewFinder(_context, type); + if (-1 != this._flashMode) { + _viewFinder.setFlashMode(this._flashMode); + } + if (-1 != this._torchMode) { + _viewFinder.setTorchMode(this._torchMode); + } + if (0 != this._zoom) { + _viewFinder.setZoom(this._zoom); + } + _viewFinder.setClearWindowBackground(this._clearWindowBackground); + addView(_viewFinder); + } + } + + public void setCaptureMode(final int captureMode) { + this._captureMode = captureMode; + if (this._viewFinder != null) { + this._viewFinder.setCaptureMode(captureMode); + } + } + + public void setCaptureQuality(String captureQuality) { + this._captureQuality = captureQuality; + if (this._viewFinder != null) { + this._viewFinder.setCaptureQuality(captureQuality); + } + } + + public void setTorchMode(int torchMode) { + this._torchMode = torchMode; + if (this._viewFinder != null) { + this._viewFinder.setTorchMode(torchMode); + } + } + + public void setFlashMode(int flashMode) { + this._flashMode = flashMode; + if (this._viewFinder != null) { + this._viewFinder.setFlashMode(flashMode); + } + } + + public void setZoom(int zoom) { + this._zoom = zoom; + if (this._viewFinder != null) { + this._viewFinder.setZoom(zoom); + } + } + + public void setOrientation(int orientation) { + RCTCamera.getInstance().setOrientation(orientation); + if (this._viewFinder != null) { + layoutViewFinder(); + } + } + + public void setBarcodeScannerEnabled(boolean barcodeScannerEnabled) { + RCTCamera.getInstance().setBarcodeScannerEnabled(barcodeScannerEnabled); + } + + public void setBarCodeTypes(List types) { + RCTCamera.getInstance().setBarCodeTypes(types); + } + + public void setClearWindowBackground(boolean clearWindowBackground) { + this._clearWindowBackground = clearWindowBackground; + if (this._viewFinder != null) { + this._viewFinder.setClearWindowBackground(clearWindowBackground); + } + } + + public void stopPreview() { + if (_viewFinder == null) return; + _viewFinder.stopPreview(); + } + + public void startPreview() { + if (_viewFinder == null) return; + _viewFinder.startPreview(); + } + + private boolean setActualDeviceOrientation(Context context) { + int actualDeviceOrientation = getDeviceOrientation(context); + if (_actualDeviceOrientation != actualDeviceOrientation) { + _actualDeviceOrientation = actualDeviceOrientation; + RCTCamera.getInstance().setActualDeviceOrientation(_actualDeviceOrientation); + return true; + } else { + return false; + } + } + + private int getDeviceOrientation(Context context) { + return ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getOrientation(); + } + + private void layoutViewFinder() { + layoutViewFinder(this.getLeft(), this.getTop(), this.getRight(), this.getBottom()); + } + + private void layoutViewFinder(int left, int top, int right, int bottom) { + if (null == _viewFinder) { + return; + } + float width = right - left; + float height = bottom - top; + int viewfinderWidth; + int viewfinderHeight; + double ratio; + switch (this._aspect) { + case RCTCameraModule.RCT_CAMERA_ASPECT_FIT: + ratio = this._viewFinder.getRatio(); + if (ratio * height > width) { + viewfinderHeight = (int) (width / ratio); + viewfinderWidth = (int) width; + } else { + viewfinderWidth = (int) (ratio * height); + viewfinderHeight = (int) height; + } + break; + case RCTCameraModule.RCT_CAMERA_ASPECT_FILL: + ratio = this._viewFinder.getRatio(); + if (ratio * height < width) { + viewfinderHeight = (int) (width / ratio); + viewfinderWidth = (int) width; + } else { + viewfinderWidth = (int) (ratio * height); + viewfinderHeight = (int) height; + } + break; + default: + viewfinderWidth = (int) width; + viewfinderHeight = (int) height; + } + + int viewFinderPaddingX = (int) ((width - viewfinderWidth) / 2); + int viewFinderPaddingY = (int) ((height - viewfinderHeight) / 2); + + RCTCamera.getInstance().setPreviewVisibleSize(_viewFinder.getCameraType(), (int) width, (int) height); + + this._viewFinder.layout(viewFinderPaddingX, viewFinderPaddingY, viewFinderPaddingX + viewfinderWidth, viewFinderPaddingY + viewfinderHeight); + this.postInvalidate(this.getLeft(), this.getTop(), this.getRight(), this.getBottom()); + } +} diff --git a/android/src/main/java/com/lwansbrough/RCTCamera/RCTCameraViewFinder.java b/android/src/main/java/com/lwansbrough/RCTCamera/RCTCameraViewFinder.java new file mode 100644 index 0000000..6caca4d --- /dev/null +++ b/android/src/main/java/com/lwansbrough/RCTCamera/RCTCameraViewFinder.java @@ -0,0 +1,566 @@ +/** + * Created by Fabrice Armisen (farmisen@gmail.com) on 1/3/16. + */ + +package com.lwansbrough.RCTCamera; + +import android.app.Activity; +import android.content.Context; +import android.content.ContextWrapper; +import android.graphics.Rect; +import android.graphics.SurfaceTexture; +import android.hardware.Camera; +import android.view.MotionEvent; +import android.view.TextureView; +import android.os.AsyncTask; +import android.util.Log; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactContext; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.modules.core.DeviceEventManagerModule; + +import java.util.ArrayList; +import java.util.List; +import java.util.EnumMap; +import java.util.EnumSet; + +import com.google.zxing.BarcodeFormat; +import com.google.zxing.BinaryBitmap; +import com.google.zxing.DecodeHintType; +import com.google.zxing.MultiFormatReader; +import com.google.zxing.PlanarYUVLuminanceSource; +import com.google.zxing.Result; +import com.google.zxing.ResultPoint; +import com.google.zxing.common.HybridBinarizer; + +class RCTCameraViewFinder extends TextureView implements TextureView.SurfaceTextureListener, Camera.PreviewCallback { + private int _cameraType; + private int _captureMode; + private SurfaceTexture _surfaceTexture; + private int _surfaceTextureWidth; + private int _surfaceTextureHeight; + private boolean _isStarting; + private boolean _isStopping; + private Camera _camera; + private boolean _clearWindowBackground = false; + private float mFingerSpacing; + + // concurrency lock for barcode scanner to avoid flooding the runtime + public static volatile boolean barcodeScannerTaskLock = false; + + // reader instance for the barcode scanner + private final MultiFormatReader _multiFormatReader = new MultiFormatReader(); + + public RCTCameraViewFinder(Context context, int type) { + super(context); + this.setSurfaceTextureListener(this); + this._cameraType = type; + this.initBarcodeReader(RCTCamera.getInstance().getBarCodeTypes()); + } + + @Override + public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { + _surfaceTexture = surface; + _surfaceTextureWidth = width; + _surfaceTextureHeight = height; + startCamera(); + } + + @Override + public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { + _surfaceTextureWidth = width; + _surfaceTextureHeight = height; + } + + @Override + public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { + _surfaceTexture = null; + _surfaceTextureWidth = 0; + _surfaceTextureHeight = 0; + stopCamera(); + return true; + } + + @Override + public void onSurfaceTextureUpdated(SurfaceTexture surface) { + } + + public int getCameraType() { + return _cameraType; + } + + public double getRatio() { + int width = RCTCamera.getInstance().getPreviewWidth(this._cameraType); + int height = RCTCamera.getInstance().getPreviewHeight(this._cameraType); + return ((float) width) / ((float) height); + } + + public void setCameraType(final int type) { + if (this._cameraType == type) { + return; + } + new Thread(new Runnable() { + @Override + public void run() { + stopPreview(); + _cameraType = type; + startPreview(); + } + }).start(); + } + + public void setCaptureMode(final int captureMode) { + RCTCamera.getInstance().setCaptureMode(_cameraType, captureMode); + this._captureMode = captureMode; + } + + public void setCaptureQuality(String captureQuality) { + RCTCamera.getInstance().setCaptureQuality(_cameraType, captureQuality); + } + + public void setTorchMode(int torchMode) { + RCTCamera.getInstance().setTorchMode(_cameraType, torchMode); + } + + public void setFlashMode(int flashMode) { + RCTCamera.getInstance().setFlashMode(_cameraType, flashMode); + } + + public void setClearWindowBackground(boolean clearWindowBackground) { + this._clearWindowBackground = clearWindowBackground; + } + + public void setZoom(int zoom) { + RCTCamera.getInstance().setZoom(_cameraType, zoom); + } + + public void startPreview() { + if (_surfaceTexture != null) { + startCamera(); + } + } + + public void stopPreview() { + if (_camera != null) { + stopCamera(); + } + } + + synchronized private void startCamera() { + if (!_isStarting) { + _isStarting = true; + try { + _camera = RCTCamera.getInstance().acquireCameraInstance(_cameraType); + Camera.Parameters parameters = _camera.getParameters(); + + final boolean isCaptureModeStill = (_captureMode == RCTCameraModule.RCT_CAMERA_CAPTURE_MODE_STILL); + final boolean isCaptureModeVideo = (_captureMode == RCTCameraModule.RCT_CAMERA_CAPTURE_MODE_VIDEO); + if (!isCaptureModeStill && !isCaptureModeVideo) { + throw new RuntimeException("Unsupported capture mode:" + _captureMode); + } + + // Set auto-focus. Try to set to continuous picture/video, and fall back to general + // auto if available. + List focusModes = parameters.getSupportedFocusModes(); + if (isCaptureModeStill && focusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) { + parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE); + } else if (isCaptureModeVideo && focusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) { + parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO); + } else if (focusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO)) { + parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); + } + + // set picture size + // defaults to max available size + List supportedSizes; + if (isCaptureModeStill) { + supportedSizes = parameters.getSupportedPictureSizes(); + } else if (isCaptureModeVideo) { + supportedSizes = RCTCamera.getInstance().getSupportedVideoSizes(_camera); + } else { + throw new RuntimeException("Unsupported capture mode:" + _captureMode); + } + Camera.Size optimalPictureSize = RCTCamera.getInstance().getBestSize( + supportedSizes, + Integer.MAX_VALUE, + Integer.MAX_VALUE + ); + parameters.setPictureSize(optimalPictureSize.width, optimalPictureSize.height); + + try{ + _camera.setParameters(parameters); + } + catch(RuntimeException e ) { + Log.e("RCTCameraViewFinder", "setParameters failed", e); + } + _camera.setPreviewTexture(_surfaceTexture); + _camera.startPreview(); + // clear window background if needed + if (_clearWindowBackground) { + Activity activity = getActivity(); + if (activity != null) + activity.getWindow().setBackgroundDrawable(null); + } + // send previews to `onPreviewFrame` + _camera.setPreviewCallback(this); + } catch (NullPointerException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + stopCamera(); + } finally { + _isStarting = false; + } + } + } + + synchronized private void stopCamera() { + if (!_isStopping) { + _isStopping = true; + try { + if (_camera != null) { + _camera.stopPreview(); + // stop sending previews to `onPreviewFrame` + _camera.setPreviewCallback(null); + RCTCamera.getInstance().releaseCameraInstance(_cameraType); + _camera = null; + } + + } catch (Exception e) { + e.printStackTrace(); + } finally { + _isStopping = false; + } + } + } + + private Activity getActivity() { + Context context = getContext(); + while (context instanceof ContextWrapper) { + if (context instanceof Activity) { + return (Activity)context; + } + context = ((ContextWrapper)context).getBaseContext(); + } + return null; + } + + /** + * Parse barcodes as BarcodeFormat constants. + * + * Supports all iOS codes except [code39mod43, itf14] + * + * Additionally supports [codabar, maxicode, rss14, rssexpanded, upca, upceanextension] + */ + private BarcodeFormat parseBarCodeString(String c) { + if ("aztec".equals(c)) { + return BarcodeFormat.AZTEC; + } else if ("ean13".equals(c)) { + return BarcodeFormat.EAN_13; + } else if ("ean8".equals(c)) { + return BarcodeFormat.EAN_8; + } else if ("qr".equals(c)) { + return BarcodeFormat.QR_CODE; + } else if ("pdf417".equals(c)) { + return BarcodeFormat.PDF_417; + } else if ("upce".equals(c)) { + return BarcodeFormat.UPC_E; + } else if ("datamatrix".equals(c)) { + return BarcodeFormat.DATA_MATRIX; + } else if ("code39".equals(c)) { + return BarcodeFormat.CODE_39; + } else if ("code93".equals(c)) { + return BarcodeFormat.CODE_93; + } else if ("interleaved2of5".equals(c)) { + return BarcodeFormat.ITF; + } else if ("codabar".equals(c)) { + return BarcodeFormat.CODABAR; + } else if ("code128".equals(c)) { + return BarcodeFormat.CODE_128; + } else if ("maxicode".equals(c)) { + return BarcodeFormat.MAXICODE; + } else if ("rss14".equals(c)) { + return BarcodeFormat.RSS_14; + } else if ("rssexpanded".equals(c)) { + return BarcodeFormat.RSS_EXPANDED; + } else if ("upca".equals(c)) { + return BarcodeFormat.UPC_A; + } else if ("upceanextension".equals(c)) { + return BarcodeFormat.UPC_EAN_EXTENSION; + } else { + android.util.Log.v("RCTCamera", "Unsupported code.. [" + c + "]"); + return null; + } + } + + /** + * Initialize the barcode decoder. + */ + private void initBarcodeReader(List barCodeTypes) { + EnumMap hints = new EnumMap<>(DecodeHintType.class); + EnumSet decodeFormats = EnumSet.noneOf(BarcodeFormat.class); + + if (barCodeTypes != null) { + for (String code : barCodeTypes) { + BarcodeFormat format = parseBarCodeString(code); + if (format != null) { + decodeFormats.add(format); + } + } + } + + hints.put(DecodeHintType.POSSIBLE_FORMATS, decodeFormats); + _multiFormatReader.setHints(hints); + } + + /** + * Spawn a barcode reader task if + * - the barcode scanner is enabled (has a onBarCodeRead function) + * - one isn't already running + * + * See {Camera.PreviewCallback} + */ + public void onPreviewFrame(byte[] data, Camera camera) { + if (RCTCamera.getInstance().isBarcodeScannerEnabled() && !RCTCameraViewFinder.barcodeScannerTaskLock) { + RCTCameraViewFinder.barcodeScannerTaskLock = true; + new ReaderAsyncTask(camera, data).execute(); + } + } + + private class ReaderAsyncTask extends AsyncTask { + private byte[] imageData; + private final Camera camera; + + ReaderAsyncTask(Camera camera, byte[] imageData) { + this.camera = camera; + this.imageData = imageData; + } + + private Result getBarcode(int width, int height, boolean inverse) { + try{ + PlanarYUVLuminanceSource source = new PlanarYUVLuminanceSource(imageData, width, height, 0, 0, width, height, false); + BinaryBitmap bitmap; + if (inverse) { + bitmap = new BinaryBitmap(new HybridBinarizer(source.invert())); + } else { + bitmap = new BinaryBitmap(new HybridBinarizer(source)); + } + return _multiFormatReader.decodeWithState(bitmap); + } catch (Throwable t) { + // meh + } finally { + _multiFormatReader.reset(); + } + return null; + } + + private Result getBarcodeAnyOrientation() { + Camera.Size size = camera.getParameters().getPreviewSize(); + + int width = size.width; + int height = size.height; + Result result = getBarcode(width, height, false); + if (result != null) { + return result; + } + // inverse + result = getBarcode(width, height, true); + if (result != null) { + return result; + } + // rotate + rotateImage(width, height); + width = size.height; + height = size.width; + result = getBarcode(width, height, false); + if (result != null) { + return result; + } + return getBarcode(width, height, true); + + } + + private void rotateImage(int width, int height) { + byte[] rotated = new byte[imageData.length]; + for (int y = 0; y < width; y++) { + for (int x = 0; x < height; x++) { + int sourceIx = x + y * height; + int destIx = x * width + width - y - 1; + if (sourceIx >= 0 && sourceIx < imageData.length && destIx >= 0 && destIx < imageData.length) { + rotated[destIx] = imageData[sourceIx]; + } + } + } + imageData = rotated; + } + + @Override + protected Void doInBackground(Void... ignored) { + if (isCancelled()) { + return null; + } + + try { + // rotate for zxing if orientation is portrait + Result result = getBarcodeAnyOrientation(); + if (result == null){ + throw new Exception(); + } + + ReactContext reactContext = RCTCameraModule.getReactContextSingleton(); + WritableMap event = Arguments.createMap(); + WritableArray resultPoints = Arguments.createArray(); + ResultPoint[] points = result.getResultPoints(); + + if(points != null) { + for (ResultPoint point : points) { + WritableMap newPoint = Arguments.createMap(); + newPoint.putString("x", String.valueOf(point.getX())); + newPoint.putString("y", String.valueOf(point.getY())); + resultPoints.pushMap(newPoint); + } + } + + event.putArray("bounds", resultPoints); + event.putString("data", result.getText()); + event.putString("type", result.getBarcodeFormat().toString()); + reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit("CameraBarCodeReadAndroid", event); + + } catch (Throwable t) { + // meh + } finally { + _multiFormatReader.reset(); + RCTCameraViewFinder.barcodeScannerTaskLock = false; + return null; + } + } + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + // Fast swiping and touching while component is being loaded can cause _camera to be null. + if (_camera == null) { + return false; + } + + // Get the pointer ID + Camera.Parameters params = _camera.getParameters(); + int action = event.getAction(); + + + if (event.getPointerCount() > 1) { + // handle multi-touch events + if (action == MotionEvent.ACTION_POINTER_DOWN) { + mFingerSpacing = getFingerSpacing(event); + } else if (action == MotionEvent.ACTION_MOVE && params.isZoomSupported()) { + _camera.cancelAutoFocus(); + handleZoom(event, params); + } + } else { + // handle single touch events + if (action == MotionEvent.ACTION_UP) { + handleFocus(event, params); + } + } + return true; + } + + private void handleZoom(MotionEvent event, Camera.Parameters params) { + int maxZoom = params.getMaxZoom(); + int zoom = params.getZoom(); + float newDist = getFingerSpacing(event); + if (newDist > mFingerSpacing) { + //zoom in + if (zoom < maxZoom) + zoom++; + } else if (newDist < mFingerSpacing) { + //zoom out + if (zoom > 0) + zoom--; + } + mFingerSpacing = newDist; + params.setZoom(zoom); + try{ + _camera.setParameters(params); + } + catch(RuntimeException e ) { + Log.e("RCTCameraViewFinder", "setParameters failed", e); + } + } + + /** + * Handles setting focus to the location of the event. + * + * Note that this will override the focus mode on the camera to FOCUS_MODE_AUTO if available, + * even if this was previously something else (such as FOCUS_MODE_CONTINUOUS_*; see also + * {@link #startCamera()}. However, this makes sense - after the user has initiated any + * specific focus intent, we shouldn't be refocusing and overriding their request! + */ + public void handleFocus(MotionEvent event, Camera.Parameters params) { + List supportedFocusModes = params.getSupportedFocusModes(); + if (supportedFocusModes != null && supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO)) { + // Ensure focus areas are enabled. If max num focus areas is 0, then focus area is not + // supported, so we cannot do anything here. + if (params.getMaxNumFocusAreas() == 0) { + return; + } + + // Cancel any previous focus actions. + _camera.cancelAutoFocus(); + + // Compute focus area rect. + Camera.Area focusAreaFromMotionEvent; + try { + focusAreaFromMotionEvent = RCTCameraUtils.computeFocusAreaFromMotionEvent(event, _surfaceTextureWidth, _surfaceTextureHeight); + } catch (final RuntimeException e) { + e.printStackTrace(); + return; + } + + // Set focus mode to auto. + params.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); + // Set focus area. + final ArrayList focusAreas = new ArrayList(); + focusAreas.add(focusAreaFromMotionEvent); + params.setFocusAreas(focusAreas); + + // Also set metering area if enabled. If max num metering areas is 0, then metering area + // is not supported. We can usually safely omit this anyway, though. + if (params.getMaxNumMeteringAreas() > 0) { + params.setMeteringAreas(focusAreas); + } + + // Set parameters before starting auto-focus. + try{ + _camera.setParameters(params); + } + catch(RuntimeException e ) { + Log.e("RCTCameraViewFinder", "setParameters failed", e); + } + + // Start auto-focus now that focus area has been set. If successful, then can cancel + // it afterwards. Wrap in try-catch to avoid crashing on merely autoFocus fails. + try { + _camera.autoFocus(new Camera.AutoFocusCallback() { + @Override + public void onAutoFocus(boolean success, Camera camera) { + if (success) { + camera.cancelAutoFocus(); + } + } + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + /** Determine the space between the first two fingers */ + private float getFingerSpacing(MotionEvent event) { + float x = event.getX(0) - event.getX(1); + float y = event.getY(0) - event.getY(1); + return (float) Math.sqrt(x * x + y * y); + } +} diff --git a/android/src/main/java/com/lwansbrough/RCTCamera/RCTCameraViewManager.java b/android/src/main/java/com/lwansbrough/RCTCamera/RCTCameraViewManager.java new file mode 100644 index 0000000..86919a3 --- /dev/null +++ b/android/src/main/java/com/lwansbrough/RCTCamera/RCTCameraViewManager.java @@ -0,0 +1,133 @@ +package com.lwansbrough.RCTCamera; + +import androidx.annotation.Nullable; + +import com.facebook.react.bridge.ReadableArray; +import com.facebook.react.common.MapBuilder; +import com.facebook.react.uimanager.*; +import com.facebook.react.uimanager.annotations.ReactProp; + +import java.util.List; +import java.util.ArrayList; +import java.util.Map; + +public class RCTCameraViewManager extends ViewGroupManager { + private static final String REACT_CLASS = "RCTCamera"; + + public static final int COMMAND_STOP_PREVIEW = 1; + public static final int COMMAND_START_PREVIEW = 2; + + @Override + public String getName() { + return REACT_CLASS; + } + + @Override + public RCTCameraView createViewInstance(ThemedReactContext context) { + return new RCTCameraView(context); + } + + @Override + public Map getCommandsMap() { + return MapBuilder.of( + "stopPreview", + COMMAND_STOP_PREVIEW, + "startPreview", + COMMAND_START_PREVIEW); + } + + @Override + public void receiveCommand(RCTCameraView view, int commandType, @Nullable ReadableArray args) { + if (view == null) { + throw new AssertionError(); + } + switch (commandType) { + case COMMAND_STOP_PREVIEW: { + view.stopPreview(); + return; + } + case COMMAND_START_PREVIEW: { + view.startPreview(); + return; + } + default: + throw new IllegalArgumentException( + String.format("Unsupported command %d received by %s.", commandType, getClass().getSimpleName())); + } + } + + @ReactProp(name = "aspect") + public void setAspect(RCTCameraView view, int aspect) { + view.setAspect(aspect); + } + + @ReactProp(name = "captureMode") + public void setCaptureMode(RCTCameraView view, final int captureMode) { + // Note that this in practice only performs any additional setup necessary for each mode; + // the actual indication to capture a still or record a video when capture() is called is + // still ultimately decided upon by what it in the options sent to capture(). + view.setCaptureMode(captureMode); + } + + @ReactProp(name = "captureTarget") + public void setCaptureTarget(RCTCameraView view, int captureTarget) { + // No reason to handle this props value here since it's passed again to the RCTCameraModule capture method + } + + @ReactProp(name = "type") + public void setType(RCTCameraView view, int type) { + view.setCameraType(type); + } + + @ReactProp(name = "captureQuality") + public void setCaptureQuality(RCTCameraView view, String captureQuality) { + view.setCaptureQuality(captureQuality); + } + + @ReactProp(name = "torchMode") + public void setTorchMode(RCTCameraView view, int torchMode) { + view.setTorchMode(torchMode); + } + + @ReactProp(name = "flashMode") + public void setFlashMode(RCTCameraView view, int flashMode) { + view.setFlashMode(flashMode); + } + + @ReactProp(name = "zoom") + public void setZoom(RCTCameraView view, int zoom) { + view.setZoom(zoom); + } + + @ReactProp(name = "orientation") + public void setOrientation(RCTCameraView view, int orientation) { + view.setOrientation(orientation); + } + + @ReactProp(name = "captureAudio") + public void setCaptureAudio(RCTCameraView view, boolean captureAudio) { + // TODO - implement video mode + } + + @ReactProp(name = "barcodeScannerEnabled") + public void setBarcodeScannerEnabled(RCTCameraView view, boolean barcodeScannerEnabled) { + view.setBarcodeScannerEnabled(barcodeScannerEnabled); + } + + @ReactProp(name = "barCodeTypes") + public void setBarCodeTypes(RCTCameraView view, ReadableArray barCodeTypes) { + if (barCodeTypes == null) { + return; + } + List result = new ArrayList(barCodeTypes.size()); + for (int i = 0; i < barCodeTypes.size(); i++) { + result.add(barCodeTypes.getString(i)); + } + view.setBarCodeTypes(result); + } + + @ReactProp(name = "clearWindowBackground") + public void setClearWindowBackground(RCTCameraView view, boolean clearWindowBackground) { + view.setClearWindowBackground(clearWindowBackground); + } +} diff --git a/android/src/main/java/com/lwansbrough/RCTCamera/RCTSensorOrientationChecker.java b/android/src/main/java/com/lwansbrough/RCTCamera/RCTSensorOrientationChecker.java new file mode 100644 index 0000000..0f57dc8 --- /dev/null +++ b/android/src/main/java/com/lwansbrough/RCTCamera/RCTSensorOrientationChecker.java @@ -0,0 +1,85 @@ +/** + * Created by rpopovici on 23/03/16. + */ + +package com.lwansbrough.RCTCamera; + +import android.content.Context; +import android.hardware.Sensor; +import android.hardware.SensorEvent; +import android.hardware.SensorEventListener; +import android.hardware.SensorManager; +import android.view.Surface; + +import com.facebook.react.bridge.ReactApplicationContext; + +interface RCTSensorOrientationListener { + void orientationEvent(); +} + +public class RCTSensorOrientationChecker { + + int mOrientation = 0; + private SensorEventListener mSensorEventListener; + private SensorManager mSensorManager; + private RCTSensorOrientationListener mListener = null; + + public RCTSensorOrientationChecker( ReactApplicationContext reactContext) { + mSensorEventListener = new Listener(); + mSensorManager = (SensorManager) reactContext.getSystemService(Context.SENSOR_SERVICE); + + } + + /** + * Call on activity onResume() + */ + public void onResume() { + mSensorManager.registerListener(mSensorEventListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); + } + + /** + * Call on activity onPause() + */ + public void onPause() { + mSensorManager.unregisterListener(mSensorEventListener); + } + + private class Listener implements SensorEventListener { + + @Override + public void onSensorChanged(SensorEvent event) { + float x = event.values[0]; + float y = event.values[1]; + + if (x<5 && x>-5 && y > 5) + mOrientation = Surface.ROTATION_0; // portrait + else if (x<-5 && y<5 && y>-5) + mOrientation = Surface.ROTATION_270; // right + else if (x<5 && x>-5 && y<-5) + mOrientation = Surface.ROTATION_180; // upside down + else if (x>5 && y<5 && y>-5) + mOrientation = Surface.ROTATION_90; // left + + if (mListener != null) { + mListener.orientationEvent(); + } + } + + @Override + public void onAccuracyChanged(Sensor sensor, int accuracy) { + + } + } + + public int getOrientation() { + return mOrientation; + } + + public void registerOrientationListener(RCTSensorOrientationListener listener) { + this.mListener = listener; + } + + public void unregisterOrientationListener() { + mListener = null; + } +} diff --git a/android/src/main/java/org/reactnative/camera/CameraModule.java b/android/src/main/java/org/reactnative/camera/CameraModule.java new file mode 100644 index 0000000..b1f23ce --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/CameraModule.java @@ -0,0 +1,425 @@ +package org.reactnative.camera; + +import android.Manifest; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.util.Log; +import android.widget.Toast; + +import com.facebook.react.bridge.*; +import com.facebook.react.common.build.ReactBuildConfig; +import com.facebook.react.uimanager.NativeViewHierarchyManager; +import com.facebook.react.uimanager.UIBlock; +import com.facebook.react.uimanager.UIManagerModule; +import com.google.android.cameraview.AspectRatio; +import com.google.zxing.BarcodeFormat; +import org.reactnative.barcodedetector.BarcodeFormatUtils; +import org.reactnative.camera.utils.ScopedContext; +import org.reactnative.facedetector.RNFaceDetector; +import com.google.android.cameraview.Size; + +import javax.annotation.Nullable; +import java.io.File; +import java.util.Collections; +import java.util.Properties; +import java.util.List; +import java.util.Map; +import java.util.HashMap; +import java.util.Set; +import java.util.SortedSet; + + +public class CameraModule extends ReactContextBaseJavaModule { + private static final String TAG = "CameraModule"; + + private ScopedContext mScopedContext; + static final int VIDEO_2160P = 0; + static final int VIDEO_1080P = 1; + static final int VIDEO_720P = 2; + static final int VIDEO_480P = 3; + static final int VIDEO_4x3 = 4; + + static final int GOOGLE_VISION_BARCODE_MODE_NORMAL = 0; + static final int GOOGLE_VISION_BARCODE_MODE_ALTERNATE = 1; + static final int GOOGLE_VISION_BARCODE_MODE_INVERTED = 2; + + public static final Map VALID_BARCODE_TYPES = + Collections.unmodifiableMap(new HashMap() { + { + put("aztec", BarcodeFormat.AZTEC.toString()); + put("ean13", BarcodeFormat.EAN_13.toString()); + put("ean8", BarcodeFormat.EAN_8.toString()); + put("qr", BarcodeFormat.QR_CODE.toString()); + put("pdf417", BarcodeFormat.PDF_417.toString()); + put("upc_e", BarcodeFormat.UPC_E.toString()); + put("datamatrix", BarcodeFormat.DATA_MATRIX.toString()); + put("code39", BarcodeFormat.CODE_39.toString()); + put("code93", BarcodeFormat.CODE_93.toString()); + put("interleaved2of5", BarcodeFormat.ITF.toString()); + put("codabar", BarcodeFormat.CODABAR.toString()); + put("code128", BarcodeFormat.CODE_128.toString()); + put("maxicode", BarcodeFormat.MAXICODE.toString()); + put("rss14", BarcodeFormat.RSS_14.toString()); + put("rssexpanded", BarcodeFormat.RSS_EXPANDED.toString()); + put("upc_a", BarcodeFormat.UPC_A.toString()); + put("upc_ean", BarcodeFormat.UPC_EAN_EXTENSION.toString()); + } + }); + + public CameraModule(ReactApplicationContext reactContext) { + super(reactContext); + mScopedContext = new ScopedContext(reactContext); + } + + public ScopedContext getScopedContext() { + return mScopedContext; + } + + @Override + public String getName() { + return "RNCameraModule"; + } + + @Nullable + @Override + public Map getConstants() { + return Collections.unmodifiableMap(new HashMap() { + { + put("Type", getTypeConstants()); + put("FlashMode", getFlashModeConstants()); + put("AutoFocus", getAutoFocusConstants()); + put("WhiteBalance", getWhiteBalanceConstants()); + put("VideoQuality", getVideoQualityConstants()); + put("BarCodeType", getBarCodeConstants()); + put("FaceDetection", Collections.unmodifiableMap(new HashMap() { + { + put("Mode", getFaceDetectionModeConstants()); + put("Landmarks", getFaceDetectionLandmarksConstants()); + put("Classifications", getFaceDetectionClassificationsConstants()); + } + + private Map getFaceDetectionModeConstants() { + return Collections.unmodifiableMap(new HashMap() { + { + put("fast", RNFaceDetector.FAST_MODE); + put("accurate", RNFaceDetector.ACCURATE_MODE); + } + }); + } + + private Map getFaceDetectionClassificationsConstants() { + return Collections.unmodifiableMap(new HashMap() { + { + put("all", RNFaceDetector.ALL_CLASSIFICATIONS); + put("none", RNFaceDetector.NO_CLASSIFICATIONS); + } + }); + } + + private Map getFaceDetectionLandmarksConstants() { + return Collections.unmodifiableMap(new HashMap() { + { + put("all", RNFaceDetector.ALL_LANDMARKS); + put("none", RNFaceDetector.NO_LANDMARKS); + } + }); + } + })); + put("GoogleVisionBarcodeDetection", Collections.unmodifiableMap(new HashMap() { + { + put("BarcodeType", BarcodeFormatUtils.REVERSE_FORMATS); + put("BarcodeMode", getGoogleVisionBarcodeModeConstants()); + } + })); + put("Orientation", Collections.unmodifiableMap(new HashMap() { + { + put("auto", Constants.ORIENTATION_AUTO); + put("portrait", Constants.ORIENTATION_UP); + put("portraitUpsideDown", Constants.ORIENTATION_DOWN); + put("landscapeLeft", Constants.ORIENTATION_LEFT); + put("landscapeRight", Constants.ORIENTATION_RIGHT); + } + })); + } + + private Map getTypeConstants() { + return Collections.unmodifiableMap(new HashMap() { + { + put("front", Constants.FACING_FRONT); + put("back", Constants.FACING_BACK); + } + }); + } + + private Map getFlashModeConstants() { + return Collections.unmodifiableMap(new HashMap() { + { + put("off", Constants.FLASH_OFF); + put("on", Constants.FLASH_ON); + put("auto", Constants.FLASH_AUTO); + put("torch", Constants.FLASH_TORCH); + } + }); + } + + private Map getAutoFocusConstants() { + return Collections.unmodifiableMap(new HashMap() { + { + put("on", true); + put("off", false); + } + }); + } + + private Map getWhiteBalanceConstants() { + return Collections.unmodifiableMap(new HashMap() { + { + put("auto", Constants.WB_AUTO); + put("cloudy", Constants.WB_CLOUDY); + put("sunny", Constants.WB_SUNNY); + put("shadow", Constants.WB_SHADOW); + put("fluorescent", Constants.WB_FLUORESCENT); + put("incandescent", Constants.WB_INCANDESCENT); + } + }); + } + + private Map getVideoQualityConstants() { + return Collections.unmodifiableMap(new HashMap() { + { + put("2160p", VIDEO_2160P); + put("1080p", VIDEO_1080P); + put("720p", VIDEO_720P); + put("480p", VIDEO_480P); + put("4:3", VIDEO_4x3); + } + }); + } + + private Map getGoogleVisionBarcodeModeConstants() { + return Collections.unmodifiableMap(new HashMap() { + { + put("NORMAL", GOOGLE_VISION_BARCODE_MODE_NORMAL); + put("ALTERNATE", GOOGLE_VISION_BARCODE_MODE_ALTERNATE); + put("INVERTED", GOOGLE_VISION_BARCODE_MODE_INVERTED); + } + }); + } + + private Map getBarCodeConstants() { + return VALID_BARCODE_TYPES; + } + }); + } + + @ReactMethod + public void pausePreview(final int viewTag) { + final ReactApplicationContext context = getReactApplicationContext(); + UIManagerModule uiManager = context.getNativeModule(UIManagerModule.class); + uiManager.addUIBlock(new UIBlock() { + @Override + public void execute(NativeViewHierarchyManager nativeViewHierarchyManager) { + final RNCameraView cameraView; + + try { + cameraView = (RNCameraView) nativeViewHierarchyManager.resolveView(viewTag); + if (cameraView.isCameraOpened()) { + cameraView.pausePreview(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + + @ReactMethod + public void resumePreview(final int viewTag) { + final ReactApplicationContext context = getReactApplicationContext(); + UIManagerModule uiManager = context.getNativeModule(UIManagerModule.class); + uiManager.addUIBlock(new UIBlock() { + @Override + public void execute(NativeViewHierarchyManager nativeViewHierarchyManager) { + final RNCameraView cameraView; + + try { + cameraView = (RNCameraView) nativeViewHierarchyManager.resolveView(viewTag); + if (cameraView.isCameraOpened()) { + cameraView.resumePreview(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + + @ReactMethod + public void takePicture(final ReadableMap options, final int viewTag, final Promise promise) { + final ReactApplicationContext context = getReactApplicationContext(); + final File cacheDirectory = mScopedContext.getCacheDirectory(); + UIManagerModule uiManager = context.getNativeModule(UIManagerModule.class); + uiManager.addUIBlock(new UIBlock() { + @Override + public void execute(NativeViewHierarchyManager nativeViewHierarchyManager) { + RNCameraView cameraView = (RNCameraView) nativeViewHierarchyManager.resolveView(viewTag); + try { + if (cameraView.isCameraOpened()) { + cameraView.takePicture(options, promise, cacheDirectory); + } else { + promise.reject("E_CAMERA_UNAVAILABLE", "Camera is not running"); + } + } + catch (Exception e) { + promise.reject("E_TAKE_PICTURE_FAILED", e.getMessage()); + } + } + }); + } + + @ReactMethod + public void record(final ReadableMap options, final int viewTag, final Promise promise) { + final ReactApplicationContext context = getReactApplicationContext(); + final File cacheDirectory = mScopedContext.getCacheDirectory(); + UIManagerModule uiManager = context.getNativeModule(UIManagerModule.class); + + uiManager.addUIBlock(new UIBlock() { + @Override + public void execute(NativeViewHierarchyManager nativeViewHierarchyManager) { + final RNCameraView cameraView; + + try { + cameraView = (RNCameraView) nativeViewHierarchyManager.resolveView(viewTag); + if (cameraView.isCameraOpened()) { + cameraView.record(options, promise, cacheDirectory); + } else { + promise.reject("E_CAMERA_UNAVAILABLE", "Camera is not running"); + } + } catch (Exception e) { + promise.reject("E_CAPTURE_FAILED", e.getMessage()); + } + } + }); + } + + @ReactMethod + public void stopRecording(final int viewTag) { + final ReactApplicationContext context = getReactApplicationContext(); + UIManagerModule uiManager = context.getNativeModule(UIManagerModule.class); + uiManager.addUIBlock(new UIBlock() { + @Override + public void execute(NativeViewHierarchyManager nativeViewHierarchyManager) { + final RNCameraView cameraView; + + try { + cameraView = (RNCameraView) nativeViewHierarchyManager.resolveView(viewTag); + if (cameraView.isCameraOpened()) { + cameraView.stopRecording(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + + @ReactMethod + public void getSupportedRatios(final int viewTag, final Promise promise) { + final ReactApplicationContext context = getReactApplicationContext(); + UIManagerModule uiManager = context.getNativeModule(UIManagerModule.class); + uiManager.addUIBlock(new UIBlock() { + @Override + public void execute(NativeViewHierarchyManager nativeViewHierarchyManager) { + final RNCameraView cameraView; + try { + cameraView = (RNCameraView) nativeViewHierarchyManager.resolveView(viewTag); + WritableArray result = Arguments.createArray(); + if (cameraView.isCameraOpened()) { + Set ratios = cameraView.getSupportedAspectRatios(); + for (AspectRatio ratio : ratios) { + result.pushString(ratio.toString()); + } + promise.resolve(result); + } else { + promise.reject("E_CAMERA_UNAVAILABLE", "Camera is not running"); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + + @ReactMethod + public void getCameraIds(final int viewTag, final Promise promise) { + final ReactApplicationContext context = getReactApplicationContext(); + UIManagerModule uiManager = context.getNativeModule(UIManagerModule.class); + uiManager.addUIBlock(new UIBlock() { + @Override + public void execute(NativeViewHierarchyManager nativeViewHierarchyManager) { + final RNCameraView cameraView; + try { + cameraView = (RNCameraView) nativeViewHierarchyManager.resolveView(viewTag); + WritableArray result = Arguments.createArray(); + List ids = cameraView.getCameraIds(); + for (Properties p : ids) { + WritableMap m = new WritableNativeMap(); + m.putString("id", p.getProperty("id")); + m.putInt("type", Integer.valueOf(p.getProperty("type"))); + result.pushMap(m); + } + promise.resolve(result); + } catch (Exception e) { + e.printStackTrace(); + promise.reject("E_CAMERA_FAILED", e.getMessage()); + } + } + }); + } + + @ReactMethod + public void getAvailablePictureSizes(final String ratio, final int viewTag, final Promise promise) { + final ReactApplicationContext context = getReactApplicationContext(); + UIManagerModule uiManager = context.getNativeModule(UIManagerModule.class); + uiManager.addUIBlock(new UIBlock() { + @Override + public void execute(NativeViewHierarchyManager nativeViewHierarchyManager) { + final RNCameraView cameraView; + + try { + cameraView = (RNCameraView) nativeViewHierarchyManager.resolveView(viewTag); + WritableArray result = Arguments.createArray(); + if (cameraView.isCameraOpened()) { + SortedSet sizes = cameraView.getAvailablePictureSizes(AspectRatio.parse(ratio)); + for (Size size : sizes) { + result.pushString(size.toString()); + } + promise.resolve(result); + } else { + promise.reject("E_CAMERA_UNAVAILABLE", "Camera is not running"); + } + } catch (Exception e) { + promise.reject("E_CAMERA_BAD_VIEWTAG", "getAvailablePictureSizesAsync: Expected a Camera component"); + } + } + }); + } + + @ReactMethod + public void checkIfRecordAudioPermissionsAreDefined(final Promise promise) { + try { + PackageInfo info = getCurrentActivity().getPackageManager().getPackageInfo(getReactApplicationContext().getPackageName(), PackageManager.GET_PERMISSIONS); + if (info.requestedPermissions != null) { + for (String p : info.requestedPermissions) { + if (p.equals(Manifest.permission.RECORD_AUDIO)) { + promise.resolve(true); + return; + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + promise.resolve(false); + } +} diff --git a/android/src/main/java/org/reactnative/camera/CameraViewManager.java b/android/src/main/java/org/reactnative/camera/CameraViewManager.java new file mode 100644 index 0000000..32a5724 --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/CameraViewManager.java @@ -0,0 +1,226 @@ +package org.reactnative.camera; + +import androidx.annotation.Nullable; +import com.facebook.react.bridge.ReadableArray; +import com.facebook.react.bridge.ReadableMap; +import com.facebook.react.common.MapBuilder; +import com.facebook.react.uimanager.ThemedReactContext; +import com.facebook.react.uimanager.ViewGroupManager; +import com.facebook.react.uimanager.annotations.ReactProp; +import com.google.android.cameraview.AspectRatio; +import com.google.android.cameraview.Size; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class CameraViewManager extends ViewGroupManager { + public enum Events { + EVENT_CAMERA_READY("onCameraReady"), + EVENT_PREVIEW_COLOR("onPreviewColor"), + EVENT_ON_MOUNT_ERROR("onMountError"), + EVENT_ON_BAR_CODE_READ("onBarCodeRead"), + EVENT_ON_FACES_DETECTED("onFacesDetected"), + EVENT_ON_BARCODES_DETECTED("onGoogleVisionBarcodesDetected"), + EVENT_ON_FACE_DETECTION_ERROR("onFaceDetectionError"), + EVENT_ON_BARCODE_DETECTION_ERROR("onGoogleVisionBarcodeDetectionError"), + EVENT_ON_TEXT_RECOGNIZED("onTextRecognized"), + EVENT_ON_PICTURE_TAKEN("onPictureTaken"), + EVENT_ON_PICTURE_SAVED("onPictureSaved"), + EVENT_ON_RECORDING_START("onRecordingStart"), + EVENT_ON_RECORDING_END("onRecordingEnd"); + + private final String mName; + + Events(final String name) { + mName = name; + } + + @Override + public String toString() { + return mName; + } + } + + private static final String REACT_CLASS = "RNCamera"; + + @Override + public void onDropViewInstance(RNCameraView view) { + view.onHostDestroy(); + super.onDropViewInstance(view); + } + + + @Override + public String getName() { + return REACT_CLASS; + } + + @Override + protected RNCameraView createViewInstance(ThemedReactContext themedReactContext) { + return new RNCameraView(themedReactContext); + } + + @Override + @Nullable + public Map getExportedCustomDirectEventTypeConstants() { + MapBuilder.Builder builder = MapBuilder.builder(); + for (Events event : Events.values()) { + builder.put(event.toString(), MapBuilder.of("registrationName", event.toString())); + } + return builder.build(); + } + + @ReactProp(name = "type") + public void setType(RNCameraView view, int type) { + view.setFacing(type); + } + + @ReactProp(name = "cameraId") + public void setCameraId(RNCameraView view, String id) { + view.setCameraId(id); + } + + @ReactProp(name = "ratio") + public void setRatio(RNCameraView view, String ratio) { + view.setAspectRatio(AspectRatio.parse(ratio)); + } + + @ReactProp(name = "flashMode") + public void setFlashMode(RNCameraView view, int torchMode) { + view.setFlash(torchMode); + } + + @ReactProp(name = "exposure") + public void setExposureCompensation(RNCameraView view, float exposure){ + view.setExposureCompensation(exposure); + } + + @ReactProp(name = "autoFocus") + public void setAutoFocus(RNCameraView view, boolean autoFocus) { + view.setAutoFocus(autoFocus); + } + + @ReactProp(name = "focusDepth") + public void setFocusDepth(RNCameraView view, float depth) { + view.setFocusDepth(depth); + } + + @ReactProp(name = "autoFocusPointOfInterest") + public void setAutoFocusPointOfInterest(RNCameraView view, ReadableMap coordinates) { + if(coordinates != null){ + float x = (float) coordinates.getDouble("x"); + float y = (float) coordinates.getDouble("y"); + view.setAutoFocusPointOfInterest(x, y); + } + } + + @ReactProp(name = "zoom") + public void setZoom(RNCameraView view, float zoom) { + view.setZoom(zoom); + } + + @ReactProp(name = "whiteBalance") + public void setWhiteBalance(RNCameraView view, int whiteBalance) { + view.setWhiteBalance(whiteBalance); + } + + @ReactProp(name = "pictureSize") + public void setPictureSize(RNCameraView view, String size) { + view.setPictureSize(size.equals("None") ? null : Size.parse(size)); + } + + @ReactProp(name = "playSoundOnCapture") + public void setPlaySoundOnCapture(RNCameraView view, boolean playSoundOnCapture) { + view.setPlaySoundOnCapture(playSoundOnCapture); + } + + @ReactProp(name = "barCodeTypes") + public void setBarCodeTypes(RNCameraView view, ReadableArray barCodeTypes) { + if (barCodeTypes == null) { + return; + } + List result = new ArrayList<>(barCodeTypes.size()); + for (int i = 0; i < barCodeTypes.size(); i++) { + result.add(barCodeTypes.getString(i)); + } + view.setBarCodeTypes(result); + } + + @ReactProp(name = "barCodeScannerEnabled") + public void setBarCodeScanning(RNCameraView view, boolean barCodeScannerEnabled) { + view.setShouldScanBarCodes(barCodeScannerEnabled); + } + + @ReactProp(name = "useCamera2Api") + public void setUseCamera2Api(RNCameraView view, boolean useCamera2Api) { + view.setUsingCamera2Api(useCamera2Api); + } + + @ReactProp(name = "faceDetectorEnabled") + public void setFaceDetecting(RNCameraView view, boolean faceDetectorEnabled) { + view.setShouldDetectFaces(faceDetectorEnabled); + } + + @ReactProp(name = "faceDetectionMode") + public void setFaceDetectionMode(RNCameraView view, int mode) { + view.setFaceDetectionMode(mode); + } + + @ReactProp(name = "faceDetectionLandmarks") + public void setFaceDetectionLandmarks(RNCameraView view, int landmarks) { + view.setFaceDetectionLandmarks(landmarks); + } + + @ReactProp(name = "faceDetectionClassifications") + public void setFaceDetectionClassifications(RNCameraView view, int classifications) { + view.setFaceDetectionClassifications(classifications); + } + + @ReactProp(name = "trackingEnabled") + public void setTracking(RNCameraView view, boolean trackingEnabled) { + view.setTracking(trackingEnabled); + } + + @ReactProp(name = "googleVisionBarcodeDetectorEnabled") + public void setGoogleVisionBarcodeDetecting(RNCameraView view, boolean googleBarcodeDetectorEnabled) { + view.setShouldGoogleDetectBarcodes(googleBarcodeDetectorEnabled); + } + + @ReactProp(name = "googleVisionBarcodeType") + public void setGoogleVisionBarcodeType(RNCameraView view, int barcodeType) { + view.setGoogleVisionBarcodeType(barcodeType); + } + + @ReactProp(name = "googleVisionBarcodeMode") + public void setGoogleVisionBarcodeMode(RNCameraView view, int barcodeMode) { + view.setGoogleVisionBarcodeMode(barcodeMode); + } + + @ReactProp(name = "textRecognizerEnabled") + public void setTextRecognizing(RNCameraView view, boolean textRecognizerEnabled) { + view.setShouldRecognizeText(textRecognizerEnabled); + } + + /**---limit scan area addition---**/ + @ReactProp(name = "rectOfInterest") + public void setRectOfInterest(RNCameraView view, ReadableMap coordinates) { + if(coordinates != null){ + float x = (float) coordinates.getDouble("x"); + float y = (float) coordinates.getDouble("y"); + float width = (float) coordinates.getDouble("width"); + float height = (float) coordinates.getDouble("height"); + view.setRectOfInterest(x, y, width, height); + } + } + + @ReactProp(name = "cameraViewDimensions") + public void setCameraViewDimensions(RNCameraView view, ReadableMap dimensions) { + if(dimensions != null){ + int cameraViewWidth = (int) dimensions.getDouble("width"); + int cameraViewHeight = (int) dimensions.getDouble("height"); + view.setCameraViewDimensions(cameraViewWidth, cameraViewHeight); + } + } + /**---limit scan area addition---**/ +} diff --git a/android/src/main/java/org/reactnative/camera/Constants.java b/android/src/main/java/org/reactnative/camera/Constants.java new file mode 100644 index 0000000..324bc7e --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/Constants.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.reactnative.camera; + +import com.google.android.cameraview.AspectRatio; + +public interface Constants { + + AspectRatio DEFAULT_ASPECT_RATIO = AspectRatio.of(4, 3); + + int FACING_BACK = 0; + int FACING_FRONT = 1; + + int FLASH_OFF = 0; + int FLASH_ON = 1; + int FLASH_TORCH = 2; + int FLASH_AUTO = 3; + int FLASH_RED_EYE = 4; + + int LANDSCAPE_90 = 90; + int LANDSCAPE_270 = 270; + + int WB_AUTO = 0; + int WB_CLOUDY = 1; + int WB_SUNNY = 2; + int WB_SHADOW = 3; + int WB_FLUORESCENT = 4; + int WB_INCANDESCENT = 5; + + int ORIENTATION_AUTO = 0; + int ORIENTATION_UP = 1; + int ORIENTATION_DOWN = 2; + int ORIENTATION_LEFT = 3; + int ORIENTATION_RIGHT = 4; +} diff --git a/android/src/main/java/org/reactnative/camera/RNCameraPackage.java b/android/src/main/java/org/reactnative/camera/RNCameraPackage.java new file mode 100644 index 0000000..a72a71b --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/RNCameraPackage.java @@ -0,0 +1,43 @@ +package org.reactnative.camera; + +import com.facebook.react.ReactPackage; +import com.facebook.react.bridge.JavaScriptModule; +import com.facebook.react.bridge.NativeModule; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.uimanager.ViewManager; +import com.lwansbrough.RCTCamera.RCTCameraModule; +import com.lwansbrough.RCTCamera.RCTCameraViewManager; + +import org.reactnative.facedetector.FaceDetectorModule; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +/** + * Created by jgfidelis on 02/02/18. + */ + +public class RNCameraPackage implements ReactPackage { + @Override + public List createNativeModules(ReactApplicationContext reactApplicationContext) { + return Arrays.asList( + new RCTCameraModule(reactApplicationContext), + new CameraModule(reactApplicationContext), + new FaceDetectorModule(reactApplicationContext) + ); + } + + // Deprecated in RN 0.47 + public List> createJSModules() { + return Collections.emptyList(); + } + + @Override + public List createViewManagers(ReactApplicationContext reactApplicationContext) { + return Arrays.asList( + new RCTCameraViewManager(), + new CameraViewManager() + ); + } +} diff --git a/android/src/main/java/org/reactnative/camera/RNCameraView.java b/android/src/main/java/org/reactnative/camera/RNCameraView.java new file mode 100644 index 0000000..0534cf5 --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/RNCameraView.java @@ -0,0 +1,614 @@ +package org.reactnative.camera; + +import android.Manifest; +import android.annotation.SuppressLint; +import android.content.pm.PackageManager; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.Rect; +import android.graphics.YuvImage; +import android.media.CamcorderProfile; +import android.os.Build; +import androidx.core.content.ContextCompat; + +import android.util.Log; +import android.view.View; +import android.os.AsyncTask; +import com.facebook.react.bridge.*; +import com.facebook.react.uimanager.ThemedReactContext; +import com.google.android.cameraview.CameraView; +import com.google.zxing.BarcodeFormat; +import com.google.zxing.DecodeHintType; +import com.google.zxing.MultiFormatReader; +import com.google.zxing.Result; +import org.reactnative.barcodedetector.RNBarcodeDetector; +import org.reactnative.camera.tasks.*; +import org.reactnative.camera.utils.RNFileUtils; +import org.reactnative.facedetector.RNFaceDetector; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentLinkedQueue; + +public class RNCameraView extends CameraView implements LifecycleEventListener, BarCodeScannerAsyncTaskDelegate, FaceDetectorAsyncTaskDelegate, + BarcodeDetectorAsyncTaskDelegate, TextRecognizerAsyncTaskDelegate, PictureSavedDelegate { + private ThemedReactContext mThemedReactContext; + private Queue mPictureTakenPromises = new ConcurrentLinkedQueue<>(); + private Map mPictureTakenOptions = new ConcurrentHashMap<>(); + private Map mPictureTakenDirectories = new ConcurrentHashMap<>(); + private Promise mVideoRecordedPromise; + private List mBarCodeTypes = null; + + private boolean mIsPaused = false; + private boolean mIsNew = true; + private boolean invertImageData = false; + private Boolean mIsRecording = false; + private Boolean mIsRecordingInterrupted = false; + + // Concurrency lock for scanners to avoid flooding the runtime + public volatile boolean barCodeScannerTaskLock = false; + public volatile boolean faceDetectorTaskLock = false; + public volatile boolean googleBarcodeDetectorTaskLock = false; + public volatile boolean textRecognizerTaskLock = false; + + // Scanning-related properties + private MultiFormatReader mMultiFormatReader; + private RNFaceDetector mFaceDetector; + private RNBarcodeDetector mGoogleBarcodeDetector; + private boolean mShouldDetectFaces = false; + private boolean mShouldGoogleDetectBarcodes = false; + private boolean mShouldScanBarCodes = false; + private boolean mShouldRecognizeText = false; + private int mFaceDetectorMode = RNFaceDetector.FAST_MODE; + private int mFaceDetectionLandmarks = RNFaceDetector.NO_LANDMARKS; + private int mFaceDetectionClassifications = RNFaceDetector.NO_CLASSIFICATIONS; + private int mGoogleVisionBarCodeType = RNBarcodeDetector.ALL_FORMATS; + private int mGoogleVisionBarCodeMode = RNBarcodeDetector.NORMAL_MODE; + private boolean mTrackingEnabled = true; + private int mPaddingX; + private int mPaddingY; + + // Limit Android Scan Area + private boolean mLimitScanArea = false; + private float mScanAreaX = 0.0f; + private float mScanAreaY = 0.0f; + private float mScanAreaWidth = 0.0f; + private float mScanAreaHeight = 0.0f; + private int mCameraViewWidth = 0; + private int mCameraViewHeight = 0; + + public RNCameraView(ThemedReactContext themedReactContext) { + super(themedReactContext, true); + mThemedReactContext = themedReactContext; + themedReactContext.addLifecycleEventListener(this); + + addCallback(new Callback() { + @Override + public void onCameraOpened(CameraView cameraView) { + RNCameraViewHelper.emitCameraReadyEvent(cameraView); + } + + @Override + public void onMountError(CameraView cameraView) { + RNCameraViewHelper.emitMountErrorEvent(cameraView, "Camera view threw an error - component could not be rendered."); + } + + @Override + public void onPictureTaken(CameraView cameraView, final byte[] data, int deviceOrientation) { + Promise promise = mPictureTakenPromises.poll(); + ReadableMap options = mPictureTakenOptions.remove(promise); + if (options.hasKey("fastMode") && options.getBoolean("fastMode")) { + promise.resolve(null); + } + final File cacheDirectory = mPictureTakenDirectories.remove(promise); + if(Build.VERSION.SDK_INT >= 11/*HONEYCOMB*/) { + new ResolveTakenPictureAsyncTask(data, promise, options, cacheDirectory, deviceOrientation, RNCameraView.this) + .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + } else { + new ResolveTakenPictureAsyncTask(data, promise, options, cacheDirectory, deviceOrientation, RNCameraView.this) + .execute(); + } + RNCameraViewHelper.emitPictureTakenEvent(cameraView); + } + + @Override + public void onRecordingStart(CameraView cameraView, String path, int videoOrientation, int deviceOrientation) { + WritableMap result = Arguments.createMap(); + result.putInt("videoOrientation", videoOrientation); + result.putInt("deviceOrientation", deviceOrientation); + result.putString("uri", RNFileUtils.uriFromFile(new File(path)).toString()); + RNCameraViewHelper.emitRecordingStartEvent(cameraView, result); + } + + @Override + public void onRecordingEnd(CameraView cameraView) { + RNCameraViewHelper.emitRecordingEndEvent(cameraView); + } + + @Override + public void onVideoRecorded(CameraView cameraView, String path, int videoOrientation, int deviceOrientation) { + if (mVideoRecordedPromise != null) { + if (path != null) { + WritableMap result = Arguments.createMap(); + result.putBoolean("isRecordingInterrupted", mIsRecordingInterrupted); + result.putInt("videoOrientation", videoOrientation); + result.putInt("deviceOrientation", deviceOrientation); + result.putString("uri", RNFileUtils.uriFromFile(new File(path)).toString()); + mVideoRecordedPromise.resolve(result); + } else { + mVideoRecordedPromise.reject("E_RECORDING", "Couldn't stop recording - there is none in progress"); + } + mIsRecording = false; + mIsRecordingInterrupted = false; + mVideoRecordedPromise = null; + } + } + + @Override + public void onFramePreview(CameraView cameraView, byte[] data, int width, int height, int rotation) { + int correctRotation = RNCameraViewHelper.getCorrectCameraRotation(rotation, getFacing(), getCameraOrientation()); + boolean willCallBarCodeTask = mShouldScanBarCodes && !barCodeScannerTaskLock && cameraView instanceof BarCodeScannerAsyncTaskDelegate; + boolean willCallFaceTask = mShouldDetectFaces && !faceDetectorTaskLock && cameraView instanceof FaceDetectorAsyncTaskDelegate; + boolean willCallGoogleBarcodeTask = mShouldGoogleDetectBarcodes && !googleBarcodeDetectorTaskLock && cameraView instanceof BarcodeDetectorAsyncTaskDelegate; + boolean willCallTextTask = mShouldRecognizeText && !textRecognizerTaskLock && cameraView instanceof TextRecognizerAsyncTaskDelegate; + boolean willCallPreviewColor = true; + if (!willCallBarCodeTask && !willCallFaceTask && !willCallGoogleBarcodeTask && !willCallTextTask && !willCallPreviewColor) { + return; + } + + if (data.length < (1.5 * width * height)) { + return; + } + + if(willCallPreviewColor){ + + YuvImage yuvImage = new YuvImage(data, 17, width, height, null); + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + yuvImage.compressToJpeg(new Rect(0, 0, width, height), 80, byteArrayOutputStream); + byte[] byteArray = byteArrayOutputStream.toByteArray(); + Bitmap decodeByteArray = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length); + int w = decodeByteArray.getWidth() / 2; + int h = decodeByteArray.getHeight() / 2; + + int count = 0; + int r = 0; + int g = 0; + int b = 0; + for(int i = w -1; i <= w + 1; i++){ + for(int j = h - 1; j <= h +1; j++){ + count ++; + int c = decodeByteArray.getPixel(i, j); + r += (c >> 16) & 0xff; + g += (c >> 8) & 0xff; + b += c & 0xff; + + } + } + + r = r/count; + g = g/count; + b = b/count; + RNCameraViewHelper.emitPreviewColorEvent(cameraView, (r<<16) + (g << 8) + b, r, g, b); + } + + if (willCallBarCodeTask) { + barCodeScannerTaskLock = true; + BarCodeScannerAsyncTaskDelegate delegate = (BarCodeScannerAsyncTaskDelegate) cameraView; + new BarCodeScannerAsyncTask(delegate, mMultiFormatReader, data, width, height, mLimitScanArea, mScanAreaX, mScanAreaY, mScanAreaWidth, mScanAreaHeight, mCameraViewWidth, mCameraViewHeight, getAspectRatio().toFloat()).execute(); + } + + if (willCallFaceTask) { + faceDetectorTaskLock = true; + FaceDetectorAsyncTaskDelegate delegate = (FaceDetectorAsyncTaskDelegate) cameraView; + new FaceDetectorAsyncTask(delegate, mFaceDetector, data, width, height, correctRotation, getResources().getDisplayMetrics().density, getFacing(), getWidth(), getHeight(), mPaddingX, mPaddingY).execute(); + } + + if (willCallGoogleBarcodeTask) { + googleBarcodeDetectorTaskLock = true; + if (mGoogleVisionBarCodeMode == RNBarcodeDetector.NORMAL_MODE) { + invertImageData = false; + } else if (mGoogleVisionBarCodeMode == RNBarcodeDetector.ALTERNATE_MODE) { + invertImageData = !invertImageData; + } else if (mGoogleVisionBarCodeMode == RNBarcodeDetector.INVERTED_MODE) { + invertImageData = true; + } + if (invertImageData) { + for (int y = 0; y < data.length; y++) { + data[y] = (byte) ~data[y]; + } + } + BarcodeDetectorAsyncTaskDelegate delegate = (BarcodeDetectorAsyncTaskDelegate) cameraView; + new BarcodeDetectorAsyncTask(delegate, mGoogleBarcodeDetector, data, width, height, correctRotation, getResources().getDisplayMetrics().density, getFacing(), getWidth(), getHeight(), mPaddingX, mPaddingY).execute(); + } + + if (willCallTextTask) { + textRecognizerTaskLock = true; + TextRecognizerAsyncTaskDelegate delegate = (TextRecognizerAsyncTaskDelegate) cameraView; + new TextRecognizerAsyncTask(delegate, mThemedReactContext, data, width, height, correctRotation, getResources().getDisplayMetrics().density, getFacing(), getWidth(), getHeight(), mPaddingX, mPaddingY).execute(); + } + + + } + }); + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + View preview = getView(); + if (null == preview) { + return; + } + float width = right - left; + float height = bottom - top; + float ratio = getAspectRatio().toFloat(); + int orientation = getResources().getConfiguration().orientation; + int correctHeight; + int correctWidth; + this.setBackgroundColor(Color.BLACK); + if (orientation == android.content.res.Configuration.ORIENTATION_LANDSCAPE) { + if (ratio * height < width) { + correctHeight = (int) (width / ratio); + correctWidth = (int) width; + } else { + correctWidth = (int) (height * ratio); + correctHeight = (int) height; + } + } else { + if (ratio * width > height) { + correctHeight = (int) (width * ratio); + correctWidth = (int) width; + } else { + correctWidth = (int) (height / ratio); + correctHeight = (int) height; + } + } + int paddingX = (int) ((width - correctWidth) / 2); + int paddingY = (int) ((height - correctHeight) / 2); + mPaddingX = paddingX; + mPaddingY = paddingY; + preview.layout(paddingX, paddingY, correctWidth + paddingX, correctHeight + paddingY); + } + + @SuppressLint("all") + @Override + public void requestLayout() { + // React handles this for us, so we don't need to call super.requestLayout(); + } + + public void setBarCodeTypes(List barCodeTypes) { + mBarCodeTypes = barCodeTypes; + initBarcodeReader(); + } + + public void takePicture(final ReadableMap options, final Promise promise, final File cacheDirectory) { + mBgHandler.post(new Runnable() { + @Override + public void run() { + mPictureTakenPromises.add(promise); + mPictureTakenOptions.put(promise, options); + mPictureTakenDirectories.put(promise, cacheDirectory); + + try { + RNCameraView.super.takePicture(options); + } catch (Exception e) { + mPictureTakenPromises.remove(promise); + mPictureTakenOptions.remove(promise); + mPictureTakenDirectories.remove(promise); + + promise.reject("E_TAKE_PICTURE_FAILED", e.getMessage()); + } + } + }); + } + + @Override + public void onPictureSaved(WritableMap response) { + RNCameraViewHelper.emitPictureSavedEvent(this, response); + } + + public void record(final ReadableMap options, final Promise promise, final File cacheDirectory) { + mBgHandler.post(new Runnable() { + @Override + public void run() { + try { + String path = options.hasKey("path") ? options.getString("path") : RNFileUtils.getOutputFilePath(cacheDirectory, ".mp4"); + int maxDuration = options.hasKey("maxDuration") ? options.getInt("maxDuration") : -1; + int maxFileSize = options.hasKey("maxFileSize") ? options.getInt("maxFileSize") : -1; + + CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH); + if (options.hasKey("quality")) { + profile = RNCameraViewHelper.getCamcorderProfile(options.getInt("quality")); + } + if (options.hasKey("videoBitrate")) { + profile.videoBitRate = options.getInt("videoBitrate"); + } + + boolean recordAudio = true; + if (options.hasKey("mute")) { + recordAudio = !options.getBoolean("mute"); + } + + int orientation = Constants.ORIENTATION_AUTO; + if (options.hasKey("orientation")) { + orientation = options.getInt("orientation"); + } + + if (RNCameraView.super.record(path, maxDuration * 1000, maxFileSize, recordAudio, profile, orientation)) { + mIsRecording = true; + mVideoRecordedPromise = promise; + } else { + promise.reject("E_RECORDING_FAILED", "Starting video recording failed. Another recording might be in progress."); + } + } catch (IOException e) { + promise.reject("E_RECORDING_FAILED", "Starting video recording failed - could not create video file."); + } + } + }); + } + + /** + * Initialize the barcode decoder. + * Supports all iOS codes except [code138, code39mod43, itf14] + * Additionally supports [codabar, code128, maxicode, rss14, rssexpanded, upc_a, upc_ean] + */ + private void initBarcodeReader() { + mMultiFormatReader = new MultiFormatReader(); + EnumMap hints = new EnumMap<>(DecodeHintType.class); + EnumSet decodeFormats = EnumSet.noneOf(BarcodeFormat.class); + + if (mBarCodeTypes != null) { + for (String code : mBarCodeTypes) { + String formatString = (String) CameraModule.VALID_BARCODE_TYPES.get(code); + if (formatString != null) { + decodeFormats.add(BarcodeFormat.valueOf(formatString)); + } + } + } + + hints.put(DecodeHintType.POSSIBLE_FORMATS, decodeFormats); + mMultiFormatReader.setHints(hints); + } + + public void setShouldScanBarCodes(boolean shouldScanBarCodes) { + if (shouldScanBarCodes && mMultiFormatReader == null) { + initBarcodeReader(); + } + this.mShouldScanBarCodes = shouldScanBarCodes; + setScanning(mShouldDetectFaces || mShouldGoogleDetectBarcodes || mShouldScanBarCodes || mShouldRecognizeText); + } + + public void onBarCodeRead(Result barCode, int width, int height) { + String barCodeType = barCode.getBarcodeFormat().toString(); + if (!mShouldScanBarCodes || !mBarCodeTypes.contains(barCodeType)) { + return; + } + + RNCameraViewHelper.emitBarCodeReadEvent(this, barCode, width, height); + } + + public void onBarCodeScanningTaskCompleted() { + barCodeScannerTaskLock = false; + if(mMultiFormatReader != null) { + mMultiFormatReader.reset(); + } + } + + // Limit Scan Area + public void setRectOfInterest(float x, float y, float width, float height) { + this.mLimitScanArea = true; + this.mScanAreaX = x; + this.mScanAreaY = y; + this.mScanAreaWidth = width; + this.mScanAreaHeight = height; + } + public void setCameraViewDimensions(int width, int height) { + this.mCameraViewWidth = width; + this.mCameraViewHeight = height; + } + + /** + * Initial setup of the face detector + */ + private void setupFaceDetector() { + mFaceDetector = new RNFaceDetector(mThemedReactContext); + mFaceDetector.setMode(mFaceDetectorMode); + mFaceDetector.setLandmarkType(mFaceDetectionLandmarks); + mFaceDetector.setClassificationType(mFaceDetectionClassifications); + mFaceDetector.setTracking(mTrackingEnabled); + } + + public void setFaceDetectionLandmarks(int landmarks) { + mFaceDetectionLandmarks = landmarks; + if (mFaceDetector != null) { + mFaceDetector.setLandmarkType(landmarks); + } + } + + public void setFaceDetectionClassifications(int classifications) { + mFaceDetectionClassifications = classifications; + if (mFaceDetector != null) { + mFaceDetector.setClassificationType(classifications); + } + } + + public void setFaceDetectionMode(int mode) { + mFaceDetectorMode = mode; + if (mFaceDetector != null) { + mFaceDetector.setMode(mode); + } + } + + public void setTracking(boolean trackingEnabled) { + mTrackingEnabled = trackingEnabled; + if (mFaceDetector != null) { + mFaceDetector.setTracking(trackingEnabled); + } + } + + public void setShouldDetectFaces(boolean shouldDetectFaces) { + if (shouldDetectFaces && mFaceDetector == null) { + setupFaceDetector(); + } + this.mShouldDetectFaces = shouldDetectFaces; + setScanning(mShouldDetectFaces || mShouldGoogleDetectBarcodes || mShouldScanBarCodes || mShouldRecognizeText); + } + + public void onFacesDetected(WritableArray data) { + if (!mShouldDetectFaces) { + return; + } + + RNCameraViewHelper.emitFacesDetectedEvent(this, data); + } + + public void onFaceDetectionError(RNFaceDetector faceDetector) { + if (!mShouldDetectFaces) { + return; + } + + RNCameraViewHelper.emitFaceDetectionErrorEvent(this, faceDetector); + } + + @Override + public void onFaceDetectingTaskCompleted() { + faceDetectorTaskLock = false; + } + + /** + * Initial setup of the barcode detector + */ + private void setupBarcodeDetector() { + mGoogleBarcodeDetector = new RNBarcodeDetector(mThemedReactContext); + mGoogleBarcodeDetector.setBarcodeType(mGoogleVisionBarCodeType); + } + + public void setShouldGoogleDetectBarcodes(boolean shouldDetectBarcodes) { + if (shouldDetectBarcodes && mGoogleBarcodeDetector == null) { + setupBarcodeDetector(); + } + this.mShouldGoogleDetectBarcodes = shouldDetectBarcodes; + setScanning(mShouldDetectFaces || mShouldGoogleDetectBarcodes || mShouldScanBarCodes || mShouldRecognizeText); + } + + public void setGoogleVisionBarcodeType(int barcodeType) { + mGoogleVisionBarCodeType = barcodeType; + if (mGoogleBarcodeDetector != null) { + mGoogleBarcodeDetector.setBarcodeType(barcodeType); + } + } + + public void setGoogleVisionBarcodeMode(int barcodeMode) { + mGoogleVisionBarCodeMode = barcodeMode; + } + + public void onBarcodesDetected(WritableArray barcodesDetected) { + if (!mShouldGoogleDetectBarcodes) { + return; + } + RNCameraViewHelper.emitBarcodesDetectedEvent(this, barcodesDetected); + } + + public void onBarcodeDetectionError(RNBarcodeDetector barcodeDetector) { + if (!mShouldGoogleDetectBarcodes) { + return; + } + + RNCameraViewHelper.emitBarcodeDetectionErrorEvent(this, barcodeDetector); + } + + @Override + public void onBarcodeDetectingTaskCompleted() { + googleBarcodeDetectorTaskLock = false; + } + + /** + * + * Text recognition + */ + + public void setShouldRecognizeText(boolean shouldRecognizeText) { + this.mShouldRecognizeText = shouldRecognizeText; + setScanning(mShouldDetectFaces || mShouldGoogleDetectBarcodes || mShouldScanBarCodes || mShouldRecognizeText); + } + + public void onTextRecognized(WritableArray serializedData) { + if (!mShouldRecognizeText) { + return; + } + + RNCameraViewHelper.emitTextRecognizedEvent(this, serializedData); + } + + @Override + public void onTextRecognizerTaskCompleted() { + textRecognizerTaskLock = false; + } + + /** + * + * End Text Recognition */ + + @Override + public void onHostResume() { + if (hasCameraPermissions()) { + mBgHandler.post(new Runnable() { + @Override + public void run() { + if ((mIsPaused && !isCameraOpened()) || mIsNew) { + mIsPaused = false; + mIsNew = false; + start(); + } + } + }); + } else { + RNCameraViewHelper.emitMountErrorEvent(this, "Camera permissions not granted - component could not be rendered."); + } + } + + @Override + public void onHostPause() { + if (mIsRecording) { + mIsRecordingInterrupted = true; + } + if (!mIsPaused && isCameraOpened()) { + mIsPaused = true; + stop(); + } + } + + @Override + public void onHostDestroy() { + if (mFaceDetector != null) { + mFaceDetector.release(); + } + if (mGoogleBarcodeDetector != null) { + mGoogleBarcodeDetector.release(); + } + mMultiFormatReader = null; + mThemedReactContext.removeLifecycleEventListener(this); + + // camera release can be quite expensive. Run in on bg handler + // and cleanup last once everything has finished + mBgHandler.post(new Runnable() { + @Override + public void run() { + stop(); + cleanup(); + } + }); + } + + private boolean hasCameraPermissions() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + int result = ContextCompat.checkSelfPermission(getContext(), Manifest.permission.CAMERA); + return result == PackageManager.PERMISSION_GRANTED; + } else { + return true; + } + } +} diff --git a/android/src/main/java/org/reactnative/camera/RNCameraViewHelper.java b/android/src/main/java/org/reactnative/camera/RNCameraViewHelper.java new file mode 100644 index 0000000..75fe43b --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/RNCameraViewHelper.java @@ -0,0 +1,477 @@ +package org.reactnative.camera; + +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.media.CamcorderProfile; +import android.os.Build; +import androidx.exifinterface.media.ExifInterface; + +import android.util.Log; +import android.view.ViewGroup; +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactContext; +import com.facebook.react.bridge.ReadableMapKeySetIterator; +import com.facebook.react.bridge.ReadableMap; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.uimanager.UIManagerModule; +import com.google.android.cameraview.CameraView; +import com.google.zxing.Result; +import org.reactnative.camera.events.*; +import org.reactnative.barcodedetector.RNBarcodeDetector; +import org.reactnative.facedetector.RNFaceDetector; + +import java.text.SimpleDateFormat; +import java.util.Calendar; + +public class RNCameraViewHelper { + + public static final String[][] exifTags = new String[][]{ + {"string", ExifInterface.TAG_ARTIST}, + {"int", ExifInterface.TAG_BITS_PER_SAMPLE}, + {"int", ExifInterface.TAG_COMPRESSION}, + {"string", ExifInterface.TAG_COPYRIGHT}, + {"string", ExifInterface.TAG_DATETIME}, + {"string", ExifInterface.TAG_IMAGE_DESCRIPTION}, + {"int", ExifInterface.TAG_IMAGE_LENGTH}, + {"int", ExifInterface.TAG_IMAGE_WIDTH}, + {"int", ExifInterface.TAG_JPEG_INTERCHANGE_FORMAT}, + {"int", ExifInterface.TAG_JPEG_INTERCHANGE_FORMAT_LENGTH}, + {"string", ExifInterface.TAG_MAKE}, + {"string", ExifInterface.TAG_MODEL}, + {"int", ExifInterface.TAG_ORIENTATION}, + {"int", ExifInterface.TAG_PHOTOMETRIC_INTERPRETATION}, + {"int", ExifInterface.TAG_PLANAR_CONFIGURATION}, + {"double", ExifInterface.TAG_PRIMARY_CHROMATICITIES}, + {"double", ExifInterface.TAG_REFERENCE_BLACK_WHITE}, + {"int", ExifInterface.TAG_RESOLUTION_UNIT}, + {"int", ExifInterface.TAG_ROWS_PER_STRIP}, + {"int", ExifInterface.TAG_SAMPLES_PER_PIXEL}, + {"string", ExifInterface.TAG_SOFTWARE}, + {"int", ExifInterface.TAG_STRIP_BYTE_COUNTS}, + {"int", ExifInterface.TAG_STRIP_OFFSETS}, + {"int", ExifInterface.TAG_TRANSFER_FUNCTION}, + {"double", ExifInterface.TAG_WHITE_POINT}, + {"double", ExifInterface.TAG_X_RESOLUTION}, + {"double", ExifInterface.TAG_Y_CB_CR_COEFFICIENTS}, + {"int", ExifInterface.TAG_Y_CB_CR_POSITIONING}, + {"int", ExifInterface.TAG_Y_CB_CR_SUB_SAMPLING}, + {"double", ExifInterface.TAG_Y_RESOLUTION}, + {"double", ExifInterface.TAG_APERTURE_VALUE}, + {"double", ExifInterface.TAG_BRIGHTNESS_VALUE}, + {"string", ExifInterface.TAG_CFA_PATTERN}, + {"int", ExifInterface.TAG_COLOR_SPACE}, + {"string", ExifInterface.TAG_COMPONENTS_CONFIGURATION}, + {"double", ExifInterface.TAG_COMPRESSED_BITS_PER_PIXEL}, + {"int", ExifInterface.TAG_CONTRAST}, + {"int", ExifInterface.TAG_CUSTOM_RENDERED}, + {"string", ExifInterface.TAG_DATETIME_DIGITIZED}, + {"string", ExifInterface.TAG_DATETIME_ORIGINAL}, + {"string", ExifInterface.TAG_DEVICE_SETTING_DESCRIPTION}, + {"double", ExifInterface.TAG_DIGITAL_ZOOM_RATIO}, + {"string", ExifInterface.TAG_EXIF_VERSION}, + {"double", ExifInterface.TAG_EXPOSURE_BIAS_VALUE}, + {"double", ExifInterface.TAG_EXPOSURE_INDEX}, + {"int", ExifInterface.TAG_EXPOSURE_MODE}, + {"int", ExifInterface.TAG_EXPOSURE_PROGRAM}, + {"double", ExifInterface.TAG_EXPOSURE_TIME}, + {"double", ExifInterface.TAG_F_NUMBER}, + {"string", ExifInterface.TAG_FILE_SOURCE}, + {"int", ExifInterface.TAG_FLASH}, + {"double", ExifInterface.TAG_FLASH_ENERGY}, + {"string", ExifInterface.TAG_FLASHPIX_VERSION}, + {"double", ExifInterface.TAG_FOCAL_LENGTH}, + {"int", ExifInterface.TAG_FOCAL_LENGTH_IN_35MM_FILM}, + {"int", ExifInterface.TAG_FOCAL_PLANE_RESOLUTION_UNIT}, + {"double", ExifInterface.TAG_FOCAL_PLANE_X_RESOLUTION}, + {"double", ExifInterface.TAG_FOCAL_PLANE_Y_RESOLUTION}, + {"int", ExifInterface.TAG_GAIN_CONTROL}, + {"int", ExifInterface.TAG_ISO_SPEED_RATINGS}, + {"string", ExifInterface.TAG_IMAGE_UNIQUE_ID}, + {"int", ExifInterface.TAG_LIGHT_SOURCE}, + {"string", ExifInterface.TAG_MAKER_NOTE}, + {"double", ExifInterface.TAG_MAX_APERTURE_VALUE}, + {"int", ExifInterface.TAG_METERING_MODE}, + {"int", ExifInterface.TAG_NEW_SUBFILE_TYPE}, + {"string", ExifInterface.TAG_OECF}, + {"int", ExifInterface.TAG_PIXEL_X_DIMENSION}, + {"int", ExifInterface.TAG_PIXEL_Y_DIMENSION}, + {"string", ExifInterface.TAG_RELATED_SOUND_FILE}, + {"int", ExifInterface.TAG_SATURATION}, + {"int", ExifInterface.TAG_SCENE_CAPTURE_TYPE}, + {"string", ExifInterface.TAG_SCENE_TYPE}, + {"int", ExifInterface.TAG_SENSING_METHOD}, + {"int", ExifInterface.TAG_SHARPNESS}, + {"double", ExifInterface.TAG_SHUTTER_SPEED_VALUE}, + {"string", ExifInterface.TAG_SPATIAL_FREQUENCY_RESPONSE}, + {"string", ExifInterface.TAG_SPECTRAL_SENSITIVITY}, + {"int", ExifInterface.TAG_SUBFILE_TYPE}, + {"string", ExifInterface.TAG_SUBSEC_TIME}, + {"string", ExifInterface.TAG_SUBSEC_TIME_DIGITIZED}, + {"string", ExifInterface.TAG_SUBSEC_TIME_ORIGINAL}, + {"int", ExifInterface.TAG_SUBJECT_AREA}, + {"double", ExifInterface.TAG_SUBJECT_DISTANCE}, + {"int", ExifInterface.TAG_SUBJECT_DISTANCE_RANGE}, + {"int", ExifInterface.TAG_SUBJECT_LOCATION}, + {"string", ExifInterface.TAG_USER_COMMENT}, + {"int", ExifInterface.TAG_WHITE_BALANCE}, + {"int", ExifInterface.TAG_GPS_ALTITUDE_REF}, + {"string", ExifInterface.TAG_GPS_AREA_INFORMATION}, + {"double", ExifInterface.TAG_GPS_DOP}, + {"string", ExifInterface.TAG_GPS_DATESTAMP}, + {"double", ExifInterface.TAG_GPS_DEST_BEARING}, + {"string", ExifInterface.TAG_GPS_DEST_BEARING_REF}, + {"double", ExifInterface.TAG_GPS_DEST_DISTANCE}, + {"string", ExifInterface.TAG_GPS_DEST_DISTANCE_REF}, + {"double", ExifInterface.TAG_GPS_DEST_LATITUDE}, + {"string", ExifInterface.TAG_GPS_DEST_LATITUDE_REF}, + {"double", ExifInterface.TAG_GPS_DEST_LONGITUDE}, + {"string", ExifInterface.TAG_GPS_DEST_LONGITUDE_REF}, + {"int", ExifInterface.TAG_GPS_DIFFERENTIAL}, + {"double", ExifInterface.TAG_GPS_IMG_DIRECTION}, + {"string", ExifInterface.TAG_GPS_IMG_DIRECTION_REF}, + {"string", ExifInterface.TAG_GPS_LATITUDE_REF}, + {"string", ExifInterface.TAG_GPS_LONGITUDE_REF}, + {"string", ExifInterface.TAG_GPS_MAP_DATUM}, + {"string", ExifInterface.TAG_GPS_MEASURE_MODE}, + {"string", ExifInterface.TAG_GPS_PROCESSING_METHOD}, + {"string", ExifInterface.TAG_GPS_SATELLITES}, + {"double", ExifInterface.TAG_GPS_SPEED}, + {"string", ExifInterface.TAG_GPS_SPEED_REF}, + {"string", ExifInterface.TAG_GPS_STATUS}, + {"string", ExifInterface.TAG_GPS_TIMESTAMP}, + {"double", ExifInterface.TAG_GPS_TRACK}, + {"string", ExifInterface.TAG_GPS_TRACK_REF}, + {"string", ExifInterface.TAG_GPS_VERSION_ID}, + {"string", ExifInterface.TAG_INTEROPERABILITY_INDEX}, + {"int", ExifInterface.TAG_THUMBNAIL_IMAGE_LENGTH}, + {"int", ExifInterface.TAG_THUMBNAIL_IMAGE_WIDTH}, + {"int", ExifInterface.TAG_DNG_VERSION}, + {"int", ExifInterface.TAG_DEFAULT_CROP_SIZE}, + {"int", ExifInterface.TAG_ORF_PREVIEW_IMAGE_START}, + {"int", ExifInterface.TAG_ORF_PREVIEW_IMAGE_LENGTH}, + {"int", ExifInterface.TAG_ORF_ASPECT_FRAME}, + {"int", ExifInterface.TAG_RW2_SENSOR_BOTTOM_BORDER}, + {"int", ExifInterface.TAG_RW2_SENSOR_LEFT_BORDER}, + {"int", ExifInterface.TAG_RW2_SENSOR_RIGHT_BORDER}, + {"int", ExifInterface.TAG_RW2_SENSOR_TOP_BORDER}, + {"int", ExifInterface.TAG_RW2_ISO}, + }; + + // Run all events on native modules queue thread since they might be fired + // from other non RN threads. + + + // Mount error event + + public static void emitMountErrorEvent(final ViewGroup view, final String error) { + + final ReactContext reactContext = (ReactContext) view.getContext(); + reactContext.runOnNativeModulesQueueThread(new Runnable() { + @Override + public void run() { + CameraMountErrorEvent event = CameraMountErrorEvent.obtain(view.getId(), error); + reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent(event); + } + }); + } + + // Camera ready event + + public static void emitCameraReadyEvent(final ViewGroup view) { + + final ReactContext reactContext = (ReactContext) view.getContext(); + reactContext.runOnNativeModulesQueueThread(new Runnable() { + @Override + public void run() { + CameraReadyEvent event = CameraReadyEvent.obtain(view.getId()); + reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent(event); + } + }); + } + + // Preview Color event + public static void emitPreviewColorEvent(final ViewGroup view, final int color, final int r, final int g, final int b){ + final ReactContext reactContext = (ReactContext) view.getContext(); + reactContext.runOnNativeModulesQueueThread(new Runnable() { + @Override + public void run() { + PreviewColorEvent event = PreviewColorEvent.obtain(view.getId(), color, r, g, b); + reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent(event); + } + }); + } + + // Picture saved event + + public static void emitPictureSavedEvent(final ViewGroup view, final WritableMap response) { + + final ReactContext reactContext = (ReactContext) view.getContext(); + reactContext.runOnNativeModulesQueueThread(new Runnable() { + @Override + public void run() { + PictureSavedEvent event = PictureSavedEvent.obtain(view.getId(), response); + reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent(event); + } + }); + + } + + // Picture taken event + + public static void emitPictureTakenEvent(final ViewGroup view) { + + final ReactContext reactContext = (ReactContext) view.getContext(); + reactContext.runOnNativeModulesQueueThread(new Runnable() { + @Override + public void run() { + PictureTakenEvent event = PictureTakenEvent.obtain(view.getId()); + reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent(event); + } + }); + } + + // video recording start/end events + + public static void emitRecordingStartEvent(final ViewGroup view, final WritableMap response) { + + final ReactContext reactContext = (ReactContext) view.getContext(); + reactContext.runOnNativeModulesQueueThread(new Runnable() { + @Override + public void run() { + RecordingStartEvent event = RecordingStartEvent.obtain(view.getId(), response); + reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent(event); + } + }); + } + + public static void emitRecordingEndEvent(final ViewGroup view) { + + final ReactContext reactContext = (ReactContext) view.getContext(); + reactContext.runOnNativeModulesQueueThread(new Runnable() { + @Override + public void run() { + RecordingEndEvent event = RecordingEndEvent.obtain(view.getId()); + reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent(event); + } + }); + } + + // Face detection events + + public static void emitFacesDetectedEvent(final ViewGroup view, final WritableArray data) { + + final ReactContext reactContext = (ReactContext) view.getContext(); + reactContext.runOnNativeModulesQueueThread(new Runnable() { + @Override + public void run() { + FacesDetectedEvent event = FacesDetectedEvent.obtain(view.getId(), data); + reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent(event); + } + }); + } + + public static void emitFaceDetectionErrorEvent(final ViewGroup view, final RNFaceDetector faceDetector) { + + final ReactContext reactContext = (ReactContext) view.getContext(); + reactContext.runOnNativeModulesQueueThread(new Runnable() { + @Override + public void run() { + FaceDetectionErrorEvent event = FaceDetectionErrorEvent.obtain(view.getId(), faceDetector); + reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent(event); + } + }); + } + + // Barcode detection events + + public static void emitBarcodesDetectedEvent(final ViewGroup view, final WritableArray barcodes) { + + final ReactContext reactContext = (ReactContext) view.getContext(); + reactContext.runOnNativeModulesQueueThread(new Runnable() { + @Override + public void run() { + BarcodesDetectedEvent event = BarcodesDetectedEvent.obtain(view.getId(), barcodes); + reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent(event); + } + }); + } + + public static void emitBarcodeDetectionErrorEvent(final ViewGroup view, final RNBarcodeDetector barcodeDetector) { + + final ReactContext reactContext = (ReactContext) view.getContext(); + reactContext.runOnNativeModulesQueueThread(new Runnable() { + @Override + public void run() { + BarcodeDetectionErrorEvent event = BarcodeDetectionErrorEvent.obtain(view.getId(), barcodeDetector); + reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent(event); + } + }); + } + + // Bar code read event + + public static void emitBarCodeReadEvent(final ViewGroup view, final Result barCode, final int width, final int height) { + final ReactContext reactContext = (ReactContext) view.getContext(); + reactContext.runOnNativeModulesQueueThread(new Runnable() { + @Override + public void run() { + BarCodeReadEvent event = BarCodeReadEvent.obtain(view.getId(), barCode, width, height); + reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent(event); + } + }); + } + + // Text recognition event + + public static void emitTextRecognizedEvent(final ViewGroup view, final WritableArray data) { + final ReactContext reactContext = (ReactContext) view.getContext(); + reactContext.runOnNativeModulesQueueThread(new Runnable() { + @Override + public void run() { + TextRecognizedEvent event = TextRecognizedEvent.obtain(view.getId(), data); + reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent(event); + } + }); + } + + // Utilities + + public static int getCorrectCameraRotation(int rotation, int facing, int cameraOrientation) { + if (facing == CameraView.FACING_FRONT) { + // Tested the below line and there's no need to do the mirror calculation + return (cameraOrientation + rotation) % 360; + } else { + final int landscapeFlip = rotationIsLandscape(rotation) ? 180 : 0; + return (cameraOrientation - rotation + landscapeFlip) % 360; + } + } + + private static boolean rotationIsLandscape(int rotation) { + return (rotation == Constants.LANDSCAPE_90 || + rotation == Constants.LANDSCAPE_270); + } + + private static int getCamcorderProfileQualityFromCameraModuleConstant(int quality) { + switch (quality) { + case CameraModule.VIDEO_2160P: + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + return CamcorderProfile.QUALITY_2160P; + } + case CameraModule.VIDEO_1080P: + return CamcorderProfile.QUALITY_1080P; + case CameraModule.VIDEO_720P: + return CamcorderProfile.QUALITY_720P; + case CameraModule.VIDEO_480P: + return CamcorderProfile.QUALITY_480P; + case CameraModule.VIDEO_4x3: + return CamcorderProfile.QUALITY_480P; + } + return CamcorderProfile.QUALITY_HIGH; + } + + public static CamcorderProfile getCamcorderProfile(int quality) { + CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH); + int camcorderQuality = getCamcorderProfileQualityFromCameraModuleConstant(quality); + if (CamcorderProfile.hasProfile(camcorderQuality)) { + profile = CamcorderProfile.get(camcorderQuality); + if (quality == CameraModule.VIDEO_4x3) { + profile.videoFrameWidth = 640; + } + } + return profile; + } + + public static WritableMap getExifData(ExifInterface exifInterface) { + WritableMap exifMap = Arguments.createMap(); + for (String[] tagInfo : exifTags) { + String name = tagInfo[1]; + if (exifInterface.getAttribute(name) != null) { + String type = tagInfo[0]; + switch (type) { + case "string": + exifMap.putString(name, exifInterface.getAttribute(name)); + break; + case "int": + exifMap.putInt(name, exifInterface.getAttributeInt(name, 0)); + break; + case "double": + exifMap.putDouble(name, exifInterface.getAttributeDouble(name, 0)); + break; + } + } + } + + double[] latLong = exifInterface.getLatLong(); + if (latLong != null) { + exifMap.putDouble(ExifInterface.TAG_GPS_LATITUDE, latLong[0]); + exifMap.putDouble(ExifInterface.TAG_GPS_LONGITUDE, latLong[1]); + exifMap.putDouble(ExifInterface.TAG_GPS_ALTITUDE, exifInterface.getAltitude(0)); + } + + return exifMap; + } + + public static void setExifData(ExifInterface exifInterface, ReadableMap exifMap) { + for (String[] tagInfo : exifTags) { + String name = tagInfo[1]; + if (exifMap.hasKey(name)) { + String type = tagInfo[0]; + switch (type) { + case "string": + exifInterface.setAttribute(name, exifMap.getString(name)); + break; + case "int": + exifInterface.setAttribute(name, Integer.toString(exifMap.getInt(name))); + exifMap.getInt(name); + break; + case "double": + exifInterface.setAttribute(name, Double.toString(exifMap.getDouble(name))); + exifMap.getDouble(name); + break; + } + } + } + + if (exifMap.hasKey(ExifInterface.TAG_GPS_LATITUDE) && exifMap.hasKey(ExifInterface.TAG_GPS_LONGITUDE)) { + exifInterface.setLatLong(exifMap.getDouble(ExifInterface.TAG_GPS_LATITUDE), + exifMap.getDouble(ExifInterface.TAG_GPS_LONGITUDE)); + } + if(exifMap.hasKey(ExifInterface.TAG_GPS_ALTITUDE)){ + exifInterface.setAltitude(exifMap.getDouble(ExifInterface.TAG_GPS_ALTITUDE)); + } + } + + // clears exif values in place + public static void clearExifData(ExifInterface exifInterface) { + for (String[] tagInfo : exifTags) { + exifInterface.setAttribute(tagInfo[1], null); + } + + // these are not part of our tag list, remove by hand + exifInterface.setAttribute(ExifInterface.TAG_GPS_LATITUDE, null); + exifInterface.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, null); + exifInterface.setAttribute(ExifInterface.TAG_GPS_ALTITUDE, null); + } + + public static Bitmap generateSimulatorPhoto(int width, int height) { + Bitmap fakePhoto = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(fakePhoto); + Paint background = new Paint(); + background.setColor(Color.BLACK); + canvas.drawRect(0, 0, width, height, background); + Paint textPaint = new Paint(); + textPaint.setColor(Color.YELLOW); + textPaint.setTextSize(35); + Calendar calendar = Calendar.getInstance(); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy.MM.dd G '->' HH:mm:ss z"); + canvas.drawText(simpleDateFormat.format(calendar.getTime()), width * 0.1f, height * 0.2f, textPaint); + canvas.drawText(simpleDateFormat.format(calendar.getTime()), width * 0.2f, height * 0.4f, textPaint); + canvas.drawText(simpleDateFormat.format(calendar.getTime()), width * 0.3f, height * 0.6f, textPaint); + canvas.drawText(simpleDateFormat.format(calendar.getTime()), width * 0.4f, height * 0.8f, textPaint); + + return fakePhoto; + } +} diff --git a/android/src/main/java/org/reactnative/camera/events/BarCodeReadEvent.java b/android/src/main/java/org/reactnative/camera/events/BarCodeReadEvent.java new file mode 100644 index 0000000..9e78517 --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/events/BarCodeReadEvent.java @@ -0,0 +1,100 @@ +package org.reactnative.camera.events; + +import androidx.core.util.Pools; + +import org.reactnative.camera.CameraViewManager; +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.uimanager.events.Event; +import com.facebook.react.uimanager.events.RCTEventEmitter; +import com.google.zxing.Result; +import com.google.zxing.ResultPoint; + +import java.util.Formatter; + +public class BarCodeReadEvent extends Event { + private static final Pools.SynchronizedPool EVENTS_POOL = + new Pools.SynchronizedPool<>(3); + + private Result mBarCode; + private int mWidth; + private int mHeight; + + private BarCodeReadEvent() {} + + public static BarCodeReadEvent obtain(int viewTag, Result barCode, int width, int height) { + BarCodeReadEvent event = EVENTS_POOL.acquire(); + if (event == null) { + event = new BarCodeReadEvent(); + } + event.init(viewTag, barCode, width, height); + return event; + } + + private void init(int viewTag, Result barCode, int width, int height) { + super.init(viewTag); + mBarCode = barCode; + mWidth = width; + mHeight = height; + } + + /** + * We want every distinct barcode to be reported to the JS listener. + * If we return some static value as a coalescing key there may be two barcode events + * containing two different barcodes waiting to be transmitted to JS + * that would get coalesced (because both of them would have the same coalescing key). + * So let's differentiate them with a hash of the contents (mod short's max value). + */ + @Override + public short getCoalescingKey() { + int hashCode = mBarCode.getText().hashCode() % Short.MAX_VALUE; + return (short) hashCode; + } + + @Override + public String getEventName() { + return CameraViewManager.Events.EVENT_ON_BAR_CODE_READ.toString(); + } + + @Override + public void dispatch(RCTEventEmitter rctEventEmitter) { + rctEventEmitter.receiveEvent(getViewTag(), getEventName(), serializeEventData()); + } + + private WritableMap serializeEventData() { + WritableMap event = Arguments.createMap(); + WritableMap eventOrigin = Arguments.createMap(); + + event.putInt("target", getViewTag()); + event.putString("data", mBarCode.getText()); + + byte[] rawBytes = mBarCode.getRawBytes(); + if (rawBytes != null && rawBytes.length > 0) { + Formatter formatter = new Formatter(); + for (byte b : rawBytes) { + formatter.format("%02x", b); + } + event.putString("rawData", formatter.toString()); + formatter.close(); + } + + event.putString("type", mBarCode.getBarcodeFormat().toString()); + WritableArray resultPoints = Arguments.createArray(); + ResultPoint[] points = mBarCode.getResultPoints(); + for (ResultPoint point: points) { + if(point!=null) { + WritableMap newPoint = Arguments.createMap(); + newPoint.putString("x", String.valueOf(point.getX())); + newPoint.putString("y", String.valueOf(point.getY())); + resultPoints.pushMap(newPoint); + } + } + + eventOrigin.putArray("origin", resultPoints); + eventOrigin.putInt("height", mHeight); + eventOrigin.putInt("width", mWidth); + event.putMap("bounds", eventOrigin); + return event; + } +} diff --git a/android/src/main/java/org/reactnative/camera/events/BarcodeDetectionErrorEvent.java b/android/src/main/java/org/reactnative/camera/events/BarcodeDetectionErrorEvent.java new file mode 100644 index 0000000..e6db6d4 --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/events/BarcodeDetectionErrorEvent.java @@ -0,0 +1,53 @@ +package org.reactnative.camera.events; + +import androidx.core.util.Pools; +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.uimanager.events.Event; +import com.facebook.react.uimanager.events.RCTEventEmitter; +import org.reactnative.camera.CameraViewManager; +import org.reactnative.barcodedetector.RNBarcodeDetector; + +public class BarcodeDetectionErrorEvent extends Event { + + private static final Pools.SynchronizedPool EVENTS_POOL = new Pools.SynchronizedPool<>(3); + private RNBarcodeDetector mBarcodeDetector; + + private BarcodeDetectionErrorEvent() { + } + + public static BarcodeDetectionErrorEvent obtain(int viewTag, RNBarcodeDetector barcodeDetector) { + BarcodeDetectionErrorEvent event = EVENTS_POOL.acquire(); + if (event == null) { + event = new BarcodeDetectionErrorEvent(); + } + event.init(viewTag, barcodeDetector); + return event; + } + + private void init(int viewTag, RNBarcodeDetector faceDetector) { + super.init(viewTag); + mBarcodeDetector = faceDetector; + } + + @Override + public short getCoalescingKey() { + return 0; + } + + @Override + public String getEventName() { + return CameraViewManager.Events.EVENT_ON_BARCODE_DETECTION_ERROR.toString(); + } + + @Override + public void dispatch(RCTEventEmitter rctEventEmitter) { + rctEventEmitter.receiveEvent(getViewTag(), getEventName(), serializeEventData()); + } + + private WritableMap serializeEventData() { + WritableMap map = Arguments.createMap(); + map.putBoolean("isOperational", mBarcodeDetector != null && mBarcodeDetector.isOperational()); + return map; + } +} diff --git a/android/src/main/java/org/reactnative/camera/events/BarcodesDetectedEvent.java b/android/src/main/java/org/reactnative/camera/events/BarcodesDetectedEvent.java new file mode 100644 index 0000000..909ed1b --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/events/BarcodesDetectedEvent.java @@ -0,0 +1,73 @@ +package org.reactnative.camera.events; + +import androidx.core.util.Pools; +import android.util.SparseArray; +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.uimanager.events.Event; +import com.facebook.react.uimanager.events.RCTEventEmitter; +import org.reactnative.camera.CameraViewManager; + +public class BarcodesDetectedEvent extends Event { + + private static final Pools.SynchronizedPool EVENTS_POOL = + new Pools.SynchronizedPool<>(3); + + private WritableArray mBarcodes; + + private BarcodesDetectedEvent() { + } + + public static BarcodesDetectedEvent obtain( + int viewTag, + WritableArray barcodes + ) { + BarcodesDetectedEvent event = EVENTS_POOL.acquire(); + if (event == null) { + event = new BarcodesDetectedEvent(); + } + event.init(viewTag, barcodes); + return event; + } + + private void init( + int viewTag, + WritableArray barcodes + ) { + super.init(viewTag); + mBarcodes = barcodes; + } + + /** + * note(@sjchmiela) + * Should the events about detected barcodes coalesce, the best strategy will be + * to ensure that events with different barcodes count are always being transmitted. + */ + @Override + public short getCoalescingKey() { + if (mBarcodes.size() > Short.MAX_VALUE) { + return Short.MAX_VALUE; + } + + return (short) mBarcodes.size(); + } + + @Override + public String getEventName() { + return CameraViewManager.Events.EVENT_ON_BARCODES_DETECTED.toString(); + } + + @Override + public void dispatch(RCTEventEmitter rctEventEmitter) { + rctEventEmitter.receiveEvent(getViewTag(), getEventName(), serializeEventData()); + } + + private WritableMap serializeEventData() { + WritableMap event = Arguments.createMap(); + event.putString("type", "barcode"); + event.putArray("barcodes", mBarcodes); + event.putInt("target", getViewTag()); + return event; + } +} diff --git a/android/src/main/java/org/reactnative/camera/events/CameraMountErrorEvent.java b/android/src/main/java/org/reactnative/camera/events/CameraMountErrorEvent.java new file mode 100644 index 0000000..5f7c160 --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/events/CameraMountErrorEvent.java @@ -0,0 +1,51 @@ +package org.reactnative.camera.events; + +import androidx.core.util.Pools; +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.uimanager.events.Event; +import com.facebook.react.uimanager.events.RCTEventEmitter; +import org.reactnative.camera.CameraViewManager; + +public class CameraMountErrorEvent extends Event { + private static final Pools.SynchronizedPool EVENTS_POOL = new Pools.SynchronizedPool<>(3); + private String mError; + + private CameraMountErrorEvent() { + } + + public static CameraMountErrorEvent obtain(int viewTag, String error) { + CameraMountErrorEvent event = EVENTS_POOL.acquire(); + if (event == null) { + event = new CameraMountErrorEvent(); + } + event.init(viewTag, error); + return event; + } + + private void init(int viewTag, String error) { + super.init(viewTag); + mError = error; + } + + @Override + public short getCoalescingKey() { + return 0; + } + + @Override + public String getEventName() { + return CameraViewManager.Events.EVENT_ON_MOUNT_ERROR.toString(); + } + + @Override + public void dispatch(RCTEventEmitter rctEventEmitter) { + rctEventEmitter.receiveEvent(getViewTag(), getEventName(), serializeEventData()); + } + + private WritableMap serializeEventData() { + WritableMap arguments = Arguments.createMap(); + arguments.putString("message", mError); + return arguments; + } +} diff --git a/android/src/main/java/org/reactnative/camera/events/CameraReadyEvent.java b/android/src/main/java/org/reactnative/camera/events/CameraReadyEvent.java new file mode 100644 index 0000000..ed41221 --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/events/CameraReadyEvent.java @@ -0,0 +1,42 @@ +package org.reactnative.camera.events; + +import androidx.core.util.Pools; + +import org.reactnative.camera.CameraViewManager; +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.uimanager.events.Event; +import com.facebook.react.uimanager.events.RCTEventEmitter; + +public class CameraReadyEvent extends Event { + private static final Pools.SynchronizedPool EVENTS_POOL = new Pools.SynchronizedPool<>(3); + private CameraReadyEvent() {} + + public static CameraReadyEvent obtain(int viewTag) { + CameraReadyEvent event = EVENTS_POOL.acquire(); + if (event == null) { + event = new CameraReadyEvent(); + } + event.init(viewTag); + return event; + } + + @Override + public short getCoalescingKey() { + return 0; + } + + @Override + public String getEventName() { + return CameraViewManager.Events.EVENT_CAMERA_READY.toString(); + } + + @Override + public void dispatch(RCTEventEmitter rctEventEmitter) { + rctEventEmitter.receiveEvent(getViewTag(), getEventName(), serializeEventData()); + } + + private WritableMap serializeEventData() { + return Arguments.createMap(); + } +} diff --git a/android/src/main/java/org/reactnative/camera/events/FaceDetectionErrorEvent.java b/android/src/main/java/org/reactnative/camera/events/FaceDetectionErrorEvent.java new file mode 100644 index 0000000..72f7a66 --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/events/FaceDetectionErrorEvent.java @@ -0,0 +1,52 @@ +package org.reactnative.camera.events; + +import androidx.core.util.Pools; +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.uimanager.events.Event; +import com.facebook.react.uimanager.events.RCTEventEmitter; +import org.reactnative.camera.CameraViewManager; +import org.reactnative.facedetector.RNFaceDetector; + +public class FaceDetectionErrorEvent extends Event { + private static final Pools.SynchronizedPool EVENTS_POOL = new Pools.SynchronizedPool<>(3); + private RNFaceDetector mFaceDetector; + + private FaceDetectionErrorEvent() { + } + + public static FaceDetectionErrorEvent obtain(int viewTag, RNFaceDetector faceDetector) { + FaceDetectionErrorEvent event = EVENTS_POOL.acquire(); + if (event == null) { + event = new FaceDetectionErrorEvent(); + } + event.init(viewTag, faceDetector); + return event; + } + + private void init(int viewTag, RNFaceDetector faceDetector) { + super.init(viewTag); + mFaceDetector = faceDetector; + } + + @Override + public short getCoalescingKey() { + return 0; + } + + @Override + public String getEventName() { + return CameraViewManager.Events.EVENT_ON_FACE_DETECTION_ERROR.toString(); + } + + @Override + public void dispatch(RCTEventEmitter rctEventEmitter) { + rctEventEmitter.receiveEvent(getViewTag(), getEventName(), serializeEventData()); + } + + private WritableMap serializeEventData() { + WritableMap map = Arguments.createMap(); + map.putBoolean("isOperational", mFaceDetector != null && mFaceDetector.isOperational()); + return map; + } +} diff --git a/android/src/main/java/org/reactnative/camera/events/FacesDetectedEvent.java b/android/src/main/java/org/reactnative/camera/events/FacesDetectedEvent.java new file mode 100644 index 0000000..ae93e9a --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/events/FacesDetectedEvent.java @@ -0,0 +1,65 @@ +package org.reactnative.camera.events; + +import androidx.core.util.Pools; + +import org.reactnative.camera.CameraViewManager; +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.uimanager.events.Event; +import com.facebook.react.uimanager.events.RCTEventEmitter; + +public class FacesDetectedEvent extends Event { + private static final Pools.SynchronizedPool EVENTS_POOL = + new Pools.SynchronizedPool<>(3); + + private WritableArray mData; + + private FacesDetectedEvent() {} + + public static FacesDetectedEvent obtain(int viewTag, WritableArray data) { + FacesDetectedEvent event = EVENTS_POOL.acquire(); + if (event == null) { + event = new FacesDetectedEvent(); + } + event.init(viewTag, data); + return event; + } + + private void init(int viewTag, WritableArray data) { + super.init(viewTag); + mData = data; + } + + /** + * note(@sjchmiela) + * Should the events about detected faces coalesce, the best strategy will be + * to ensure that events with different faces count are always being transmitted. + */ + @Override + public short getCoalescingKey() { + if (mData.size() > Short.MAX_VALUE) { + return Short.MAX_VALUE; + } + + return (short) mData.size(); + } + + @Override + public String getEventName() { + return CameraViewManager.Events.EVENT_ON_FACES_DETECTED.toString(); + } + + @Override + public void dispatch(RCTEventEmitter rctEventEmitter) { + rctEventEmitter.receiveEvent(getViewTag(), getEventName(), serializeEventData()); + } + + private WritableMap serializeEventData() { + WritableMap event = Arguments.createMap(); + event.putString("type", "face"); + event.putArray("faces", mData); + event.putInt("target", getViewTag()); + return event; + } +} diff --git a/android/src/main/java/org/reactnative/camera/events/PictureSavedEvent.java b/android/src/main/java/org/reactnative/camera/events/PictureSavedEvent.java new file mode 100644 index 0000000..305c543 --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/events/PictureSavedEvent.java @@ -0,0 +1,46 @@ +package org.reactnative.camera.events; + +import androidx.core.util.Pools; + +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.uimanager.events.Event; +import com.facebook.react.uimanager.events.RCTEventEmitter; + +import org.reactnative.camera.CameraViewManager; + +public class PictureSavedEvent extends Event { + private static final Pools.SynchronizedPool EVENTS_POOL = new Pools.SynchronizedPool<>(5); + private PictureSavedEvent() {} + + private WritableMap mResponse; + + public static PictureSavedEvent obtain(int viewTag, WritableMap response) { + PictureSavedEvent event = EVENTS_POOL.acquire(); + if (event == null) { + event = new PictureSavedEvent(); + } + event.init(viewTag, response); + return event; + } + + private void init(int viewTag, WritableMap response) { + super.init(viewTag); + mResponse = response; + } + + @Override + public short getCoalescingKey() { + int hashCode = mResponse.getMap("data").getString("uri").hashCode() % Short.MAX_VALUE; + return (short) hashCode; + } + + @Override + public String getEventName() { + return CameraViewManager.Events.EVENT_ON_PICTURE_SAVED.toString(); + } + + @Override + public void dispatch(RCTEventEmitter rctEventEmitter) { + rctEventEmitter.receiveEvent(getViewTag(), getEventName(), mResponse); + } +} diff --git a/android/src/main/java/org/reactnative/camera/events/PictureTakenEvent.java b/android/src/main/java/org/reactnative/camera/events/PictureTakenEvent.java new file mode 100644 index 0000000..b1247a3 --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/events/PictureTakenEvent.java @@ -0,0 +1,42 @@ +package org.reactnative.camera.events; + +import androidx.core.util.Pools; + +import org.reactnative.camera.CameraViewManager; +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.uimanager.events.Event; +import com.facebook.react.uimanager.events.RCTEventEmitter; + +public class PictureTakenEvent extends Event { + private static final Pools.SynchronizedPool EVENTS_POOL = new Pools.SynchronizedPool<>(3); + private PictureTakenEvent() {} + + public static PictureTakenEvent obtain(int viewTag) { + PictureTakenEvent event = EVENTS_POOL.acquire(); + if (event == null) { + event = new PictureTakenEvent(); + } + event.init(viewTag); + return event; + } + + @Override + public short getCoalescingKey() { + return 0; + } + + @Override + public String getEventName() { + return CameraViewManager.Events.EVENT_ON_PICTURE_TAKEN.toString(); + } + + @Override + public void dispatch(RCTEventEmitter rctEventEmitter) { + rctEventEmitter.receiveEvent(getViewTag(), getEventName(), serializeEventData()); + } + + private WritableMap serializeEventData() { + return Arguments.createMap(); + } +} diff --git a/android/src/main/java/org/reactnative/camera/events/PreviewColorEvent.java b/android/src/main/java/org/reactnative/camera/events/PreviewColorEvent.java new file mode 100644 index 0000000..9b007c3 --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/events/PreviewColorEvent.java @@ -0,0 +1,58 @@ +package org.reactnative.camera.events; + +import androidx.core.util.Pools; + +import org.reactnative.camera.CameraViewManager; +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.uimanager.events.Event; +import com.facebook.react.uimanager.events.RCTEventEmitter; + +public class PreviewColorEvent extends Event { + private static final Pools.SynchronizedPool EVENTS_POOL = new Pools.SynchronizedPool<>(3); + private PreviewColorEvent() {} + private int color; + private int r, g, b; + + public static PreviewColorEvent obtain(int viewTag, int color, int r, int g, int b) { + PreviewColorEvent event = EVENTS_POOL.acquire(); + if (event == null) { + event = new PreviewColorEvent(); + } + event.init(viewTag, color, r, g, b); + return event; + } + + private void init(int viewTag, int color, int r, int g, int b) { + super.init(viewTag); + this.color = color; + this.r = r; + this.g = g; + this.b = b; + } + + @Override + public short getCoalescingKey() { + return 0; + } + + @Override + public String getEventName() { + return CameraViewManager.Events.EVENT_PREVIEW_COLOR.toString(); + } + + @Override + public void dispatch(RCTEventEmitter rctEventEmitter) { + rctEventEmitter.receiveEvent(getViewTag(), getEventName(), serializeEventData()); + } + + private WritableMap serializeEventData() { + + WritableMap map = Arguments.createMap(); + map.putInt("color", color); + map.putInt("r", r); + map.putInt("g", g); + map.putInt("b", b); + return map; + } +} diff --git a/android/src/main/java/org/reactnative/camera/events/RecordingEndEvent.java b/android/src/main/java/org/reactnative/camera/events/RecordingEndEvent.java new file mode 100644 index 0000000..8df213e --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/events/RecordingEndEvent.java @@ -0,0 +1,42 @@ +package org.reactnative.camera.events; + +import androidx.core.util.Pools; + +import org.reactnative.camera.CameraViewManager; +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.uimanager.events.Event; +import com.facebook.react.uimanager.events.RCTEventEmitter; + +public class RecordingEndEvent extends Event { + private static final Pools.SynchronizedPool EVENTS_POOL = new Pools.SynchronizedPool<>(3); + private RecordingEndEvent() {} + + public static RecordingEndEvent obtain(int viewTag) { + RecordingEndEvent event = EVENTS_POOL.acquire(); + if (event == null) { + event = new RecordingEndEvent(); + } + event.init(viewTag); + return event; + } + + @Override + public short getCoalescingKey() { + return 0; + } + + @Override + public String getEventName() { + return CameraViewManager.Events.EVENT_ON_RECORDING_END.toString(); + } + + @Override + public void dispatch(RCTEventEmitter rctEventEmitter) { + rctEventEmitter.receiveEvent(getViewTag(), getEventName(), serializeEventData()); + } + + private WritableMap serializeEventData() { + return Arguments.createMap(); + } +} diff --git a/android/src/main/java/org/reactnative/camera/events/RecordingStartEvent.java b/android/src/main/java/org/reactnative/camera/events/RecordingStartEvent.java new file mode 100644 index 0000000..0c7df40 --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/events/RecordingStartEvent.java @@ -0,0 +1,46 @@ +package org.reactnative.camera.events; + +import androidx.core.util.Pools; + +import org.reactnative.camera.CameraViewManager; +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.uimanager.events.Event; +import com.facebook.react.uimanager.events.RCTEventEmitter; + +public class RecordingStartEvent extends Event { + private static final Pools.SynchronizedPool EVENTS_POOL = new Pools.SynchronizedPool<>(3); + private RecordingStartEvent() {} + + private WritableMap mResponse; + + public static RecordingStartEvent obtain(int viewTag, WritableMap response) { + RecordingStartEvent event = EVENTS_POOL.acquire(); + if (event == null) { + event = new RecordingStartEvent(); + } + event.init(viewTag, response); + return event; + } + + private void init(int viewTag, WritableMap response) { + super.init(viewTag); + mResponse = response; + } + + // @Override + // public short getCoalescingKey() { + // int hashCode = mResponse.getString("uri").hashCode() % Short.MAX_VALUE; + // return (short) hashCode; + // } + + @Override + public String getEventName() { + return CameraViewManager.Events.EVENT_ON_RECORDING_START.toString(); + } + + @Override + public void dispatch(RCTEventEmitter rctEventEmitter) { + rctEventEmitter.receiveEvent(getViewTag(), getEventName(), mResponse); + } +} diff --git a/android/src/main/java/org/reactnative/camera/events/TextRecognizedEvent.java b/android/src/main/java/org/reactnative/camera/events/TextRecognizedEvent.java new file mode 100644 index 0000000..f785db3 --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/events/TextRecognizedEvent.java @@ -0,0 +1,54 @@ +package org.reactnative.camera.events; + +import androidx.core.util.Pools; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.uimanager.events.Event; +import com.facebook.react.uimanager.events.RCTEventEmitter; + +import org.reactnative.camera.CameraViewManager; + + +public class TextRecognizedEvent extends Event { + + private static final Pools.SynchronizedPool EVENTS_POOL = + new Pools.SynchronizedPool<>(3); + + private WritableArray mData; + + private TextRecognizedEvent() {} + + public static TextRecognizedEvent obtain(int viewTag, WritableArray data) { + TextRecognizedEvent event = EVENTS_POOL.acquire(); + if (event == null) { + event = new TextRecognizedEvent(); + } + event.init(viewTag, data); + return event; + } + + private void init(int viewTag, WritableArray data) { + super.init(viewTag); + mData = data; + } + + @Override + public String getEventName() { + return CameraViewManager.Events.EVENT_ON_TEXT_RECOGNIZED.toString(); + } + + @Override + public void dispatch(RCTEventEmitter rctEventEmitter) { + rctEventEmitter.receiveEvent(getViewTag(), getEventName(), createEvent()); + } + + private WritableMap createEvent() { + WritableMap event = Arguments.createMap(); + event.putString("type", "textBlock"); + event.putArray("textBlocks", mData); + event.putInt("target", getViewTag()); + return event; + } +} diff --git a/android/src/main/java/org/reactnative/camera/tasks/BarCodeScannerAsyncTask.java b/android/src/main/java/org/reactnative/camera/tasks/BarCodeScannerAsyncTask.java new file mode 100644 index 0000000..5a1f9ba --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/tasks/BarCodeScannerAsyncTask.java @@ -0,0 +1,187 @@ +package org.reactnative.camera.tasks; + +import com.google.zxing.BinaryBitmap; +import com.google.zxing.MultiFormatReader; +import com.google.zxing.NotFoundException; +import com.google.zxing.PlanarYUVLuminanceSource; +import com.google.zxing.Result; +import com.google.zxing.common.HybridBinarizer; + +public class BarCodeScannerAsyncTask extends android.os.AsyncTask { + private byte[] mImageData; + private int mWidth; + private int mHeight; + private BarCodeScannerAsyncTaskDelegate mDelegate; + private final MultiFormatReader mMultiFormatReader; + private boolean mLimitScanArea; + private float mScanAreaX; + private float mScanAreaY; + private float mScanAreaWidth; + private float mScanAreaHeight; + private int mCameraViewWidth; + private int mCameraViewHeight; + private float mRatio; + + // note(sjchmiela): From my short research it's ok to ignore rotation of the image. + public BarCodeScannerAsyncTask( + BarCodeScannerAsyncTaskDelegate delegate, + MultiFormatReader multiFormatReader, + byte[] imageData, + int width, + int height, + boolean limitScanArea, + float scanAreaX, + float scanAreaY, + float scanAreaWidth, + float scanAreaHeight, + int cameraViewWidth, + int cameraViewHeight, + float ratio + ) { + mImageData = imageData; + mWidth = width; + mHeight = height; + mDelegate = delegate; + mMultiFormatReader = multiFormatReader; + mLimitScanArea = limitScanArea; + mScanAreaX = scanAreaX; + mScanAreaY = scanAreaY; + mScanAreaWidth = scanAreaWidth; + mScanAreaHeight = scanAreaHeight; + mCameraViewWidth = cameraViewWidth; + mCameraViewHeight = cameraViewHeight; + mRatio = ratio; + } + + @Override + protected Result doInBackground(Void... ignored) { + if (isCancelled() || mDelegate == null) { + return null; + } + + Result result = null; + /** + * mCameraViewWidth and mCameraViewHeight are obtained from portait orientation + * mWidth and mHeight are measured with landscape orientation with Home button to the right + * adjustedCamViewWidth is the adjusted width fromt the Aspect ratio setting + */ + int adjustedCamViewWidth = (int) (mCameraViewHeight / mRatio); + float adjustedScanY = (((adjustedCamViewWidth - mCameraViewWidth) / 2) + (mScanAreaY * mCameraViewWidth)) / adjustedCamViewWidth; + + int left = (int) (mScanAreaX * mWidth); + int top = (int) (adjustedScanY * mHeight); + int scanWidth = (int) (mScanAreaWidth * mWidth); + int scanHeight = (int) (((mScanAreaHeight * mCameraViewWidth) / adjustedCamViewWidth) * mHeight); + + try { + BinaryBitmap bitmap = generateBitmapFromImageData( + mImageData, + mWidth, + mHeight, + false, + left, + top, + scanWidth, + scanHeight + ); + result = mMultiFormatReader.decodeWithState(bitmap); + } catch (NotFoundException e) { + BinaryBitmap bitmap = generateBitmapFromImageData( + rotateImage(mImageData,mWidth, mHeight), + mHeight, + mWidth, + false, + mHeight - scanHeight - top, + left, + scanHeight, + scanWidth + ); + try { + result = mMultiFormatReader.decodeWithState(bitmap); + } catch (NotFoundException e1) { + BinaryBitmap invertedBitmap = generateBitmapFromImageData( + mImageData, + mWidth, + mHeight, + true, + mWidth - scanWidth - left, + mHeight - scanHeight - top, + scanWidth, + scanHeight + ); + try { + result = mMultiFormatReader.decodeWithState(invertedBitmap); + } catch (NotFoundException e2) { + BinaryBitmap invertedRotatedBitmap = generateBitmapFromImageData( + rotateImage(mImageData,mWidth, mHeight), + mHeight, + mWidth, + true, + top, + mWidth - scanWidth - left, + scanHeight, + scanWidth + ); + try { + result = mMultiFormatReader.decodeWithState(invertedRotatedBitmap); + } catch (NotFoundException e3) { + //no barcode Found + } + } + } + } catch (Throwable t) { + t.printStackTrace(); + } + + return result; + } + private byte[] rotateImage(byte[]imageData,int width, int height) { + byte[] rotated = new byte[imageData.length]; + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) { + rotated[x * height + height - y - 1] = imageData[x + y * width]; + } + } + return rotated; + } + @Override + protected void onPostExecute(Result result) { + super.onPostExecute(result); + if (result != null) { + mDelegate.onBarCodeRead(result, mWidth, mHeight); + } + mDelegate.onBarCodeScanningTaskCompleted(); + } + + private BinaryBitmap generateBitmapFromImageData(byte[] imageData, int width, int height, boolean inverse, int left, int top, int sWidth, int sHeight) { + PlanarYUVLuminanceSource source; + if (mLimitScanArea) { + source = new PlanarYUVLuminanceSource( + imageData, // byte[] yuvData + width, // int dataWidth + height, // int dataHeight + left, // int left + top, // int top + sWidth, // int width + sHeight, // int height + false // boolean reverseHorizontal + ); + } else { + source = new PlanarYUVLuminanceSource( + imageData, // byte[] yuvData + width, // int dataWidth + height, // int dataHeight + 0, // int left + 0, // int top + width, // int width + height, // int height + false // boolean reverseHorizontal + ); + } + if (inverse) { + return new BinaryBitmap(new HybridBinarizer(source.invert())); + } else { + return new BinaryBitmap(new HybridBinarizer(source)); + } + } +} diff --git a/android/src/main/java/org/reactnative/camera/tasks/BarCodeScannerAsyncTaskDelegate.java b/android/src/main/java/org/reactnative/camera/tasks/BarCodeScannerAsyncTaskDelegate.java new file mode 100644 index 0000000..4570e4b --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/tasks/BarCodeScannerAsyncTaskDelegate.java @@ -0,0 +1,8 @@ +package org.reactnative.camera.tasks; + +import com.google.zxing.Result; + +public interface BarCodeScannerAsyncTaskDelegate { + void onBarCodeRead(Result barCode, int width, int height); + void onBarCodeScanningTaskCompleted(); +} diff --git a/android/src/main/java/org/reactnative/camera/tasks/BarcodeDetectorAsyncTaskDelegate.java b/android/src/main/java/org/reactnative/camera/tasks/BarcodeDetectorAsyncTaskDelegate.java new file mode 100644 index 0000000..622570f --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/tasks/BarcodeDetectorAsyncTaskDelegate.java @@ -0,0 +1,13 @@ +package org.reactnative.camera.tasks; + +import com.facebook.react.bridge.WritableArray; +import org.reactnative.barcodedetector.RNBarcodeDetector; + +public interface BarcodeDetectorAsyncTaskDelegate { + + void onBarcodesDetected(WritableArray barcodes); + + void onBarcodeDetectionError(RNBarcodeDetector barcodeDetector); + + void onBarcodeDetectingTaskCompleted(); +} diff --git a/android/src/main/java/org/reactnative/camera/tasks/FaceDetectorAsyncTaskDelegate.java b/android/src/main/java/org/reactnative/camera/tasks/FaceDetectorAsyncTaskDelegate.java new file mode 100644 index 0000000..8cf97a6 --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/tasks/FaceDetectorAsyncTaskDelegate.java @@ -0,0 +1,11 @@ +package org.reactnative.camera.tasks; + +import org.reactnative.facedetector.RNFaceDetector; + +import com.facebook.react.bridge.WritableArray; + +public interface FaceDetectorAsyncTaskDelegate { + void onFacesDetected(WritableArray faces); + void onFaceDetectionError(RNFaceDetector faceDetector); + void onFaceDetectingTaskCompleted(); +} diff --git a/android/src/main/java/org/reactnative/camera/tasks/PictureSavedDelegate.java b/android/src/main/java/org/reactnative/camera/tasks/PictureSavedDelegate.java new file mode 100644 index 0000000..47a98bd --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/tasks/PictureSavedDelegate.java @@ -0,0 +1,7 @@ +package org.reactnative.camera.tasks; + +import com.facebook.react.bridge.WritableMap; + +public interface PictureSavedDelegate { + void onPictureSaved(WritableMap response); +} diff --git a/android/src/main/java/org/reactnative/camera/tasks/ResolveTakenPictureAsyncTask.java b/android/src/main/java/org/reactnative/camera/tasks/ResolveTakenPictureAsyncTask.java new file mode 100644 index 0000000..57e0dc1 --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/tasks/ResolveTakenPictureAsyncTask.java @@ -0,0 +1,360 @@ +package org.reactnative.camera.tasks; + +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Matrix; +import android.net.Uri; +import android.os.AsyncTask; +import androidx.exifinterface.media.ExifInterface; +import android.util.Base64; + +import org.reactnative.camera.RNCameraViewHelper; +import org.reactnative.camera.utils.RNFileUtils; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.Promise; +import com.facebook.react.bridge.ReadableMap; +import com.facebook.react.bridge.ReadableType; +import com.facebook.react.bridge.WritableMap; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +public class ResolveTakenPictureAsyncTask extends AsyncTask { + private static final String ERROR_TAG = "E_TAKING_PICTURE_FAILED"; + private Promise mPromise; + private Bitmap mBitmap; + private byte[] mImageData; + private ReadableMap mOptions; + private File mCacheDirectory; + private int mDeviceOrientation; + private PictureSavedDelegate mPictureSavedDelegate; + + public ResolveTakenPictureAsyncTask(byte[] imageData, Promise promise, ReadableMap options, File cacheDirectory, int deviceOrientation, PictureSavedDelegate delegate) { + mPromise = promise; + mOptions = options; + mImageData = imageData; + mCacheDirectory = cacheDirectory; + mDeviceOrientation = deviceOrientation; + mPictureSavedDelegate = delegate; + } + + private int getQuality() { + return (int) (mOptions.getDouble("quality") * 100); + } + + // loads bitmap only if necessary + private void loadBitmap() throws IOException { + if(mBitmap == null){ + mBitmap = BitmapFactory.decodeByteArray(mImageData, 0, mImageData.length); + } + if(mBitmap == null){ + throw new IOException("Failed to decode Image Bitmap"); + } + } + + @Override + protected WritableMap doInBackground(Void... voids) { + WritableMap response = Arguments.createMap(); + ByteArrayInputStream inputStream = null; + ExifInterface exifInterface = null; + WritableMap exifData = null; + ReadableMap exifExtraData = null; + + boolean orientationChanged = false; + + response.putInt("deviceOrientation", mDeviceOrientation); + response.putInt("pictureOrientation", mOptions.hasKey("orientation") ? mOptions.getInt("orientation") : mDeviceOrientation); + + + try{ + // this replaces the skipProcessing flag, we will process only if needed, and in + // an orderly manner, so that skipProcessing is the default behaviour if no options are given + // and this behaves more like the iOS version. + // We will load all data lazily only when needed. + + // this should not incurr in any overhead if not read/used + inputStream = new ByteArrayInputStream(mImageData); + + + // Rotate the bitmap to the proper orientation if requested + if(mOptions.hasKey("fixOrientation") && mOptions.getBoolean("fixOrientation")){ + + exifInterface = new ExifInterface(inputStream); + + // Get orientation of the image from mImageData via inputStream + int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED); + + if(orientation != ExifInterface.ORIENTATION_UNDEFINED){ + loadBitmap(); + mBitmap = rotateBitmap(mBitmap, getImageRotation(orientation)); + orientationChanged = true; + } + } + + if (mOptions.hasKey("width")) { + loadBitmap(); + mBitmap = resizeBitmap(mBitmap, mOptions.getInt("width")); + } + + if (mOptions.hasKey("mirrorImage") && mOptions.getBoolean("mirrorImage")) { + loadBitmap(); + mBitmap = flipHorizontally(mBitmap); + } + + + // EXIF code - we will adjust exif info later if we manipulated the bitmap + boolean writeExifToResponse = mOptions.hasKey("exif") && mOptions.getBoolean("exif"); + + // default to true if not provided so it is consistent with iOS and with what happens if no + // processing is done and the image is saved as is. + boolean writeExifToFile = true; + + if (mOptions.hasKey("writeExif")) { + switch (mOptions.getType("writeExif")) { + case Boolean: + writeExifToFile = mOptions.getBoolean("writeExif"); + break; + case Map: + exifExtraData = mOptions.getMap("writeExif"); + writeExifToFile = true; + break; + } + } + + // Read Exif data if needed + if (writeExifToResponse || writeExifToFile) { + + // if we manipulated the image, or need to add extra data, or need to add it to the response, + // then we need to load the actual exif data. + // Otherwise we can just use w/e exif data we have right now in our byte array + if(mBitmap != null || exifExtraData != null || writeExifToResponse){ + if(exifInterface == null){ + exifInterface = new ExifInterface(inputStream); + } + exifData = RNCameraViewHelper.getExifData(exifInterface); + + if(exifExtraData != null){ + exifData.merge(exifExtraData); + } + } + + // if we did anything to the bitmap, adjust exif + if(mBitmap != null){ + exifData.putInt("width", mBitmap.getWidth()); + exifData.putInt("height", mBitmap.getHeight()); + + if(orientationChanged){ + exifData.putInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); + } + } + + // Write Exif data to the response if requested + if (writeExifToResponse) { + response.putMap("exif", exifData); + } + } + + + + // final processing + // Based on whether or not we loaded the full bitmap into memory, final processing differs + if(mBitmap == null){ + + // set response dimensions. If we haven't read our bitmap, get it efficiently + // without loading the actual bitmap into memory + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inJustDecodeBounds = true; + BitmapFactory.decodeByteArray(mImageData, 0, mImageData.length, options); + if(options != null){ + response.putInt("width", options.outWidth); + response.putInt("height", options.outHeight); + } + + + // save to file if requested + if (!mOptions.hasKey("doNotSave") || !mOptions.getBoolean("doNotSave")) { + + // Prepare file output + File imageFile = new File(RNFileUtils.getOutputFilePath(mCacheDirectory, ".jpg")); + imageFile.createNewFile(); + FileOutputStream fOut = new FileOutputStream(imageFile); + + // Save byte array (it is already a JPEG) + fOut.write(mImageData); + fOut.flush(); + fOut.close(); + + // update exif data if needed. + // Since we didn't modify the image, we only update if we have extra exif info + if (writeExifToFile && exifExtraData != null) { + ExifInterface fileExifInterface = new ExifInterface(imageFile.getAbsolutePath()); + RNCameraViewHelper.setExifData(fileExifInterface, exifExtraData); + fileExifInterface.saveAttributes(); + } + else if (!writeExifToFile){ + // if we were requested to NOT store exif, we actually need to + // clear the exif tags + ExifInterface fileExifInterface = new ExifInterface(imageFile.getAbsolutePath()); + RNCameraViewHelper.clearExifData(fileExifInterface); + fileExifInterface.saveAttributes(); + } + // else: exif is unmodified, no need to update anything + + // Return file system URI + String fileUri = Uri.fromFile(imageFile).toString(); + response.putString("uri", fileUri); + } + + if (mOptions.hasKey("base64") && mOptions.getBoolean("base64")) { + response.putString("base64", Base64.encodeToString(mImageData, Base64.NO_WRAP)); + } + + } + else{ + + // get response dimensions right from the bitmap if we have it + response.putInt("width", mBitmap.getWidth()); + response.putInt("height", mBitmap.getHeight()); + + // Cache compressed image in imageStream + ByteArrayOutputStream imageStream = new ByteArrayOutputStream(); + mBitmap.compress(Bitmap.CompressFormat.JPEG, getQuality(), imageStream); + + + // Write compressed image to file in cache directory unless otherwise specified + if (!mOptions.hasKey("doNotSave") || !mOptions.getBoolean("doNotSave")) { + String filePath = writeStreamToFile(imageStream); + + // since we lost any exif data on bitmap creation, we only need + // to add it if requested + if (writeExifToFile && exifData != null) { + ExifInterface fileExifInterface = new ExifInterface(filePath); + RNCameraViewHelper.setExifData(fileExifInterface, exifData); + fileExifInterface.saveAttributes(); + } + File imageFile = new File(filePath); + String fileUri = Uri.fromFile(imageFile).toString(); + response.putString("uri", fileUri); + } + + // Write base64-encoded image to the response if requested + if (mOptions.hasKey("base64") && mOptions.getBoolean("base64")) { + response.putString("base64", Base64.encodeToString(imageStream.toByteArray(), Base64.NO_WRAP)); + } + + } + + return response; + + } + catch (Resources.NotFoundException e) { + mPromise.reject(ERROR_TAG, "Documents directory of the app could not be found.", e); + e.printStackTrace(); + } + catch (IOException e) { + mPromise.reject(ERROR_TAG, "An unknown I/O exception has occurred.", e); + e.printStackTrace(); + } + finally { + try { + if (inputStream != null) { + inputStream.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + return null; + } + + private Bitmap rotateBitmap(Bitmap source, int angle) { + Matrix matrix = new Matrix(); + matrix.postRotate(angle); + return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, true); + } + + private Bitmap resizeBitmap(Bitmap bm, int newWidth) { + int width = bm.getWidth(); + int height = bm.getHeight(); + float scaleRatio = (float) newWidth / (float) width; + + return Bitmap.createScaledBitmap(bm, newWidth, (int) (height * scaleRatio), true); + } + + private Bitmap flipHorizontally(Bitmap source) { + Matrix matrix = new Matrix(); + matrix.preScale(-1.0f, 1.0f); + return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, true); + } + + // Get rotation degrees from Exif orientation enum + + private int getImageRotation(int orientation) { + int rotationDegrees = 0; + switch (orientation) { + case ExifInterface.ORIENTATION_ROTATE_90: + rotationDegrees = 90; + break; + case ExifInterface.ORIENTATION_ROTATE_180: + rotationDegrees = 180; + break; + case ExifInterface.ORIENTATION_ROTATE_270: + rotationDegrees = 270; + break; + } + return rotationDegrees; + } + + private String writeStreamToFile(ByteArrayOutputStream inputStream) throws IOException { + String outputPath = null; + IOException exception = null; + FileOutputStream outputStream = null; + + try { + outputPath = RNFileUtils.getOutputFilePath(mCacheDirectory, ".jpg"); + outputStream = new FileOutputStream(outputPath); + inputStream.writeTo(outputStream); + } catch (IOException e) { + e.printStackTrace(); + exception = e; + } finally { + try { + if (outputStream != null) { + outputStream.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + if (exception != null) { + throw exception; + } + + return outputPath; + } + + @Override + protected void onPostExecute(WritableMap response) { + super.onPostExecute(response); + + // If the response is not null everything went well and we can resolve the promise. + if (response != null) { + if (mOptions.hasKey("fastMode") && mOptions.getBoolean("fastMode")) { + WritableMap wrapper = Arguments.createMap(); + wrapper.putInt("id", mOptions.getInt("id")); + wrapper.putMap("data", response); + mPictureSavedDelegate.onPictureSaved(wrapper); + } else { + mPromise.resolve(response); + } + } + } + +} diff --git a/android/src/main/java/org/reactnative/camera/tasks/TextRecognizerAsyncTaskDelegate.java b/android/src/main/java/org/reactnative/camera/tasks/TextRecognizerAsyncTaskDelegate.java new file mode 100644 index 0000000..1cf44af --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/tasks/TextRecognizerAsyncTaskDelegate.java @@ -0,0 +1,8 @@ +package org.reactnative.camera.tasks; + +import com.facebook.react.bridge.WritableArray; + +public interface TextRecognizerAsyncTaskDelegate { + void onTextRecognized(WritableArray serializedData); + void onTextRecognizerTaskCompleted(); +} diff --git a/android/src/main/java/org/reactnative/camera/utils/ImageDimensions.java b/android/src/main/java/org/reactnative/camera/utils/ImageDimensions.java new file mode 100644 index 0000000..4e13205 --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/utils/ImageDimensions.java @@ -0,0 +1,64 @@ +package org.reactnative.camera.utils; + +public class ImageDimensions { + private int mWidth; + private int mHeight; + private int mFacing; + private int mRotation; + + public ImageDimensions(int width, int height) { + this(width, height, 0); + } + + public ImageDimensions(int width, int height, int rotation) { + this(width, height, rotation, -1); + } + + public ImageDimensions(int width, int height, int rotation, int facing) { + mWidth = width; + mHeight = height; + mFacing = facing; + mRotation = rotation; + } + + public boolean isLandscape() { + return mRotation % 180 == 90; + } + + public int getWidth() { + if (isLandscape()) { + return mHeight; + } + + return mWidth; + } + + public int getHeight() { + if (isLandscape()) { + return mWidth; + } + + return mHeight; + } + + public int getRotation() { + return mRotation; + } + + public int getFacing() { + return mFacing; + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof ImageDimensions) { + ImageDimensions otherDimensions = (ImageDimensions) obj; + return (otherDimensions.getWidth() == getWidth() && + otherDimensions.getHeight() == getHeight() && + otherDimensions.getFacing() == getFacing() && + otherDimensions.getRotation() == getRotation()); + } else { + return super.equals(obj); + } + } +} diff --git a/android/src/main/java/org/reactnative/camera/utils/ObjectUtils.java b/android/src/main/java/org/reactnative/camera/utils/ObjectUtils.java new file mode 100644 index 0000000..15ce89c --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/utils/ObjectUtils.java @@ -0,0 +1,15 @@ +package org.reactnative.camera.utils; + + +public class ObjectUtils { + + /* + * Replacement for Objects.equals that is only available after Android API 19 + */ + public static boolean equals(Object o1, Object o2) { + if (o1 == null && o2 == null) return true; + if (o1 == null) return false; + return o1.equals(o2); + } + +} diff --git a/android/src/main/java/org/reactnative/camera/utils/RNFileUtils.java b/android/src/main/java/org/reactnative/camera/utils/RNFileUtils.java new file mode 100644 index 0000000..f0dd871 --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/utils/RNFileUtils.java @@ -0,0 +1,34 @@ +package org.reactnative.camera.utils; + +import android.content.Context; +import android.net.Uri; + + +import java.io.File; +import java.io.IOException; +import java.util.UUID; + +/** + * Created by jgfidelis on 23/01/18. + */ + +public class RNFileUtils { + + public static File ensureDirExists(File dir) throws IOException { + if (!(dir.isDirectory() || dir.mkdirs())) { + throw new IOException("Couldn't create directory '" + dir + "'"); + } + return dir; + } + + public static String getOutputFilePath(File directory, String extension) throws IOException { + ensureDirExists(directory); + String filename = UUID.randomUUID().toString(); + return directory + File.separator + filename + extension; + } + + public static Uri uriFromFile(File file) { + return Uri.fromFile(file); + } + +} diff --git a/android/src/main/java/org/reactnative/camera/utils/ScopedContext.java b/android/src/main/java/org/reactnative/camera/utils/ScopedContext.java new file mode 100644 index 0000000..0daec43 --- /dev/null +++ b/android/src/main/java/org/reactnative/camera/utils/ScopedContext.java @@ -0,0 +1,27 @@ +package org.reactnative.camera.utils; + +import android.content.Context; + +import java.io.File; + +/** + * Created by jgfidelis on 23/01/18. + */ + +public class ScopedContext { + + private File cacheDirectory = null; + + public ScopedContext(Context context) { + createCacheDirectory(context); + } + + public void createCacheDirectory(Context context) { + cacheDirectory = new File(context.getCacheDir() + "/Camera/"); + } + + public File getCacheDirectory() { + return cacheDirectory; + } + +} diff --git a/android/src/main/java/org/reactnative/frame/RNFrame.java b/android/src/main/java/org/reactnative/frame/RNFrame.java new file mode 100644 index 0000000..ff66b45 --- /dev/null +++ b/android/src/main/java/org/reactnative/frame/RNFrame.java @@ -0,0 +1,28 @@ +package org.reactnative.frame; + +import org.reactnative.camera.utils.ImageDimensions; +import com.google.android.gms.vision.Frame; + +/** + * Wrapper around Frame allowing us to track Frame dimensions. + * Tracking dimensions is used in RNFaceDetector and RNBarcodeDetector to provide painless FaceDetector/BarcodeDetector recreation + * when image dimensions change. + */ + +public class RNFrame { + private Frame mFrame; + private ImageDimensions mDimensions; + + public RNFrame(Frame frame, ImageDimensions dimensions) { + mFrame = frame; + mDimensions = dimensions; + } + + public Frame getFrame() { + return mFrame; + } + + public ImageDimensions getDimensions() { + return mDimensions; + } +} diff --git a/android/src/main/java/org/reactnative/frame/RNFrameFactory.java b/android/src/main/java/org/reactnative/frame/RNFrameFactory.java new file mode 100644 index 0000000..9f9b85b --- /dev/null +++ b/android/src/main/java/org/reactnative/frame/RNFrameFactory.java @@ -0,0 +1,43 @@ +package org.reactnative.frame; + +import android.graphics.Bitmap; +import android.graphics.ImageFormat; + +import org.reactnative.camera.utils.ImageDimensions; +import com.google.android.gms.vision.Frame; + +import java.nio.ByteBuffer; + +public class RNFrameFactory { + public static RNFrame buildFrame(byte[] bitmapData, int width, int height, int rotation) { + Frame.Builder builder = new Frame.Builder(); + + ByteBuffer byteBuffer = ByteBuffer.wrap(bitmapData); + builder.setImageData(byteBuffer, width, height, ImageFormat.NV21); + + switch (rotation) { + case 90: + builder.setRotation(Frame.ROTATION_90); + break; + case 180: + builder.setRotation(Frame.ROTATION_180); + break; + case 270: + builder.setRotation(Frame.ROTATION_270); + break; + default: + builder.setRotation(Frame.ROTATION_0); + } + + ImageDimensions dimensions = new ImageDimensions(width, height, rotation); + + return new RNFrame(builder.build(), dimensions); + } + + public static RNFrame buildFrame(Bitmap bitmap) { + Frame.Builder builder = new Frame.Builder(); + builder.setBitmap(bitmap); + ImageDimensions dimensions = new ImageDimensions(bitmap.getWidth(), bitmap.getHeight()); + return new RNFrame(builder.build(), dimensions); + } +} diff --git a/android/src/main/res/layout-v14/texture_view.xml b/android/src/main/res/layout-v14/texture_view.xml new file mode 100644 index 0000000..91953b7 --- /dev/null +++ b/android/src/main/res/layout-v14/texture_view.xml @@ -0,0 +1,23 @@ + + + + + + + diff --git a/android/src/main/res/layout/surface_view.xml b/android/src/main/res/layout/surface_view.xml new file mode 100644 index 0000000..4029bb9 --- /dev/null +++ b/android/src/main/res/layout/surface_view.xml @@ -0,0 +1,23 @@ + + + + + + + diff --git a/android/src/main/res/values/attrs.xml b/android/src/main/res/values/attrs.xml new file mode 100644 index 0000000..7ac245d --- /dev/null +++ b/android/src/main/res/values/attrs.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android/src/main/res/values/public.xml b/android/src/main/res/values/public.xml new file mode 100644 index 0000000..84966fa --- /dev/null +++ b/android/src/main/res/values/public.xml @@ -0,0 +1,21 @@ + + + + + + + + + + diff --git a/android/src/main/res/values/styles.xml b/android/src/main/res/values/styles.xml new file mode 100644 index 0000000..6ded716 --- /dev/null +++ b/android/src/main/res/values/styles.xml @@ -0,0 +1,24 @@ + + + + + + + diff --git a/android/src/mlkit/java/org/reactnative/barcodedetector/BarcodeFormatUtils.java b/android/src/mlkit/java/org/reactnative/barcodedetector/BarcodeFormatUtils.java new file mode 100644 index 0000000..84e5ab4 --- /dev/null +++ b/android/src/mlkit/java/org/reactnative/barcodedetector/BarcodeFormatUtils.java @@ -0,0 +1,95 @@ +package org.reactnative.barcodedetector; + +import android.util.SparseArray; +import com.google.firebase.ml.vision.barcode.FirebaseVisionBarcode; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +public class BarcodeFormatUtils { + + public static final SparseArray FORMATS; + public static final Map REVERSE_FORMATS; + public static final SparseArray TYPES; + public static final Map REVERSE_TYPES; + + private static final int UNKNOWN_FORMAT_INT = FirebaseVisionBarcode.FORMAT_UNKNOWN; + + private static final String UNKNOWN_TYPE_STRING = "UNKNOWN_TYPE"; + private static final String UNKNOWN_FORMAT_STRING = "UNKNOWN_FORMAT"; + + static { + // Initialize integer to string map + SparseArray map = new SparseArray<>(); + map.put(FirebaseVisionBarcode.FORMAT_CODE_128, "CODE_128"); + map.put(FirebaseVisionBarcode.FORMAT_CODE_39, "CODE_39"); + map.put(FirebaseVisionBarcode.FORMAT_CODE_93, "CODE_93"); + map.put(FirebaseVisionBarcode.FORMAT_CODABAR, "CODABAR"); + map.put(FirebaseVisionBarcode.FORMAT_DATA_MATRIX, "DATA_MATRIX"); + map.put(FirebaseVisionBarcode.FORMAT_EAN_13, "EAN_13"); + map.put(FirebaseVisionBarcode.FORMAT_EAN_8, "EAN_8"); + map.put(FirebaseVisionBarcode.FORMAT_ITF, "ITF"); + map.put(FirebaseVisionBarcode.FORMAT_QR_CODE, "QR_CODE"); + map.put(FirebaseVisionBarcode.FORMAT_UPC_A, "UPC_A"); + map.put(FirebaseVisionBarcode.FORMAT_UPC_E, "UPC_E"); + map.put(FirebaseVisionBarcode.FORMAT_PDF417, "PDF417"); + map.put(FirebaseVisionBarcode.FORMAT_AZTEC, "AZTEC"); + map.put(FirebaseVisionBarcode.FORMAT_ALL_FORMATS, "ALL"); + map.put(FirebaseVisionBarcode.FORMAT_UPC_A, "UPC_A"); + map.put(-1, "None"); + FORMATS = map; + + + // Initialize string to integer map + Map rmap = new HashMap<>(); + for (int i = 0; i < map.size(); i++) { + rmap.put(map.valueAt(i), map.keyAt(i)); + } + + REVERSE_FORMATS = Collections.unmodifiableMap(rmap); + } + + static { + // Initialize integer to string map + SparseArray map = new SparseArray<>(); + map.put(FirebaseVisionBarcode.TYPE_CALENDAR_EVENT, "CALENDAR_EVENT"); + map.put(FirebaseVisionBarcode.TYPE_CONTACT_INFO, "CONTACT_INFO"); + map.put(FirebaseVisionBarcode.TYPE_DRIVER_LICENSE, "DRIVER_LICENSE"); + map.put(FirebaseVisionBarcode.TYPE_EMAIL, "EMAIL"); + map.put(FirebaseVisionBarcode.TYPE_GEO, "GEO"); + map.put(FirebaseVisionBarcode.TYPE_ISBN, "ISBN"); + map.put(FirebaseVisionBarcode.TYPE_PHONE, "PHONE"); + map.put(FirebaseVisionBarcode.TYPE_PRODUCT, "PRODUCT"); + map.put(FirebaseVisionBarcode.TYPE_SMS, "SMS"); + map.put(FirebaseVisionBarcode.TYPE_TEXT, "TEXT"); + map.put(FirebaseVisionBarcode.TYPE_URL, "URL"); + map.put(FirebaseVisionBarcode.TYPE_WIFI, "WIFI"); + map.put(-1, "None"); + TYPES = map; + + + // Initialize string to integer map + Map rmap = new HashMap<>(); + for (int i = 0; i < map.size(); i++) { + rmap.put(map.valueAt(i), map.keyAt(i)); + } + + REVERSE_TYPES = Collections.unmodifiableMap(rmap); + } + + public static String get(int format) { + return TYPES.get(format, UNKNOWN_TYPE_STRING); + } + public static String getFormat(int format) { + return FORMATS.get(format, UNKNOWN_FORMAT_STRING); + } + + public static int get(String format) { + if (REVERSE_FORMATS.containsKey(format)) { + return REVERSE_FORMATS.get(format); + } + + return UNKNOWN_FORMAT_INT; + } +} diff --git a/android/src/mlkit/java/org/reactnative/barcodedetector/RNBarcodeDetector.java b/android/src/mlkit/java/org/reactnative/barcodedetector/RNBarcodeDetector.java new file mode 100644 index 0000000..31b6760 --- /dev/null +++ b/android/src/mlkit/java/org/reactnative/barcodedetector/RNBarcodeDetector.java @@ -0,0 +1,67 @@ +package org.reactnative.barcodedetector; + +import android.content.Context; +import android.util.Log; + +import com.google.firebase.ml.vision.FirebaseVision; +import com.google.firebase.ml.vision.barcode.FirebaseVisionBarcode; +import com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetector; +import com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetectorOptions; + + +public class RNBarcodeDetector { + + public static int NORMAL_MODE = 0; + public static int ALTERNATE_MODE = 1; + public static int INVERTED_MODE = 2; + public static int ALL_FORMATS = FirebaseVisionBarcode.FORMAT_ALL_FORMATS; + + private FirebaseVisionBarcodeDetector mBarcodeDetector = null; + private FirebaseVisionBarcodeDetectorOptions.Builder mBuilder; + + private int mBarcodeType = FirebaseVisionBarcode.FORMAT_ALL_FORMATS; + + public RNBarcodeDetector(Context context) { + mBuilder = new FirebaseVisionBarcodeDetectorOptions.Builder().setBarcodeFormats(mBarcodeType); + } + + public boolean isOperational() { + // Legacy api from GMV + return true; + } + + public FirebaseVisionBarcodeDetector getDetector() { + + if (mBarcodeDetector == null) { + createBarcodeDetector(); + } + return mBarcodeDetector; + } + + public void setBarcodeType(int barcodeType) { + if (barcodeType != mBarcodeType) { + release(); + mBuilder.setBarcodeFormats(barcodeType); + mBarcodeType = barcodeType; + } + } + + + public void release() { + if (mBarcodeDetector != null) { + try { + mBarcodeDetector.close(); + } catch (Exception e) { + Log.e("RNCamera", "Attempt to close BarcodeDetector failed"); + } + mBarcodeDetector = null; + } + } + + private void createBarcodeDetector() { + FirebaseVisionBarcodeDetectorOptions options = mBuilder.build(); + mBarcodeDetector = FirebaseVision.getInstance() + .getVisionBarcodeDetector(options); + + } +} diff --git a/android/src/mlkit/java/org/reactnative/camera/tasks/BarcodeDetectorAsyncTask.java b/android/src/mlkit/java/org/reactnative/camera/tasks/BarcodeDetectorAsyncTask.java new file mode 100644 index 0000000..b4ffb70 --- /dev/null +++ b/android/src/mlkit/java/org/reactnative/camera/tasks/BarcodeDetectorAsyncTask.java @@ -0,0 +1,354 @@ +package org.reactnative.camera.tasks; + +//import android.graphics.Point; +import android.graphics.Rect; +import android.util.Log; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.google.android.gms.tasks.OnFailureListener; +import com.google.android.gms.tasks.OnSuccessListener; +import com.google.firebase.ml.vision.barcode.FirebaseVisionBarcode; +import com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetector; +import com.google.firebase.ml.vision.common.FirebaseVisionImage; +import com.google.firebase.ml.vision.common.FirebaseVisionImageMetadata; + +import org.reactnative.barcodedetector.BarcodeFormatUtils; +import org.reactnative.barcodedetector.RNBarcodeDetector; +import org.reactnative.camera.utils.ImageDimensions; + +import java.util.List; + +public class BarcodeDetectorAsyncTask extends android.os.AsyncTask { + + private byte[] mImageData; + private int mWidth; + private int mHeight; + private int mRotation; + private RNBarcodeDetector mBarcodeDetector; + private BarcodeDetectorAsyncTaskDelegate mDelegate; + private double mScaleX; + private double mScaleY; + private ImageDimensions mImageDimensions; + private int mPaddingLeft; + private int mPaddingTop; + private String TAG = "RNCamera"; + + public BarcodeDetectorAsyncTask( + BarcodeDetectorAsyncTaskDelegate delegate, + RNBarcodeDetector barcodeDetector, + byte[] imageData, + int width, + int height, + int rotation, + float density, + int facing, + int viewWidth, + int viewHeight, + int viewPaddingLeft, + int viewPaddingTop + ) { + mImageData = imageData; + mWidth = width; + mHeight = height; + mRotation = rotation; + mDelegate = delegate; + mBarcodeDetector = barcodeDetector; + mImageDimensions = new ImageDimensions(width, height, rotation, facing); + mScaleX = (double) (viewWidth) / (mImageDimensions.getWidth() * density); + mScaleY = 1 / density; + mPaddingLeft = viewPaddingLeft; + mPaddingTop = viewPaddingTop; + } + + @Override + protected Void doInBackground(Void... ignored) { + if (isCancelled() || mDelegate == null || mBarcodeDetector == null) { + return null; + } + + final FirebaseVisionImageMetadata metadata = new FirebaseVisionImageMetadata.Builder() + .setWidth(mWidth) + .setHeight(mHeight) + .setFormat(FirebaseVisionImageMetadata.IMAGE_FORMAT_YV12) + .setRotation(getFirebaseRotation()) + .build(); + FirebaseVisionImage image = FirebaseVisionImage.fromByteArray(mImageData, metadata); + + FirebaseVisionBarcodeDetector barcode = mBarcodeDetector.getDetector(); + barcode.detectInImage(image) + .addOnSuccessListener(new OnSuccessListener>() { + @Override + public void onSuccess(List barcodes) { + WritableArray serializedBarcodes = serializeEventData(barcodes); + mDelegate.onBarcodesDetected(serializedBarcodes); + mDelegate.onBarcodeDetectingTaskCompleted(); + } + }) + .addOnFailureListener(new OnFailureListener() { + @Override + public void onFailure(Exception e) { + Log.e(TAG, "Text recognition task failed" + e); + mDelegate.onBarcodeDetectingTaskCompleted(); + } + }); + return null; + } + + private int getFirebaseRotation(){ + int result; + switch (mRotation) { + case 0: + result = FirebaseVisionImageMetadata.ROTATION_0; + break; + case 90: + result = FirebaseVisionImageMetadata.ROTATION_90; + break; + case 180: + result = FirebaseVisionImageMetadata.ROTATION_180; + break; + case -90: + result = FirebaseVisionImageMetadata.ROTATION_270; + break; + default: + result = FirebaseVisionImageMetadata.ROTATION_0; + Log.e(TAG, "Bad rotation value: " + mRotation); + } + return result; + } + + + private WritableArray serializeEventData(List barcodes) { + WritableArray barcodesList = Arguments.createArray(); + + for (FirebaseVisionBarcode barcode: barcodes) { + // TODO implement position and data from all barcode types + Rect bounds = barcode.getBoundingBox(); +// Point[] corners = barcode.getCornerPoints(); + + String rawValue = barcode.getRawValue(); + + int valueType = barcode.getValueType(); + int valueFormat = barcode.getFormat(); + + WritableMap serializedBarcode = Arguments.createMap(); + + switch (valueType) { + case FirebaseVisionBarcode.TYPE_WIFI: + String ssid = barcode.getWifi().getSsid(); + String password = barcode.getWifi().getPassword(); + int type = barcode.getWifi().getEncryptionType(); + String typeString = "UNKNOWN"; + switch (type) { + case FirebaseVisionBarcode.WiFi.TYPE_OPEN: + typeString = "Open"; + break; + case FirebaseVisionBarcode.WiFi.TYPE_WEP: + typeString = "WEP"; + break; + case FirebaseVisionBarcode.WiFi.TYPE_WPA: + typeString = "WPA"; + break; + } + serializedBarcode.putString("encryptionType", typeString); + serializedBarcode.putString("password", password); + serializedBarcode.putString("ssid", ssid); + break; + case FirebaseVisionBarcode.TYPE_URL: + String title = barcode.getUrl().getTitle(); + String url = barcode.getUrl().getUrl(); + serializedBarcode.putString("url", url); + serializedBarcode.putString("title", title); + break; + case FirebaseVisionBarcode.TYPE_SMS: + String message = barcode.getSms().getMessage(); + String phoneNumber = barcode.getSms().getPhoneNumber(); + serializedBarcode.putString("message", message); + serializedBarcode.putString("title", phoneNumber); + break; + case FirebaseVisionBarcode.TYPE_PHONE: + String number = barcode.getPhone().getNumber(); + int typePhone = barcode.getPhone().getType(); + serializedBarcode.putString("number", number); + String typeStringPhone = getPhoneType(typePhone); + serializedBarcode.putString("phoneType", typeStringPhone); + break; + case FirebaseVisionBarcode.TYPE_CALENDAR_EVENT: + serializedBarcode.putString("description", barcode.getCalendarEvent().getDescription()); + serializedBarcode.putString("location", barcode.getCalendarEvent().getLocation()); + serializedBarcode.putString("organizer", barcode.getCalendarEvent().getOrganizer()); + serializedBarcode.putString("status", barcode.getCalendarEvent().getStatus()); + serializedBarcode.putString("summary", barcode.getCalendarEvent().getSummary()); + FirebaseVisionBarcode.CalendarDateTime start = barcode.getCalendarEvent().getStart(); + FirebaseVisionBarcode.CalendarDateTime end = barcode.getCalendarEvent().getEnd(); + if (start != null) { + serializedBarcode.putString("start", start.getRawValue()); + } + if (end != null) { + serializedBarcode.putString("end", start.getRawValue()); + } + break; + case FirebaseVisionBarcode.TYPE_DRIVER_LICENSE: + serializedBarcode.putString("addressCity", barcode.getDriverLicense().getAddressCity()); + serializedBarcode.putString("addressState", barcode.getDriverLicense().getAddressState()); + serializedBarcode.putString("addressStreet", barcode.getDriverLicense().getAddressStreet()); + serializedBarcode.putString("addressZip", barcode.getDriverLicense().getAddressZip()); + serializedBarcode.putString("birthDate", barcode.getDriverLicense().getBirthDate()); + serializedBarcode.putString("documentType", barcode.getDriverLicense().getDocumentType()); + serializedBarcode.putString("expiryDate", barcode.getDriverLicense().getExpiryDate()); + serializedBarcode.putString("firstName", barcode.getDriverLicense().getFirstName()); + serializedBarcode.putString("middleName", barcode.getDriverLicense().getMiddleName()); + serializedBarcode.putString("lastName", barcode.getDriverLicense().getLastName()); + serializedBarcode.putString("gender", barcode.getDriverLicense().getGender()); + serializedBarcode.putString("issueDate", barcode.getDriverLicense().getIssueDate()); + serializedBarcode.putString("issuingCountry", barcode.getDriverLicense().getIssuingCountry()); + serializedBarcode.putString("licenseNumber", barcode.getDriverLicense().getLicenseNumber()); + break; + case FirebaseVisionBarcode.TYPE_GEO: + serializedBarcode.putDouble("latitude", barcode.getGeoPoint().getLat()); + serializedBarcode.putDouble("longitude", barcode.getGeoPoint().getLng()); + break; + case FirebaseVisionBarcode.TYPE_CONTACT_INFO: + serializedBarcode.putString("organization", barcode.getContactInfo().getOrganization()); + serializedBarcode.putString("title", barcode.getContactInfo().getTitle()); + FirebaseVisionBarcode.PersonName name = barcode.getContactInfo().getName(); + if (name != null) { + serializedBarcode.putString("firstName", name.getFirst()); + serializedBarcode.putString("lastName", name.getLast()); + serializedBarcode.putString("middleName", name.getMiddle()); + serializedBarcode.putString("formattedName", name.getFormattedName()); + serializedBarcode.putString("prefix", name.getPrefix()); + serializedBarcode.putString("pronunciation", name.getPronunciation()); + serializedBarcode.putString("suffix", name.getSuffix()); + } + List phones = barcode.getContactInfo().getPhones(); + WritableArray phonesList = Arguments.createArray(); + for (FirebaseVisionBarcode.Phone phone : phones) { + WritableMap phoneObject = Arguments.createMap(); + phoneObject.putString("number", phone.getNumber()); + phoneObject.putString("phoneType", getPhoneType(phone.getType())); + phonesList.pushMap(phoneObject); + } + serializedBarcode.putArray("phones", phonesList); + List addresses = barcode.getContactInfo().getAddresses(); + WritableArray addressesList = Arguments.createArray(); + for (FirebaseVisionBarcode.Address address : addresses) { + WritableMap addressesData = Arguments.createMap(); + WritableArray addressesLinesList = Arguments.createArray(); + String[] addressesLines = address.getAddressLines(); + for (String line : addressesLines) { + addressesLinesList.pushString(line); + } + addressesData.putArray("addressLines", addressesLinesList); + + int addressType = address.getType(); + String addressTypeString = "UNKNOWN"; + switch(addressType) { + case FirebaseVisionBarcode.Address.TYPE_WORK: + addressTypeString = "Work"; + break; + case FirebaseVisionBarcode.Address.TYPE_HOME: + addressTypeString = "Home"; + break; + } + addressesData.putString("addressType", addressTypeString); + addressesList.pushMap(addressesData); + } + serializedBarcode.putArray("addresses", addressesList); + List emails = barcode.getContactInfo().getEmails(); + WritableArray emailsList = Arguments.createArray(); + for (FirebaseVisionBarcode.Email email : emails) { + WritableMap emailData = processEmail(email); + emailsList.pushMap(emailData); + } + serializedBarcode.putArray("emails", emailsList); + String[] urls = barcode.getContactInfo().getUrls(); + WritableArray urlsList = Arguments.createArray(); + for (String urlContact : urls) { + urlsList.pushString(urlContact); + } + serializedBarcode.putArray("urls", urlsList); + break; + case FirebaseVisionBarcode.TYPE_EMAIL: + WritableMap emailData = processEmail(barcode.getEmail()); + serializedBarcode.putMap("email", emailData); + break; + } + + serializedBarcode.putString("data", barcode.getDisplayValue()); + serializedBarcode.putString("dataRaw", rawValue); + serializedBarcode.putString("type", BarcodeFormatUtils.get(valueType)); + serializedBarcode.putString("format", BarcodeFormatUtils.getFormat(valueFormat)); + serializedBarcode.putMap("bounds", processBounds(bounds)); + barcodesList.pushMap(serializedBarcode); + } + + return barcodesList; + } + + private WritableMap processEmail(FirebaseVisionBarcode.Email email) { + WritableMap emailData = Arguments.createMap(); + emailData.putString("address", email.getAddress()); + emailData.putString("body", email.getBody()); + emailData.putString("subject", email.getSubject()); + int emailType = email.getType(); + String emailTypeString = "UNKNOWN"; + switch (emailType) { + case FirebaseVisionBarcode.Email.TYPE_WORK: + emailTypeString = "Work"; + break; + case FirebaseVisionBarcode.Email.TYPE_HOME: + emailTypeString = "Home"; + break; + } + emailData.putString("emailType", emailTypeString); + return emailData; + } + + private String getPhoneType(int typePhone) { + String typeStringPhone = "UNKNOWN"; + switch(typePhone) { + case FirebaseVisionBarcode.Phone.TYPE_WORK: + typeStringPhone = "Work"; + break; + case FirebaseVisionBarcode.Phone.TYPE_HOME: + typeStringPhone = "Home"; + break; + case FirebaseVisionBarcode.Phone.TYPE_FAX: + typeStringPhone = "Fax"; + break; + case FirebaseVisionBarcode.Phone.TYPE_MOBILE: + typeStringPhone = "Mobile"; + break; + } + return typeStringPhone; + } + + private WritableMap processBounds(Rect frame) { + WritableMap origin = Arguments.createMap(); + int x = frame.left; + int y = frame.top; + + if (frame.left < mWidth / 2) { + x = x + mPaddingLeft / 2; + } else if (frame.left > mWidth /2) { + x = x - mPaddingLeft / 2; + } + + y = y + mPaddingTop; + + origin.putDouble("x", x * mScaleX); + origin.putDouble("y", y * mScaleY); + + WritableMap size = Arguments.createMap(); + size.putDouble("width", frame.width() * mScaleX); + size.putDouble("height", frame.height() * mScaleY); + + WritableMap bounds = Arguments.createMap(); + bounds.putMap("origin", origin); + bounds.putMap("size", size); + return bounds; + } + +} diff --git a/android/src/mlkit/java/org/reactnative/camera/tasks/FaceDetectorAsyncTask.java b/android/src/mlkit/java/org/reactnative/camera/tasks/FaceDetectorAsyncTask.java new file mode 100644 index 0000000..a372be3 --- /dev/null +++ b/android/src/mlkit/java/org/reactnative/camera/tasks/FaceDetectorAsyncTask.java @@ -0,0 +1,139 @@ +package org.reactnative.camera.tasks; + +import android.util.Log; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.google.android.cameraview.CameraView; +import com.google.android.gms.tasks.OnFailureListener; +import com.google.android.gms.tasks.OnSuccessListener; +import com.google.firebase.ml.vision.common.FirebaseVisionImage; +import com.google.firebase.ml.vision.common.FirebaseVisionImageMetadata; +import com.google.firebase.ml.vision.face.FirebaseVisionFace; +import com.google.firebase.ml.vision.face.FirebaseVisionFaceDetector; + +import org.reactnative.camera.utils.ImageDimensions; +import org.reactnative.facedetector.FaceDetectorUtils; +import org.reactnative.facedetector.RNFaceDetector; + +import java.util.List; + +public class FaceDetectorAsyncTask extends android.os.AsyncTask { + private byte[] mImageData; + private int mWidth; + private int mHeight; + private int mRotation; + private RNFaceDetector mFaceDetector; + private FaceDetectorAsyncTaskDelegate mDelegate; + private double mScaleX; + private double mScaleY; + private ImageDimensions mImageDimensions; + private int mPaddingLeft; + private int mPaddingTop; + private String TAG = "RNCamera"; + + public FaceDetectorAsyncTask( + FaceDetectorAsyncTaskDelegate delegate, + RNFaceDetector faceDetector, + byte[] imageData, + int width, + int height, + int rotation, + float density, + int facing, + int viewWidth, + int viewHeight, + int viewPaddingLeft, + int viewPaddingTop + ) { + mImageData = imageData; + mWidth = width; + mHeight = height; + mRotation = rotation; + mDelegate = delegate; + mFaceDetector = faceDetector; + mImageDimensions = new ImageDimensions(width, height, rotation, facing); + mScaleX = (double) (viewWidth) / (mImageDimensions.getWidth() * density); + mScaleY = (double) (viewHeight) / (mImageDimensions.getHeight() * density); + mPaddingLeft = viewPaddingLeft; + mPaddingTop = viewPaddingTop; + } + + @Override + protected Void doInBackground(Void... ignored) { + if (isCancelled() || mDelegate == null || mFaceDetector == null) { + return null; + } + FirebaseVisionImageMetadata metadata = new FirebaseVisionImageMetadata.Builder() + .setWidth(mWidth) + .setHeight(mHeight) + .setFormat(FirebaseVisionImageMetadata.IMAGE_FORMAT_YV12) + .setRotation(getFirebaseRotation()) + .build(); + FirebaseVisionImage image = FirebaseVisionImage.fromByteArray(mImageData, metadata); + + FirebaseVisionFaceDetector detector = mFaceDetector.getDetector(); + detector.detectInImage(image) + .addOnSuccessListener( + new OnSuccessListener>() { + @Override + public void onSuccess(List faces) { + WritableArray facesList = serializeEventData(faces); + mDelegate.onFacesDetected(facesList); + mDelegate.onFaceDetectingTaskCompleted(); + } + }) + .addOnFailureListener( + new OnFailureListener() { + @Override + public void onFailure(Exception e) { + Log.e(TAG, "Text recognition task failed" + e); + mDelegate.onFaceDetectingTaskCompleted(); + } + }); + return null; + } + + private int getFirebaseRotation(){ + int result; + switch (mRotation) { + case 0: + result = FirebaseVisionImageMetadata.ROTATION_0; + break; + case 90: + result = FirebaseVisionImageMetadata.ROTATION_90; + break; + case 180: + result = FirebaseVisionImageMetadata.ROTATION_180; + break; + case 270: + result = FirebaseVisionImageMetadata.ROTATION_270; + break; + case -90: + result = FirebaseVisionImageMetadata.ROTATION_270; + break; + default: + result = FirebaseVisionImageMetadata.ROTATION_0; + Log.e(TAG, "Bad rotation value: " + mRotation); + } + return result; + } + + private WritableArray serializeEventData(List faces) { + WritableArray facesList = Arguments.createArray(); + + for (FirebaseVisionFace face : faces) { + WritableMap serializedFace = FaceDetectorUtils.serializeFace(face, mScaleX, mScaleY, mWidth, mHeight, mPaddingLeft, mPaddingTop); + if (mImageDimensions.getFacing() == CameraView.FACING_FRONT) { + serializedFace = FaceDetectorUtils.rotateFaceX(serializedFace, mImageDimensions.getWidth(), mScaleX); + } else { + serializedFace = FaceDetectorUtils.changeAnglesDirection(serializedFace); + } + facesList.pushMap(serializedFace); + } + + return facesList; + } + +} diff --git a/android/src/mlkit/java/org/reactnative/camera/tasks/TextRecognizerAsyncTask.java b/android/src/mlkit/java/org/reactnative/camera/tasks/TextRecognizerAsyncTask.java new file mode 100644 index 0000000..9a1e5db --- /dev/null +++ b/android/src/mlkit/java/org/reactnative/camera/tasks/TextRecognizerAsyncTask.java @@ -0,0 +1,267 @@ +package org.reactnative.camera.tasks; + +import android.graphics.Rect; +import android.util.Log; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReadableArray; +import com.facebook.react.bridge.ReadableMap; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.uimanager.ThemedReactContext; + +import com.google.android.cameraview.CameraView; +import com.google.android.gms.tasks.OnFailureListener; +import com.google.android.gms.tasks.OnSuccessListener; +import com.google.firebase.ml.vision.FirebaseVision; +import com.google.firebase.ml.vision.common.FirebaseVisionImage; +import com.google.firebase.ml.vision.common.FirebaseVisionImageMetadata; +import com.google.firebase.ml.vision.text.FirebaseVisionText; +import com.google.firebase.ml.vision.text.FirebaseVisionTextRecognizer; + +import org.reactnative.camera.utils.ImageDimensions; + +import java.util.List; + + +public class TextRecognizerAsyncTask extends android.os.AsyncTask { + + private TextRecognizerAsyncTaskDelegate mDelegate; + private ThemedReactContext mThemedReactContext; + private byte[] mImageData; + private int mWidth; + private int mHeight; + private int mRotation; + private double mScaleX; + private double mScaleY; + private ImageDimensions mImageDimensions; + private int mPaddingLeft; + private int mPaddingTop; + private String TAG = "RNCamera"; + + public TextRecognizerAsyncTask( + TextRecognizerAsyncTaskDelegate delegate, + ThemedReactContext themedReactContext, + byte[] imageData, + int width, + int height, + int rotation, + float density, + int facing, + int viewWidth, + int viewHeight, + int viewPaddingLeft, + int viewPaddingTop + ) { + mDelegate = delegate; + mImageData = imageData; + mWidth = width; + mHeight = height; + mRotation = rotation; + mImageDimensions = new ImageDimensions(width, height, rotation, facing); + mScaleX = (double) (viewWidth) / (mImageDimensions.getWidth() * density); + mScaleY = (double) (viewHeight) / (mImageDimensions.getHeight() * density); + mPaddingLeft = viewPaddingLeft; + mPaddingTop = viewPaddingTop; + } + + @Override + protected Void doInBackground(Void... ignored) { + if (isCancelled() || mDelegate == null) { + return null; + } + + FirebaseVisionImageMetadata metadata = new FirebaseVisionImageMetadata.Builder() + .setWidth(mWidth) + .setHeight(mHeight) + .setFormat(FirebaseVisionImageMetadata.IMAGE_FORMAT_YV12) + .setRotation(getFirebaseRotation()) + .build(); + FirebaseVisionTextRecognizer detector = FirebaseVision.getInstance().getOnDeviceTextRecognizer(); + + FirebaseVisionImage image = FirebaseVisionImage.fromByteArray(mImageData, metadata); + detector.processImage(image) + .addOnSuccessListener(new OnSuccessListener() { + @Override + public void onSuccess(FirebaseVisionText firebaseVisionText) { + List textBlocks = firebaseVisionText.getTextBlocks(); + WritableArray serializedData = serializeEventData(textBlocks); + mDelegate.onTextRecognized(serializedData); + mDelegate.onTextRecognizerTaskCompleted(); + } + }) + .addOnFailureListener( + new OnFailureListener() { + @Override + public void onFailure(Exception e) { + Log.e(TAG, "Text recognition task failed" + e); + mDelegate.onTextRecognizerTaskCompleted(); + } + }); + + return null; + } + + private int getFirebaseRotation(){ + int result; + switch (mRotation) { + case 0: + result = FirebaseVisionImageMetadata.ROTATION_0; + break; + case 90: + result = FirebaseVisionImageMetadata.ROTATION_90; + break; + case 180: + result = FirebaseVisionImageMetadata.ROTATION_180; + break; + case -90: + result = FirebaseVisionImageMetadata.ROTATION_270; + break; + default: + result = FirebaseVisionImageMetadata.ROTATION_0; + Log.e(TAG, "Bad rotation value: " + mRotation); + } + return result; + } + + private WritableArray serializeEventData(List textBlocks) { + WritableArray textBlocksList = Arguments.createArray(); + for (FirebaseVisionText.TextBlock block: textBlocks) { + WritableMap serializedTextBlock = serializeBloc(block); + if (mImageDimensions.getFacing() == CameraView.FACING_FRONT) { + serializedTextBlock = rotateTextX(serializedTextBlock); + } + textBlocksList.pushMap(serializedTextBlock); + } + + return textBlocksList; + } + + private WritableMap serializeBloc(FirebaseVisionText.TextBlock block) { + WritableMap encodedText = Arguments.createMap(); + WritableArray lines = Arguments.createArray(); + for (FirebaseVisionText.Line line : block.getLines()) { + lines.pushMap(serializeLine(line)); + } + encodedText.putArray("components", lines); + + encodedText.putString("value", block.getText()); + + WritableMap bounds = processBounds(block.getBoundingBox()); + + encodedText.putMap("bounds", bounds); + + encodedText.putString("type", "block"); + return encodedText; + } + + private WritableMap serializeLine(FirebaseVisionText.Line line) { + WritableMap encodedText = Arguments.createMap(); + WritableArray lines = Arguments.createArray(); + for (FirebaseVisionText.Element element : line.getElements()) { + lines.pushMap(serializeElement(element)); + } + encodedText.putArray("components", lines); + + encodedText.putString("value", line.getText()); + + WritableMap bounds = processBounds(line.getBoundingBox()); + + encodedText.putMap("bounds", bounds); + + encodedText.putString("type", "line"); + return encodedText; + } + + private WritableMap serializeElement(FirebaseVisionText.Element element) { + WritableMap encodedText = Arguments.createMap(); + + encodedText.putString("value", element.getText()); + + WritableMap bounds = processBounds(element.getBoundingBox()); + + encodedText.putMap("bounds", bounds); + + encodedText.putString("type", "element"); + return encodedText; + } + + private WritableMap processBounds(Rect frame) { + WritableMap origin = Arguments.createMap(); + int x = frame.left; + int y = frame.top; + + if (frame.left < mWidth / 2) { + x = x + mPaddingLeft / 2; + } else if (frame.left > mWidth /2) { + x = x - mPaddingLeft / 2; + } + + if (frame.top < mHeight / 2) { + y = y + mPaddingTop / 2; + } else if (frame.top > mHeight / 2) { + y = y - mPaddingTop / 2; + } + + origin.putDouble("x", x * mScaleX); + origin.putDouble("y", y * mScaleY); + + WritableMap size = Arguments.createMap(); + size.putDouble("width", frame.width() * mScaleX); + size.putDouble("height", frame.height() * mScaleY); + + WritableMap bounds = Arguments.createMap(); + bounds.putMap("origin", origin); + bounds.putMap("size", size); + return bounds; + } + + private WritableMap rotateTextX(WritableMap text) { + ReadableMap faceBounds = text.getMap("bounds"); + + ReadableMap oldOrigin = faceBounds.getMap("origin"); + WritableMap mirroredOrigin = positionMirroredHorizontally( + oldOrigin, mImageDimensions.getWidth(), mScaleX); + + double translateX = -faceBounds.getMap("size").getDouble("width"); + WritableMap translatedMirroredOrigin = positionTranslatedHorizontally(mirroredOrigin, translateX); + + WritableMap newBounds = Arguments.createMap(); + newBounds.merge(faceBounds); + newBounds.putMap("origin", translatedMirroredOrigin); + + text.putMap("bounds", newBounds); + + ReadableArray oldComponents = text.getArray("components"); + WritableArray newComponents = Arguments.createArray(); + for (int i = 0; i < oldComponents.size(); ++i) { + WritableMap component = Arguments.createMap(); + component.merge(oldComponents.getMap(i)); + rotateTextX(component); + newComponents.pushMap(component); + } + text.putArray("components", newComponents); + + return text; + } + + public static WritableMap positionTranslatedHorizontally(ReadableMap position, double translateX) { + WritableMap newPosition = Arguments.createMap(); + newPosition.merge(position); + newPosition.putDouble("x", position.getDouble("x") + translateX); + return newPosition; + } + + public static WritableMap positionMirroredHorizontally(ReadableMap position, int containerWidth, double scaleX) { + WritableMap newPosition = Arguments.createMap(); + newPosition.merge(position); + newPosition.putDouble("x", valueMirroredHorizontally(position.getDouble("x"), containerWidth, scaleX)); + return newPosition; + } + + public static double valueMirroredHorizontally(double elementX, int containerWidth, double scaleX) { + double originalX = elementX / scaleX; + double mirroredX = containerWidth - originalX; + return mirroredX * scaleX; + } +} diff --git a/android/src/mlkit/java/org/reactnative/facedetector/FaceDetectorModule.java b/android/src/mlkit/java/org/reactnative/facedetector/FaceDetectorModule.java new file mode 100644 index 0000000..62aac6d --- /dev/null +++ b/android/src/mlkit/java/org/reactnative/facedetector/FaceDetectorModule.java @@ -0,0 +1,74 @@ +package org.reactnative.facedetector; + +import org.reactnative.facedetector.tasks.FileFaceDetectionAsyncTask; +import com.facebook.react.bridge.Promise; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.ReadableMap; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Nullable; + +public class FaceDetectorModule extends ReactContextBaseJavaModule { + private static final String TAG = "RNFaceDetector"; +// private ScopedContext mScopedContext; +private static ReactApplicationContext mScopedContext; + + public FaceDetectorModule(ReactApplicationContext reactContext) { + super(reactContext); + mScopedContext = reactContext; + } + + @Override + public String getName() { + return TAG; + } + + @Nullable + @Override + public Map getConstants() { + return Collections.unmodifiableMap(new HashMap() { + { + put("Mode", getFaceDetectionModeConstants()); + put("Landmarks", getFaceDetectionLandmarksConstants()); + put("Classifications", getFaceDetectionClassificationsConstants()); + } + + private Map getFaceDetectionModeConstants() { + return Collections.unmodifiableMap(new HashMap() { + { + put("fast", RNFaceDetector.FAST_MODE); + put("accurate", RNFaceDetector.ACCURATE_MODE); + } + }); + } + + private Map getFaceDetectionClassificationsConstants() { + return Collections.unmodifiableMap(new HashMap() { + { + put("all", RNFaceDetector.ALL_CLASSIFICATIONS); + put("none", RNFaceDetector.NO_CLASSIFICATIONS); + } + }); + } + + private Map getFaceDetectionLandmarksConstants() { + return Collections.unmodifiableMap(new HashMap() { + { + put("all", RNFaceDetector.ALL_LANDMARKS); + put("none", RNFaceDetector.NO_LANDMARKS); + } + }); + } + }); + } + + @ReactMethod + public void detectFaces(ReadableMap options, final Promise promise) { + new FileFaceDetectionAsyncTask(mScopedContext, options, promise).execute(); + } +} diff --git a/android/src/mlkit/java/org/reactnative/facedetector/FaceDetectorUtils.java b/android/src/mlkit/java/org/reactnative/facedetector/FaceDetectorUtils.java new file mode 100644 index 0000000..316c087 --- /dev/null +++ b/android/src/mlkit/java/org/reactnative/facedetector/FaceDetectorUtils.java @@ -0,0 +1,166 @@ +package org.reactnative.facedetector; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReadableMap; +import com.facebook.react.bridge.WritableMap; +import com.google.firebase.ml.vision.common.FirebaseVisionPoint; +import com.google.firebase.ml.vision.face.FirebaseVisionFace; +import com.google.firebase.ml.vision.face.FirebaseVisionFaceLandmark; + +public class FaceDetectorUtils { + private static final String[] landmarkNames = { + "bottomMouthPosition", "leftCheekPosition", "leftEarPosition", + "leftEyePosition", "leftMouthPosition", "noseBasePosition", "rightCheekPosition", + "rightEarPosition", "rightEyePosition", "rightMouthPosition" + }; + + public static WritableMap serializeFace(FirebaseVisionFace face) { + return serializeFace(face, 1, 1, 0, 0, 0, 0); + } + + public static WritableMap serializeFace(FirebaseVisionFace face, double scaleX, double scaleY, int width, int height, int paddingLeft, int paddingTop) { + WritableMap encodedFace = Arguments.createMap(); + + int id = 0; + // If face tracking was enabled: + if (face.getTrackingId() != FirebaseVisionFace.INVALID_ID) { + id = face.getTrackingId(); + } + + + encodedFace.putInt("faceID", id); + encodedFace.putDouble("rollAngle", face.getHeadEulerAngleZ()); + encodedFace.putDouble("yawAngle", face.getHeadEulerAngleY()); + + // If classification was enabled: + if (face.getSmilingProbability() != FirebaseVisionFace.UNCOMPUTED_PROBABILITY) { + encodedFace.putDouble("smilingProbability", face.getSmilingProbability()); + } + if (face.getLeftEyeOpenProbability() != FirebaseVisionFace.UNCOMPUTED_PROBABILITY) { + encodedFace.putDouble("leftEyeOpenProbability", face.getLeftEyeOpenProbability()); + } + if (face.getRightEyeOpenProbability() != FirebaseVisionFace.UNCOMPUTED_PROBABILITY) { + encodedFace.putDouble("rightEyeOpenProbability", face.getRightEyeOpenProbability()); + } + int[] landmarks = { + FirebaseVisionFaceLandmark.MOUTH_BOTTOM, + FirebaseVisionFaceLandmark.LEFT_CHEEK, + FirebaseVisionFaceLandmark.LEFT_EAR, + FirebaseVisionFaceLandmark.LEFT_EYE, + FirebaseVisionFaceLandmark.MOUTH_LEFT, + FirebaseVisionFaceLandmark.NOSE_BASE, + FirebaseVisionFaceLandmark.RIGHT_CHEEK, + FirebaseVisionFaceLandmark.RIGHT_EAR, + FirebaseVisionFaceLandmark.RIGHT_EYE, + FirebaseVisionFaceLandmark.MOUTH_RIGHT}; + + for (int i = 0; i < landmarks.length; ++i) { + FirebaseVisionFaceLandmark landmark = face.getLandmark(landmarks[i]); + if (landmark != null) { + encodedFace.putMap(landmarkNames[i], mapFromPoint(landmark.getPosition(), scaleX, scaleY, width, height, paddingLeft, paddingTop)); + } + } + + WritableMap origin = Arguments.createMap(); + Float x = face.getBoundingBox().exactCenterX() - (face.getBoundingBox().width() / 2 ); + Float y = face.getBoundingBox().exactCenterY() - (face.getBoundingBox().height() / 2); + if (face.getBoundingBox().exactCenterX() < width / 2) { + x = x + paddingLeft / 2; + } else if (face.getBoundingBox().exactCenterX() > width / 2) { + x = x - paddingLeft / 2; + } + + if (face.getBoundingBox().exactCenterY() < height / 2) { + y = y + paddingTop / 2; + } else if (face.getBoundingBox().exactCenterY() > height / 2) { + y = y - paddingTop / 2; + } + + origin.putDouble("x", x * scaleX); + origin.putDouble("y", y * scaleY); + + WritableMap size = Arguments.createMap(); + size.putDouble("width", face.getBoundingBox().width() * scaleX); + size.putDouble("height", face.getBoundingBox().height() * scaleY); + + WritableMap bounds = Arguments.createMap(); + bounds.putMap("origin", origin); + bounds.putMap("size", size); + + encodedFace.putMap("bounds", bounds); + + return encodedFace; + } + + public static WritableMap rotateFaceX(WritableMap face, int sourceWidth, double scaleX) { + ReadableMap faceBounds = face.getMap("bounds"); + + ReadableMap oldOrigin = faceBounds.getMap("origin"); + WritableMap mirroredOrigin = positionMirroredHorizontally(oldOrigin, sourceWidth, scaleX); + + double translateX = -faceBounds.getMap("size").getDouble("width"); + WritableMap translatedMirroredOrigin = positionTranslatedHorizontally(mirroredOrigin, translateX); + + WritableMap newBounds = Arguments.createMap(); + newBounds.merge(faceBounds); + newBounds.putMap("origin", translatedMirroredOrigin); + + for (String landmarkName : landmarkNames) { + ReadableMap landmark = face.hasKey(landmarkName) ? face.getMap(landmarkName) : null; + if (landmark != null) { + WritableMap mirroredPosition = positionMirroredHorizontally(landmark, sourceWidth, scaleX); + face.putMap(landmarkName, mirroredPosition); + } + } + + face.putMap("bounds", newBounds); + + return face; + } + + public static WritableMap changeAnglesDirection(WritableMap face) { + face.putDouble("rollAngle", (-face.getDouble("rollAngle") + 360) % 360); + face.putDouble("yawAngle", (-face.getDouble("yawAngle") + 360) % 360); + return face; + } + + public static WritableMap mapFromPoint(FirebaseVisionPoint point, double scaleX, double scaleY, int width, int height, int paddingLeft, int paddingTop) { + WritableMap map = Arguments.createMap(); + Float x = point.getX(); + Float y = point.getY(); + if (point.getX() < width / 2) { + x = (x + paddingLeft / 2); + } else if (point.getX() > width / 2) { + x = (x - paddingLeft / 2); + } + + if (point.getY() < height / 2) { + y = (y + paddingTop / 2); + } else if (point.getY() > height / 2) { + y = (y - paddingTop / 2); + } + map.putDouble("x", x * scaleX); + map.putDouble("y", y * scaleY); + return map; + } + + public static WritableMap positionTranslatedHorizontally(ReadableMap position, double translateX) { + WritableMap newPosition = Arguments.createMap(); + newPosition.merge(position); + newPosition.putDouble("x", position.getDouble("x") + translateX); + return newPosition; + } + + public static WritableMap positionMirroredHorizontally(ReadableMap position, int containerWidth, double scaleX) { + WritableMap newPosition = Arguments.createMap(); + newPosition.merge(position); + newPosition.putDouble("x", valueMirroredHorizontally(position.getDouble("x"), containerWidth, scaleX)); + return newPosition; + } + + public static double valueMirroredHorizontally(double elementX, int containerWidth, double scaleX) { + double originalX = elementX / scaleX; + double mirroredX = containerWidth - originalX; + return mirroredX * scaleX; + } +} diff --git a/android/src/mlkit/java/org/reactnative/facedetector/RNFaceDetector.java b/android/src/mlkit/java/org/reactnative/facedetector/RNFaceDetector.java new file mode 100644 index 0000000..9df38ce --- /dev/null +++ b/android/src/mlkit/java/org/reactnative/facedetector/RNFaceDetector.java @@ -0,0 +1,97 @@ +package org.reactnative.facedetector; + +import android.content.Context; +import android.util.Log; + +import com.google.firebase.ml.vision.FirebaseVision; +import com.google.firebase.ml.vision.face.FirebaseVisionFaceDetector; +import com.google.firebase.ml.vision.face.FirebaseVisionFaceDetectorOptions; + + +public class RNFaceDetector { + public static int ALL_CLASSIFICATIONS = FirebaseVisionFaceDetectorOptions.ALL_CLASSIFICATIONS; + public static int NO_CLASSIFICATIONS = FirebaseVisionFaceDetectorOptions.NO_CLASSIFICATIONS; + public static int ALL_LANDMARKS = FirebaseVisionFaceDetectorOptions.ALL_LANDMARKS; + public static int NO_LANDMARKS = FirebaseVisionFaceDetectorOptions.NO_LANDMARKS; + public static int ACCURATE_MODE = FirebaseVisionFaceDetectorOptions.ACCURATE; + public static int FAST_MODE = FirebaseVisionFaceDetectorOptions.FAST; + // TODO contours detection is possible for MLKit-based face detector, implement this feature + public static int ALL_CONTOURS = FirebaseVisionFaceDetectorOptions.ALL_CONTOURS; + public static int NO_CONTOURS = FirebaseVisionFaceDetectorOptions.NO_CONTOURS; + + private FirebaseVisionFaceDetector mFaceDetector = null; + private FirebaseVisionFaceDetectorOptions.Builder mBuilder; + + private int mClassificationType = NO_CLASSIFICATIONS; + private int mLandmarkType = NO_LANDMARKS; + private float mMinFaceSize = 0.15f; + private int mMode = FAST_MODE; + + public RNFaceDetector(Context context) { + mBuilder = new FirebaseVisionFaceDetectorOptions.Builder() + .setPerformanceMode(mMode) + .setLandmarkMode(mLandmarkType) + .setClassificationMode(mClassificationType) + .setMinFaceSize(mMinFaceSize); + } + + public boolean isOperational() { + // Legacy api from GMV + return true; + } + + public FirebaseVisionFaceDetector getDetector() { + + if (mFaceDetector == null) { + createFaceDetector(); + } + return mFaceDetector; + } + + public void setClassificationType(int classificationType) { + if (classificationType != mClassificationType) { + release(); + mBuilder.setClassificationMode(classificationType); + mClassificationType = classificationType; + } + } + + public void setLandmarkType(int landmarkType) { + if (landmarkType != mLandmarkType) { + release(); + mBuilder.setLandmarkMode(landmarkType); + mLandmarkType = landmarkType; + } + } + + public void setMode(int mode) { + if (mode != mMode) { + release(); + mBuilder.setPerformanceMode(mode); + mMode = mode; + } + } + + public void setTracking(boolean tracking) { + release(); + if (tracking) { + mBuilder.enableTracking(); + } + } + + public void release() { + if (mFaceDetector != null) { + try { + mFaceDetector.close(); + } catch (Exception e) { + Log.e("RNCamera", "Attempt to close FaceDetector failed"); + } + mFaceDetector = null; + } + } + + private void createFaceDetector() { + FirebaseVisionFaceDetectorOptions options = mBuilder.build(); + mFaceDetector = FirebaseVision.getInstance().getVisionFaceDetector(options); + } +} diff --git a/android/src/mlkit/java/org/reactnative/facedetector/tasks/FileFaceDetectionAsyncTask.java b/android/src/mlkit/java/org/reactnative/facedetector/tasks/FileFaceDetectionAsyncTask.java new file mode 100644 index 0000000..ca5521f --- /dev/null +++ b/android/src/mlkit/java/org/reactnative/facedetector/tasks/FileFaceDetectionAsyncTask.java @@ -0,0 +1,167 @@ +package org.reactnative.facedetector.tasks; + +import android.content.Context; +import androidx.exifinterface.media.ExifInterface; +import android.net.Uri; +import android.os.AsyncTask; +import android.util.Log; + +import org.reactnative.facedetector.RNFaceDetector; +import org.reactnative.facedetector.FaceDetectorUtils; +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.Promise; +import com.facebook.react.bridge.ReadableMap; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.google.android.gms.tasks.OnFailureListener; +import com.google.android.gms.tasks.OnSuccessListener; +import com.google.firebase.ml.vision.common.FirebaseVisionImage; +import com.google.firebase.ml.vision.face.FirebaseVisionFace; +import com.google.firebase.ml.vision.face.FirebaseVisionFaceDetector; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +public class FileFaceDetectionAsyncTask extends AsyncTask { + private static final String ERROR_TAG = "E_FACE_DETECTION_FAILED"; + + private static final String MODE_OPTION_KEY = "mode"; + private static final String DETECT_LANDMARKS_OPTION_KEY = "detectLandmarks"; + private static final String RUN_CLASSIFICATIONS_OPTION_KEY = "runClassifications"; + + private String mUri; + private String mPath; + private Promise mPromise; + private int mWidth = 0; + private int mHeight = 0; + private Context mContext; + private ReadableMap mOptions; + private int mOrientation = ExifInterface.ORIENTATION_UNDEFINED; + private RNFaceDetector mRNFaceDetector; + + public FileFaceDetectionAsyncTask(Context context, ReadableMap options, Promise promise) { + mUri = options.getString("uri"); + mPromise = promise; + mOptions = options; + mContext = context; + } + + @Override + protected void onPreExecute() { + if (mUri == null) { + mPromise.reject(ERROR_TAG, "You have to provide an URI of an image."); + cancel(true); + return; + } + + Uri uri = Uri.parse(mUri); + mPath = uri.getPath(); + + if (mPath == null) { + mPromise.reject(ERROR_TAG, "Invalid URI provided: `" + mUri + "`."); + cancel(true); + return; + } + + // We have to check if the requested image is in a directory safely accessible by our app. + boolean fileIsInSafeDirectories = + mPath.startsWith(mContext.getCacheDir().getPath()) || mPath.startsWith(mContext.getFilesDir().getPath()); + + if (!fileIsInSafeDirectories) { + mPromise.reject(ERROR_TAG, "The image has to be in the local app's directories."); + cancel(true); + return; + } + + if(!new File(mPath).exists()) { + mPromise.reject(ERROR_TAG, "The file does not exist. Given path: `" + mPath + "`."); + cancel(true); + } + } + + @Override + protected Void doInBackground(Void... voids) { + if (isCancelled()) { + return null; + } + + mRNFaceDetector = detectorForOptions(mOptions, mContext); + + try { + ExifInterface exif = new ExifInterface(mPath); + mOrientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED); + } catch (IOException e) { + Log.e(ERROR_TAG, "Reading orientation from file `" + mPath + "` failed.", e); + } + + try { + FirebaseVisionImage image = FirebaseVisionImage.fromFilePath(mContext, Uri.parse(mUri)); + FirebaseVisionFaceDetector detector = mRNFaceDetector.getDetector(); + detector.detectInImage(image) + .addOnSuccessListener( + new OnSuccessListener>() { + @Override + public void onSuccess(List faces) { + serializeEventData(faces); + } + }) + .addOnFailureListener( + new OnFailureListener() { + @Override + public void onFailure(Exception e) { + Log.e(ERROR_TAG, "Text recognition task failed", e); + mPromise.reject(ERROR_TAG, "Text recognition task failed", e); + } + }); + } catch (IOException e) { + e.printStackTrace(); + Log.e(ERROR_TAG, "Creating Firebase Image from uri" + mUri + "failed", e); + mPromise.reject(ERROR_TAG, "Creating Firebase Image from uri" + mUri + "failed", e); + } + return null; + } + + private void serializeEventData(List faces) { + WritableMap result = Arguments.createMap(); + WritableArray facesArray = Arguments.createArray(); + + for(FirebaseVisionFace face : faces) { + WritableMap encodedFace = FaceDetectorUtils.serializeFace(face); + encodedFace.putDouble("yawAngle", (-encodedFace.getDouble("yawAngle") + 360) % 360); + encodedFace.putDouble("rollAngle", (-encodedFace.getDouble("rollAngle") + 360) % 360); + facesArray.pushMap(encodedFace); + } + + result.putArray("faces", facesArray); + + WritableMap image = Arguments.createMap(); + image.putInt("width", mWidth); + image.putInt("height", mHeight); + image.putInt("orientation", mOrientation); + image.putString("uri", mUri); + result.putMap("image", image); + + mRNFaceDetector.release(); + mPromise.resolve(result); + } + + private static RNFaceDetector detectorForOptions(ReadableMap options, Context context) { + RNFaceDetector detector = new RNFaceDetector(context); + detector.setTracking(false); + + if(options.hasKey(MODE_OPTION_KEY)) { + detector.setMode(options.getInt(MODE_OPTION_KEY)); + } + + if(options.hasKey(RUN_CLASSIFICATIONS_OPTION_KEY)) { + detector.setClassificationType(options.getInt(RUN_CLASSIFICATIONS_OPTION_KEY)); + } + + if(options.hasKey(DETECT_LANDMARKS_OPTION_KEY)) { + detector.setLandmarkType(options.getInt(DETECT_LANDMARKS_OPTION_KEY)); + } + + return detector; + } +} diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100644 index 0000000..84dab2e --- /dev/null +++ b/commitlint.config.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = { + extends: ['@commitlint/config-conventional'], +}; diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..f3981e4 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,17 @@ +version: "3" + +services: + docusaurus: + build: . + ports: + - 3000:3000 + - 35729:35729 + volumes: + - ./docs:/app/docs + - ./website/core:/app/website/core + - ./website/i18n:/app/website/i18n + - ./website/pages:/app/website/pages + - ./website/static:/app/website/static + - ./website/sidebars.json:/app/website/sidebars.json + - ./website/siteConfig.js:/app/website/siteConfig.js + working_dir: /app/website diff --git a/docs/API.md b/docs/API.md new file mode 100644 index 0000000..2197a16 --- /dev/null +++ b/docs/API.md @@ -0,0 +1,346 @@ +--- +id: api +title: Work in progress +--- +## Props Index +[**wip**] + +- [`zoom`](API.md#zoom) +- [`maxZoom`](API.md#maxZoom) +- [`type`](API.md#type) +- [`cameraId`](API.md#cameraId) +- [`flashMode`](API.md#flashMode) +- [`exposure`](API.md#exposure) +- [`whiteBalance`](API.md#whiteBalance) +- [`autoFocus`](API.md#autoFocus) +- [`ratio`](API.md#ratio) +- [`focusDepth`](API.md#focusDepth) +- [`onMountError`](API.md#onMountError) +- [`onCameraReady`](API.md#onCameraReady) + +## Methods Index +- [`takePictureAsync`](API.md#takePictureAsync()) +- [`recordAsync`](API.md#recordAsync) +- [`refreshAuthorizationStatus`](API.md#refreshAuthorizationStatus) +- [`stopRecording`](API.md#stopRecording) +- [`pausePreview`](API.md#pausePreview) +- [`resumePreview`](API.md#resumePreview) +- [`getAvailablePictureSizes`](API.md#getAvailablePictureSizes) +- [`getSupportedRatiosAsync`](API.md#getSupportedRatiosAsync) +- [`isRecording`](API.md#isRecording) + +## Props +--- +### `zoom` + +This property specifies the zoom value of the camera. Ranges from 0 to 1. Default to 0. + +| Type | Default Value | +| ---- | -------- | +| number | 0 | + +--- +### `maxZoom` + +The maximum zoom value of the camera. Defaults to 0. + +| Type | Default Value | +| ---- | -------- | +| number | 0 | + +--- +### `type` + +This property defines which camera on the phone the component is using. +Possible values: +- `front` +- `back` + +| Type | Default Value | +| ---- | -------- | +| number | 'back' | + +--- +### `cameraId` + +For selecting from multiple cameras on Android devices. See [2492](https://github.com/react-native-community/react-native-camera/pull/2492) for more info. Can be retrieved with `getCameraIds()` + +| Type | Default Value | Platform | +| ---- | -------- | -------- | +| String | `null` | Android | + +--- +### `flashMode` + +Determines the state of the camera flash. Has the following possible states. + ```off: '1', + on: 'auto', + auto: 'torch', + torch: 'off' + ``` + +| Type | Default Value | +| ---- | -------- | +| object | `{ off: 1 }` | + +--- + +## Methods + +## takePictureAsync() + +Returns a promise with TakePictureResponse. +### Method type + +```ts +takePictureAsync(options?: TakePictureOptions): Promise; +``` +```ts +interface TakePictureOptions { + quality?: number; + orientation?: keyof Orientation | OrientationNumber; + base64?: boolean; + exif?: boolean; + width?: number; + mirrorImage?: boolean; + doNotSave?: boolean; + pauseAfterCapture?: boolean; + writeExif?: boolean | { [name: string]: any }; + + /** Android only */ + fixOrientation?: boolean; + + /** iOS only */ + forceUpOrientation?: boolean; +} + +interface TakePictureResponse { + width: number; + height: number; + uri: string; + base64?: string; + exif?: { [name: string]: any }; + pictureOrientation: number; + deviceOrientation: number; +} +``` + +### Usage example + +```js +takePicture = async () => { + if (this.camera) { + const data = await this.camera.takePictureAsync(); + console.warn('takePictureResponse ', data); + } +}; +``` +--- + +## recordAsync() + +Returns a promise with RecordResponse. + +### Method type + +```ts +recordAsync(options?: RecordOptions): Promise; +``` +```ts +interface RecordOptions { + quality?: keyof VideoQuality; + orientation?: keyof Orientation | OrientationNumber; + maxDuration?: number; + maxFileSize?: number; + mute?: boolean; + mirrorVideo?: boolean; + path?: string; + videoBitrate?: number; + + /** iOS only */ + codec?: keyof VideoCodec | VideoCodec[keyof VideoCodec]; +} + +interface RecordResponse { + /** Path to the video saved on your app's cache directory. */ + uri: string; + videoOrientation: number; + deviceOrientation: number; + isRecordingInterrupted: boolean; + /** iOS only */ + codec: VideoCodec[keyof VideoCodec]; +} + +``` + +### Usage example + +```js +takeVideo = async () => { + if (this.camera) { + try { + const promise = this.camera.recordAsync(this.state.recordOptions); + + if (promise) { + this.setState({ isRecording: true }); + const data = await promise; + this.setState({ isRecording: false }); + console.warn('takeVideo', data); + } + } catch (e) { + console.error(e); + } + } +}; +``` + +--- + + +## refreshAuthorizationStatus() + +Allows to make RNCamera check Permissions again and set status accordingly. +Making it possible to refresh status of RNCamera after user initially rejected the permissions. + +### Method type + +```ts +refreshAuthorizationStatus(): Promise; +``` + +### Usage example + +```js +/* -> { + +} */ +``` + +--- + +## stopRecording() + +Should be called after recordAsync() to make the promise be fulfilled and get the video uri. + +### Method type + +```ts +stopRecording(): void; +``` + +### Usage example + +```js +stopRecording(): void; +/* -> { + +} */ +``` + +--- + + +## pausePreview() + +Pauses the preview. The preview can be resumed again by using resumePreview(). + +### Method type + +```ts +pausePreview(): void; +``` + +### Usage example + +```js +/* -> { + +} */ +``` + +--- + + +## resumePreview() + +Resumes the preview after pausePreview() has been called. + +### Method type + +```ts +resumePreview(): void; +``` + +### Usage example + +```js +/* -> { + +} */ +``` + +--- + +## getAvailablePictureSizes() + +Returns a promise with getAvailablePictureSizes. + +### Method type + +```ts +getAvailablePictureSizes(): Promise; + +``` + +### Usage example + +```js +/* -> { + +} */ +``` + +--- + + +## getSupportedRatiosAsync() - Android only + +Android only. Returns a promise. The promise will be fulfilled with an object with an array containing strings with all camera aspect ratios supported by the device. + +### Method type + +```ts +getSupportedRatiosAsync(): Promise; +``` + +### Usage example + +```js +/* -> { + +} */ +``` + +--- + + +## isRecording() - iOS only + +iOS only. Returns a promise. The promise will be fulfilled with a boolean indicating if currently recording is started or stopped. + +### Method type +```ts +isRecording(): Promise; + +``` + +### Usage example + +```js +const isRecording = await isRecording(); +/* -> { + isRecording = true +} */ +``` + +--- diff --git a/docs/AndroidXMigration.md b/docs/AndroidXMigration.md new file mode 100644 index 0000000..2577613 --- /dev/null +++ b/docs/AndroidXMigration.md @@ -0,0 +1,101 @@ +# AndroidX Migration + +AndroidX is the replacement for Google Support Libraries. It is the open-source project that the Android team uses to +develop, test, package, version and release libraries within Jetpack. Moving forward, all new Android development +will be in AndroidX, the Support Libraries are depreciated. + +> AndroidX is a major improvement to the original Android Support Library. Like the Support Library, AndroidX ships separately from the Android OS and provides backwards-compatibility across Android releases. AndroidX fully replaces the Support Library by providing feature parity and new libraries. + +See: https://developer.android.com/jetpack/androidx/ + +## Migration via Android studio + +You can follow the instructions [here](https://developer.android.com/jetpack/androidx/migrate) to migrate you existing +project. + +## Manual + +#### Update the android section `android/app/build.gradle` to + +``` +android { + compileSdkVersion 28 + buildToolsVersion "28.0.3" + + defaultConfig { + ... + minSdkVersion 16 + targetSdkVersion 28 + } +... +``` + +If you have any `dependencies {` that are using the old Google Support Libraries, you'll need to update them +to use the androidx version. Can check the full migration list [here](https://developer.android.com/jetpack/androidx/migrate). + +#### Update `android/app/src/main/AndroidManifest.xml` + +remove + +```xml + +``` + +#### Update `android/build.gradle` + +``` +buildscript { + repositories { + google() + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:3.2.1' + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + repositories { + mavenLocal() + google() + jcenter() + maven { url "https://jitpack.io" } + maven { + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm + url "$rootDir/../node_modules/react-native/android" + } + } +} + +ext { + compileSdkVersion = 28 + buildToolsVersion = '28.0.3' +} + +subprojects { subproject -> + afterEvaluate{ + if((subproject.plugins.hasPlugin('android') || subproject.plugins.hasPlugin('android-library'))) { + android { + compileSdkVersion rootProject.ext.compileSdkVersion + buildToolsVersion rootProject.ext.buildToolsVersion + } + } + } +} +``` + +#### Update `android/gradle.properties` + +add + +``` +android.enableJetifier = true; +android.useAndroidX = true; +``` + +#### Update `android/gradle/wrapper/gradle-wrapper.properties` + +make sure your gradle `distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip` diff --git a/docs/Contributing.md b/docs/Contributing.md new file mode 100644 index 0000000..7310101 --- /dev/null +++ b/docs/Contributing.md @@ -0,0 +1,11 @@ +--- +id: contributing +title: Contributing +sidebar_label: Contributing +--- + +- Pull Requests are welcome, if you open a pull request we will do our best to get to it in a timely manner +- Pull Request Reviews are even more welcome! we need help testing, reviewing, and updating open PRs +- If you are interested in contributing more actively, please contact me (same username on Twitter, Facebook, etc.) Thanks! +- We are now on [Open Collective](https://opencollective.com/react-native-camera#sponsor)! Contributions are appreciated and will be used to fund core contributors. [more details](#open-collective) +- If you want to help us coding, join Expo slack https://slack.expo.io/, so we can chat over there. (#react-native-camera) diff --git a/docs/GradleUpgradeGuide.md b/docs/GradleUpgradeGuide.md new file mode 100644 index 0000000..7a29209 --- /dev/null +++ b/docs/GradleUpgradeGuide.md @@ -0,0 +1,109 @@ +--- +id: GradleUpgradeGuide +title: Upgrade gradle for Android projects +sidebar_label: Gradle Upgrade Guide +--- + +To integrate react-native-camera into your own react native project and make it work for Android, you need to edit the following files in the `android` folder under your project folder: + +- In the `android/gradle.properties` file: + +``` +android.useDeprecatedNdk=true +android.enableAapt2=false +``` + +- In the `android/build.gradle` file: + +``` +buildscript { + repositories { + jcenter() + maven { + url 'https://maven.google.com' + name 'Google' + } + } + dependencies { + classpath 'com.android.tools.build:gradle:3.1.0' + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + repositories { + mavenLocal() + jcenter() + maven { + url 'https://maven.google.com' + name 'Google' + } + maven { url "https://jitpack.io" } + maven { + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm + url "$rootDir/../node_modules/react-native/android" + } + } +} + +subprojects { + project.configurations.all { + resolutionStrategy.eachDependency { details -> + if (details.requested.group == 'com.android.support' + && !details.requested.name.contains('multidex') ) { + details.useVersion "26.0.1" + } + } + } + + afterEvaluate { + project -> if (project.hasProperty("android")) { + android { + compileSdkVersion 26 + buildToolsVersion '26.0.1' + } + } + } +} +``` + +- In the `android/app/build.gradle` file: + +``` +android { + compileSdkVersion 26 + buildToolsVersion "26.0.1" + + defaultConfig { + applicationId "appName" + minSdkVersion 16 + targetSdkVersion 22 + versionCode 1 + versionName "1.0" + ndk { + abiFilters "armeabi-v7a", "x86" + } + } + +... + +dependencies { + implementation project(':react-native-camera') + ... + implementation fileTree(dir: "libs", include: ["*.jar"]) + implementation 'com.android.support:appcompat-v7:26.0.1' + implementation "com.facebook.react:react-native:+" // From node_modules +} +``` + +- In the `android/gradle/gradle-wrapper.properties` file: + +``` +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip +``` diff --git a/docs/QA.md b/docs/QA.md new file mode 100644 index 0000000..41a6cd1 --- /dev/null +++ b/docs/QA.md @@ -0,0 +1,152 @@ +--- +id: qa +title: Q & A +sidebar_label: Q & A +--- + +- [meta-data android 26](#meta-data-android-26) +- [Manifest merger failed](#when-i-try-to-build-my-project-i-get-following-error) +- [How can I resize captured images?](#how-can-i-resize-captured-images) +- [How can I get thumbnails for my video?](#how-can-i-get-thumbnails-for-my-video) +- [How can I save my video/image to the camera roll?](#hoc-can-i-save-my-video-image-to-the-camera-roll) + +## meta-data android 26 + +``` + AndroidManifest.xml:25:13-35 Error: + Attribute meta-data#android.support.VERSION@value value=(26.0.2) from [com.android.support:exifinterface:26.0.2] Android + Manifest.xml:25:13-35 + is also present at [com.android.support:support-v4:26.0.1] AndroidManifest.xml:28:13-35 value=(26.0.1). + Suggestion: add 'tools:replace="android:value"' to element at AndroidManifest.xml:23:9-25:38 to override. +``` + +Add this to your AndroidManifest.xml: + +- [ ] xmlns:tools="http://schemas.android.com/tools" + +```xml + +``` + +--- + +## When I try to build my project, I get following error: + +``` +Execution failed for task ':app:processDebugManifest'. +> Manifest merger failed : Attribute meta-data#android.support.VERSION@value value=(26.0.2) from [com.android.support:exifinterface:26.0.2] AndroidManifest.xml:25:13-35 + is also present at [com.android.support:support-v4:26.0.1] AndroidManifest.xml:28:13-35 value=(26.0.1). + Suggestion: add 'tools:replace="android:value"' to element at AndroidManifest.xml:23:9-25:38 to override. +``` + +## As the error message hints `com.android.support:exifinterface:26.0.2` is already found in `com.android.support:support-v4:26.0.1` + +To fix this issue, modify your project's `android/app/build.gradle` as follows: + +```Gradle +dependencies { + compile (project(':react-native-camera')) { + exclude group: "com.android.support" + + // uncomment this if also com.google.android.gms:play-services-vision versions are conflicting + // this can happen if you use react-native-firebase + // exclude group: "com.google.android.gms" + } + + compile ('com.android.support:exifinterface:26.0.1') { + force = true; + } + + // uncomment this if you uncommented the previous line + // compile ('com.google.android.gms:play-services-vision:11.6.0') { + // force = true; + // } +} +``` + +--- + +## How can I resize captured images? + +Currently, `RNCamera` does not allow for specifying the desired resolution of the captured image, nor does it natively expose any functionality to resize images. +One way to achieve this (without any additional dependencies ) is using [react-native.ImageEditor.cropImage](https://facebook.github.io/react-native/docs/imageeditor.html#cropimage). + +The strategy is: + +1. Capture an image using `RNCamera`, which uses the device's max resolution. +2. Use `react-native.ImageEditor.cropImage()` to crop the image using the image's native size as the crop size (thus maintaining the original image), and the desired new size as the `displaySize` attribute (thus resizing the image). + +```javascript +import React, { PureComponent } from 'react'; +import { Button, ImageEditor } from 'react-native'; +import { RNCamera } from 'react-native-camera'; + +class CameraComponent extends PureComponent { + // ... + + capturePicture = () => { + if (this.camera) { + // 1) Capture the image using RNCamera API + this.camera.takePictureAsync(options) + .then((capturedImg) => { + // 2a) Extract a reference to the captured image, + // along with its natural dimensions + const { uri, width, height } = capturedImg; + + const cropData = { + // 2b) By cropping from (0, 0) to (imgWidth, imgHeight), + // we maintain the original image's dimensions + offset: { x: 0, y: 0 }, + size: { width, height }, + + // 2c) Use the displaySize option to specify the new image size + displaySize: { width: RESIZED_WIDTH, height: RESIZED_HEIGHT }, + }; + + ImageEditor.cropImage(uri, cropData, (resizedImage) => { + // resizedImage == 'file:///data/.../img.jpg' + }, (error) => { + console.error('Error resizing image: ', error.getMessage()); + }); + }) + .catch((error) => { + console.log('Could not capture image.', error.getMessage()); + }); + } + + render() { + return ( + (this.camera = ref)} + // ... + /> + + + ); + } +} + +``` + +## How can I get thumbnails for my video + +We recommend using the library [`react-native-thumbnail`](https://github.com/phuochau/react-native-thumbnail) for generating thumbnails of your video files. + +## How can I save my video/image to the camera roll? + +You can use the [`CameraRoll` Module](https://facebook.github.io/react-native/docs/cameraroll.htm). +You must follow the setup instructions in the `react-native` documentation, since `CameraRoll` module needs to be linked first. diff --git a/docs/RNCamera.md b/docs/RNCamera.md new file mode 100644 index 0000000..199c90a --- /dev/null +++ b/docs/RNCamera.md @@ -0,0 +1,795 @@ +--- +id: rncamera +title: RNCamera +sidebar_label: RNCamera +--- + +## Usage + +All you need is to `import` `{ RNCamera }` from the `react-native-camera` module and then use the +`` tag. + +```javascript +'use strict'; +import React, { PureComponent } from 'react'; +import { AppRegistry, StyleSheet, Text, TouchableOpacity, View } from 'react-native'; +import { RNCamera } from 'react-native-camera'; + +class ExampleApp extends PureComponent { + render() { + return ( + + { + this.camera = ref; + }} + style={styles.preview} + type={RNCamera.Constants.Type.back} + flashMode={RNCamera.Constants.FlashMode.on} + androidCameraPermissionOptions={{ + title: 'Permission to use camera', + message: 'We need your permission to use your camera', + buttonPositive: 'Ok', + buttonNegative: 'Cancel', + }} + androidRecordAudioPermissionOptions={{ + title: 'Permission to use audio recording', + message: 'We need your permission to use your audio', + buttonPositive: 'Ok', + buttonNegative: 'Cancel', + }} + onGoogleVisionBarcodesDetected={({ barcodes }) => { + console.log(barcodes); + }} + /> + + + SNAP + + + + ); + } + + takePicture = async() => { + if (this.camera) { + const options = { quality: 0.5, base64: true }; + const data = await this.camera.takePictureAsync(options); + console.log(data.uri); + } + }; +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + flexDirection: 'column', + backgroundColor: 'black', + }, + preview: { + flex: 1, + justifyContent: 'flex-end', + alignItems: 'center', + }, + capture: { + flex: 0, + backgroundColor: '#fff', + borderRadius: 5, + padding: 15, + paddingHorizontal: 20, + alignSelf: 'center', + margin: 20, + }, +}); + +AppRegistry.registerComponent('App', () => ExampleApp); +``` + +## FaCC (Function as Child Components) + +\*_You can also use it with Facc._ + +```javascript +'use strict'; +import React, { PureComponent } from 'react'; +import { AppRegistry, StyleSheet, Text, TouchableOpacity, View } from 'react-native'; +import { RNCamera } from 'react-native-camera'; + +const PendingView = () => ( + + Waiting + +); + +class ExampleApp extends PureComponent { + render() { + return ( + + + {({ camera, status, recordAudioPermissionStatus }) => { + if (status !== 'READY') return ; + return ( + + this.takePicture(camera)} style={styles.capture}> + SNAP + + + ); + }} + + + ); + } + + takePicture = async function(camera) { + const options = { quality: 0.5, base64: true }; + const data = await camera.takePictureAsync(options); + // eslint-disable-next-line + console.log(data.uri); + }; +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + flexDirection: 'column', + backgroundColor: 'black', + }, + preview: { + flex: 1, + justifyContent: 'flex-end', + alignItems: 'center', + }, + capture: { + flex: 0, + backgroundColor: '#fff', + borderRadius: 5, + padding: 15, + paddingHorizontal: 20, + alignSelf: 'center', + margin: 20, + }, +}); + +AppRegistry.registerComponent('App', () => ExampleApp); +``` + +### `camera` + +_It's the RNCamera's reference_ + +### `status` + +One of `RNCamera.Constants.CameraStatus` + +'READY' | 'PENDING_AUTHORIZATION' | 'NOT_AUTHORIZED' + +### `recordAudioPermissionStatus` + +One of `RNCamera.Constants.RecordAudioPermissionStatus`. + +`'AUTHORIZED'` | `'NOT_AUTHORIZED'` | `'PENDING_AUTHORIZATION'` + +## Properties + +### `autoFocus` + +Values: `RNCamera.Constants.AutoFocus.on` (default) or `RNCamera.Constants.AutoFocus.off` + +Most cameras have a Auto Focus feature. It adjusts your camera lens position automatically depending on the pixels seen by your camera. + +Use the `autoFocus` property to specify the auto focus setting of your camera. `RNCamera.Constants.AutoFocus.on` turns it ON, `RNCamera.Constants.AutoFocus.off` turns it OFF. + +### `autoFocusPointOfInterest` + +Values: Object `{ x: 0.5, y: 0.5 }`. +Values (iOS): Object `{ x: 0.5, y: 0.5, autoExposure }`. + +Setting this property causes the auto focus feature of the camera to attempt to focus on the part of the image at this coordinate. + +Coordinates values are measured as floats from `0` to `1.0`. `{ x: 0, y: 0 }` will focus on the top left of the image, `{ x: 1, y: 1 }` will be the bottom right. Values are based on landscape mode with the home button on the right—this applies even if the device is in portrait mode. + +On iOS, focusing will not change the exposure automatically unless autoExposure is also set to true. + +Hint: +for portrait orientation, apply 90° clockwise rotation + translation: [Example](https://gist.github.com/Craigtut/6632a9ac7cfff55e74fb561862bc4edb) + + +### iOS `onSubjectAreaChanged` +iOS only. + +if autoFocusPointOfInterest is set, this event will be fired when a substancial change is detected with the following object: `{ nativeEvent: { prevPoint: { x: number; y: number; } } }` + +### `captureAudio` + +Values: boolean `true` (default) | `false` + +Specifies if audio recording permissions should be requested. +Make sure to follow README instructions for audio recording permissions [here](README.md). + +### iOS `keepAudioSession` + +Values: boolean `true` | `false` (false) + +(iOS Only) When the camera is unmounted, it will release any audio session it acquired (if `captureAudio=true`) so other media can continue playing. However, this might not be always desirable (e.g., if video is played afterwards) and can be disabled by setting it to `true`. Setting this to `true`, means your app will not release the audio session. Note: other apps might still "steal" the audio session from your app. + +### `flashMode` + +Values: `RNCamera.Constants.FlashMode.off` (default), `RNCamera.Constants.FlashMode.on`, `RNCamera.Constants.FlashMode.auto` or `RNCamera.Constants.FlashMode.torch`. + +Specifies the flash mode of your camera. + +`RNCamera.Constants.FlashMode.off` turns it off. + +`RNCamera.Constants.FlashMode.on` means camera will use flash in all photos taken. + +`RNCamera.Constants.FlashMode.auto` leaves your phone to decide when to use flash when taking photos, based on the lightning conditions that the camera observes. + +`RNCamera.Constants.FlashMode.torch` turns on torch mode, meaning the flash light will be turned on all the time (even before taking photo) just like a flashlight. + +### `focusDepth` + +Value: float from `0` to `1.0` + +Manually set camera focus. Only works with `autoFocus` off. The value 0 is minimum focus depth, 1 is maximum focus depth. For a medium focus depth, for example, you could use 0.5. + +### `Android` `ratio` + +A string representing the camera ratio in the format 'height:width'. Default is `"4:3"`. + +Use `getSupportedRatiosAsync` method to get ratio strings supported by your camera on Android. + +### `type` + +Values: `RNCamera.Constants.Type.front` or `RNCamera.Constants.Type.back` (default) + +Use the `type` property to specify which camera to use. + +### `Android` `cameraId` + +Overrides the `type` property and uses the camera given by cameraId. Use `getCameraIds` to get the list of available IDs. + +A common use case for this is to provide a "switch camera" button that loops through all available cameras. + +Note: Variables such as flash might need to be resetted due to the camera not reporting an error when those values are not supported. + +### `whiteBalance` + +Values: `RNCamera.Constants.WhiteBalance.sunny`, `RNCamera.Constants.WhiteBalance.cloudy`, `RNCamera.Constants.WhiteBalance.shadow`, `RNCamera.Constants.WhiteBalance.incandescent`, `RNCamera.Constants.WhiteBalance.fluorescent` or `RNCamera.Constants.WhiteBalance.auto` (default) + +A camera’s white balance setting allows you to control the color temperature in your photos by cooling down or warming up the colors. + +The idea is that you select the appropriate white balance setting for the type of light that you’re shooting in, and then your camera automatically adjusts the colors to eliminate any warm or cool color casts from your light source. + +Use the `whiteBalance` property to specify which white balance setting the camera should use. + +### `zoom` + +Value: float from `0` to `1.0` + +Specifies the zoom of your camera. The value 0 is no zoom, 1 is maximum zoom. For a medium zoom, for example, you could pass `0.5`. + +### `iOS` `maxZoom` + +iOS Only. + +Value: optional float greater than `1.0` used to enforce a maximum zoom value on the camera. Setting a value to less than `1` (default) will make the camera use its own max zoom property. + +Specifies the max zoom value used in zoom calculations. This is specifically useful for iOS where it reports arbitrary high values and using a 0 to 1 value as the zoom factor is not appropriate. + +### `Android` `permissionDialogTitle` - Deprecated + +Starting on android M individual permissions must be granted for certain services, the camera is one of them, you can use this to change the title of the dialog prompt requesting permissions. + +### `Android` `permissionDialogMessage` - Deprecated + +Starting on android M individual permissions must be granted for certain services, the camera is one of them, you can use this to change the content of the dialog prompt requesting permissions. + +### `Android` `androidRecordAudioPermissionOptions` + +Configuration options for permissions request for recording audio. It will be passed as `rationale` parameter to [`PermissionsAndroid.request`](https://facebook.github.io/react-native/docs/permissionsandroid#request). This replaces and deprecates old `permissionDialogTitle` and `permissionDialogMessage` parameters. + +### `Android` `androidCameraPermissionOptions` + +Configuration options for permissions request for camera. It will be passed as `rationale` parameter to [`PermissionsAndroid.request`](https://facebook.github.io/react-native/docs/permissionsandroid#request). This replaces and deprecates old `permissionDialogTitle` and `permissionDialogMessage` parameters. + +### `notAuthorizedView` + +By default a `Camera not authorized` message will be displayed when access to the camera has been denied, if set displays the passed react element instead of the default one. + +### `pendingAuthorizationView` + +By default a will be displayed while the component is waiting for the user to grant/deny access to the camera, if set displays the passed react element instead of the default one. + +#### `rectOfInterest` + +An `{x: , y:, width:, height: }` object which defines the rect of interst as normalized coordinates from `(0,0)` top left corner to `(1,1)` bottom right corner. + +Note: Must also provide cameraViewDimensions prop for Android device + +### `Android` `cameraViewDimensions` + +An `{width:, height: }` object which defines the width and height of the cameraView. This prop is used to adjust the effect of Aspect Raio for rectOfInterest area on Android + + +### `iOS` `videoStabilizationMode` + +The video stabilization mode used for a video recording. The possible values are: + +- `RNCamera.Constants.VideoStabilization['off']` +- `RNCamera.Constants.VideoStabilization['standard']` +- `RNCamera.Constants.VideoStabilization['cinematic']` +- `RNCamera.Constants.VideoStabilization['auto']` + +You can read more about each stabilization type here: https://developer.apple.com/documentation/avfoundation/avcapturevideostabilizationmode + +### `defaultVideoQuality` + +This option specifies the quality of the video to be taken. The possible values are: + +- `RNCamera.Constants.VideoQuality.2160p`. + - `ios` Specifies capture settings suitable for 2160p (also called UHD or 4K) quality (3840x2160 pixel) video output. + - `android` Quality level corresponding to the 2160p (3840x2160) resolution. (Android Lollipop and above only!). +- `RNCamera.Constants.VideoQuality.1080p`. + - `ios` Specifies capture settings suitable for 1080p quality (1920x1080 pixel) video output. + - `android` Quality level corresponding to the 1080p (1920 x 1080) resolution. +- `RNCamera.Constants.VideoQuality.720p`. + - `ios` Specifies capture settings suitable for 720p quality (1280x720 pixel) video output. + - `android` Quality level corresponding to the 720p (1280 x 720) resolution. +- `RNCamera.Constants.VideoQuality.480p`. + - `ios` Specifies capture settings suitable for VGA quality (640x480 pixel) video output. + - `android` Quality level corresponding to the 480p (720 x 480) resolution. +- `RNCamera.Constants.VideoQuality.4:3`. + - `ios` Specifies capture settings suitable for VGA quality (640x480 pixel) video output. (Same as RNCamera.Constants.VideoQuality.480p). + - `android` Quality level corresponding to the 480p (720 x 480) resolution but with video frame width set to 640. +- `RNCamera.Constants.VideoQuality.288p`. + - `ios` Specifies capture settings suitable for CIF quality (352x288 pixel) video output. + - `android` Not supported. + +If nothing is passed the device's highest camera quality will be used as default. +Note: This solve the flicker video recording issue for iOS + +### Native Event callbacks props + +### `onCameraReady` + +Function to be called when native code emit onCameraReady event, when camera is ready. This event will also fire when changing cameras (by `type` or `cameraId`). + +### `onMountError` + +Function to be called when native code emit onMountError event, when there is a problem mounting the camera. + +### `onStatusChange` + +Function to be called when native code emits status changes in relation to authorization changes. + +Event contains the following fields: + +- `cameraStatus` - one of the [CameraStatus](#status) values +- `recordAudioPermissionStatus` - one of the [RecordAudioPermissionStatus](#recordAudioPermissionStatus) values + +### `iOS` `onAudioInterrupted` + +iOS only. Function to be called when the camera audio session is interrupted or fails to start for any reason (e.g., in use or not authorized). For example, this might happen due to another app taking exclusive control over the microphone (e.g., a phone call) if `captureAudio={true}`. When this happens, any active audio input will be temporarily disabled and cause a flicker on the preview screen. This will fire any time an attempt to connect the audio device fails. Use this to update your UI to indicate that audio recording is not currently possible. + +### `iOS` `onAudioConnected` + +iOS only. Function to be called when the camera audio session is connected. This will be fired the first time the camera is mounted with `captureAudio={true}`, and any time the audio device connection is established. Note that this event might not always fire after an interruption due to iOS' behavior. For example, if the audio was already interrupted before the camera was mounted, this event will only fire once a recording is attempted. + + +### `onPictureTaken` + +Function to be called when native code emit onPictureTaken event, when camera has taken a picture, but before all extra processing happens. This can be useful to allow the UI to take other pictures while the processing of the current picture is still taking place. + +### `onRecordingStart` + +Function to be called when native code actually starts video recording. Note that video recording might take a few miliseconds to setup depending on the camera settings and hardware features. Use this event to detect when video is actually being recorded. +Event will contain the following fields: + +- `uri` - Video file URI, as returned by `recordAsync` +- `videoOrientation` - Video orientation, as returned by `recordAsync` +- `deviceOrientation` - Video orientation, as returned by `recordAsync` + +### `onRecordingEnd` + +Function to be called when native code stops recording video, but before all video processing takes place. This event will only fire after a successful video recording, and it will not fire if video recording fails (use the error returned from `recordAsync` instead). + + +### Bar Code Related props + +### `onBarCodeRead` + +Will call the specified method when a barcode is detected in the camera's view. + +Event contains the following fields + +- `data` - a textual representation of the barcode, if available +- `rawData` - The raw data encoded in the barcode, if available +- `type` - the type of the barcode detected +- `bounds` - + + - on iOS: + + bounds:{ + size:{ + width:string, + height:string + } + origin:{ + x:string, + y:string + } + } + + - onAndroid: the `ResultPoint[]` (`bounds.origin`) is returned for scanned barcode origins. The number of `ResultPoint` returned depends on the type of Barcode. + + bounds: { + width: number; + height: number; + origin: Array<{x: number, y: number}> + } + + 1. **PDF417**: 8 ResultPoint, laid out as follow: + 0 --- 4 ------ 6 --- 2 + | ////////////////// | + 1 --- 5 ------ 7 --- 3 + + 2. **QR**: 4 ResultPoint, laid out as follow: + 2 ------ 3 + | ////// + | ////// + 1 ------ 0 + +The following barcode types can be recognised: + +- `aztec` +- `code128` +- `code39` +- `code39mod43` +- `code93` +- `ean13` (`iOS` converts `upca` barcodes to `ean13` by adding a leading 0) +- `ean8` +- `pdf417` +- `qr` +- `upce` +- `interleaved2of5` (when available) +- `itf14` (when available) +- `datamatrix` (when available) + +### `barCodeTypes` + +An array of barcode types to search for. Defaults to all types listed above. No effect if `onBarCodeRead` is undefined. +Example: `` + +### `onGoogleVisionBarcodesDetected` + +Like `onBarCodeRead`, but using Firebase MLKit to scan barcodes. More info can be found [here](https://firebase.google.com/docs/ml-kit/read-barcodes) Note: If you already set `onBarCodeRead`, this will be invalid. + +### `googleVisionBarcodeType` + +Like `barCodeTypes`, but applies to the Firebase MLKit barcode detector. +Example: `` +Available settings: +- CODE_128 +- CODE_39 +- CODE_93 +- CODABAR +- EAN_13 +- EAN_8 +- ITF +- UPC_A +- UPC_E +- QR_CODE +- PDF417 +- AZTEC +- DATA_MATRIX +- ALL + +### `Android` `googleVisionBarcodeMode` + +Change the mode in order to scan "inverted" barcodes. You can either change it to `alternate`, which will inverted the image data every second screen and be able to read both normal and inverted barcodes, or `inverted`, which will only read inverted barcodes. Default is `normal`, which only reads "normal" barcodes. Note: this property only applies to the Google Vision barcode detector. +Example: `` + +### Face Detection Related props + +RNCamera uses the Firebase MLKit for Face Detection, you can read more about it [here](https://firebase.google.com/docs/ml-kit/detect-faces). + +### `onFacesDetected` + +Method to be called when face is detected. Receives a Faces Detected Event object. The interesting value of this object is the `faces` value, which is an array of Face objects. You can find more details about the possible values of these objects [here](https://firebase.google.com/docs/ml-kit/face-detection-concepts) + +### `onFaceDetectionError` + +Method to be called if there was an Face Detection Error, receives an object with the `isOperational` property set to `false` if Face Detector is NOT operational and `true`if it is. + +### `faceDetectionMode` + +Values: `RNCamera.Constants.FaceDetection.Mode.fast` (default) or `RNCamera.Constants.FaceDetection.Mode.accurate` + +Specifies the face detection mode of the Face Detection API. + +Use `RNCamera.Constants.FaceDetection.Mode.accurate` if you want slower but more accurate results. + +### `faceDetectionLandmarks` + +Values: `RNCamera.Constants.FaceDetection.Landmarks.all` or `RNCamera.Constants.FaceDetection.Landmarks.none` (default) + +A landmark is a point of interest within a face. The left eye, right eye, and nose base are all examples of landmarks. The Face API provides the ability to find landmarks on a detected face. + +### `faceDetectionClassifications` + +Values: `RNCamera.Constants.FaceDetection.Classifications.all` or `RNCamera.Constants.FaceDetection.Classifications.none` (default) + +Classification is determining whether a certain facial characteristic is present. For example, a face can be classified with regards to whether its eyes are open or closed. Another example is whether the face is smiling or not. + +### Text Recognition Related props + +RNCamera uses the Firebase MLKit for Text Recognition, you can read more info about it [here](https://firebase.google.com/docs/ml-kit/recognize-text). + +### `onTextRecognized` + +Method to be called when text is detected. Receives a Text Recognized Event object. The interesting value of this object is the `textBlocks` value, which is an array of TextBlock objects. + +## Component instance methods + +### `takePictureAsync([options]): Promise` + +Takes a picture, saves in your app's cache directory and returns a promise. Note: additional image processing, such as mirror, orientation, and width, can be significantly slow on Android. + +Supported options: + +- `width` (integer). This property allows to specify the width that the returned image should have, image ratio will not be affected. If no value is specified the maximum image size is used (capture may take longer). + +- `quality` (float between 0 to 1.0). This property is used to compress the output jpeg file with 1 meaning no jpeg compression will be applied. If no value is specified `quality:1` is used. + +- `base64` (boolean true or false) Use this with `true` if you want a base64 representation of the picture taken on the return data of your promise. If no value is specified `base64:false` is used. + +- `mirrorImage` (boolean true or false). Use this with `true` if you want the resulting rendered picture to be mirrored (inverted in the vertical axis). If no value is specified `mirrorImage:false` is used. + +- `writeExif`: (boolean or object, defaults to true). Setting this to a boolean indicates if the image exif should be preserved after capture, or removed. Setting it to an object, merges any data with the final exif output. This is useful, for example, to add GPS metadata (note that GPS info is correctly transalted from double values to the EXIF format, so there's no need to read the EXIF protocol). +```js +writeExif = { + "GPSLatitude": latitude, + "GPSLongitude": longitude, + "GPSAltitude": altitude +} +``` + +- `exif` (boolean true or false) Use this with `true` if you want a exif data map of the picture taken on the return data of your promise. If no value is specified `exif:false` is used. + +- `fixOrientation` (android only, boolean true or false) Use this with `true` if you want to fix incorrect image orientation (can take up to 5 seconds on some devices). Do not provide this if you only need EXIF based orientation. + +- `forceUpOrientation` (iOS only, boolean true or false). This property allows to force portrait orientation based on actual data instead of exif data. + +- `doNotSave` (boolean true or false). Use this with `true` if you do not want the picture to be saved as a file to cache. If no value is specified `doNotSave:false` is used. If you only need the base64 for the image, you can use this with `base64:true` and avoid having to save the file. + +- `pauseAfterCapture` (boolean true or false). If true, pause the preview layer immediately after capturing the image. You will need to call `cameraRef.resumePreview()` before using the camera again. If no value is specified `pauseAfterCapture:false` is used. + +- `orientation` (string or number). Specifies the orientation that us used for taking the picture. Possible values: `"portrait"`, `"portraitUpsideDown"`, `"landscapeLeft"` or `"landscapeRight"`. + +The promise will be fulfilled with an object with some of the following properties: + +- `width`: returns the image's width (taking image orientation into account) +- `height`: returns the image's height (taking image orientation into account) +- `uri`: (string) the path to the image saved on your app's cache directory. +- `base64`: (string?) the base64 representation of the image if required. +- `exif`: returns an exif map of the image if required. +- `pictureOrientation`: (number) the orientation of the picture +- `deviceOrientation`: (number) the orientation of the device + +### `recordAsync([options]): Promise` + +Records a video, saves it in your app's cache directory and returns a promise when stopRecording is called or either maxDuration or maxFileSize specified are reached. + +Supported options: + +- `quality`. This option specifies the quality of the video to be taken. The possible values are: + + - `RNCamera.Constants.VideoQuality.2160p`. + - `ios` Specifies capture settings suitable for 2160p (also called UHD or 4K) quality (3840x2160 pixel) video output. + - `android` Quality level corresponding to the 2160p (3840x2160) resolution. (Android Lollipop and above only!). + - `RNCamera.Constants.VideoQuality.1080p`. + - `ios` Specifies capture settings suitable for 1080p quality (1920x1080 pixel) video output. + - `android` Quality level corresponding to the 1080p (1920 x 1080) resolution. + - `RNCamera.Constants.VideoQuality.720p`. + - `ios` Specifies capture settings suitable for 720p quality (1280x720 pixel) video output. + - `android` Quality level corresponding to the 720p (1280 x 720) resolution. + - `RNCamera.Constants.VideoQuality.480p`. + - `ios` Specifies capture settings suitable for VGA quality (640x480 pixel) video output. + - `android` Quality level corresponding to the 480p (720 x 480) resolution. + - `RNCamera.Constants.VideoQuality.4:3`. + - `ios` Specifies capture settings suitable for VGA quality (640x480 pixel) video output. (Same as RNCamera.Constants.VideoQuality.480p). + - `android` Quality level corresponding to the 480p (720 x 480) resolution but with video frame width set to 640. + - `RNCamera.Constants.VideoQuality.288p`. + - `ios` Specifies capture settings suitable for CIF quality (352x288 pixel) video output. + - `android` Not supported. + +- `videoBitrate`. (int greater than 0) This option specifies a desired video bitrate. For example, 5\*1000\*1000 would be 5Mbps. + + - `ios` Supported however requires that the codec key is also set. + - `android` Supported. + +- `orientation` (string or number). Specifies the orientation that us used for recording the video. Possible values: `"portrait"`, `"portraitUpsideDown"`, `"landscapeLeft"` or `"landscapeRight"`. + + If nothing is passed the device's highest camera quality will be used as default. + +- `iOS` `codec`. This option specifies the codec of the output video. Setting the codec is only supported on `iOS >= 10`. The possible values are: + + - `RNCamera.Constants.VideoCodec['H264']` + - `RNCamera.Constants.VideoCodec['JPEG']` + - `RNCamera.Constants.VideoCodec['HVEC']` (`iOS >= 11`) + - `RNCamera.Constants.VideoCodec['AppleProRes422']` (`iOS >= 11`) + - `RNCamera.Constants.VideoCodec['AppleProRes4444']` (`iOS >= 11`) + +- `mirrorVideo` (boolean true or false). Use this with `true` if you want the resulting video to be mirrored (inverted in the vertical axis). If no value is specified `mirrorVideo:false` is used. + +- `maxDuration` (float greater than 0). Specifies the maximum duration of the video to be recorded in seconds. If nothing is specified, no time limit will be used. + +- `maxFileSize` (int greater than 0). Specifies the maximum file size, in bytes, of the video to be recorded. For 1mb, for example, use 1\*1024\*1024. If nothing is specified, no size limit will be used. + +- `mute` (any value). (_This value will automatically be set to true if the `captureAudio` has not been passed to the Camera component_) If this flag is given in the option with any value, the video to be recorded will be mute. If nothing is specified, video will NOT be muted. + **Note:** The recommended way of recording audio without sound passing captureAudio: false to the Camera component. + The `mute` parameter is likely to become deprecated in the near future. + +- `path` (file path on disk). Specifies the path on disk to record the video to. You can use the same `uri` returned to continue recording across start/stops + +The promise will be fulfilled with an object with some of the following properties: + +- `uri`: (string) the path to the video saved on your app's cache directory. + +- `videoOrientation`: (number) orientation of the video + +- `deviceOrientation`: (number) orientation of the device + +- `iOS` `codec`: the codec of the recorded video. One of `RNCamera.Constants.VideoCodec` + +- `isRecordingInterrupted`: (boolean) whether the app has been minimized while recording + +### `refreshAuthorizationStatus: Promise` + +Allows to make RNCamera check Permissions again and set status accordingly. +Making it possible to refresh status of RNCamera after user initially rejected the permissions. + +### `stopRecording: void` + +Should be called after recordAsync() to make the promise be fulfilled and get the video uri. + +### `pausePreview: void` + +Pauses the preview. The preview can be resumed again by using resumePreview(). + +### `resumePreview: void` + +Resumes the preview after pausePreview() has been called. + +### `Android` `getSupportedRatiosAsync(): Promise` + +Android only. Returns a promise. The promise will be fulfilled with an object with an array containing strings with all camera aspect ratios supported by the device. + +### `getCameraIdsAsync(): Promise` + +Returns a promise. The promise will be fulfilled with an array containing objects with all camera IDs and type supported by the device. + +The promise will be fulfilled with an array containing objects with some of the following properties: + +- `id`: (string) the ID of the camera. + +- `type`: One of `RNCamera.Constants.Type.front` | `RNCamera.Constants.Type.back` + +- `deviceType`: iOS 10+ only. Returns the internal device string type used by the OS. Useful to identify camera types (e.g., wide). Constants match iOS' string values: `AVCaptureDeviceTypeBuiltInWideAngleCamera`, `AVCaptureDeviceTypeBuiltInTelephotoCamera`, `AVCaptureDeviceTypeBuiltInUltraWideCamera`. More info can be found at
Apple Docs + +Note: iOS also allows for virtual cameras (e.g., a camera made of multiple cameras). However, only physical non-virtual cameras are returned by this method since advanced features (such as depth maps or auto switching on camera zoom) are not supported. + +### `iOS` `isRecording(): Promise` + +iOS only. Returns a promise. The promise will be fulfilled with a boolean indicating if currently recording is started or stopped. + +## Subviews + +This component supports subviews, so if you wish to use the camera view as a background or if you want to layout buttons/images/etc. inside the camera then you can do that. + +**Example subview:** + +### react-native-barcode-mask + +A Barcode and QR code UI mask which can be use to render a scanning layout on camera with customizable styling. + +Read more about [react-native-barcode-mask](https://github.com/shahnawaz/react-native-barcode-mask) here. + +### @nartc/react-native-barcode-mask + +A rewritten version of `react-native-barcode-mask` using `Hooks` and `Reanimated`. If you're already using `react-native-reanimated` (`react-navigation` dependency) then you might benefit from this rewritten component. +- Customizable +- Provide custom hook to "scan barcode within finder area" + +Read more about it here [@nartc/react-native-barcode-mask](https://github.com/nartc/react-native-barcode-mask) + +## Testing + +To learn about how to test components which uses `RNCamera` check its [documentation about testing](./tests.md). + +## Examples + +To see more of the `RNCamera` in action you can check out the [RNCamera examples directory](https://github.com/react-native-community/react-native-camera/tree/master/examples). +Firebase MLKit-base features (such as Text, Face and Barcode detection) can be found in the [mlkit](https://github.com/react-native-community/react-native-camera/tree/master/examples/mlkit) example. + +## Open Collective + +We are just beginning a funding campaign for react-native-camera. Contributions are greatly appreciated. When we gain more than \$250 we will begin distributing funds to core maintainers in a fully transparent manner. Feedback for this process is welcomed, we will continue to evolve the strategy as we grow and learn more. + +### Backers + +Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/react-native-camera#backer)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +### Sponsors + +Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/react-native-camera#sponsor)] + + + + + + + + + + + + +--- + +Thanks to Brent Vatne (@brentvatne) for the `react-native-video` module which provided me with a great example of how to set up this module. diff --git a/docs/Recipes.md b/docs/Recipes.md new file mode 100644 index 0000000..7224506 --- /dev/null +++ b/docs/Recipes.md @@ -0,0 +1,149 @@ +--- +id: recipes +title: Recipes +sidebar_label: Recipes +--- + +The idea is to provide a list of useful snippets, links and resources to be used together with react-native-camera + +## Stop Face Detection/Barcode Detection/Text Recognition + +You can use a state variable and use it to determine if you want to turn on or off face detection/barcode detection/text recognition. + +Example: + +``` +const { shouldFaceDetect } = this.state; + +``` + +Passing `null` to `onFaceDetected`, `onGoogleVisionBarcodesDetected`, `onTextRecognized`, `onBarCodeRead` automatically turns off the correspondent detector. + +## Events continue if screen is mounted but not on top of stack + +Lets say you use Face Detection, you take a picture and then takes the user to another screen to see that picture. Meanwhile, RNCamera is still mounted on the previous screen. `onFaceDetected` will still be called if you do not prevent it. For example (using [`react-navigation`](https://github.com/react-navigation/react-navigation)): + +``` +const takePictureAndShow = () => { + const { uri } = await this.camera.takePictureAsync(); + this.props.navigation.navigate(RouteNames.SEE_PHOTO, { + photoUri: uri, + }; +} +``` + +When you go to the route SEE_PHOTO, `onFaceDetected` will still be called after the user is seeing that screen and not RNCamera. With `react-naviagtion`, what you could do is: + +``` +const { navigation } = this.props; + +``` + +## Sending the image to a server + +A good way is to get the base64 string representation of your image. You can get it from RNCamera by passing the `base64: true` option to `takePictureAsync` like: + +``` +if (this.camera) { + const data = await this.camera.takePictureAsync({ base64: true }); + console.log('base64: ', data.base64); + this.props.action.sendImageToServer(data.base64); +} +``` + +Getting the base64 string may take a while, so an alternative, to not make the user wait too much for its photo is to get the returned uri and use another library to get the base64 string while you are already displaying the taken picture to the user. + +One option for this is [`react-native-fs`](https://github.com/itinance/react-native-fs), here is how we use it. + +``` +export async function getBase64(imageUri: string) { + const filepath = imageUri.split('//')[1]; + const imageUriBase64 = await RNFS.readFile(filepath, 'base64'); + return `data:image/jpeg;base64,${imageUriBase64}`; +} + +const takePicture = () => { + const { uri } = await this.camera.takePictureAsync(); + this.setState({ photoUri: uri });//show image to user now + const base64 = await getBase64(uri); + console.log('base64: ', base64); + this.props.actions.sendImageToServer(base64); +} +``` + +## How to get a video thumbnail? + +Use this package https://github.com/phuochau/react-native-thumbnail + +## How to zoom with touch gestures? + +Because of different project requirements there is no gesture zoom (like pinch zoom or slide-up zoom) implemented in this package. All implementation should be done in user-land. + +However we have some recipes for common zoom behaviours. If you implemented your own solution feel free to add it to the list! + +## SlideUp Zoom + +```js +import React, { Component } from 'react'; +import { View, PanResponder, Dimensions } from 'react-native'; +import { RNCamera } from 'react-native-camera'; + +// ZoomView +class ZoomView extends Component { + constructor(props) { + super(props); + this._panResponder = PanResponder.create({ + onPanResponderMove: (e, { dy }) => { + const { height: windowHeight } = Dimensions.get('window'); + return this.props.onZoomProgress(Math.min(Math.max((dy * -1) / windowHeight, 0), 0.5)); + }, + onMoveShouldSetPanResponder: (ev, { dx }) => { + return dx !== 0; + }, + onPanResponderGrant: () => { + return this.props.onZoomStart(); + }, + onPanResponderRelease: () => { + return this.props.onZoomEnd(); + }, + }); + } + render() { + return ( + + {this.props.children} + + ); + } +} + +// Implementation +class CameraView extends Component { + state = { + zoom: 0, + }; + render() { + return ( + { + this.setState({ zoom: progress }); + }} + onZoomStart={() => { + console.log('zoom start'); + }} + onZoomEnd={() => { + console.log('zoom end'); + }} + > + + + ); + } +} +``` diff --git a/docs/Tidelift.md b/docs/Tidelift.md new file mode 100644 index 0000000..9ac8b51 --- /dev/null +++ b/docs/Tidelift.md @@ -0,0 +1,56 @@ +--- +id: Tidelift +title: React-Native-Camera for Enterprise +--- + +## React-Native-Camera for Enterprise + +### Available as part of the Tidelift Subscription + +**Tidelift** is working with the maintainers of **React-Native-Camera** and thousands of other open source projects to deliver +commercial support and maintenance for the open source dependencies you use to build your applications. +Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. + +[LEARN MORE](https://tidelift.com/subscription/pkg/npm-react-native-camera?utm_source=npm-react-native-camera&utm_medium=referral&utm_campaign=enterprise) + +[REQUEST A DEMO](https://tidelift.com/subscription/request-a-demo?utm_source=npm-react-native-camera&utm_medium=referral&utm_campaign=enterprise) + +### Enterprise-ready open source software - managed for you + +The Tidelift Subscription is a managed open source subscription for application dependencies covering millions +of open source projects across JavaScript, Python, Java, PHP, Ruby, .NET, and more. + +Your subscription includes: + +* **Security updates**
+Tidelift’s security response team coordinates patches for new breaking security vulnerabilities and alerts +immediately through a private channel, so your software supply chain is always secure. + +* **Licensing verification and indemnification**
+Tidelift verifies license information to enable easy policy enforcement and adds intellectual property +indemnification to cover creators and users in case something goes wrong. You always have a 100% up-to-date +bill of materials for your dependencies to share with your legal team, customers, or partners. + +* **Maintenance and code improvement**
+Tidelift ensures the software you rely on keeps working as long as you need it to work. +Your managed dependencies are actively maintained and we recruit additional maintainers where required. + +* **Package selection and version guidance**
+We help you choose the best open source packages from the start—and then guide you through updates to stay on +the best releases as new issues arise. + +* **Roadmap input**
+Take a seat at the table with the creators behind the software you use. Tidelift’s participating maintainers +earn more income as their software is used by more subscribers, so they’re interested in knowing what you need. + +* **Tooling and cloud integration**
+Tidelift works with GitHub, GitLab, BitBucket, and more. +We support every cloud platform (and other deployment targets, too). + +The end result? All of the capabilities you expect from commercial-grade software, for the full breadth +of open source you use. That means less time grappling with esoteric open source trivia, and more +time building your own applications—and your business. + +[LEARN MORE](https://tidelift.com/subscription/pkg/npm-react-native-camera?utm_source=npm-react-native-camera&utm_medium=referral&utm_campaign=enterprise) + +[REQUEST A DEMO](https://tidelift.com/subscription/request-a-demo?utm_source=npm-react-native-camera&utm_medium=referral&utm_campaign=enterprise) diff --git a/docs/expo_usage.md b/docs/expo_usage.md new file mode 100644 index 0000000..b23b90f --- /dev/null +++ b/docs/expo_usage.md @@ -0,0 +1,35 @@ +--- +id: expo_usage +title: Expo Usage +sidebar_label: Expo Usage +--- + +RNCamera of react-native-camera is heavily based on Expo camera module. Thanks @aalices and Expo for the great work. + +So you don't need to use **react-native-camera** if you have the following config: + +- If you are using [Expo](https://expo.io) +- If you are using [create-react-native-app](https://github.com/react-community/create-react-native-app) +- If you eject a [create-react-native-app](https://github.com/react-community/create-react-native-app) app and are using [ExpoKit](https://docs.expo.io/versions/latest/expokit/expokit) + +## How to migrate from Expo to react-native-camera + +If you decide to eject without using ExpoKit, you can follow react-native-camera installation instructions and just change the usage of your Camera component to RNCamera: + +```diff +- import { Camera } from 'expo'; ++ import { RNCamera } from 'react-native-camera'; + +- 0.60) + +1. `npm install react-native-camera --save` +2. Run `cd ios && pod install && cd ..` + +## Mostly automatic install with react-native link (RN < 0.60) + +1. `npm install react-native-camera --save` +2. `react-native link react-native-camera` + +## Manual install - iOS (not recommended) + +1. `npm install react-native-camera --save` +2. In XCode, in the project navigator, right click `Libraries` ➜ `Add Files to [your project's name]` +3. Go to `node_modules` ➜ `react-native-camera` and add `RNCamera.xcodeproj` +4. Expand the `RNCamera.xcodeproj` ➜ `Products` folder +5. In XCode, in the project navigator, select your project. Add `libRNCamera.a` to your project's `Build Phases` ➜ `Link Binary With Libraries` +6. Click `RNCamera.xcodeproj` in the project navigator and go the `Build Settings` tab. Make sure 'All' is toggled on (instead of 'Basic'). In the `Search Paths` section, look for `Header Search Paths` and make sure it contains both `$(SRCROOT)/../../react-native/React` and `$(SRCROOT)/../../../React` - mark both as `recursive`. + +## Manual install - Android (not recommended) + +1. `npm install react-native-camera --save` +2. Open up `android/app/src/main/java/[...]/MainApplication.java` + +- Add `import org.reactnative.camera.RNCameraPackage;` to the imports at the top of the file +- Add `new RNCameraPackage()` to the list returned by the `getPackages()` method. Add a comma to the previous item if there's already something there. + +3. Append the following lines to `android/settings.gradle`: + + ```gradle + include ':react-native-camera' + project(':react-native-camera').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-camera/android') + ``` + +4. Insert the following lines in `android/app/build.gradle` inside the dependencies block: + + ```gradle + implementation project(':react-native-camera') + ``` + +## iOS - other required steps + +Add permissions with usage descriptions to your app `Info.plist`: + +```xml + +NSCameraUsageDescription +Your message to user when the camera is accessed for the first time + + +NSPhotoLibraryAddUsageDescription +Your message to user when the photo library is accessed for the first time + + +NSPhotoLibraryUsageDescription +Your message to user when the photo library is accessed for the first time + + +NSMicrophoneUsageDescription +Your message to user when the microphone is accessed for the first time +``` + +
+ Additional information in case of problems + + You might need to adjust your Podfile following the example below: + + ```ruby + target 'yourTargetName' do + # See http://facebook.github.io/react-native/docs/integration-with-existing-apps.html#configuring-cocoapods-dependencies + pod 'React', :path => '../node_modules/react-native', :subspecs => [ + 'Core', + 'CxxBridge', # Include this for RN >= 0.47 + 'DevSupport', # Include this to enable In-App Devmenu if RN >= 0.43 + 'RCTText', + 'RCTNetwork', + 'RCTWebSocket', # Needed for debugging + 'RCTAnimation', # Needed for FlatList and animations running on native UI thread + # Add any other subspecs you want to use in your project + ] + + # Explicitly include Yoga if you are using RN >= 0.42.0 + pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga' + + # Third party deps podspec link + pod 'react-native-camera', path: '../node_modules/react-native-camera' + + end + + post_install do |installer| + installer.pods_project.targets.each do |target| + if target.name == "React" + target.remove_from_project + end + end + end + ``` +
+ +## Android - other required steps + +Add permissions to your app `android/app/src/main/AndroidManifest.xml` file: + +```xml + + + + + + + + + +``` + +Insert the following lines in `android/app/build.gradle`: + +```gradle +android { + ... + defaultConfig { + ... + missingDimensionStrategy 'react-native-camera', 'general' // <--- insert this line + } +} +``` + +
+ Additional information in case of problems + + 1. Make sure you use `JDK >= 1.7` and your `buildToolsVersion >= 25.0.2` + + 2. Make sure you have jitpack added in `android/build.gradle` + + ```gradle + allprojects { + repositories { + maven { url "https://www.jitpack.io" } + maven { url "https://maven.google.com" } + } + } + ``` +
+ +# Additional installation steps + +Follow these optional steps if you want to use Face Detection/Text Recognition/BarCode with [MLKit](https://developers.google.com/ml-kit). +You will need to set-up Firebase project for your app (detailed steps below). + +_Note:_ Installing [react-native-firebase](https://github.com/invertase/react-native-firebase) package is NOT necessary. + +## iOS + +If you want any of these optional features, you will need to use CocoaPods. + +### Modifying Podfile + +Add dependency towards `react-native-camera` in your `Podfile` with `subspecs` using one of the following: + +* For Face Detection: + +```ruby +pod 'react-native-camera', path: '../node_modules/react-native-camera', subspecs: [ + 'FaceDetectorMLKit' +] +``` + +* For Text Recognition: + +```ruby +pod 'react-native-camera', path: '../node_modules/react-native-camera', subspecs: [ + 'TextDetector' +] +``` + +* For BarCode Recognition: + +```ruby +pod 'react-native-camera', path: '../node_modules/react-native-camera', subspecs: [ + 'BarcodeDetectorMLKit' +] +``` + +* For all possible detections: + +```ruby +pod 'react-native-camera', path: '../node_modules/react-native-camera', subspecs: [ + 'TextDetector', + 'FaceDetectorMLKit', + 'BarcodeDetectorMLKit' +] +``` + +Then run `cd ios && pod install && cd ..` + +### Setting up Firebase + +Text/Face recognition for iOS uses Firebase MLKit which requires setting up Firebase project for your app. +If you have not already added Firebase to your app, please follow the steps described in [getting started guide](https://firebase.google.com/docs/ios/setup). +In short, you would need to + +1. Register your app in Firebase console. +2. Download `GoogleService-Info.plist` and add it to your project +3. Add `pod 'Firebase/Core'` to your podfile +4. In your `AppDelegate.m` file add the following lines: + +```objective-c +#import // <--- add this +... + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + [FIRApp configure]; // <--- add this + ... +} +``` + +
+ Additional information in case of problems + + - If you have issues with duplicate symbols you will need to enable dead code stripping option in your Xcode (Target > Build Settings > search for "Dead code stripping") [see here](https://github.com/firebase/quickstart-ios/issues/487#issuecomment-415313053). + - If you are using `pod Firebase/Core` with a version set below 5.13 you might want to add `pod 'GoogleAppMeasurement', '~> 5.3.0'` to your podfile +
+ + +## Android + +### Modifying build.gradle + +Modify the following lines in `android/app/build.gradle`: + +```gradle +android { + ... + defaultConfig { + ... + missingDimensionStrategy 'react-native-camera', 'mlkit' // <--- replace general with mlkit + } +} +``` + +### Setting up Firebase + +Using Firebase MLKit requires seting up Firebase project for your app. If you have not already added Firebase to your app, please follow the steps described in [getting started guide](https://firebase.google.com/docs/android/setup). +In short, you would need to + +1. Register your app in Firebase console. +2. Download google-services.json and place it in `android/app/` +3. Add the folowing to project level `build.gradle`: + +```gradle +buildscript { + dependencies { + // Add this line + classpath 'com.google.gms:google-services:4.0.1' // <--- you might want to use different version + } +} +``` + +4. add to the bottom of `android/app/build.gradle` file + +```gradle +apply plugin: 'com.google.gms.google-services' +``` + +5. Configure your app to automatically download the ML model to the device after your app is installed from the Play Store. If you do not enable install-time model downloads, the model will be downloaded the first time you run the on-device detector. Requests you make before the download has completed will produce no results. + +```xml + +... + + +``` + +
+ Additional information in case of problems + The current Android library defaults to the below values for the Google SDK and Libraries, + + ```gradle + def DEFAULT_COMPILE_SDK_VERSION = 26 + def DEFAULT_BUILD_TOOLS_VERSION = "26.0.2" + def DEFAULT_TARGET_SDK_VERSION = 26 + def DEFAULT_GOOGLE_PLAY_SERVICES_VERSION = "12.0.1" + def DEFAULT_SUPPORT_LIBRARY_VERSION = "27.1.0" + ``` + + You can override this settings by adding a Project-wide gradle configuration properties for + use by all modules in your ReactNative project by adding the below to `android/build.gradle` + file, + + ```gradle + buildscript {...} + + allprojects {...} + + /** + * Project-wide gradle configuration properties for use by all modules + */ + ext { + compileSdkVersion = 26 + targetSdkVersion = 26 + buildToolsVersion = "26.0.2" + googlePlayServicesVersion = "12.0.1" + googlePlayServicesVisionVersion = "15.0.2" + supportLibVersion = "27.1.0" + } + ``` + + The above settings in the ReactNative project over-rides the values present in the `react-native-camera` + module. For your reference below is the `android/build.gradle` file of the module. + + ```gradle + def safeExtGet(prop, fallback) { + rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback + } + + buildscript { + repositories { + google() + maven { + url 'https://maven.google.com' + } + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:3.3.1' + } + } + + apply plugin: 'com.android.library' + + android { + compileSdkVersion safeExtGet('compileSdkVersion', 28) + buildToolsVersion safeExtGet('buildToolsVersion', '28.0.3') + + defaultConfig { + minSdkVersion safeExtGet('minSdkVersion', 16) + targetSdkVersion safeExtGet('targetSdkVersion', 28) + } + + flavorDimensions "react-native-camera" + + productFlavors { + general { + dimension "react-native-camera" + } + mlkit { + dimension "react-native-camera" + } + } + + sourceSets { + main { + java.srcDirs = ['src/main/java'] + } + general { + java.srcDirs = ['src/general/java'] + } + mlkit { + java.srcDirs = ['src/mlkit/java'] + } + } + + lintOptions { + abortOnError false + warning 'InvalidPackage' + } + } + + repositories { + google() + jcenter() + maven { + url 'https://maven.google.com' + } + maven { url "https://jitpack.io" } + maven { + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm + url "$rootDir/../node_modules/react-native/android" + } + } + + dependencies { + def googlePlayServicesVisionVersion = safeExtGet('googlePlayServicesVisionVersion', safeExtGet('googlePlayServicesVersion', '17.0.2')) + + implementation 'com.facebook.react:react-native:+' + implementation "com.google.zxing:core:3.3.3" + implementation "com.drewnoakes:metadata-extractor:2.11.0" + generalImplementation "com.google.android.gms:play-services-vision:$googlePlayServicesVisionVersion" + implementation "com.android.support:exifinterface:${safeExtGet('supportLibVersion', '28.0.0')}" + implementation "com.android.support:support-annotations:${safeExtGet('supportLibVersion', '28.0.0')}" + implementation "com.android.support:support-v4:${safeExtGet('supportLibVersion', '28.0.0')}" + mlkitImplementation "com.google.firebase:firebase-ml-vision:${safeExtGet('firebase-ml-vision', '19.0.3')}" + mlkitImplementation "com.google.firebase:firebase-ml-vision-face-model:${safeExtGet('firebase-ml-vision-face-model', '17.0.2')}" + } + ``` + + If you are using a version of `googlePlayServicesVersion` that does not have `play-services-vision`, you can specify a different version of `play-services-vision` by adding `googlePlayServicesVisionVersion` to the project-wide properties + + ```gradle + ext { + compileSdkVersion = 26 + targetSdkVersion = 26 + buildToolsVersion = "26.0.2" + googlePlayServicesVersion = "16.0.1" + googlePlayServicesVisionVersion = "15.0.2" + supportLibVersion = "27.1.0" + } + ``` +
+ +# Windows + +## Windows RNW C++/WinRT details +1. `yarn install react-native-camera` +2. Link the library as described below: + windows/myapp.sln + Add the ReactNativeCamera project to your solution. + Open the solution in Visual Studio 2019 + Right-click Solution icon in Solution Explorer > Add > Existing Project Select node_modules\react-native-camera\windows\ReactNativeCameraCPP\ReactNativeCameraCPP.vcxproj + windows/myapp/myapp.vcxproj + Add a reference to ReactNativeCameraCPP to your main application project. From Visual Studio 2019: + Right-click main application project > Add > Reference... Check ReactNativeCameraCPP from Solution Projects. +3. Modify files below to add the Camera package providers to your main application project + pch.h + Add #include "winrt/ReactNativeCameraCPP.h". + app.cpp + Add PackageProviders().Append(winrt::ReactNativeCameraCPP::ReactPackageProvider()); before InitializeComponent(); +3. Add the capabilities (permissions) for the webcam and microphone as described here: [docs.microsoft / audio-video-camera](https://docs.microsoft.com/en-us/windows/uwp/audio-video-camera/simple-camera-preview-access#add-capability-declarations-to-the-app-manifest) + +Follow the [Q & A](QA.md) section if you are having compilation issues. diff --git a/docs/migration.md b/docs/migration.md new file mode 100644 index 0000000..b8a50da --- /dev/null +++ b/docs/migration.md @@ -0,0 +1,156 @@ +--- +id: migration +title: Migrating from RCTCamera to RNCamera +sidebar_label: Migrating from RCTCamera to RNCamera +--- + +## Project Integration + +Please follow the [RNCamera doc](https://github.com/react-native-community/react-native-camera/blob/master/docs/RNCamera.md) installation guide to install the face detection frameworks on both platforms. + +### iOS + +Open your app's XCode project. Expand the Libraries folder in the project navigation and right click and delete the RCTCamera.xcodeproj. + +On your project's target, on `Build Phases`, click on libRCTCamera.a and delete (press the - button below). + +You can follow the installation steps for RNCamera on the readme to link the new RNCamera project to your app's XCode project. + +You can do it via `react-native link` command or by the manual steps. + +Before building and running again, do a complete clean on your project. + +### Android + +1. On the MainApplication of your Android project change the import of RCTCameraPackage line to: + +```java +import org.reactnative.camera.RNCameraPackage; +``` + +2. Inside the getPackages() methods change `new RCTCameraPackage()` to `new RNCameraPackage()`. + +3. On `android/app/build.gradle`, change the line: `compile (project(':react-native-camera'))` to: + +```gradle +compile (project(':react-native-camera')) { + exclude group: "com.google.android.gms" +} +compile ("com.google.android.gms:play-services-vision:10.2.0") { + force = true; +} +``` + +4. Add jitpack to android/build.gradle + +```gradle +allprojects { + repositories { + maven { url "https://jitpack.io" } + } +} +``` + +## Usage differences + +### imports + +Instead of importing `Camera`, now, you should import `{ RNCamera }` from `react-native-camera`. + +### No `captureMode` prop + +On RCTCamera, you would set the camera `captureMode` to `still` or `video` and you could only record or take a picture depending on the `captureMode` of your `Camera`. + +On RNCamera you do not need to specify `captureMode`. The RNCamera, in any state, can record or take a picture calling the appropriate method. + +### `capture` to `takePictureAsync` or `recordAsync` + +Let's say you have a component with a RCTCamera taking a photo: + +```jsx +import Camera from 'react-native-camera'; + +class TakePicture extends Component { + takePicture = async () => { + try { + const data = await this.camera.capture(); + console.log('Path to image: ' + data.path); + } catch (err) { + // console.log('err: ', err); + } + }; + + render() { + return ( + + { + this.camera = cam; + }} + style={styles.preview} + aspect={Camera.constants.Aspect.fill} + captureAudio={false} + > + + + camera + Take Photo + + + + + + + ); + } +} +``` + +You should change this to: + +```jsx +import { RNCamera } from 'react-native-camera'; + +class TakePicture extends Component { + takePicture = async () => { + try { + const data = await this.camera.takePictureAsync(); + console.log('Path to image: ' + data.uri); + } catch (err) { + // console.log('err: ', err); + } + }; + + render() { + return ( + + { + this.camera = cam; + }} + style={styles.preview} + > + + + camera + Take Photo + + + + + + + ); + } +} +``` + +The same logic applies to change `capture` to `recordAsync`. + +### `flashMode` and `torchMode` + +In RCTCamera, there was `flashMode` and `torchMode` prop. In RNCamera, these are combined into the `flashMode` prop. + +### Other differences + +Take a look into the [RCTCamera doc](https://github.com/react-native-community/react-native-camera/blob/master/docs/RCTCamera.md) and the [RNCamera doc](https://github.com/react-native-community/react-native-camera/blob/master/docs/RNCamera.md) to see more differences. diff --git a/docs/migrationV2.md b/docs/migrationV2.md new file mode 100644 index 0000000..d72257d --- /dev/null +++ b/docs/migrationV2.md @@ -0,0 +1,109 @@ +--- +id: migrationv2 +title: Migrating from version 1.x to 2.x +sidebar_label: Migrating from version 1.x to 2.x +--- + +Version 2.x of react-native-camera moves to using Firebase MLKit for advanced features such as text/face recognition. Users can now opt into useing MLKit in their app by choosing a certain flavor of the library (Android) or selecting a desired podspec (iOS). This allows users who do not need Firebase MLKit-based features to not be forced to set up a Firebase project. + +## Required steps + +### a. No advanced features/ opt into using deprecated Google Mobile Vision + +#### Android + +Please insert the following line in `android/app/build.gradle` inside defaultConfig block: + +```gradle +android { + ... + defaultConfig { + ... + missingDimensionStrategy 'react-native-camera', 'general' <-- insert this line + } +} +``` + +#### iOS + +No additional steps required + +### b. Text/Face/Barcode detection using Firebase MLKit + +#### Android + +1. Please insert the following line in `android/app/build.gradle`, inside defaultConfig block: + +```gradle +android { + ... + defaultConfig { + ... + missingDimensionStrategy 'react-native-camera', 'mlkit' <-- insert this line + } +} +``` + +2. The use of Firebase MLKit requires seting up Firebase project for your app. If you have not already added Firebase to your app, please follow the steps described in [getting started guide](https://firebase.google.com/docs/android/setup). + In short, you would need to + +- Register your app in Firebase console. +- Download google-services.json and place it in `android/app/` +- add the folowing to project level build.gradle: + +```gradle + buildscript { + dependencies { + // Add this line + classpath 'com.google.gms:google-services:4.0.1' <-- you might want to use different version + } + } +``` + +- add to the bottom of `android/app/build.gradle` file the following: + +```gradle + apply plugin: 'com.google.gms.google-services' +``` + +3. Configure your app to automatically download the ML model to the device after your app is installed from the Play Store. If you do not enable install-time model downloads, the model will be downloaded the first time you run the on-device detector. Requests you make before the download has completed will produce no results. + +```xml + +... + + + +``` + +#### iOS + +1. The use of Firebase MLKit requires setting up Firebase project for your app. + If you have not already added Firebase to your app, please follow the steps described in [getting started guide](https://firebase.google.com/docs/ios/setup). + In short, you would need to + +- Register your app in Firebase console. +- Download `GoogleService-Info.plist` and add it to your project +- Add `pod 'Firebase/Core'` to your Podfile +- In your `AppDelegate.m` file add the following lines: + +```objective-c +#import // <--- add this +... + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + [FIRApp configure]; // <--- add this + ... +} +``` + +2. Check that you have selected a correct podspec in your Podfile, e.g. if you want to use Text Recognition, your Podfile should contain the following: + +``` +pod 'react-native-camera', path: '../node_modules/react-native-camera', subspecs: [ + 'TextDetector' +] +``` diff --git a/docs/react-navigation.md b/docs/react-navigation.md new file mode 100644 index 0000000..cc66fa7 --- /dev/null +++ b/docs/react-navigation.md @@ -0,0 +1,28 @@ +--- +id: react-navigation +title: React Navigation +sidebar_label: React Navigation +--- + +React-navigation does not unmount components when switching between tabs. So when you leave and return back to the screen with the camera component it will just be black view. So a good solution is to use `withNavigationFocus`, which is a higher order component, and wrap it around your component. Then, you can have access to `isFocused` from `props`. + +```jsx + +import { withNavigationFocus } from 'react-navigation' + + render() { + const { isFocused } = this.props + const { hasCameraPermission } = this.state; + if (hasCameraPermission === null) { + return ; + } else if (hasCameraPermission === false) { + return No access to camera; + } else if (isFocused){ + return (this.cameraView()); + } else { + return ; + } + } + +export default withNavigationFocus(YourComponent) +``` diff --git a/docs/tests.md b/docs/tests.md new file mode 100644 index 0000000..6ab51d0 --- /dev/null +++ b/docs/tests.md @@ -0,0 +1,258 @@ +--- +id: tests +title: Testing +sidebar_label: Testing +--- +## Jest + +To test a component which use RNCamera, you need to create a react-native-camera.js file inside your **mocks** folder on the root of your project with the following content: + +```javascript +import React from 'react'; + +const timeout = ms => new Promise(resolve => setTimeout(resolve, ms)); + +export class RNCamera extends React.Component { + static Constants = { + Aspect: {}, + BarCodeType: {}, + Type: { back: 'back', front: 'front' }, + CaptureMode: {}, + CaptureTarget: {}, + CaptureQuality: {}, + Orientation: {}, + FlashMode: {}, + TorchMode: {}, + }; + + takePictureAsync = async () => { + await timeout(2000); + return { + base64: 'base64string', + }; + }; + + render() { + return null; + } +} + +export default RNCamera; +``` + +You don't need to do anything else in your test, because Jest will use the mock in your test instead of the native module. + +### Example + +We are going to create a component which uses RNCamera which two simple features: + +- Take a photo +- Change camera between front or back + +The custom component PhotoCamera is the following: + +```javascript +import React from 'react'; +import { View, TouchableOpacity, StyleSheet, Dimensions } from 'react-native'; +import { RNCamera } from 'react-native-camera'; +import Icon from 'react-native-vector-icons/FontAwesome'; + +const styles = StyleSheet.create({ + container: { + flex: 1, + display: 'flex', + flexDirection: 'column', + backgroundColor: 'black', + }, + preview: { + flex: 1, + justifyContent: 'flex-end', + alignItems: 'center', + }, + topButtons: { + flex: 1, + width: Dimensions.get('window').width, + alignItems: 'flex-start', + }, + bottomButtons: { + flex: 1, + width: Dimensions.get('window').width, + justifyContent: 'flex-end', + alignItems: 'center', + }, + + flipButton: { + flex: 1, + marginTop: 20, + right: 20, + alignSelf: 'flex-end', + }, + recordingButton: { + marginBottom: 10, + }, +}); + +class PhotoCamera extends React.PureComponent { + state = { + type: RNCamera.Constants.Type.back, + }; + + flipCamera = () => + this.setState({ + type: + this.state.type === RNCamera.Constants.Type.back + ? RNCamera.Constants.Type.front + : RNCamera.Constants.Type.back, + }); + + takePhoto = async () => { + const { onTakePhoto } = this.props; + const options = { + quality: 0.5, + base64: true, + width: 300, + height: 300, + }; + const data = await this.camera.takePictureAsync(options); + onTakePhoto(data.base64); + }; + render() { + const { type } = this.state; + return ( + + { + this.camera = cam; + }} + type={type} + style={styles.preview} + /> + + + + + + + + + + + + ); + } +} + +export default PhotoCamera; +``` + +And here is our test to check if it renders properly: + +```javascript +import React from 'react'; +import Adapter from 'enzyme-adapter-react-16'; +import { shallow, configure } from 'enzyme'; +import MyPhotoCamera from './'; + +configure({ adapter: new Adapter() }); + +describe('PhotoCamera Tests', () => { + test('renders correctly', () => { + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); + }); +}); +``` + +Also, here is the complete test of the whole component with 100% coverage: + +```javascript +import React from 'react'; +import { TouchableOpacity } from 'react-native'; +import Adapter from 'enzyme-adapter-react-16'; +import { shallow, configure, mount } from 'enzyme'; +import PhotoCamera from '../'; + +const { JSDOM } = require('jsdom'); + +const jsdom = new JSDOM(); +const { window } = jsdom; + +function copyProps(src, target) { + const props = Object.getOwnPropertyNames(src) + .filter(prop => typeof target[prop] === 'undefined') + .map(prop => Object.getOwnPropertyDescriptor(src, prop)); + Object.defineProperties(target, props); +} + +global.window = window; +global.document = window.document; +global.navigator = { + userAgent: 'node.js', +}; +copyProps(window, global); + +// Ignore React Web errors when using React Native +// but still show relevant errors +const suppressedErrors = /(React does not recognize the.*prop on a DOM element|Unknown event handler property|is using uppercase HTML|Received `true` for a non-boolean attribute `accessible`|The tag.*is unrecognized in this browser)|is using incorrect casing|Received `true` for a non-boolean attribute `enabled`/; +const realConsoleError = console.error; // eslint-disable-line +// eslint-disable-next-line +console.error = message => { + if (message.match(suppressedErrors)) { + return; + } + realConsoleError(message); +}; + +configure({ adapter: new Adapter() }); + +describe('PhotoCamera Tests', () => { + test('renders correctly', () => { + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); + }); + test('initial state should be back camera', () => { + const wrapper = shallow(); + expect(wrapper.state().type).toBe('back'); + }); + test('should flip the camera from back to front', () => { + const wrapper = shallow(); + expect(wrapper.state().type).toBe('back'); + wrapper + .find(TouchableOpacity) + .first() + .props() + .onPress(); + expect(wrapper.state().type).toBe('front'); + }); + + test('should flip the camera from front to back if touch flip button and curren state is ', () => { + const wrapper = shallow(); + wrapper.setState({ + type: 'front', + }); + wrapper.update(); + wrapper + .find(TouchableOpacity) + .first() + .props() + .onPress(); + expect(wrapper.state().type).toBe('back'); + }); + + test('should have a reference to the React Native Camera module', () => { + const wrapper = mount(); + expect(wrapper.instance().camera).toBeDefined(); + }); + + test('test onPress functionality', async () => { + const onTakePhotoEvent = jest.fn(data => data); + const wrapper = mount(); + await wrapper + .find(TouchableOpacity) + .at(1) + .props() + .onPress(); + expect(onTakePhotoEvent.mock.calls.length).toBe(1); + }); +}); +``` diff --git a/examples/advanced/.gitignore b/examples/advanced/.gitignore new file mode 100644 index 0000000..2693f0f --- /dev/null +++ b/examples/advanced/.gitignore @@ -0,0 +1,4 @@ +# OSX +# +.DS_Store +.vscode \ No newline at end of file diff --git a/examples/advanced/advanced/.buckconfig b/examples/advanced/advanced/.buckconfig new file mode 100644 index 0000000..934256c --- /dev/null +++ b/examples/advanced/advanced/.buckconfig @@ -0,0 +1,6 @@ + +[android] + target = Google Inc.:Google APIs:23 + +[maven_repositories] + central = https://repo1.maven.org/maven2 diff --git a/examples/advanced/advanced/.eslintrc.js b/examples/advanced/advanced/.eslintrc.js new file mode 100644 index 0000000..40c6dcd --- /dev/null +++ b/examples/advanced/advanced/.eslintrc.js @@ -0,0 +1,4 @@ +module.exports = { + root: true, + extends: '@react-native-community', +}; diff --git a/examples/advanced/advanced/.flowconfig b/examples/advanced/advanced/.flowconfig new file mode 100644 index 0000000..4afc766 --- /dev/null +++ b/examples/advanced/advanced/.flowconfig @@ -0,0 +1,75 @@ +[ignore] +; We fork some components by platform +.*/*[.]android.js + +; Ignore "BUCK" generated dirs +/\.buckd/ + +; Ignore polyfills +node_modules/react-native/Libraries/polyfills/.* + +; These should not be required directly +; require from fbjs/lib instead: require('fbjs/lib/warning') +node_modules/warning/.* + +; Flow doesn't support platforms +.*/Libraries/Utilities/LoadingView.js + +[untyped] +.*/node_modules/@react-native-community/cli/.*/.* + +[include] + +[libs] +node_modules/react-native/Libraries/react-native/react-native-interface.js +node_modules/react-native/flow/ + +[options] +emoji=true + +esproposal.optional_chaining=enable +esproposal.nullish_coalescing=enable + +module.file_ext=.js +module.file_ext=.json +module.file_ext=.ios.js + +munge_underscores=true + +module.name_mapper='^react-native$' -> '/node_modules/react-native/Libraries/react-native/react-native-implementation' +module.name_mapper='^react-native/\(.*\)$' -> '/node_modules/react-native/\1' +module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> '/node_modules/react-native/Libraries/Image/RelativeImageStub' + +suppress_type=$FlowIssue +suppress_type=$FlowFixMe +suppress_type=$FlowFixMeProps +suppress_type=$FlowFixMeState + +suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\) +suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\)?:? #[0-9]+ +suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError + +[lints] +sketchy-null-number=warn +sketchy-null-mixed=warn +sketchy-number=warn +untyped-type-import=warn +nonstrict-import=warn +deprecated-type=warn +unsafe-getters-setters=warn +inexact-spread=warn +unnecessary-invariant=warn +signature-verification-failure=warn +deprecated-utility=error + +[strict] +deprecated-type +nonstrict-import +sketchy-null +unclear-type +unsafe-getters-setters +untyped-import +untyped-type-import + +[version] +^0.105.0 diff --git a/examples/advanced/advanced/.gitattributes b/examples/advanced/advanced/.gitattributes new file mode 100644 index 0000000..d42ff18 --- /dev/null +++ b/examples/advanced/advanced/.gitattributes @@ -0,0 +1 @@ +*.pbxproj -text diff --git a/examples/advanced/advanced/.gitignore b/examples/advanced/advanced/.gitignore new file mode 100644 index 0000000..ad572e6 --- /dev/null +++ b/examples/advanced/advanced/.gitignore @@ -0,0 +1,59 @@ +# OSX +# +.DS_Store + +# Xcode +# +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate + +# Android/IntelliJ +# +build/ +.idea +.gradle +local.properties +*.iml + +# node.js +# +node_modules/ +npm-debug.log +yarn-error.log + +# BUCK +buck-out/ +\.buckd/ +*.keystore +!debug.keystore + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the +# screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/ + +*/fastlane/report.xml +*/fastlane/Preview.html +*/fastlane/screenshots + +# Bundle artifact +*.jsbundle + +# CocoaPods +/ios/Pods/ diff --git a/examples/advanced/advanced/.prettierrc.js b/examples/advanced/advanced/.prettierrc.js new file mode 100644 index 0000000..5c4de1a --- /dev/null +++ b/examples/advanced/advanced/.prettierrc.js @@ -0,0 +1,6 @@ +module.exports = { + bracketSpacing: false, + jsxBracketSameLine: true, + singleQuote: true, + trailingComma: 'all', +}; diff --git a/examples/advanced/advanced/.watchmanconfig b/examples/advanced/advanced/.watchmanconfig new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/examples/advanced/advanced/.watchmanconfig @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/examples/advanced/advanced/android/app/BUCK b/examples/advanced/advanced/android/app/BUCK new file mode 100644 index 0000000..c8d70c4 --- /dev/null +++ b/examples/advanced/advanced/android/app/BUCK @@ -0,0 +1,55 @@ +# To learn about Buck see [Docs](https://buckbuild.com/). +# To run your application with Buck: +# - install Buck +# - `npm start` - to start the packager +# - `cd android` +# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"` +# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck +# - `buck install -r android/app` - compile, install and run application +# + +load(":build_defs.bzl", "create_aar_targets", "create_jar_targets") + +lib_deps = [] + +create_aar_targets(glob(["libs/*.aar"])) + +create_jar_targets(glob(["libs/*.jar"])) + +android_library( + name = "all-libs", + exported_deps = lib_deps, +) + +android_library( + name = "app-code", + srcs = glob([ + "src/main/java/**/*.java", + ]), + deps = [ + ":all-libs", + ":build_config", + ":res", + ], +) + +android_build_config( + name = "build_config", + package = "com.advanced", +) + +android_resource( + name = "res", + package = "com.advanced", + res = "src/main/res", +) + +android_binary( + name = "app", + keystore = "//android/keystores:debug", + manifest = "src/main/AndroidManifest.xml", + package_type = "debug", + deps = [ + ":app-code", + ], +) diff --git a/examples/advanced/advanced/android/app/build.gradle b/examples/advanced/advanced/android/app/build.gradle new file mode 100644 index 0000000..c4e54c6 --- /dev/null +++ b/examples/advanced/advanced/android/app/build.gradle @@ -0,0 +1,203 @@ +apply plugin: "com.android.application" + +import com.android.build.OutputFile + +/** + * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets + * and bundleReleaseJsAndAssets). + * These basically call `react-native bundle` with the correct arguments during the Android build + * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the + * bundle directly from the development server. Below you can see all the possible configurations + * and their defaults. If you decide to add a configuration block, make sure to add it before the + * `apply from: "../../node_modules/react-native/react.gradle"` line. + * + * project.ext.react = [ + * // the name of the generated asset file containing your JS bundle + * bundleAssetName: "index.android.bundle", + * + * // the entry file for bundle generation + * entryFile: "index.android.js", + * + * // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format + * bundleCommand: "ram-bundle", + * + * // whether to bundle JS and assets in debug mode + * bundleInDebug: false, + * + * // whether to bundle JS and assets in release mode + * bundleInRelease: true, + * + * // whether to bundle JS and assets in another build variant (if configured). + * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants + * // The configuration property can be in the following formats + * // 'bundleIn${productFlavor}${buildType}' + * // 'bundleIn${buildType}' + * // bundleInFreeDebug: true, + * // bundleInPaidRelease: true, + * // bundleInBeta: true, + * + * // whether to disable dev mode in custom build variants (by default only disabled in release) + * // for example: to disable dev mode in the staging build type (if configured) + * devDisabledInStaging: true, + * // The configuration property can be in the following formats + * // 'devDisabledIn${productFlavor}${buildType}' + * // 'devDisabledIn${buildType}' + * + * // the root of your project, i.e. where "package.json" lives + * root: "../../", + * + * // where to put the JS bundle asset in debug mode + * jsBundleDirDebug: "$buildDir/intermediates/assets/debug", + * + * // where to put the JS bundle asset in release mode + * jsBundleDirRelease: "$buildDir/intermediates/assets/release", + * + * // where to put drawable resources / React Native assets, e.g. the ones you use via + * // require('./image.png')), in debug mode + * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug", + * + * // where to put drawable resources / React Native assets, e.g. the ones you use via + * // require('./image.png')), in release mode + * resourcesDirRelease: "$buildDir/intermediates/res/merged/release", + * + * // by default the gradle tasks are skipped if none of the JS files or assets change; this means + * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to + * // date; if you have any other folders that you want to ignore for performance reasons (gradle + * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/ + * // for example, you might want to remove it from here. + * inputExcludes: ["android/**", "ios/**"], + * + * // override which node gets called and with what additional arguments + * nodeExecutableAndArgs: ["node"], + * + * // supply additional arguments to the packager + * extraPackagerArgs: [] + * ] + */ + +project.ext.react = [ + entryFile: "index.js", + enableHermes: false, // clean and rebuild if changing +] + +apply from: "../../node_modules/react-native/react.gradle" + +/** + * Set this to true to create two separate APKs instead of one: + * - An APK that only works on ARM devices + * - An APK that only works on x86 devices + * The advantage is the size of the APK is reduced by about 4MB. + * Upload all the APKs to the Play Store and people will download + * the correct one based on the CPU architecture of their device. + */ +def enableSeparateBuildPerCPUArchitecture = false + +/** + * Run Proguard to shrink the Java bytecode in release builds. + */ +def enableProguardInReleaseBuilds = false + +/** + * The preferred build flavor of JavaScriptCore. + * + * For example, to use the international variant, you can use: + * `def jscFlavor = 'org.webkit:android-jsc-intl:+'` + * + * The international variant includes ICU i18n library and necessary data + * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that + * give correct results when using with locales other than en-US. Note that + * this variant is about 6MiB larger per architecture than default. + */ +def jscFlavor = 'org.webkit:android-jsc:+' + +/** + * Whether to enable the Hermes VM. + * + * This should be set on project.ext.react and mirrored here. If it is not set + * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode + * and the benefits of using Hermes will therefore be sharply reduced. + */ +def enableHermes = project.ext.react.get("enableHermes", false); + +android { + compileSdkVersion rootProject.ext.compileSdkVersion + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + defaultConfig { + applicationId "com.advanced" + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + versionCode 1 + versionName "1.0" + missingDimensionStrategy 'react-native-camera', 'general' + + } + splits { + abi { + reset() + enable enableSeparateBuildPerCPUArchitecture + universalApk false // If true, also generate a universal APK + include "armeabi-v7a", "x86", "arm64-v8a", "x86_64" + } + } + signingConfigs { + debug { + storeFile file('debug.keystore') + storePassword 'android' + keyAlias 'androiddebugkey' + keyPassword 'android' + } + } + buildTypes { + debug { + signingConfig signingConfigs.debug + } + release { + // Caution! In production, you need to generate your own keystore file. + // see https://facebook.github.io/react-native/docs/signed-apk-android. + signingConfig signingConfigs.debug + minifyEnabled enableProguardInReleaseBuilds + proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" + } + } + // applicationVariants are e.g. debug, release + applicationVariants.all { variant -> + variant.outputs.each { output -> + // For each separate APK per architecture, set a unique version code as described here: + // https://developer.android.com/studio/build/configure-apk-splits.html + def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4] + def abi = output.getFilter(OutputFile.ABI) + if (abi != null) { // null for the universal-debug, universal-release variants + output.versionCodeOverride = + versionCodes.get(abi) * 1048576 + defaultConfig.versionCode + } + + } + } +} + +dependencies { + implementation fileTree(dir: "libs", include: ["*.jar"]) + implementation "com.facebook.react:react-native:+" // From node_modules + + if (enableHermes) { + def hermesPath = "../../node_modules/hermes-engine/android/"; + debugImplementation files(hermesPath + "hermes-debug.aar") + releaseImplementation files(hermesPath + "hermes-release.aar") + } else { + implementation jscFlavor + } +} + +// Run this once to be able to run the application with BUCK +// puts all compile dependencies into folder libs for BUCK to use +task copyDownloadableDepsToLibs(type: Copy) { + from configurations.compile + into 'libs' +} + +apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) diff --git a/examples/advanced/advanced/android/app/build_defs.bzl b/examples/advanced/advanced/android/app/build_defs.bzl new file mode 100644 index 0000000..fff270f --- /dev/null +++ b/examples/advanced/advanced/android/app/build_defs.bzl @@ -0,0 +1,19 @@ +"""Helper definitions to glob .aar and .jar targets""" + +def create_aar_targets(aarfiles): + for aarfile in aarfiles: + name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")] + lib_deps.append(":" + name) + android_prebuilt_aar( + name = name, + aar = aarfile, + ) + +def create_jar_targets(jarfiles): + for jarfile in jarfiles: + name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")] + lib_deps.append(":" + name) + prebuilt_jar( + name = name, + binary_jar = jarfile, + ) diff --git a/examples/advanced/advanced/android/app/debug.keystore b/examples/advanced/advanced/android/app/debug.keystore new file mode 100644 index 0000000000000000000000000000000000000000..364e105ed39fbfd62001429a68140672b06ec0de GIT binary patch literal 2257 zcmchYXEfYt8;7T1^dLH$VOTZ%2NOdOH5j5LYLtZ0q7x-V8_6gU5)#7dkq{HTmsfNq zB3ZqcAxeY^G10@?efK?Q&)M(qInVv!xjx+IKEL}p*K@LYvIzo#AZG>st5|P)KF1_Z;y){W{<7K{nl!CPuE z_^(!C(Ol0n8 zK13*rzAtW>(wULKPRYLd7G18F8#1P`V*9`(Poj26eOXYyBVZPno~Cvvhx7vPjAuZo zF?VD!zB~QG(!zbw#qsxT8%BSpqMZ4f70ZPn-3y$L8{EVbbN9$H`B&Z1quk9tgp5FM zuxp3pJ0b8u|3+#5bkJ4SRnCF2l7#DyLYXYY8*?OuAwK4E6J{0N=O3QNVzQ$L#FKkR zi-c@&!nDvezOV$i$Lr}iF$XEcwnybQ6WZrMKuw8gCL^U#D;q3t&HpTbqyD%vG=TeDlzCT~MXUPC|Leb-Uk+ z=vnMd(|>ld?Fh>V8poP;q;;nc@en$|rnP0ytzD&fFkCeUE^kG9Kx4wUh!!rpjwKDP zyw_e|a^x_w3E zP}}@$g>*LLJ4i0`Gx)qltL}@;mDv}D*xR^oeWcWdPkW@Uu)B^X&4W1$p6}ze!zudJ zyiLg@uggoMIArBr*27EZV7djDg@W1MaL+rcZ-lrANJQ%%>u8)ZMWU@R2qtnmG(acP z0d_^!t>}5W zpT`*2NR+0+SpTHb+6Js4b;%LJB;B_-ChhnU5py}iJtku*hm5F0!iql8Hrpcy1aYbT z1*dKC5ua6pMX@@iONI?Hpr%h;&YaXp9n!ND7-=a%BD7v&g zOO41M6EbE24mJ#S$Ui0-brR5ML%@|ndz^)YLMMV1atna{Fw<;TF@>d&F|!Z>8eg>>hkFrV)W+uv=`^F9^e zzzM2*oOjT9%gLoub%(R57p-`TXFe#oh1_{&N-YN z<}artH|m=d8TQuKSWE)Z%puU|g|^^NFwC#N=@dPhasyYjoy(fdEVfKR@cXKHZV-`06HsP`|Ftx;8(YD$fFXumLWbGnu$GMqRncXYY9mwz9$ap zQtfZB^_BeNYITh^hA7+(XNFox5WMeG_LtJ%*Q}$8VKDI_p8^pqX)}NMb`0e|wgF7D zuQACY_Ua<1ri{;Jwt@_1sW9zzdgnyh_O#8y+C;LcZq6=4e^cs6KvmK@$vVpKFGbQ= z$)Eux5C|Fx;Gtmv9^#Y-g@7Rt7*eLp5n!gJmn7&B_L$G?NCN`AP>cXQEz}%F%K;vUs{+l4Q{}eWW;ATe2 zqvXzxoIDy(u;F2q1JH7Sf;{jy_j})F+cKlIOmNfjBGHoG^CN zM|Ho&&X|L-36f}Q-obEACz`sI%2f&k>z5c$2TyTSj~vmO)BW~+N^kt`Jt@R|s!){H ze1_eCrlNaPkJQhL$WG&iRvF*YG=gXd1IyYQ9ew|iYn7r~g!wOnw;@n42>enAxBv*A zEmV*N#sxdicyNM=A4|yaOC5MByts}s_Hpfj|y<6G=o=!3S@eIFKDdpR7|FY>L&Wat&oW&cm&X~ z5Bt>Fcq(fgnvlvLSYg&o6>&fY`ODg4`V^lWWD=%oJ#Kbad2u~! zLECFS*??>|vDsNR&pH=Ze0Eo`sC_G`OjoEKVHY|wmwlX&(XBE<@sx3Hd^gtd-fNwUHsylg06p`U2y_={u}Bc + + + + + + diff --git a/examples/advanced/advanced/android/app/src/main/AndroidManifest.xml b/examples/advanced/advanced/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..9123d04 --- /dev/null +++ b/examples/advanced/advanced/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/advanced/advanced/android/app/src/main/assets/fonts/AntDesign.ttf b/examples/advanced/advanced/android/app/src/main/assets/fonts/AntDesign.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2abf03542c17e6f7a7806a226c3be732b51c5a40 GIT binary patch literal 70344 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®9K?4Tre1; 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

9po(mC;xgZJxI5gC)~i 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

R0AMv>n9kBSrZWQv zj8gze2D43>%1lq=EoEYKXnJNcW0)Apj%Q300}~mniO~t`cy@Yp@8}R8Su?eG2E#oz zY#1FM%pQ@b);e`ybSzV&eM06J7y%kZ ze0N}M2;9eXc2XW1p(e}wMyE$+1|2yr1@mz~0B`3wNBcx}Wl4Gh8cbcvLHEh*B$Sh*B@x=+zqSq9$vZnV2gBzYHA3 z3K=-6gGafR<8>4Jv@cE!@8tzE;i`;&Z(^DkEHmT# z$Fqld*>pHN$y<~*4rATWe{-%-lT{962dRO|^Z;-;eq|7Cm_mgqaH&|()5hTeJQ|qF zC^U>%Hl~s6%;dhYfvG8Rf99yPcWhuE7W>ic%(Mc;K{Hd_vbk59+CMrjO=q)XB4&{l zy{5&zZxZteeVd%5`eto9(*wtRk=GFq42+ATQ-`E|qkE_2(P6wYY&igwIRq?&b!-Lt z#45{-0en-^BoL&$d0=m5`lx((U<~~*9M0kkG#2!A;L-8@a{pv@V&tfi7BXOv&J`LA zW25^s4FJv*FYrr(6~6>PX2u57$|R;Xz=M$*15ncPzy#1`TH&XftZ`s`crrUWj2l|P zJ}@?Vcwl@V{jbTUEqRx~&`0%knYPWBQOh`yJ)D`$?%iveo*Wp?92l6~FYN`IFww|! zoNSoN&WsNmXq}Hphk@p#siWgVSbzIQ$7LL85GDbXf#Ece_0-hBzD(Kx%(*`!_H0;b zMr%QZCNnizQ?7`|Lj&V!nnaliqB59z*g^~pO;4GovSTy+mV`C6Um}7F>t&6k5IU~W@Ue-PX$_dL*#X8G-8XInmzOjr9qJ1n2en@-h*gG(U36b5ezocLsCNM$FT5Vzj97L$l_}of% z&^($sP;($Vp4~S&aDcGi*uY@!HZ2zdy|8hkVQT-;iHvP}AUima)qfz@Ms3|IG>>Nn zGxA|Vh11G3mN`~{;c#YjFe~--uU(USTdQy75A+`C7g}#EOVOdtm_BH{3^*K}88;jo z86BBX1~VgI5;Ml($X^j< literal 0 HcmV?d00001 diff --git a/examples/advanced/advanced/android/app/src/main/assets/fonts/Entypo.ttf b/examples/advanced/advanced/android/app/src/main/assets/fonts/Entypo.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1c8f5e910bfb1a4a2871eeedc6eae01ca25e7ce1 GIT binary patch literal 65584 zcmdqKd7K+}eK$Vex$hZCbLiGeT1k8FdZm?Y@8R|BI9|uMW5;nWXPp~kn-CI0OrRyC z1X3EHF-K{jNuVUZ5T}9iwA2l0NJBz_ma7l+MS&)?4N$H&Z9)6IKckhsHqiEY{`~Fk zNHgD=`JSKe=l*<_V;sj>+zC$Lwr$w3Ywq~8yPjj5htljtJ4eSaS~&RU9LFxk_2pOH zc*T+Lyxm{mIO%&R+kDl{$9uRKTgP!q1NX(lR~$RCuz;EvXX08te8cPJzxm+B0>|mM zaNKvcU32vnhs5-*Jnnr1NAnsK2(R$VP#3k=d(DlknZ)dVYM8onAQ2ji7HApqR$e{prEg|KeiNG_cIOrLAm+HD7$2<;tmdfcFIusny>fxKp>6z~Rs7_q(#Bn_i zs^bwHcjI^x$J2}FWqjX`<2^X&oSt3U=k9qQ%DV@ZQTx;%>RyL7&*gX)HF9s^ws8(O%x%GM76(>``z&_nXSpl5&o2A|XF6BM zZaaeSJdW-!b{98IRp2Lu(oNg|zTd<7+z_5mqvQa7pTgmwtoxJV=DGU94{=HL>d|wU zE4+bGMD_RMs?1%FdluRxxJLcx6aCzcQfkXY+Z=Zx&O1LkzC2vfz0Hebs7F^@I1P|a zW23tqcFqKs#8X#BFZM>y^x$q2JvhM4FT8>leLQu2^p?kkc!Fx0$Kj)_v)>Ia&aFgC zb+nqqyA!Ap<3gP`adK31_k-ciG~Qi>@6MPzJ*7FL=R=HzW|7)Rq5j#ZbP(r79P}fh zO`0nKPtpt%ZZo5q+Ja~4H;>;jlu`@yL+^F!n~z5Rn&>GG>!2^RF(1_43H;uVgPx|9 z?evY-8U4VjcWS{`bf$Bw@r;L6pc$sx6)u6#5nQdrL1lChzM&(#h)dQ*n3}Fdt`Frh zz8L@;m?v7%o*x0)7QW+9>EaK={B^Zw=j1ODIm?O-gpJa~8Tc<^-at>BgLK=|q8Sn}rNqp5uA zZK;1suS>r#{c>hJb8qI!%y+Xvc3t+?>{Ge7=RTSH27r50et-UL`6u#U%l}7VW#Lmj zV?9TDKGyS3#cFX+@nfZU>Gh>&%VXt3Yjeoa3UcbBku|}h@qw!eddlTu2gA*T|_--@bJk)%yRcc++ zdSZEc`5Tr$x8j-=Cs(|@a?Q${S3b7#nU#MxIWl?Yls@(JbaMLm^yAY%ow;)6gEP;r z;#W4k-??k&tvjFF`O2=oUB9{Ole^=)5AD8X_hY;NZqLA;8}|Ik zUVZQ8y>H+9?TgbFe_-GEzUTLk@4t8de_V3&CC?rhI`FBE? zc;&&bU6#J=hRZ&B*)x~#xcv2(f8g@ZUy;3{dBuHKJa@$_R}NiyMO6l>FS@(Uq1i#`KRY!IlSiZy@$Vj&GWH>MsJc${({7pPdG;>Q)4{e0?ipq=lJ z*JJfqtsX1K?t1O~Jloy=!x$rcO{ixT&#~2@ax>gT9M_V|r4ha{!`H|2EDXYCD>~&p zn=hBDHTsnm{8oed_zY_`Th-bK?#RA~f@Y&yF4?>i;KdIo!t8KQ%qm8H_q*EB;nHz;0tv^7%p z?9g#t*KtGJD~+^9dp*lAYzLLthQ6-{NI=&$!-$)ea7-&ME1U5^qaxsGec?Iwuk1?T!p1KUVws)8RomN4v4 zQBfG$X53X&Sy5CMg~8W!9q&r2Q&DYtFbcrd-UQtzSMHTmUu1p(a5x;5RmilN^^ysfV=N0L1O&iO< zS5kP!aJjd0iFeLiL?tJp&*%dZ6TQ-DgQ)7lX^ivFxCVF*P6~?{5kJuYbPBaba}@*N zVo8Ni4)e@mGy?(_(f6=;tX22RetDuiQJ<)@`&oOw=OWJ&nJmjp2PFzX5JzgPE z%<^)y3{3P2{o~WAxw$(227+L4c`08sGATvkT}Lr^KIJ(zOA1Y$xt=!e4@)u2mUu}{ zWsIKQSkU+jdT|cR6ZQS;==($95C_361fIiaeQJQnu!fnAdGa7DRilL(W!1(i)?F<2 zpOQ2!xyniZ|5IG)yON?vX-VCU^Xblw-KxZcccFQN(c#HbjXpRRt z1_0xuZ|onGC1}TB0cckRGP)noR_YYRX$fRPEF-MRa0CU`DPS)ej$@>B$I;ub+`MDQ z%{%THn3{SkilTDkDb=!EQ_^hg5ZC&Wrl|>&R~W zcSPrL>W~sitOEFJo_&wq!4)vSmq9d?F=7BFO#)#Pj6A|gm<*dq=Uyu3JRAO3H`l3w z#jA;MbZ~WVxiOgXqiZicma4C!Yj)Ln1)T@Zf5A_6UpW6h%PD-!S7NaM@a@^Qi`jGo zB_8*B6Sn1UmRT&2;|Z^~a}QUF8w>bY^z4!7-FPAagl;>D=*_4mpWY>SWSq9}Gxl%n zx40IduS;_P{Irdmph^TSn6G+skw%T@c@Un6G-3WqRW@skj}B&ZQ|Ha)F^gH&<%N;! zLRsJ?o=-dLZ;6|wR!>qBdCea!83|Ej7UO|m`NExr_(9DOoSg+tF%(%Yl@5BMDhf=J z{60%fj`pN#b_I7BFWdTPIS^yAd||?tWM#Ky z+?F#Gp0})-V~(ly_0XI#?gHpgR&dboFgdVA2f!p(f9iEXf=@@NWbA=zY&w< z<&MGI_GP1`LrGZ#?&DL=hTDe~{hNxy%ld;`w!HAd zyk)7n0)l2)s7rtZ_Y?LKy9aeykg&Oy65(p8*7AY5mC{6vkPgtK&0d%Tcf-x$^8~mD z)N&dP)K5|~r(AZcF3Wn<5UNEVx1io9qI#iCTg9k0Ux;cVk{AO`Jc-_%u&lIcDV?fV znrd)mo!yH5o>NC0vmQoWYc2K%?8F31cSe-5EHlll#Q{?#y6m1aPa(Y@5uyrlTg64% zTO1ECB8&n;lOW6V9;S=N!m89eqOs9@b>^zR@O8}lL(yD8a;|i0Omr52I2_cAsV|Oq zD(y^7r#mz#{hl*3cr1;9qf(w*vG85?6nhvrYXCJ8;>P@xFgidua2Mzl_@DZCXtSV( zdsXm^t$;n{IPq#|4Ga$2mA;ylR>Nf4N;GY=5sdft2Bk~QYC_4WVcL{0?FqA$L}F(0 zO}(~ntBJ(0f8mCox?XQDSUOgPmW>m!R{x2$(xA6k3GEEWz@YkNqV19oYLD+Cv8;K~ zQzF`4RtU_{L&6jyR<}5T#UVNmst;<_Wb=Y*w@om~$@cr`YaG{gUKeD>^QLJs!2wvl zPtallD+>&ai6pAL!#;K-bu#7XCv}J2L(iFv&85?Zg$Jw((*;d6Rb#{Eb&821%hWy> zS9A@08_-;T|3~Wh0r>*_v4!@+PeAwYp&i0vSeI3dFa$<2!#dwho@=YJARg6>ifD*i z1w(2{hVUkd-P4{|q~9_15_pQ&flq0IU-_&C3^0qjPDlHWYtf#oE3^Bb-+%h_sZ*z^ z&FKCU>;&M0>i~R>ak$4$&{Mb%jTzpL?pHedj72Y>#{JIwX7~Ogv@(wFu@h(l@9)Dy z4|UovMw`CQxCi&0-1p!MFD$m7!k#-!?Jw@QS=>5Jk3{#6E&MgRCxTy2g1~}b#@(}j ze*f@W*p~Jacm!=gR|9-7w^&EfFZzk-?rC}u_o0ho-|yV7Oce1OvibHCY|C5fxPMQl zj$_y-_pnEzc?io8jLMyM*duSDN27M2Wy4sbzE&cX6SDLRFFcs0;ZQ&J0mnVGIG3G$ z))^~1L8BGU$Q(LgHj5WJoD=cd{CIPsF@kL*dq85eIT<%k^1+%{+YcO_*f+8L=)cY$ zJ2uOnBvyZZ?W@Dl?&WB=p2 zCnALR%XOoRzoPCp(~$nJ`re(@^ZSl!e%0JOeQbUn>*6f@1$&u21BsRk2}cp**#v_X z1`$OBA;wO_Vi2Dl1}(ZGJW-8!(ma3WuKbSi-XIan4gOW%SXh#++7JC?(shL3A=x(M zhYS%2!7zWAQU%}6r5@WHSawf;J@|LJ`|ksjm2hf9Zs?1BmRt^(_5Iivc-I;aJ}T*s z^ikah$HB}Wr*pP1sHw*<3>pJHwiW(dHXMlzID~h%Eu3bLu}=fvT?o7z0Po_jHioX+ z{4%i2kZr0M8ZjE+A?5MB1kM5v$x2X*M0d7|jqoKI0uOr_MZv1ameMsM?{`z!}=iYME73I`|Xo#uKgmYdfm@6>!hEbo3HQRSBKh|=Zu9PuzzOn zNNgkQJsz!bmy z@_c<#Gq+<+-g(=jw+&bG2kty@@vL;{khJ_@Ysblzs=7naCDLA3fH%IvJ_=4`1naVq zbS4m2Y`zO-3V|81U9~FY8E{iWa1&XZ z7ZZ1s%ZXg6H^yweS}p3T(ps(xJiF1{5FeWcQR2ZEin=k8a`TC#CVP;uc)_&FSM+Cs zny3u-B>QwBS?w>0lATQyM{ba2HYv*NX5fV`f1v>j=b~Bnfjq%cD8x8*&!9qx7`#)4 zbJ#KFb!Xnu=c9A>Af&lDc1m~dcZ~K+46@uwM?Y~wCz6OYje*Yp5H!&uE;ddy9&BBQ zUkt}*gbvn>v^G#R;bvZV=J=6yYhQi*)oa&%w10Iusf?~PwPcVs^gd1R&FQJiG`r`r z`!0+R77By$3-4=NG2apryEgPxdq#&^uIzd)v8)(dS632p<3uNWiBAAO(_vSk2Lnik z<&x6uu+)m@@W2_w&VyjDB1}RE9-{gpcYAjwDB8V)3*7MPjN8)$ff?+zi@|j~FYp_D zPs9G-Vu|90K!tEB;QRqI7K2D?sWIcnho(cXzOI~ZjO4xW{g6xeb&eh9c|KQ?WoNA` z35uxV{Mzhr)(oAHY!p3!%@2ZhX0R?$8bo>>;>#u!+F8U;(p8LoaAGi394Xl5DLNVM zu}t=0`-$wbRG8}({-pRXna&v-B;7xDT6EqO`(AL zm70%@2bIexQ#xN|zk=svrA)fA);Q2=-LplSA912J1*R;VVk06ps>52~%l;~sGGsrO z*Ns2;11A%@TGD*y9@{Y`S**rX?Eu@s>Zj*pMABC9yaA_e5w><@vGwmZmeMkPio}ffr*5F%j>X&*!Y3cs`a-T=}X&#np5{ z@|Ziiy!~?{m(9en)AfXzODE%!Y)ID&BJ+j}RWy1#vejwe-_sb8LOe>?3Kf8InKXO^ zLJ{m^drv~v4p%SR();k1W%~|CDw%o3gj(exvtiEOlDh1&)Gh1<+R=ssg$ZrzIuy)H zd6YQGZcBI|1+!0RIzdoV1BvQ#C?|$lY+}Rqqo3J+bh!P)iL;EvziyadvEifbmyd2= z-)#SI7}Y_BdmjAcCt&dT$@w9~rs8nSENkNtNT`w!YQ7ON?kwy@p|*!=u_Og#x{;GQ-KSEqEBFm zzySuSgy0kMH|FK@(0BKNN^z_e>EtA+w?$IX)yL}4k^p%^={qCkiDLlU0GK7^XsgK{ zXO3XTd-`X32iNswOzEcm%&Dy}SLX(VTy`j1PR0a97%5E6?i9U*CQcntApAH^UC9g$ zkM@T7WsMaDy2KD8dt#LL>;u7+8hPL@#2f%(Zb9Q zIi={a_b^cr-VG#-Z+)w-?D)FC^F!?unK+Zae!70Vl*t++mMmMm zm(uMp{_gr8F%8(>0@z7X`>FbH-(Whn8+!z7#iAVOzpJO_CGQ+Vcpts+hZ@E`+E&G1~LsFg805vSSQm>3(7<3pQ*xxiNk1y#(la!ys#$$w0bS8`5m%kC|;+7|ZUXx3|gQPk35 znATVz2?JH21>C&l*`L%2Y3e05D_qA^ifqxz0=fnaQrHATctwnB9R zWd*|ovlU97jipc1A(4?aX*qBCfbkj#r;@|?0}FrN^*CLHWzPI7q{wv zS6+j_!)_*sdzn6(=|m!(n3XhBw&-j)x?b5S#dQLkmdby*sP4%Y#gZ+hUDOTK}HCcRq<^YRkrB?<1JhXc!SE@mQx z3hWF$(?kL&DFHsNh=ZMq&=SNoD`}_ZPR^y;C-*^vS!c(9k0PAK>UL<8HmrT}g%{ZU z`|v~Ub#b8ri{&zI3U=C#)}#TuCG1KOZYB~2JPth>k1sM8)dkpMBb4ER3y+qAsN1(@ zhlgi}S^6xFoN*)Or z+s-Ix&x?3;;zB(9ES@wJm}4!PNL^35tTP#r6}J{iTK7G{ z3wF{vF&B;X3bw+}V|vqbr}F+?BX-i>vLzqf@8?hC{rjUUECIE}0N*Bil-&$zj%(5G zgl(<>nH6)Y2(nW8o0xGxlfs-f{T?-&met4g1heednYp-VZu^O)xH+@^_ip6j#NcJN zkG+c}$WI{wO(t|M0eE}46xsHUC;UT)V6bNDEoxG|Nml`_iNxiXClXpxJEp4F>ROU` zC~lDLgpUL2U{KeDAPppLHHaKBw(9&h*p^?eHX7F>sONB}o&?aZG6oK(1`R9GvEZN4 z-Z3=Wt&MG=KHZ`+ty^1E$KBk`n3E4?+43RDu%(Otjnq0< zO89ehX?tgGpX4^PDb|eM?@$23`<zo&^Ik&dX`%mNj&8!9QJgx%TfC<3bklKm} zNQ0{@mI+ z<9`p{f79aoi?s3V=y!f%X@jS`-H|>=-RZnv=JulhYk%d~*PPqnfu)sw0%O0PyAiNl zBRH(c5NYK_tzjhYv$u8Or zo7EEf1)8>5OK7w6qzzs>fA9MrzkS73EBD?0_gY-rq~R~FO)@u93g7#D`{~>Ft-NZ* z?T;^&wHDjsqWwb+!vEn{x0gg+lZ*Af=DhY;7M(6WNG}^+*wF`8J>&^d3dq6L=GGsUTHRJ2dWM>fP&*#5KGui3T6TjRX@Nm~>NTD4F zE;aH7!g57!PS8D_j9hyD;DMu&YQ7_^6KeLR~-F9 zI+g0}`>SD7XoznNV?(K8`-y=~!~1W!cYfxEb#g4NP?u@AfaKv$;)(To_dNfy>? z_3kkq@EmjxjmR%#ZWdRH0-3Ov9iIUULumW{NhB^ z00=q5G_^>~0vChIQ40txloTg0%csG`oFEkkDn0>1+dh#_&%@?JHs#aMN1VodrOxM- zn$+KNtqx5}oxOv2z4o{1GyiS>li~9Cj`(tR56W(%GWHveKbHn~v~*vS9jO%6N|1P- z9cdMO3!vw7Sgi#&rmilfYfbv*0ad-hxGuH7aaNsj#-w!RC7N-)Xvxz<6CWg=prZ#p z4o(<4(1_!L1Ug=iS|q0=T=3kcdi!g&W)tdSzA{r8*<|T@{R>xZoVaiTYS)?a!~pmh zPJmyu3H{+~z*iTbF^_nR$jb$!o%9ZM;+4oA11XQJo)Upl8Cvs1#Dct2Q{VVj6+opP z+@tb}`gKJ&RHbue2kILaINsKIUbpx<+)*rkgL3Rv*g1S<=bYlJnyjgvQp1-BpUemK@$KNZ&vX^Y$f~wgH{utd6^fFYv`0VhR z9(%N3F)BS--3yFLU&RPKeR)6h_`xp~XL~A!(%#x^Zf(7|B^7vDPd0imNGL}C^5}i9 zdVYDfNArUB;g!}_(iKPxFSDP6-|Xn$hvBQwB?>fqWHknBQ(#IopAN$e7Qn32Gz&I7 zQ96?v@=bCr%CqgYE1$!Z_9*`KnkNSGjnHGf#BPvD$D})V=(6-7$llBJ_e)R4Vd}2lP z5Q&>-KFP!BfUQU)Dqh%aP$MwnwPm@$TK^k>mchzGm9TFI1p51ZoWzsN4ULhV=rDB5>HT zmJYxnpPrXHzA99EXACCBa2&X?9AUA=8VR98pHPOeU`YwwgW!2%S#`@2RaHJItK{c` zD-7fq;zY4C)lMFZC3GQhmX|4#GbGdn3excmX`mm zo`yRhyGw;9hYG*FyU34g3*@0E&`0Ggg?;kAYp=cUT6PQ{*WO2Uch>@x1k`TPIWrPT z19mcQ{ioqXA8htNt+->*N2gEm$kw?5a6x^FG@IZFefDD9Y+n|`CVjy1F07NwC>bT9ws@Ql+2EC!qL<9d0gIK$E_DTG%kf}b{aPiFK{?*G-Rmw;l=_h zUcLPS?xC>#QmXE-z4UtfWF7i{lph8g0$Pg*C-`0;$6D05*{JVbuThwzn!Gp-d<8&k>T7_gT#R^D*+ zMz;6Xy(P_vuQ{*=uRxO6Fi2~6mKVyvk9rMa%(xZ^MMS(N&~c0dv;w__#xfvZ@+EiA zz1f06BJ#i*hiKcNR}>5tFEsx?tHkY~6pMSYo>7|=rfNY|T>n@g6eQ0M3Vy6VI~Xqr z@b1QqKVE+!xrSV~Zqv}@%=R6V(>L$hF+KS)*S2*p-dps&V%&n^C}F}_V>wY-f6+B0 ziHiE?H*5xW+_dhx?K6{;(;vQhrnO{@7Wj-JHwq{PXaTSy1?6~9rG5iJhrf0RY;A5! zPM7Cpy_xpBwD;v-*~ed8b@RG~wjEHl84pQ8ag* z39r!xz`-8fwEm(iK^x|;t4wyLg+4!W3P0?ob=P&;YTrJ&W7j0cy#u3va_F|9bJ`oh z$f5iqC-EiiwQ6N}Zbl1B91FBAbvR^C)N7=qMtQ9jp6Qbk!pawc1XdS@75E=4?O14? zI3Vb;O5WAe)zxKBfbvMNp=y|AJ;PAleFgI-vzO7WrtI}3xm z1V!O>D6d?;~7}0&+4y$17-&??U=w7X?)FxUJxKgHB%@4u8C}ipXHNCz_kR}EGgfKfhx%NH&kt0%n zZ~y+mU(@Bk5Z3eQW;#2YUZ0(wxvEbX85~&-C!gj}d=Nb7()k`oe_{XrFMABq1IYy3 z33d#Qh*E+U)gfTjfm=d+|C(OMWsSFf!)n4Z{u|bg<=0o$6W9NmKC`$k|B+=)SWk+Y zRqsD}NYtJ@c@lHH6!x>^PyS!_wME+7YORhf4Y(i_L+*KzUia7Zad6{`fhlQP9MAOR zGUG~oY?-G{_AftYzb*lX&o19w9~m63RQrdB%U;N)9)V&G82gv zO>tm2Ka?;uXmo?rPl9ov7A$a)@scAU`-PJyUreX(MEsXSfB10mR&);aCV$3O;gam# zf*k@aV=*H;C_b%T=c8cA%@~7ebHn5>@VAJ601NrJO>=d``?#Lp;sQa%`cO*l>Tcp;C zVtc?4*(?z%kt(LYz{Crpd)ai~rty~}zW(*5Sx=4RS5@n#nJ$&yFUwPn43K%sg|YG}gm>fCEMh&XzKKAu=SLy$}N)X|^+f4Cjhc21R!PSOI@ z2#!w9?u%!Ue9uZiNWR>efYjKfCY^_+`Eu`aB=&L>`#{Mh9vSz@Y$T z6MIgBJC7q}FDsTZpZU%kjjU-G-)FPm(GYf%HC8-6J@uK)9jow!wDKLVrL`tq-q$18 zb4Yi4F7|_T3jY*xw}HJnnlzRs<7>xyjq&47`!L+jPokbKPW|=uK+fvwFWD(z#bak` z#k|6c1BPAb(%K83h63U#V7DCPLGnB8YIatU8oVY%j?Ewrl|)NOv}$C2zk^rRf5dmO{mSNNH~-$c->stH5F++?TWx<=Rrr=*tD`9%ina;W=4YUH zyM3hn&rRmHxBjC4UKC}ZmIRLZEcX_+g8O%pm79@dAeWvkjueX{AEA#To)JJr-ojpv zo=K4Ag5(F1f6gj;c!X`h6^RO){}{b@TUacP7B$ynM@_h4;Jo-sR4r9n3=MM4aC`$# zEw=I5g}-4d*vHThvfiI*qq!)rz!niz->LngsEy8Nr`ki*!f5*+qc2+bE70fPL!U|C zO7XJvHc{cyStAOYPf{nH^q1+wNp^Y|;ivSbe~JM*U%2 zGz5&L6!qx`)PW=o@4#YLIDX;humy|2e==p9fNqb7EcvlRPYP8y7zC)zAnq%5$j)^- zL)a+D(uor%=H~yz6Kx@Gv=16_!4|z?*>H!q?w5G)q{mD9w+_38%B&M7?!W(`z}>1t zaNOz!ql&&o92*n2AZnWU0S|NgGUir>mb?I|kUS$+!!H8njRd*kka!OH9Ui%G2n}c8 z;xbmPCCVXjPC+=slT!~ZdJSqma5W_ALwD+hP1p~>jnKU&==NQyRk-GEtV zk{iqQ3>+8OHumI-Ey=LIRBBppnG zit$s+z0IR+fbnkJMg%3BTY-3VFPjYB&7g-qI5aLdS6MZu{U%g(_tUG5a=vH@gYE^} z*mm1tn(Az9jbFWG-LgGcGRkn&<#i3fLJl-&D2gzKe26$G0L27pf=dboJcVE!Tan(F zTw?}-cp}XOsA9DXf$-phYynD)un)RTlLXMJGNn;S*6WA?Tql~)~h@g zSosXU#vJw2bG+Q2EV3FYMW6q>4dcn-p2UVjo1J8)C^AIv0baYl-36>NU=9AfaFp|l zv4z5Woz45AMw`M*t;l13to8|?L8 zxgY3Fl9*uVh9=+t6#?zVIn^o$P2_x6*z4IfYV+cjlf{zx`|iJeH; zm*lgbOQqV+EZ1W(eYs{x8rnUA+yM8&S27XpvAh^zBW!q~)fk7jH#9Vh-jb0_0RKn{ z2%$H*>*ig_UTCWHfQcGHG-I*2YOBaOAh5^B_pEHqlqYxYoGj0@R_+-WKM!|7X!wy8 z1kc3dqgyS4FOsFc3f=AmM4^2OMq`~8G45I9eU>> zwpA3S-uvDuK@^4U+l2>Ebm*P?e*1~v-uF)Sk?jX}wZG2#!Yi)~`xw7=EzfGZ4sLJ% z>m{2G9^7;Zwaat)g};M~*oT0d$W9eF!YV$1uWGA7?sjEFjD$hRp6Zp}`^c^7N8Za@ z#rC(%w2_n*Q?qqLVR!cC-up=U)<@opoz{Mh8K&UhYQo}SMB_SZI~}7aoCJf}*k9PqqON8N*X``zyrT4)tEZ;*$qP>0eeaQ1 z-G2K9$zC(Kd}X8M#v5C*@kA~i7@l*NZp*8e@4PtE*uLzF>-_%2okwoE`}n?(EMLBQ za&}X#cqo}HS9;1?2&tj72A$jxgr`Zrw+_<78EnmW(?CRqU+mmokX;*Y>zF6v*WpY` zHqd5`)UO>SFht1HZV>bYvTl!@u@OITlnvUFz{_50AXS@oMM1J1kv9jI4qYsQLjv{EjYn41zaa4FZ+kOCt=e2kfueoH?IxCx# z%{q-3iVM!_v6on`yQDGf5VmLyY#xrE=MD@RE~JU(xn}O)>7kMBcLP1HyEMX{Upc6( z6~0_z~4@8~%)aRiq~!#Pazev&?xcK7H5A4ex?A<*ajQNJ&V zJZNdEm&~;u&2atny@iws!3i)_du6M?w~2BmO;C_ae9G6YOv14N-hOAWU$ zY_UYty?6I?W}A%`z2Sp-)g@Um3HpYyzyLf;aluE_CauK;1QQ_v1IfOg($qHOx~iT<^ZN(r(%-z zRddkYzWDtXgvf7~6kSF}4P~2*6SmtLh_(OGm8}_^un;Hhw+FXBa~7rx2< z0=(2ZZWp&7EyH&cfm_h#LR5v_6vS8#$Ll1wl0!I=Y1-tptwDU6kl?^tkw0sQIM+kSR_f+-q3^>y5_*&)@~0@q;EJYyC+6K&;CyN3ix&&~*r4a!pzePqOVuu1O zeRt>7$8Gk-gL_vFdEU^78-@owMWIgCltquPR2n96uT&087SC=0m3Sslkd!q zrBZ#0!D82ad1f%PQMFL?m2*zF_akj?H@+fT>( zGBDksr(%Jh9Wks|yXO@^rt13Jf&)6U1EERl*kGW|vKcg|J``=h++^(Qc-qd_oi(v| zVYD#h*Xxn*Eqf3yD)3x6wQA4_)+PtC6RY40$`B}kfddx0e62znt}}i~Xh81N4>==h zwBA9SY^)L#YPF%7G6I8Z2c@U`im9M_^k_9BA(R7s-xT@2{Am<-3xnPSIqkz|qSYMX zNgLEcet=HSBrq3{93Y~TCj~%V#-{{%{YJr1g&?ORp#^O1Ads3dnY3WkKS>7ExiJiR{yB;P-ta_YUqu+@En@;5Z`m z6t_vvDLjaMRc=y2fPzSu|5p5hm zg$KelhPP1I0OtYo(g+v~u$}T^@G^)7RRxFKR>yFG)kg)9HZlyPPG&Arg+cKFwgjzo zT2@LS*%^tvz-b?~H|syLO+FuIz#dFO^hzv?sWF%W=V$miC>nzue^pb-JBW5+h;OoU zVy+k$fW1@)DG?C&BMN~IM=0Fq5&CO|R$kO_>p90jWSNMBLn^YWm~bkPbiqo58F))0 z*_AEJieWm==oSS3GQ_y8Obe(&(S?*=g!83bYkx#Rn3WXYbJ4n0iYVJkqqTa2BMD4E zogxDE5I@bRhdkQ;nW!mmeGB?0>(Yrk)q}jDY~MmdFx5?4)W@9O(%asO>MZrn-$*3X zp12!REo5eJ+|q<3RfmqYDyUHzR!!5LsTio0K2)!xgd$9Qtggk_01P8OcfTauAKa6h}Eab~m{UeP_M@LpwvgMII zlNj%^jaytR<$9$j*pXNXLAKSD6bi%|q0aXp4)Geu571PEU`L~va6lqOWf15+%J=m% zmM_EObpNH&cE&EJlPWuKnSeYmt|Y(eu=pu~^{dLO4x>JS^B2C%e!w1$IAQQv(4>*B zp$16g;YCW(9egmuS8Z%;?1RP#LL0G-K}p$rW|G!=Z8Y^oy;iZbFABQ4-h7LbgbpI* zJ?7MsJQGAkg^xis$(XDnL}_NDxn9+UFKSk$rhhRts;##cI7jqSP*&XHc#se!-9Rr9 zi~?xY;|WY0;jW>DFR?GNKLqyxok*)nPDG)NSa{l&)g~R$2|gGESfw_~$9nquONM?( z%`682O9(<$^OPD~m!z5!NMa3hwPI90a@|@!Ecf>pb^StT+2J*!G|KZm@~G6KjtDTq z595Q~$d^YGH*TYT)FH1T!U{Sr1njrqPXYEHlY!0Fm}X@84T;1KVxB-(yc{xQA+G5i z2R3bZ?e)KhL_}Bzep19&r>-CeMFHT5wQ`u1Mq?UFnnNJ zuoQ0Qb^vTCbl8r94vB5Yj773jYa;rJ46%wIk&Gxhid+xKL#){lI$fgJjxOiVJ}l`L zJok;j&AHAQ16SJZB~T){K_(jMw{t!Mi&fkIh=bAVwy(uD zFHY4&0+`pS{(09xX~AyHS!)l9k1-5S)3j`yAa(q zu`t3*e4D~Pm#hTY)VuJOiu83CKv#JHS`~z-`@a&}c!F}8Qn$vD8@|3dtOMJB z2H4I4y!IcQ3t->JG?<~QM-cfmRu+}^rf4QML`}7Sld2_%B>B_P^H#x9-IiTa%)dj(c?#c~WADXp>G<>Jiit3j9^z zuM4Q!b)spJA+kUhgp_?Vm>Dp);f$~fs7+8BY@OD-dq>dMpPDZv zMsiudq-Tcoj4whvI1;8teHY0JytfaT+3_JW^9`+7>d_Gy6)Ppbl{9XAEz{G@YGY=y z%=5LBlES{`^~nM{4iz;S8V7sdo(aOA?#Mr;q!2IQaq3G}b`EXvkl z5$r`2BL_?a9uf-%o;6A?HVQwCI{T{Bz6cJ}#?CZyAEzHR;#oyaieL=e7pn$K!UVLw zFb97|7?xM-@+*+2K-XV^Gzp)$Gi^~O^=hOuj@m<>3@{&P3X&c*1*n0v$LiuDs3>)4 z5vb)&5)bw85ulVzx7EFpDkl+g$5tRUplAQ(i#;-aL1duW zgC}h7&Z)v{A{=y1f102&|7C9^NF{JQAzqn8lxfmKKo0ru`c-yh&yU*)$5nG~E^Z<@ zpYUrt_~*Hb6Ii!IoWCY%`CahGgR&j?@|?bs7UaL|YuNhl=Ihf(j{MqQyf`~c^8?wE z^8nkV-+?s>V7e&g*ZWtlT{Z@PDnC8i+BS0P)V-pe9w|!k#^{QH?EJ$YBc5X(dAU9e z-AMwuQMg1ga#|pVWAbPw|6P_K4L#UHa-AY4pC~pH*MwpG*c%Wj=?hKX(RPZ$Q588a zt`n8@I?|~LvbakT1WC9|Wd`gypHSI@X}A3o-4JfmkTK{X*^t}cmb9&a3Z;POcy&V7 zwf0}qn9kZPe0Y9AV$MT6hPy8@6=ZXd+^(UbiSoukb|zBFxT(vR%~fmQQ%)Y6ZPY7S zr#iQ5uIgkf?7^U%Xy|jrBGNTj=E*z5Mt!NG}8v7=$;Ghy@rZ(tR(Im?dGV?8iN|cxJ#Zk6$@nwg)ot zT8}fCcHs$x0C6`x+5Y`OM57uBOZx@|>pIwwh}>1oFMJ#ygL>L^)A}G7>yPig$c2dH zx))uI!KqdP&hk-sZ!dl7u)kB^NhgE<0D+t?COBwVa>12`0h!Cu`4&;aMVS>e4}7bv zRLRu{w-*IlXhND_(5}2fRBm#uTHG_H_PiE3g?vb8_uWt~#S-qr8)1ZkMT&Cb4VZ`A z6R#1(_CI9;%{0n?d*?yZ)MIenvz+4})V(C%bJ449N4J=3nC9FR@lf8vE3i4<1^#vd z+~TE}+p}6#xYHxcM|l8>nGqGPx4^_OvyB56ufh&SI1-i`DI>?3Tgsasg)f(C8?+FSkE!$H6vS(y88&AVfI6-qe zkuMwRcy@H8=O9(0+1>{-)l4Q~`Q|PCE2~r0tPP)XqzQIBcphg~_6u_*c}!7)v>=q` z+W#t=VJ*{}Linoyky=mnW@@1+z9W+`eJcaC+)}-A0QrXE&@ZPMXs#sv!Wpgv;1wW8 z2yy0=l6ujqa)u@8S{$X$gfz+63PTnitwAiINfGNS8RJxsGVCBVW!4`YveZPM(hm`y z7eq-wMifEcr|7z^OX_b$W(d$9Y8tAFl(z!XY%y6twsTWZWg{8)n3k4c@Wj|{=(7MEeyOLlYC@^R%mJawWP4F` znjhY=68uoYl40fXKw66Bm_1_Hp0u2W>ZS?M8KkEz*{X#U2C_B4i%DODE1Y1Zz*J)9 z;#nj^rev{D|7yrQ?x2sF%-ii(8D-ctn9J12HYajv*#2IE9&`orXzs(TatWwD5i$UO zXN9z$kmq65>bO5+(?eMc-KaDPCZ{!l%UU%Y0Wu)<6sDi1ZpkGk5epJI0+PSoM7^FW z47k$GeQ_j+kxE|Ljd@e00T_vSEvROFGm%N>C@LIUYoVB|ewy#^5u|b$B1E>gJW$kf zNJNV)@TyWuAOWxcXYks?A6u3mLA)1lK|iD<)BboNhFl@>nzu3M@6r(h-ZEjya(NHCyn`YPwoY-|G4Z!bzlfq~A#*sS__C6&#PG^SZz% z7oq5{?A{;=GnSjmBQ6dqJjDo|oQVh>)a|;yDjcP%s?{9wk;9tcWPHZ1ax=h1Hney! zS`d9$%s)Ump+N3hMWvVsg<7R7Akb@ccl(R!J@4Mbe*DP$9yxYD`@{FOfAroYBmH_A z`rmJ|)5zV{OT07Y4(Liy5K-9(p+LZtLAgvaFZ7r=0id+b7U#jIo+C*PPKo@wST zdE--tvYPC2<5Ga+>7|o~x|(#A(zqCkxMrvCxMX9v|9rFDnf7bBJ?(I2lt?X7xJR4S4iDUe2fG)4ho?JhkD1!f%Z?I`HaHeW+ET# z#p4?)Q;*s2A7TC9cowYjo0KPI%aX^JZ}ewA6Y+Du08M=p>Kmo8w?fiucT?I_C~TeL z70!5Ic2c55*#N>sv(|!D1em9~`w#Dd!clb{Zy<<=174-T-ep;}511wBS#zGQz3XnX z*Zhi!zh3jcc(#`z1ChiMvA675r)OZ9m$lHeQkq+RK=G8IkpQ+ZV|;l|QC^FJTM(1= z;L%=>moufAUQ3E(ckxU-lN<2^>wyo>I1P?4^4F%!cZ*(yiv>WhkP*+gHqsLj>(vQD zi{5#GY(sOA(;wr=h=g+_44aoIQH@SKjKMhE#@}3IM%s@@bO-jV=-!#rCnz<|(xRwJ z+{RjV{20CsT&9p`cXzj96$9F-@Z*Lmop2Rlb>aoEUjy2Guue24nxrJB-w%E2&2RqH zo7q$%O!^>xOf^#%4HvSt6&BQVG32}qfZ(y2B;O6w9yp!f$K!AQ)OaW{ zs9Td&71XC7GnR;_Dw8lQz!OHn4vZ(^O?1}gqA$k3b?sdVYy{xS5xxe8W%Lx-6O7}M zDBep~U#cBHE{|*)Y(!_;rK^|5@m@gJgPTU=Lr&u7BZkuxC60og2xq_$9k0 zAs?(2HXnJ9MMeu4VVXF{wB(T=4LRyMH|R9Ffrkog872y%F8iFI-U*3YYrLwZOIk)- zUecj;w^mA;?};OlVyIFB$Vt+n-5-Zj5MLIIAR+WXi?8t^GUvzmBuJA58mjSC5wU&w zs=&M~(~wg<+baIH?rEBS)J%wi^Im9Zp#)Z?-_cdke4CMw4C9Tq!Fcl~J%)6puiF&F zikpe?$Bdf5J;x#U!kZ=9ZJl^Bcxtmx_V#`fN6#faxm?dBY)|RZ;zvGGytI_dfg)gC z&b~{M*m-Y<%_!2SvwuMu3+%l5q`>nF=}fbkNf*Fsy#KuVKjf{Ad#TaUlowy?y)%N@ z>)}`WF33`mCj$p>IEB)r06ar*xhR`8!KXwu<;jrj)x1G)O_XH)L;zvDCQ4x{=>cqE@|I!W@Y1q%;$L=L;$9pK@ z_u(XH@VsqVx?yVgcPep5%S${$yEUEu%b*1v{7>+I1ECqOAhY)%MeS3NNx6g$kW*y9 z{%$aJc>Zu|(2IYb=)>pZ58j_Xc`|*!_kyav;9<;1K)3D%-J+Pcc|ZWv79=$ge(N}H z^KjZDoJQ)CF*4(U%K-{0m%;|6cAaP;#|?ZM^9a*}F*Ap}L=%m1;s-$XY9lgxN1;;i zb2;zgn=Zx~{&4bdAl;+0>xQ)0vgY&!66MO}k#z3$bvDZTNT7?{E>V#p3;l`c5)?tmq$NH3Ed}aX+2coIDfj}!MtDz# zN)@tJr?7;~bTPyRf?x=x*ofeOn=p|H74!h}L3s)BFBd@}!8ArmArVa4@&#Bq=1(sE zoSvI|Y3}3#cWUkwJB1Izaa~{Mz9H4Vz5|3E327cmnDgObtpdo-Ac+SzYN7IL-@NTJ@82KKBoZ0GT?#mh^fBbMoc-n2y81GyScAUog~-($snH-=cXEQY zf5I9=JFYm_S$tn26OU&e**5TgEJfrqPPwH193D!P)r@218vI-UqOg{=kkp8hAV#zu z;yq?QBHYqM4cHEmWKY&t-E<%W$3sPB2Lu%<@~VrH`^Cn7k@tVs=b!go5wuuT zT?JU8P!nC>Sg-3Ff_hyT8v|2|Kkg#*VHswda@j_!8yWDcHFSl%v`B=c%zY3DiEHqR z;|&5_7+c;mIMXwd>D!*q@2CyV%na6cXOdkzIoY!=4A&uV-^$vA z50B;k*6|j7{gEC|Ir-{ccUALw67YHMZtSm{vA>K(J|MDyRqFI5DjrMi4+FHFxUS=#KFS1044cG%-h)v8Az(EQa-(YOW z??4hc!8jp^#3YbNVM{O=OhOhp28WoKOLAFS|9igf)=0Lw_rL%1M5F1huCD2><*W0Z z^Pcy-2eK2@F&re)Bux}bvDsL>HyMqy!lqg@t*UCj?H#$^?Th4fLn}DG!7JG5WXLVW zqv5_*&;GlU0Z*h{*?E7~@rDMGjk(CKqwgWtN?k@&pllwZFRCLUg99%s+;q}j;9T&% zxIjwV4^C(<5WNERVkxg4wNyE5MSU{~O^?A|`8%O3$<^$uOl92Xm7VS>DqSKns=!i;N8>eN7{0@j=&38_rPQ7#Qh@fH9y4A*W{k%C~$ z1<|=w=u~-SNhkwlS*3Y;0W!Gh;*na>pNV>F1%Ec`{i){hXrQYSl-yy;wAnGO2TLnU zruQ>6Q+&p228wCd?|HCL^F}lNA|A7s8EQX35w#zGdJzYZn4?sCx&ouShH~VtYg~oX z3CNG;P)r}eCZ;B0lVNVjcZsF)au7r)eS^(2SCyZXRhL1%Zk%US(GDf8X@Ay6VSdFi zzGyi7;k2SIQb(snRmltu1$g>(Gi{nyPjiIjuew_T^rf-az<5NYwm) zqgv1E>+ZgLoj&`2W?bKJ(@i&A%DSd~X`FwCeFc1*7%{_mPpC448VFIwjM3@Y1+{cQ z$^@yVJeUr?;HlJenVCXOx62CPVo|@xE9)C48wZ-UK2Wm(s>$e*VMCV;6ch+Vte?Kl zqbk>`mm?5mno{*yf00Z#cNw152g8kw2Lx6P$UK^B0OCcnFQtbRBRW0P9Iz^=)+P&2 ztq*ri1$g8Hu-=tDh><#Gljl;n*^I#NLBE13bg*CdnZ!S{sFuv)8D$)K00klT9Z(wp z3bi(n=+9585L$rlLalbP3hf{M0LjF86c)|XiupyhA1aZ^mnd8;vR18bsV!alumw^K z__w8okD_zD8NTKp!q*(8eJ&DPnX~T@abS*xQvOJ*nhk%cR2!ds;_CLvWhl zMH@xzmyA5lPf=y?c5vP{0;_%lI_Bam}P*TG0&1JEk>Q1eSG${?MC2MZNqoJd}Sde(XM+JHnaT{ck#T4+TB~ zJ8sAdOaSB&V4V!rEH1?LiUsB88r;{Rww!V6+)3XZ&$iA?1We20^LZ@Ov-$-t+&S;g zLyZeJDSq4h(@A)-G){O@qfIP^$^jStfwfa{o(U_4H-wo6n?WuKgP&|ST>Wq7tIe%D zn-k-KKy=$oZ||Dvp{vv>aUc+uZL2hY$GWw?fT}yOK&CpH$!0gZo90&U7@nHil!|+F zXJ)9pSuH^0*3w1Izj{ZbG8GI(_2IF;DurCQN0(!+HfqKrE*TZzeE+a}P3&HXluu~i zNXhBKuF-6L;h0jaL)M&}DF>WTSV)Sa^?WdxE?XWQ8WDZvL=1HWjxP!n)&|2q--)C*osTgsED8KvzAl&aoR6ttMxXs|PV8`Iu zqpph{vCmisd$EH3+l!L?l5M{vOD_g~Mh^k3n0udp(Eq;Qe1~X=`!#Jpp59?)1w;I8 z%ld865HgpW=H<9Z z4F|42jg_`PKF2Xnl-Z$gkXnaR>~3K_OG_<`tOrk>oIiGKKE<~!!5;0WZK-B|xn;?g z^VpchLaFDT#Ky<5G5#&R)7)1e1~PXHhzU((5}CjTl&h7Is-dKo3Ke&ZT`%>sz$#+BZkr>%V)+ zMxDRGy}0T8=hz>?CslA=CxD3J_;Jpgd1RM(i?0+FEQn==o+DMv9dfNv;$E`y)O&KJ z(ic~qEvCl@ z2gg&1u_4!=Ecb;|^zwV2K**a=Cq_pn(DDw=8x>pC#%iE!qyD<1&(yBf=_)l-9~N+} zIR1w@3*mR?j0PLX4FNMzfMH>w280X4C=5Uz3+NNboihGR#crV>`dRXo5?ucli#CO!D$EVNht(?c0eHL)Ck*Aat4JqoXWh8M8mt zwRA+4Ihodv*1nED=CViCpvlxFSYqWj60TpC?z{h#il|DHmD6%SyYsjl@QL!pd44^qe#>W;tk(K!wpgKYiwAPNGgy^(w9qEf$#(dhDil=RtZ|uf5Z=jW-#Q65amb@oHy7IC9EmkpZv8lxN#ExQ& zuPW}aO0I12PjKTrPVdHtCR9j(7J#|OC%IXocZg^S$I}z2h$s;PiE;%j)uE|5%a-EN zNWzS!BG$sfPsU~!Vs6?mEDBf1f>mM1!a(4>QQL~P_E9f6wtn53&;DMv+^6~f@H@fP z)?hFVKXZ95CiT9dj!nTyBb6G2oZWjTOc^bFe;&F}$u0;AZ4n-!Jv|l!m()aeV(+&z zZq~m2pU z9M-8r*f3Y|yRh6{{T#YO;{Q_n=}h}+3q7IlrUvakE)0kVfV7>Jm}higAODGY#=@v9 z!+{QS#1E~3RJ02$6LkmOfygRjTvD+J&T@{u49*pLT;K@HP+SR@=jSpR*%`_vAjkfN z-ee%-@13-RxV(oK7tb}8ibXj%HMyPS+TDphyqm-*!u_xWtau6BI3Mw*d3KV%PFbET z{`$tv_+(KB;2N^8o$T$M>}3ybt~VYW9FWXnxmlfx)!))L(c6m|5}()AhsY2Q9TkWo zMNqhFaK_0=YsXdmVA_L}a5wgT;7Lc__q)-w2Y76)dVQ@LAC12vs;Vx15#4C1 z`>7N_lpmNKpP3n--4I8vVgvao-S7P0ej{87{*5?|um6o_@oiOn>+5|Z|E`e1zZZvz zWT_KCkg&HI<2iUn2r%s*kIm_jJ&Yp($z&xn{wjmWBhrZrt1RSo&(+=6{ zYyqEf?&6Pt@Wlc?gUXoj8RW}TFZ1JEua^b`e6!9urZ$8WSd+jHa)O6gqVGl|!4MFm=y?wJZ0p#b-xhPsmqwxHX0ELva;n z-@~UIMw{u2125DNflPz^Mz5la2K#*jdV}&)B8uw8r`V@7!O>a^ngeyuD-SZPOtT3Q znu9)3ycQkP*|iN&`TiIM?%E&Aq9|6z&@~xV))(iMqJ;KzGqn*UOp)uv_u*b|qJ9Nt zRYjT{`SCJ@BucoWI40J%s}HGyEbd^kDY3pjEUJpchI&!RCGV0z5BwuZ?HJe?1CybG zU^fF4q6GsA2oeUg%huNBexX5&c@fSqLWlTHs9?{G)xOoWz$9Z#~IXs#81~ z;t&THq@vM@v;^<8pgK)QcF^3-DLd>xydmq|?@>(oBwsL%cP^aoS!C5kc1ZQLPFc1z zxl*Q;zO&^lLT{jKk_She*H`hLR9*W#XA0TirEz7B<;I2GtB z32HCRE4XI3fPkqRVVSyUa!ybY_zO-MlJM+*8b^jhIe!p8xzO+t1A+|d6T6>Kb*uFi zRFbVu(*xQ~N$E8qJgjE@#|E8x*bU=<-5ETtqc`>lb-uYzluK5E9;#GjRiX!+p91i$ z?*QL2_?@#C_YMG)5>1F{XrqkbMk*tH+NHyVQ69v9ay6y2{1eQDm5YDI5H>9T)W-PV zpvQOO5#SdGWZ^@hFTeqOfAtzcehf7=mrZ{}K|@9Gwgg>6`VDk9dIh~5R9hn<_{-lr zZNCiK)Av<0n)>ei`^57-RHAd)sDi>(l<`8i2OlT5UqPb>aA)_`>%O-f!ye}tKklO> zAR5q;Nazrdqlh1>9fg^krRj;dy5u=EAyD}bg6cs*pRAmS3ES4ri|!KoOoN4_E1#Ga zra!^vm`8h#392krt3Pc0J2}=aiQ8e3Zz)8nS zDNjWHl*CTX=rM0Lw+1({ii;f)LW1g#B@{Qq|~ zhXR%eLWHeHu*7z~3yr$%82*Ur)y0|&@o^Pn+A@SyvWO6lfj40|qpCYOI-HBkp4Kx$ zekIU^L`WCPYjdHZ>(}T$+|n}#pKuO-Q=B9BSn7EX=(P*vh|x zt+X*us<4h~nbI;%0Nz3NSMD8+#vSg*wjMjSRi3Kv+*zMmf9E_h!gtd3fJPy&liQD3 zwxgFEYL`OMu45nB*;EJ#dUUKoS!oTEbqVwI{5+C4XjPNKv0s7jeiYwb2lh@VHcSvm z23^4Vf)mir(RYw+Qsn@=&0S-JWwa5JGIfl7vhwWF^{ZD&Xv+N*J**m9nNTF3q?qyg zhI-t@GA5U|Y%iWXS=?Uy`MS}K${IyV)24V>BlXr(>*%grXD3sBe=2F?l_=j9^X=H- z`_WA|`C@MSxEFdJ1A_G&VMNP1`sloVl7zR(zlQGiS?)yB_QLu9JpX0X{rw3t5E!?- z4w%z(Fy%n#6G?LXP{f1NPtWjpK(rtr9|$3^u*h;8(tY{ks~+$e_kR6RLrzRxJAE%o zNG!_^`AtnVQBE2j8j(HdR*v}{2(B<<7$K;=6N6P*+_v{Y_wb&fYxd5n&7%+6@GB(v z0m%MpLEjf{mn<+%kuAX)(eAq4G0>qB;%cgT7afOqfj>ZbZJ>s%i^^lZpe*_YR37bO z87_M&%-zQQJZXO48QxrhH?*V93oVx;ATw;Sb%O5g5bXWGqdt}Nn0kOSlDZ^k7!(L~ zC%Lyq`rlR`u3m2_IfZ?4AY97!&Rel#?>}fIox} z_#4D>AbvGqADrg!tiZ00hgaSG^s2Bu_t23b`wct1>gl^zh2zEGk%wqM-f;fY>;$yf zI{q5j6imke`2jW|^hb3#ASYfG#2)YtkBsgzo4T8-NHS=^)xOQ%qX|oQ@w=^eyW=hP zeIdUla8UJPwz$S9_fF{Xq}Ssnv42ZA-V^LmM1?&?l(MQ|*@st7th|y%AN)|{;b8HZ_monn`2<6`}~fAk4~7&My`;fUEE>31DyM~JTyw0k8t z;s#>A--VgTWh~V@aJw`WSK*jzz-!w&VK&c$HW9PVgSmeg(R&W#l}P$4s&dVX=}#M}B@^S!mQ(p+)Q9eI=sXM4;#d>2&6VS00QgU!53nzz zIo3<&u&SZMTu_&qYt(r?Bq|$+Vli)}av)ILyo#xnAFjW_=jc+3ZJsv3-VL|@9qyu4 zEQU4I#Nxh*oc|Jg5js@cP_eg%q5uSwUP?(2sLq!utVC$QJKoST0W~!22+^TuY)gO* ze4iA(M_~j8Bh_#NNhXWIlaAl@NM^6;fGKX9gJw(tcCNabYpgIlQUdpO!;(CMx;}Ve zGoR6Cx=KX#qZ4Kn^a~w!&@`von|-iWtKFmfB##ua`cNGjRy1SCV4hw>Q46YW?y}I_ z5Bh^;G~6od4gi1J&X5C`Jo^mnfT9j4s@%!8mpU>U^9UJRr?4x)TD$saZC*67gxZ-a$_ry= zgO)UYiNi_gIn?!&LLPh8{sk0EaV~C2+=+Bga{WlOhFx&CY(Wn9%n}}`Z7y+!c)LCW zjnB`pIi!7KG4zc+>AF?djqyh;oNFsh5;yiDtx4obJDj3!?i$t?xOV%S+vb<&sWB9a z_+@9?Y+P!&2x-le)w67Vo*ko4?WkHpfASQ1+r(lg=I3#c+_pc2xfnWSMWqbyA8r(V zI%jNPCc1rh?^B zRCTdq{(;`%8M0+vtRPG|rXpg)POwks4J7ekB=2Oq9zELcp!~ekQ}8>Y_#IYNsE6Os zi&*B;!Bt+04lLmWZ|(=q25B7p0Qv!xLx|x>2uq<`rA(}YMnvjFf+~G8lCI^d5)`Z8 z_``>YuMU_Qps&oN{_WrwPcAN97pm83R~rjZ)5kmZvnmvmdxY`hg1LQxr>Ty_kd zhd#hN4}E98br!jb_P|ihwVl$jQy}`OCQwWG!-hQ@BBHhdZxD8i!M{5XT#a~D7$il6 z&@}b%jx^+-KsAY1%JM_O0R+Rv1lqooP>uu}UPEe=*9j=YA}R2sME0~PrJ}8GMpKfB zMD=h{i0zIE#bL|;lt1Z5FjitN0(puhIbmGNgz4VH11dv9Cg^(b(=}1C0D@Y*wcu+~9*=``2&!D+$ zB95`x#hgm;zaSE^@e}9@)=ozPh zZV^maq3Xv%xqv5=3wet!8_h*R)>wLQ*6YhwdS_W8oJoXQKa3V-R&Yf$w6K#Q)gMmw zGWLw*mhl1c09u!)Mg(0g*1f6x>QPZCRQ6;dA=Edfql)4dKt0b@jG$%pB1uojq2oGz z6^?z2@QMjL&x%GA~0DRU2hLef9A;-1Nheub!w^+{*U8fq~er2dtBw<33+ z3{quRAm}9hK}FB>^;^F1s?q5ObK6@_YYDz3E-}Wd|NJjdJ9!r{(hOZyigtl%;%YP- zB~^xRi*z!)+d5rX_B;Z@V3V23T|V0FcH4@eCxTLs}UQ%6}!FX`;eDg zt69&&nhRf!i7(7I zu|Gh^p{FwdyMRz_mi@I2Qt^5KrCC?P{QKVZIrJ#O;AJd&|L0;x_^pPI_$`8OQ-W#z zwQXac3V7e9DPQ|ID#3-a2~8o0$!L;v*Bevg$834OWPeJ{t>Wim)A{cqr~N2=^b*bm zJjD*XtPXZMiufC1b68UI_6ehlH#PHvzLQ%w+{1r*=zrqV0@L~Zf(a2jn z87MWfx0L%8`43jwD$Kn09>2Z)QE0xk-W!n2402n6alDE^cbTpS#lAmcUxsaj?*ep_ zPzRt5B1Qz1nsB4Qgbk@)q90+)Fa_QwJnnLIfT zC89NklfLrkiv$z8NqG4 z14^`>MqI&!BDu$ID!agxK$*g?#7g7IM9{x?Z^<93C)23IV`4dg~a8MkK0`moEJfMFJ833$QmyHqgyp_$05d4G!f+vs)IJ#-+cDT?8 zdBWj|X1x@Eij}T!kyv_kCUe=_5UcHK8UZtS)5^=D#nHL`>7d166A&)=?jXEp2?*kf04?j6|EL9`Xj@30P&qDk)Mj32lYz>#R|Q) z(9MMi9YCzew}Y55fj~&x;tn7*=2j#qZzVv6FQ}?;+Pdg9e?#N7a@04nt@%XWf19)4 zrcJg{C~7i+PUJi_HiM5Q2Nd8&GW0iR7f<39dyv2850oy0$DInDZaNK^g1aZJH-AfQ9`$aY$0z7*Ba5r)Id0?Dlu7O^=N8jBo$rhb*3nom~yz)HP7qZTSo+Q9&#>QMPjzrM@Uja^sr`exBV19S z`W!rm!NUJ=ga1GblbpK_evZ2kyk<^jLj55kcD1Y`tp?5Httgw1L{La?$&kQ=K$;F- zxC|*UT}ClW=PkhH^j_e?TX$`!RyS0A!xPbHX8rb;`gaGcKaMK!YJy5s(9vqx)%5nK zVg_L`{tiA=h7w@=Lu2Slto!j9)eQ?d^~sX?TjPT3`92ANI z@V^~W)BKdCgT}Ff5lizIJU`4E%@Ph1Bj@G7@PMw#G1+=KY}~9!`pcHR)7I@h2|+Q9 zo5QlIp@beXhG^3qje3<}miMTmLx7+$ByuJ_XA?4$`8Cta+l`8U25Fbf68zyQF z{f;M>0OW)GOQ#mshQ;nDGzAt7;}_M%0R5Caa{L$}UWCFZOW_d;{LDbMoG*Epa<%3^ z<5v$V%wrnJuz+Vf8EM@SnWS-X1=LTUWhIB@wrt5UCx+&362J{%2@T*N`H7;Q_Brb5 znM3|(4zmWKxBT0pV8rZzTPKMsLYcS zcz*S#E-jqH&#OLriNa^j!=*gc@_wQRz%Tp!*M9D6KNFut^VP+l*G4hvUZlY0!m)Sv z__d$<`uj@fqH{foXGa=C$dnWTqN8T~Lg0r?O}1@9I8e}KvUQ*7r1zYE8&d2H-~^!a z#n!?i!Kfhs7mz2O<&W&9*4ZDv`NRoEa0g6K_1rlu!Ca(v8N`jkmUxt6F&ry{?&Xi! z?;<~(hX;pf0P0;B;qX?Vu0R5XoY4%|k;c9krHBE_si>s=2P?0lG7xZHtwOm#(y0uM zh7h5kM;M$v+%;H+QOK3^xP9PkG?6?gm)I#EdV8JT?$OH|Cq@c>*~qp2PV+jxtk$OSHe%%;VS7Oq!?{IE=f|{3cxV}Medl9 zvA1W(AvMT?v20L7DV>u-&7*JMr~70nzGAvQ8e?n4O~ic65cAi-p>N976@A}->^^Wj|2a;^(H8>KSNMj62&P7Z2l6r2sB z43K|%$z{n)q7xCF)B$XhrPm7Y# znHK+t5VK=|X`!YmiJ3kKC&2ZjDk-cMBy_k`450fOWHC+6P|)%c`#sYWVPA#zONczu z0Bi{N%j=zbMqD2XWnXXYuWbqj%6%LB{>gm8t3}g;!Tb+iyNVs&v|;D&fLv$}ru{=1 zOir(U4V%`*cc@1)&Ci!ul_p^B?oj8fZ;sUw2gJ{^v48n_2J+*P`PRu-kRPH!|CO-u z@xgbTX(D4iD-e&Ih9>3?@K|B7DNE3<*#t!2gue*aFoFw$(TvN5<0p(&ZI5oS zA82TE&=j*5DxvWQZNraA0i#)YZ$9W6tSX=m4ji6XP|nDP1s+0GQYVsO6od_o<=~r$ z1CpzxMmDb)9*bm?4V_RJR1KLj>Xba0a5^8xl}7R%UWuC?1EvBY+C7?2?t=hUX#fLm zsH}{ZcEw|YFyO9>D+#54p*$-Jh4LMZ3M3cJn5CE*Ra2)@A=jHVaysf0E*Y2mE*_WQ z3$%{|r+~opi;f&A3%aj6N8V_{7YE?Z|9~|5%O$?1UGv(+iNSr{)vjP0kR@=bEJT(u zcgS+Wc1$;tEyZlnLb10lcpNw4^MeSNl7zT`^fk^5c=|pRh={IY8U8dJIJBHm6vOZ9 z4C}AjX^6}^2)Zp9zFsV`A{YRqkK~=`6}<%u$cN<}2*ku-L=vPhU}NNFb!iBy*C;%3 zecln|sr-r$e(UnQU}3BwDks)gz5|ryK@#S#0IB84A*6Ts@1AzqNxJ?l}fHw5Q%*BjsX*c+9jR=~ez zHsDy}x%Y{3Lt<_bVlS849`M>OzV>uhzxgXw`N78aVYsfQ-Fxu4CNGfP4{C2ej!vgn#gUn7Bbs{K?&?3 zL<0aJkd^SOt}hcz2eNRaP>uk%ND8L=YLjd-F*}=>oQluP#QVeHf$>}_Ys6#dCE~N8 zG$6!+cG;36=!W78>SLiH86qbbmP#ycWC{?2{o356oP4bbQ5D_B$WgdRJ=Yo{8&Lwf<$_ zWHLGV;`_aK@7c35wL~`PVy!ih3PR;(Xe=c~(Cc@!vU;-b)T!a^JPG5+f?67DH&$hVm)Ipry{V!75N~hSFTz-|uxSIkdXyczufM zsA%}$jm86VV0vb6pCl{Ev8rE+WKhi&IT}brZAbGW#ijb}@ijJ>4~}=xpU`c5mZ-&M zhB6qQa{t~{P45Sy(QE{VM*C-?KiwD@ACidmhZ@ZSc z`MjbJjnC}J?(-bgHbuS`+q4G6Zw+i8tC%RQDS4h0*ClTXH(lI@)XE~ z5MBclg~Fsz$BL2tYF9AVW^O!ncqTiujQgeJ^Mogf0CiU;m`3(a1`(C zIW!umOyM`UC$RSr)=kp-y+OVn=cYS0Z6KXEHw-08+&72I48=W=j$mszzDW5vcF#t5 z!KmTWya5mEIb(ZHLW?F=We;v|y+}?3t9b%m?c~xD>CfD}xJc)RY7SopZ}L4oS@0$+ zJ(IWsLHL0p&5bzk#H1(G4E3_)+0q1}bRyrb|5AjFXs@V6Aj93cyC*)riX7C1ISH(emURx7yR+X zo&6K0gd7j{dHG%s@G2gz4X4(*JAg2V11LI`7$Bs zC2X{|H>~$bY?@9`9#SI^J{~Wu9WG^uy=P2TSfOkp;`S+qD(?0TzyZzQFHtRvAoY+mE5MG=;B_=O{Jq$CXC z5lrF0aM+*wVk_4`TEt)P9gq0^*|AK{@244CQvCj0X6#zCx-OGhS2b6#H(Yi96-^Tb z+NtuY?YFK3%`M=CtQo{l6`vOX<`Tql&`Zcz*#W=bHIf}?xv6z+cEt#1`W6RPl0h)LuBM+Noz(}>(svEY4l z?XoyWe~)wIw&Qi6L4C(6(mz%0~GWndbD9;4jM;}Ygmayg4p{S~hOiX!qltut5} z#e!6kwBS#Inp8RCB!dp|5=H{^!4W~yeWC1cv8zTu0;Gda@!Sv9H4edOw(rPXq4V5S!qqHY9}b%!na+2OoB*s<**s@NxBiho%>+SO=l9n+%w;EW=aQyG z4{2DVnHAkwBx=DM*nt2e13bkVN`A>y-3iMXiEqp@zv!t8<4qUgpMh!p|q9~fpKI}dRkw?FJ`@M6hz`$Nvm;^L;^zV%Jp zweH-wxHvQAq@bwD25C-_alL+q{cP8PW?%{0mJQ4&DnkZ&x%*5|I<5EtKmLiKJBJFX z%TjOH^tDZesgF+`S@Y>nuPN;N`M&)rh{F!-8N$1%BbzrDrl)UOTdAxq?B9>`A_Lp` zC*WrxQ85>WHn3dw5B z?OzX_U+@cMf(CP@oUsF52s575TH) zs+|>c_0BJofX675U_AS0R1;W@DhCr1x@~|t&6L6WMJSsFi%{MSTA?EBTo8Gqm%y!x zb9{@MsNmX@*&sx!4SK*LlPSS8NMJW2DSE)$SWj^qx55PLfQ!+IW%$|%{s`6p2s!`Z z5m$TbCi||JZE0i^q0p6gOaAgIV!HUFm0Sm6^<$5X(R072un02n`DzMh{Ws-LB^+BpqeZjXit{anyGAuofddnKGi z{BlxYyUISynjVio8;ScZG$sYK2Tfimn|h!Vr`Z9o<#T|7QFW~b4hjH2u#;^spaao^ z7HB@x`aoM8rIH%Z#7#BB;}4|e3o6`BAA2ekYibmErL$xOoGbN_t`H{ zyQ3oKK0uw)d)n?Gx}4&kLh4bWb3&*w;QCpq-K&nfkJtcan%-}R%$RQ*Y_U#m$>k`Z z8>tOc(gS_E;Dms0#zX0B>z~14!Mmke$m#3L*Ic89rZiT#FILja%%FGb8amcZq;8oi zYTBU3bJDhuxfE0*c+^R?=`SB-mVL7Bv$G?Ia;XW^(S2b9$BO-?c;*bS;3qNH!HO1X zRz-}3SgXvN3%4`n+++|r5l#ue*aRNQC_^cs)&deiEZMNEQmWkNjY-=?+rBy{32UnJ zij=XwhnH(1IXby&t0ZJB+lu+A(~yuH9A1m9OQ7KF_E{cm#Wv%0xYX>O3nu&1mR!I~ zU#2)bABN5mS_naF3KN0Ac1BbOo0F~UM}IHsk8H!68Gs+L8lD8Df4$-`x)?_qXb6V! zm=edJ*T&~Wm|m6o+K`Wqv=5>;JOVmF>iE~fH{DtZdxke|+BxHQ^6CGQjo!(*vd1hZ zASrZ7#aYf;e#M$Y_?lfN{aa5BSU(`e80FDij z4NbEmvL>Wi(Ii!&ZgLPc0T;glD%5$0_XD7y=;A+p)kh7Z^&4pa)v9Y+du;p7xCcG# zlbr?IhmruCEfde!EM{3t zd&Ppco20?&d~yx;;Jn;B!oI zK2^IuY8~Q+AabwBqG*oE0cnq~>l( z+TD=l#%;2ETU}A=#}wrlJ>R3M_e`mOEeqPzpj@mYw308}^Ahi4S%E4vq8~6=%hbQ2 zP3#;Ccl85`oM%DN3e0-9g{30XEkwR0O@nO`0M!_sJhSj1#oXSA7Y-b2Ygx64vS&HeG((86=i&7Gw9oVOK9QG=mW z{}xkrl4fPRF>0n9*^HnB_yw#=nWK&IikZZ!e6K%)O9cB&y>4kNsqhXPJ!su@0W;;Z z5luyyhr*cFs(h~JW!@Bq(drbAw2281N898u>ZNbA|Dq!xI|*U1=7w?~Oq!qyh4hMH zC7~O}>b?B~J~%lvp^V+yuVm2Dz+8W1a>&5~d|W889)wzKTU7Qd9w=93bkRmRmX;J( znwnSXH6;g{dIE6on6w#x)S`z0gqQHnm#;}Etnc|Q(`J!@0FuC=!wmR0`gr35F30P9X5iv(r#zue08%RS zuS46m4Q<`ZABoP+$`|+u}Hioo&JDh?I%mQARcN_d0(yGcz-v*|+4M3Ciav2Nt|?YBnW%QL7{wYH=&`K_G6x zG%Y8uB3*=(ZtF`=+(+C=tqGo@isvGHUao%* z--FkpkzpYe4l{TXXgo;<(mN3#9Ka9jERIGGGB)#{C}hj zpU-$?boFZdhcb0%Ipqw~iqSQWvxYXf*q>LyFrQks3Ss)v2vwD}_le9r*imhBM|%|^ z1eM$K8RSO!F11a-%ckbUbE7#;LFbl1JMN3*-aQE2Pg#pQxshDwE+5hq1TS_pmy7OD zRBVY>h^~)b?8)U&cZh&V*YkLrY*&{Pp<}jB6EpDwO6kZ5%{cF=RA*qbXPs)D%vYU^ zbBB83w&pRtxNa!L_RqD>%#HQ-8u2K^GWVy#B-+H5Alv9|Edl3wd%d;9mgKOYy|n|$LF}9-7xpU5_DxO$9;a&=>u3!qxWlQs zg03aNo;o?H`5ZA@;Ng%2W++dRw!oVYi5hV`JFWj=WC2?i1Pg{9WHg{38M)0pcn z(S6jpMwADk&+Ez-U8p2v^P3JI-gJ^4uD@|JL_yfG!|y+g|E;rlvH3>$lU;0=v_D>> zwTtVpT$Gq~+Ppn7qo^%;ke4MsjZ&P`Fs+@sL=3n~3KJ<;a2hz=X=D-;hytk|h_W?E zN|4*lC#k>%LnQ!P#%x8E1nsx7bdDe*<}j4JqMBui%=nxYK*a`V1M8L+yzinl#NMf* zkY$d({v2O}QQtaA6_U{9Ri!OJo8wVz$mbQ;rIJa?MFPM45%5dcdYv^@)}Smt`)=#w z{yW(oEh2C9vuf+{yZme)yy%VK=HfaoppNJy*Cx)OjvA5Fr7Vp`wf(w{CXyAaBDO`u z!H<`}<`*6p8(6K_UhyE24_oIr16<$}jR)mIesP{kIpxGwb?K+WV5 z*OxjDtwpxbI?14}dA3?zT%Hp!3hZ2E6BJ>t09@@ok4MaaB zdmXRea71TKS&5Ag=AdpH|EL>B&1Ek7mMFTa@%^AWf+v8{VLu>Sz~LmqO@OMycv6mc z40sA|oG?jH&>I4~a(PGMHg;q@{dzkBg4CsZ;un7Tp0wwMw$@C9@)6wT(Ac39Qw1hS zh8yu3Ri_f4rVWQ-*AOp6s)U!&K7#amZ*{|lYU`WjMxzXQ+2U+*c!TBH3zR`OTyz7{ znqDl+HeYVA@VaZ)*EiR7PhmD+?-y=H!8P=*x5%Xzn`QOR#|}Ks98GJT13pz&5Tv2CSs5A=05n!qT*wgd68-@YyM$sM zzNif1iYdUR0jU)n?+|RB95<4wAe>dlfsk?3a)0d6L%QcbWYEkGsk8QwiT;bdy#+H_ zG!iKh1tJOBYrh`O$mmfev(|~b2H)aA4@Y=^G(L3L{{MvSx7sY{0^)P<@ky`+UI!Xm zGV-Yj-=Ox34ggH$+mzYx6{|(BEsxEO$!H#Q)awQ$%aZ40DJ-IZ>l;B9_`^U0 zzbtsrU^{Qy$&7c#L&X7aAmE)2hTa31wOD{O>k81?q-S*3bI61Lu3k!$Ye*?b?BfjV z+@HhF8HfpR=abr{*lwK@Xj>b`y;I^9A+Lor3A(x7YBcO|hh2{{h;|L0nn!62#B0n`D70P#ord(A9+ShaAqBI6KsG2jWi96Q z9-2^feXi>la&E+FaIUX{?Ipp9AkCUMK@|VPTLUtR;Rqu{K?wKc2PYi|Id#7rB zYp)vEJk(b!Pf7t`3k5b3FxmR4uUGHgU^suh5F{)R36Pa$bVSs znM1z5j5{2iAJrwSV5M`N^^0td)>GHEg>!5UNqoAdtmg#(8~$Dqq6JImPUG+R-|WL@ zwby5xjI#dw&p|(+?c?o-ca}j0uLd3UO~_SUi9Z2=-p(t)ERn-R4B{$=EbplZs{-Bp zCemc6$|rjV1Pa2I%i$q~Qk}It)7Hkbx&#fO$I)V&>tm(f-qKiob4+tKZ29Jv)}y@Y z;MvKcky}TGCa>5~Md3-IdU`mMiP$lF6bFCq>;1XB zQ>#78>kbOT>vg1Z*56w#M0+FE4F@vA8GKBnj7x+P9&6^pYYPG$LouHw|3pXUDMz-JMb4;{x@taOzWGc}B z=7wv3D~{_uI4%q-nL!{NLhmI`4OgYyqv z%2?}#_B{l(J>)Exy1H8g#+K>)z-aR)xYc3uMqtk)cxoV+VWXKFf2CU-ZlrYiTpU5W7bTS@9#$Bl#+Flu8eXN*-_Ze*yA zGPB zZ$sPHhi>c%Hd9i=rYGz}N=Jgak`d3Ua;|s9=8l(uk`+v-exRa>AS7x=49i8>>BJ!$ z;IZ{!cy~?0ebdIa3jJ|BW@O?tDI_r4zMe#!a zg#eI_QQX;>QQ9#SrjyR}CIeY(M%wUW02wxnDuqNmpp}Fg$$v$610ig;kc|**+1TNU z|8v~a`pKrv{hRTBWBwd8Gg|#1&5HG9@@GeU2IMU z1$qD0A!N57Jh8NNq8#>Z^`NX|t1mpFdbUWTqtX@+s`PPu?bw5Ojcv4}j+WVkpS(H% zX$KfP=Z+nlyOn|r5NA3;1`j3{mzEY0Pd`QB#+$ zbX~gso#X07uDb_-G`R)s->%`Isl5A(IWJ2%o7^k|#^C=YS=YJg_xJF5T~- z*Az9?(@`lG910an##E!XkM&n?+*$|QBJSAV0Mkg-Vv?0h#873^TW(shblkYCT#3x3 z6QH$UJjWv%Tb|>2trSJj6j%3{GJHPotP}CmaYf= zUev&X`^lsXh&DkZvA#32H~Up34k`U;a9~tP1cN$sn$Rd%w$Ni*mX2sT`XT#w;}YQ< ztvvq^>~rAGQO#sXA$JZDzf`Vb4;pZaxCg|^ScuKwXkcC!F|Sw0*ymi=srQ?qu;C6A z3!Y8Zf^VZg6BkstB>(~u_9)9Nj`=5E>%-j&firEtnJoCT<&wL7tLvwUo z?0lTz`LCmC!CiCXqjuR5(Gn|lPl-)iIJ;GDDdn;z-Q>K z_Iyd{4nQ_R_C>VShG?R9BlNEWaiAa}kDN79Q_-n8WYjhplFup-%>kZ+jl!<75%z+k z#9(Aaf58v+G*R5+16fDY4@*ryC%xyu{{9}qRfopY)jB0D1L%N*hWx1# zQfWL~JkF8nx?mFkEaJjmdRFSw7}qdVzwD&ojPP;;Y=j0#G;-Rf1ZSjkH(U6l6o3T+U3fzqy^2atGG$^bIFSv!^Y!-)U`1;x5*38ZQf6HVui zxz9HJnv~UW{EnSv&`Lou1BjzI4Ny2lqbkTOWle~`$?0)lT8~IR@K!Nm&_#@nT|9rj zXAVBeAfFk)aqgnQ+~QE^4LphuK`kOTKK9;mEcTWP(NX=K)3vnIGRlxeiS zgwi+EzKtfz{?JGmZ3q+N6AMIe`+%ava;WuR}Y=xgS1n zmhVZ|A?Fb%Iy#aMRF^|taO9#?7Q#*zN|jqLFr7-C!mQNMqF_B<*Aa@M8!AU4)~QH3 z5+Ps?DtEvR{}+5<1NH-%Hz@m&>)#9jeCcL2*ehuC+Zsnhi+`4bvH>YT6O>h*eF73` zw^pnB9)BF469B$PIsX8Vof&x3U_zx}nF#`*6DNpZOLbRJ_F+~i)?hy_-sBgG6py1? zGMuY~o5@cLO%%ui*9qbQab%|(Z^Q}9%T!c=xB zhBa0=?TZa%rwYrfDp^`Ven6MA(bf3t2{c3Cj5kB1=~u+>E6+W5`tjIvt%b+gO_|g8 zL_hTOBd4eD`4HVB!#H1G!};R1)fgo|WAcG-k8!h%20=4r!Cowz?-FK4p=&F9JZ|)eL z@W!z@pvkYw`}1r{_l`wa*}gH;m^@VlcOHUH?2e6llHZ6V71h2CpGl%%Lr@EvB>2!p zK+=ke@L~Qa&6W5&=-6DEW1YL~*C#UATTRYPpj=KqfvWSREquk6C93n8L@(;U0RNgg zdaUocrspWEYy^-A8jC3THnJZf7AzbJXb2)@4*x<0N23hw<`H37g85w`i~_BHE{<4}{S=vrV_)kKdNmgQAU@JLkN-z0|? zUMx`ldv9p9Cu8e%UgDC?XB_f>)ivaLb7*d9_15LfQ z3zGG=66jsdI@LOif-RJK=$;#(AplQTSSdjA5>{Dcd0`Bn20!|K@Nq$Kh6BwC_-x3T zDUSu$K{Ol@g{wk#Uy^q5SO7v@lBX)0w>zRMc_RA|W^h~lWA<})2>1bE(_x$h=Pp&p>qTEL^#c^FQPS-37ziprRy5GFZzZ~U zgWjboT2k{@4LK%Qo_B_dvfzzMssmz;4-62YFDwd?KXJTXXO#dbRM0)P6P9C6!a>So z;Ijsb$x{PT`bbiW8K{C`dN6_}s7mmt;M1VdiTO~mueY>GIS1UHF^#%&r)zw zF-&;P4(4&{t>qPhsKuq62eLrOEn?7+kWsn4A)nt>cy0jed9N#K*4K7(+jquG%u)m) z0vZIm@c<(?&?6p~7ixll42lYh5JWUY03`+5-mnNbSp~p07 z_{k7mg7Ct zb>>=F(+uLFQDDS%#EuzcO>XJAzUK&*R$|*aiq}GZgyOkYfx3OdFIC~@dQ@@G*D!ZNC!QRZ?!rsd6WOpHN_cr!+b~n2RH~xL>9qiXI zkv#y0%CEBr*}K@gk=uDM^uylA-p@Y39%8@AJ_wBMB>OG)A@*VRF#8C5g#8cp+w7z4 zQT8$R7<-(3oPC1*4*P%D6YO`{C)uai@3G%!f51+m&%qx;xAD{LDfSumG*TIV!amFX z6p{aF_IdVa$P_=rz5rk1FWDE_m(Y{ouh|)}M*fC<8NGzR3jgctsAv5<_6_zdbOXM{ zo@3uee~{gC&c%_dHpB$&+K2=Ib_)W6>5avhZ68h@J@fo{vG(skJx{pn*Ya8 z@%Ra{=Klrn_ot}V`#Gw6TI{^g1J3}F1v~@@^?=}w8B6d826Ffor0ZC3)z!|kc2~%7BWIs$O(C&0FR<1l!acQPv{p0&>U+zOk>8`rF?x}n0zPi62s0Ztzdbl2`N9(bAyq>5h>#2IW{!!1=v-Mm(UoX^) z^-{fDuhgscTD@Lx)SLBIyp%71`d@up-_`f^|N5bRte@)V`lWuY-|F}JU z7ty=EF5!nCe)!>sAAa~p{*iy=ANfcAw%_>b9r;K8k$>bL`A7bdf8-zeNB)U_;-B~@ z{)vC$pZF*KiGSjs_$U5}f8w9`C;pj#=AZdz{&wf7>$=bUGylv#^UwS<|I9!0&-^q0 z%y0QEzvXZL7GB+!-|}02%WwHDzvZ|5mf!MQe#`Ip9lzsu{Epx8JATLS_#MCFcl?gO z-TmOYo{rz~dw$RF`8~hq_xzsU^Lu{J@A*By=lA@c-}49lz#sSnf8Y=Nfj{sE{=gsj z1ApKT{DD94NB+nk`6GYikNlB8@<;y2ANeDHl-KU->J4 z<*)pezw%f9%3t{_f8G7)|Mr3Yy8aw?KZo7VVfS;`{Ty~bhuzO%_jB0&9Ckm4-Opk7 zbJ+bHc0UKc{zw0#|Iz>GfAl~4AN`O1NB^V$(f{aw^gsF^{g3`f|D*rW|LA}8Kl&g2 zkN!vhqyN$W=zsJ-`XBv|{zw0}o$veaLI0!w(f{aw^gsF^{g3`f|D*rW|LA}8Kl&g2 zkN!vhqyO8DzW3*)|Iz>GfAl~4AN`O1NB^V$(f{aw^gsF^{g3`f|F>&m?9W60qyN$W z=zsJ-`XBv|{zw0#|J$|6_s7-$=>K-?z;^4`|Ls&=+x`9PfAl~4AN`O1NB^V$(f{cG z_La~5arHm?za5;k-TL)E`XBv|{zw0#|Iz>GfAl~4AN`O1NB^V$(f{aw^gsF^{g3`f z|D*rW|LA}8Kl&g2kN!vhqyN$W=zsJ-`XBwzFy7uPupJ$`eb&MqxAz*{8vpw9I&a*( Mo)UlS#?4!Q1Drm*)Bpeg literal 0 HcmV?d00001 diff --git a/examples/advanced/advanced/android/app/src/main/assets/fonts/EvilIcons.ttf b/examples/advanced/advanced/android/app/src/main/assets/fonts/EvilIcons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6868f7bb64ba71b131690286ddc82aa0f542293e GIT binary patch literal 13456 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�*Ax zeM_w>w)f|gvC?uZiG~neQe(6AMl1L#JhkL!j`SGI2^h-H#{t`pqX}R;$W>f$N~;Uk zssJOz^9%ix;2DjHMSQw#A(hTGodPHn3oQajNJJ<5n{w&Yf?AyH7qlaUvoK=NGNm)I z?=|K6K)K5yJgzx(|72gT>3cDi7X1?V-xBQIl%UAE6a+S7 z6i}c^<05JYWMsp_oCzrmj}JqQ&DeyKaRnMJgbyy*xNogV3)0Sb1?CUCY8N{?oPVjs zNW}g3Czk&cp9nw+iu?(bgg=R3JpKt9L@dqFbh77EPjWhuaCUm8t=OrUHErRa-Z|fQ z{5aTL%(~U*yA|+r6de2O?1QfZZ>eD9w1_Jh`37=y(kFscSXf-+&mhD>g6SkhN4pS& z9D?;!S+LId?10~dE&=EqElE4of(`+K%&DTF;6TWma(Texp_u6p*nTjp1>GMguF^1d zX^BN<$G`*Lhw(zWLfO9sTG~M^|D6FMT26U<0QZW6PN9xe6cCe0QTec7V{mCcJVr~D zV!w2nTlr)kw}7@#UdmMKm!}rI1GbRWqkQ zKyif(wQW%h(qb{_{T%iIc2wk+TU#`#Q?I*F+}InTvVn@IxJji^jS^eqqv*$QV<5jh zE-Fy#vAve_EvY9^Mz8Jr*tam_c0Vb!gE3GMj_ zV-vWqq0-c>$ntx0H70b*iAj^qC!?lDvE>TTr-Xb6wN!sFzNwcWd%(Zv4TmE=xx04s z?#!XEH@xS)18uRkj_hmx9gS$OphQK1?}ons2bwPtsKG~I0f zeYH|47pc-h!Aie%M)$akQU!)3MCx!cwcr%U7Vu)r7pxQr7sKE*NqZ45!Is0FoR4x& zAx>iswq%<9mE1sbO@g$n+i#Z&E}(@L2*RfA+i#baT7V^ha%q{V5TDbhX3+OZ_WgP! z4$?kW^`!K>_vIpcEAMg2RE?fdMFLEtKdoPgBF(_L%F+>j<~Y~Hs&fogeQFW662 z`9MNd$GYzB_Y?4P8U`v_-78}oz>W%U(pAu9cxU-giU4d&HwbHvFTx6g`@I-Vw4loOsd0y^aNQ_)wRhyCxt!d!2C zPRr%7GB(Bzae#K(_m#5K+6h1sdSKydf5Sg|;IZO!WINAc1ph94PB;3X)?phpRw3tn zN5$kly2j)0LC7xEoOyHPqvCqPHW>S;6^;Z>iM{*L2Yrlz>ws0Gx`tAXLLN;_+c=i`ly*fizydC`9>@fKawT&inIz0noMP~=&ps>;JW zIRIuF@Xti59Y1?xp*wm4HKC}Pw_;GXz$;e&eRUN+y0?H=!0byFAkSTDpsXrnETA84 z3Qbbb%>xnkskR*>nI7D+LXbs!s{nR=Jl4-Z8At-Wwc?iD(F3wA|!#67Cd z-@0@2_UXe(m@_q2%~)%FYcg#06dJ5l^VLT>tS}^R+su`R$E2^HF$0LS9fjs+B-tcr zkxbfc6RIY#Nr%zA>l(!*EoiNm*k7Bu5%~AD!d1yw_j&EUKw%7uS2S$rI<5YkG{N`< z7j

  • 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 literal 0 HcmV?d00001 diff --git a/examples/advanced/advanced/android/app/src/main/assets/fonts/FontAwesome.ttf b/examples/advanced/advanced/android/app/src/main/assets/fonts/FontAwesome.ttf new file mode 100644 index 0000000000000000000000000000000000000000..35acda2fa1196aad98c2adf4378a7611dd713aa3 GIT binary patch literal 165548 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 z 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

    yCeYkMVLrHl=%La>qe!wC0sAZt2vp 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�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 QODv!|=M=c^hE5 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 literal 0 HcmV?d00001 diff --git a/examples/advanced/advanced/android/app/src/main/assets/fonts/Foundation.ttf b/examples/advanced/advanced/android/app/src/main/assets/fonts/Foundation.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6cce217ddc2efe3411dc9fa34e294e48e4cdf4f5 GIT binary patch literal 56976 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 literal 0 HcmV?d00001 diff --git a/examples/advanced/advanced/android/app/src/main/assets/fonts/Ionicons.ttf b/examples/advanced/advanced/android/app/src/main/assets/fonts/Ionicons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..67bd84202ad5b2e307d3b6fac1731c2a5d963e0b GIT binary patch literal 112472 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 Tk%-c1X!zdJ9z-96+av!M=V=Jy literal 0 HcmV?d00001 diff --git a/examples/advanced/advanced/android/app/src/main/assets/fonts/MaterialCommunityIcons.ttf b/examples/advanced/advanced/android/app/src/main/assets/fonts/MaterialCommunityIcons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..cfe2d9f8fd1f1602ac2944104150deb151250322 GIT binary patch literal 680692 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�T-Z>rMHs;@>ow&5zo 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

    1. V-M|Z?bJ5)W0zBV(4XCpZM}2y9>?VfRg~ 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®ZdkA}C`vt7SNGPO;EH)pPOB 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 literal 0 HcmV?d00001 diff --git a/examples/advanced/advanced/android/app/src/main/assets/fonts/MaterialIcons.ttf b/examples/advanced/advanced/android/app/src/main/assets/fonts/MaterialIcons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7015564ad166a3e9d88c82f17829f0cc01ebe29a GIT binary patch literal 128180 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 ohyj3!`#ee%L;DTjx@8!5k5~VH0QmdE^#A|> literal 0 HcmV?d00001 diff --git a/examples/advanced/advanced/android/app/src/main/assets/fonts/Octicons.ttf b/examples/advanced/advanced/android/app/src/main/assets/fonts/Octicons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ceac75d75e6bcaf56823bacd051bd9f135af6f4a GIT binary patch literal 28364 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 literal 0 HcmV?d00001 diff --git a/examples/advanced/advanced/android/app/src/main/assets/fonts/SimpleLineIcons.ttf b/examples/advanced/advanced/android/app/src/main/assets/fonts/SimpleLineIcons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6ecb68683477ecc5aed38ec3fc8910d9bb66276c GIT binary patch literal 54056 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 Kj_>Q2Zu>vsTUp2e literal 0 HcmV?d00001 diff --git a/examples/advanced/advanced/android/app/src/main/assets/fonts/Zocial.ttf b/examples/advanced/advanced/android/app/src/main/assets/fonts/Zocial.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e4ae46c6286b2d6c6676b0c3192fc92876778498 GIT binary patch literal 25552 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 literal 0 HcmV?d00001 diff --git a/examples/advanced/advanced/android/app/src/main/java/com/advanced/MainActivity.java b/examples/advanced/advanced/android/app/src/main/java/com/advanced/MainActivity.java new file mode 100644 index 0000000..ebf7567 --- /dev/null +++ b/examples/advanced/advanced/android/app/src/main/java/com/advanced/MainActivity.java @@ -0,0 +1,32 @@ +package com.advanced; + +import com.facebook.react.ReactActivity; +import com.facebook.react.ReactActivityDelegate; +import com.facebook.react.ReactRootView; +import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView; + + +public class MainActivity extends ReactActivity { + + /** + * Returns the name of the main component registered from JavaScript. This is used to schedule + * rendering of the component. + */ + @Override + protected String getMainComponentName() { + return "advanced"; + } + + /** + For react-native-gesture-handler (used) + */ + @Override + protected ReactActivityDelegate createReactActivityDelegate() { + return new ReactActivityDelegate(this, getMainComponentName()) { + @Override + protected ReactRootView createRootView() { + return new RNGestureHandlerEnabledRootView(MainActivity.this); + } + }; + } +} diff --git a/examples/advanced/advanced/android/app/src/main/java/com/advanced/MainApplication.java b/examples/advanced/advanced/android/app/src/main/java/com/advanced/MainApplication.java new file mode 100644 index 0000000..925451e --- /dev/null +++ b/examples/advanced/advanced/android/app/src/main/java/com/advanced/MainApplication.java @@ -0,0 +1,74 @@ +package com.advanced; + +import android.app.Application; +import android.content.Context; +import com.facebook.react.PackageList; +import com.facebook.react.ReactApplication; +import com.facebook.react.ReactNativeHost; +import com.facebook.react.ReactPackage; +import com.facebook.soloader.SoLoader; +import java.lang.reflect.InvocationTargetException; +import java.util.List; + +public class MainApplication extends Application implements ReactApplication { + + private final ReactNativeHost mReactNativeHost = + new ReactNativeHost(this) { + @Override + public boolean getUseDeveloperSupport() { + return BuildConfig.DEBUG; + } + + @Override + protected List getPackages() { + @SuppressWarnings("UnnecessaryLocalVariable") + List packages = new PackageList(this).getPackages(); + // Packages that cannot be autolinked yet can be added manually here, for example: + // packages.add(new MyReactNativePackage()); + return packages; + } + + @Override + protected String getJSMainModuleName() { + return "index"; + } + }; + + @Override + public ReactNativeHost getReactNativeHost() { + return mReactNativeHost; + } + + @Override + public void onCreate() { + super.onCreate(); + SoLoader.init(this, /* native exopackage */ false); + initializeFlipper(this); // Remove this line if you don't want Flipper enabled + } + + /** + * Loads Flipper in React Native templates. + * + * @param context + */ + private static void initializeFlipper(Context context) { + if (BuildConfig.DEBUG) { + try { + /* + We use reflection here to pick up the class that initializes Flipper, + since Flipper library is not available in release mode + */ + Class aClass = Class.forName("com.facebook.flipper.ReactNativeFlipper"); + aClass.getMethod("initializeFlipper", Context.class).invoke(null, context); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + } + } +} diff --git a/examples/advanced/advanced/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/examples/advanced/advanced/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..a2f5908281d070150700378b64a84c7db1f97aa1 GIT binary patch literal 3056 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 axPAxe%7rDusX+w*00006jj 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⁣ zwiG+x#%j}{0gU~J8;<|!B1@-XaB@{KORFwrYg_8rOv({b0EO#DbeQRm;B6_9=mXGf z-x|VL{zd`)#@yN}HkCSJbjbNlE|zL3Wm9Q8HY`sV)}3%pgN>cL^67{Z;PPL(*wT8N zUjXU{@|*hvm}({wsAC=x0^ok0%UAz0;sogW{B!nDqk|JJ5x~4NfTDgP49^zeu`csl?5mY@JdQdISc zFs!E{^grmkLnUk9 zny~m)1vws@5BFI<-0Tuo2JWX(0v`W|t(wg;s--L47WTvTMz-8l#TL^=OJNRS2?_Qj z3AKT+gvbyBi#H*-tJ%tWD|>EV3wy|8qxfzS!5RW;Jpl5*zo&^UBU=fG#2}UvRyNkK zA06Dy9;K1ca@r2T>yThYgI!ont$(G{6q#2QT+00r_x0(b)gsE`lBB?2gr55gq^D3Fi&p%E(p9>U%bv zkg1Jco(RbyTX7FDHOnl7-O@ zI$AaIl?9NJKPm(WiBP`1-#CB1QzU>&hKm)fpa5DKE{2$X0hGz-0uZ?cyTk(YC!Y&| zL=1VrNERSA5NA2jq7FACfX4JfPyj5XXl1yv0>~s;eF7L2$>&oMqeTFT2m$y7FlkON z_yurD1yIOvA;5C6016pyxBznGUt0kJ&k5r#;&>Jow`r)sp9R~PmK~lz$3xH%LT*1U zJdOyABZ3!FvNoR*vN$5ykHS8f`jA4zV+|L}i1C4`B2c{R0;UdYxaU|H)2avz@ z=mEYc|2S<+(B2Tj+FkX+2D+yFI!k9lWMA61DJ{)e;lum$(;O87?vGJJe!KtK04+N_ zI*P~t@dUb>9Xh{dbyl{-ZQ(UMgz7$|QfL5XSPkskt^NgctYC#;4WcZB1@%@wy@2t3 z2z0DI7&%b$*Aw~abe?GxE`ez@+6hOh-6*8fHRV{1os$EL@}uUZeG4h1&Be`98q*7j z=3-v+lhIjfWVo12!<>%V^a6lTgW3+_#W6n|p*~==zOH7z$0{LSZk(Tpd7EaD04hnA zL;#fxS0aD{`5^&D`}>0Uq?byDD-l2=!wm_bLcUl4gc(% za1p|itVANvFF>hghAS07Im1;IK;|b*W)}VDyI;BIp2=K*yu2a)j?B|f<44NI$NbmJ z#dE0>jI$fMr&@>4kN8MLFb4&2O9fEKaQg%(QO$4_1rVQywG^CmBLh#}_7gKW3vd?| z2?1^&KWq8}8I^_S0|)MowU_pw$q@nl@Nkn$z>BQq_KA^9yaR`(R3u{{Ig;cwt z@AJ^{ODQCm^neroM9nKNUAXi9RCK`OsP_LuR0PUR(YZCCX5dNF6VzcoK&=b^r`W?ltt|*F zpkoae%ZT{C1h~EcFui~b7fF`vb<<~j_VquuUA$}QqIKYELPp#;{u?q8Dz}WAG-(3; zjrm$i%7UbyZMM(Y{>!uJ#vNB?R~B{6Htp=>e*<{fQQ5W7V(1coCWlOON!MzZxhum| ztZBQpGR z;~#ur^&PockKdV{Q6R>o`Pl{0x!DEbpZ7y9Y;*ZvE!*gU`V1W3znva{f=?WO5I&>B z&hw6}tjECtaghm5z|C#%M;Yf_*pI^};h}Vl=^r9EN=tVDj86D;C$jIJ?K7VP+00000NkvXXu0mjf D5i!M* literal 0 HcmV?d00001 diff --git a/examples/advanced/advanced/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/examples/advanced/advanced/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..459ca609d3ae0d3943ab44cdc27feef9256dc6d7 GIT binary patch literal 7098 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 literal 0 HcmV?d00001 diff --git a/examples/advanced/advanced/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/examples/advanced/advanced/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..8ca12fe024be86e868d14e91120a6902f8e88ac6 GIT binary patch literal 6464 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 B0*L?s literal 0 HcmV?d00001 diff --git a/examples/advanced/advanced/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/examples/advanced/advanced/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..8e19b410a1b15ff180f3dacac19395fe3046cdec GIT binary patch literal 10676 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 literal 0 HcmV?d00001 diff --git a/examples/advanced/advanced/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/examples/advanced/advanced/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..4c19a13c239cb67b8a2134ddd5f325db1d2d5bee GIT binary patch literal 15523 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 BIP(Ai literal 0 HcmV?d00001 diff --git a/examples/advanced/advanced/android/app/src/main/res/values/strings.xml b/examples/advanced/advanced/android/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..9596b49 --- /dev/null +++ b/examples/advanced/advanced/android/app/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + RNCamera + diff --git a/examples/advanced/advanced/android/app/src/main/res/values/styles.xml b/examples/advanced/advanced/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..72a764e --- /dev/null +++ b/examples/advanced/advanced/android/app/src/main/res/values/styles.xml @@ -0,0 +1,10 @@ + + + + + + diff --git a/examples/advanced/advanced/android/build.gradle b/examples/advanced/advanced/android/build.gradle new file mode 100644 index 0000000..28f7ec6 --- /dev/null +++ b/examples/advanced/advanced/android/build.gradle @@ -0,0 +1,38 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + ext { + buildToolsVersion = "28.0.3" + minSdkVersion = 16 + compileSdkVersion = 28 + targetSdkVersion = 28 + } + repositories { + google() + jcenter() + } + dependencies { + classpath("com.android.tools.build:gradle:3.4.2") + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + repositories { + mavenLocal() + maven { + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm + url("$rootDir/../node_modules/react-native/android") + } + maven { + // Android JSC is installed from npm + url("$rootDir/../node_modules/jsc-android/dist") + } + + google() + jcenter() + maven { url 'https://jitpack.io' } + } +} diff --git a/examples/advanced/advanced/android/gradle.properties b/examples/advanced/advanced/android/gradle.properties new file mode 100644 index 0000000..027ef9d --- /dev/null +++ b/examples/advanced/advanced/android/gradle.properties @@ -0,0 +1,21 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +# Default value: -Xmx10248m -XX:MaxPermSize=256m +# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true + +android.useAndroidX=true +android.enableJetifier=true diff --git a/examples/advanced/advanced/android/gradle/wrapper/gradle-wrapper.jar b/examples/advanced/advanced/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..5c2d1cf016b3885f6930543d57b744ea8c220a1a GIT binary patch literal 55616 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 \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/examples/advanced/advanced/android/gradlew.bat b/examples/advanced/advanced/android/gradlew.bat new file mode 100644 index 0000000..9991c50 --- /dev/null +++ b/examples/advanced/advanced/android/gradlew.bat @@ -0,0 +1,100 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem http://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/examples/advanced/advanced/android/settings.gradle b/examples/advanced/advanced/android/settings.gradle new file mode 100644 index 0000000..f7c4c17 --- /dev/null +++ b/examples/advanced/advanced/android/settings.gradle @@ -0,0 +1,3 @@ +rootProject.name = 'advanced' +apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) +include ':app' diff --git a/examples/advanced/advanced/app.json b/examples/advanced/advanced/app.json new file mode 100644 index 0000000..e54f972 --- /dev/null +++ b/examples/advanced/advanced/app.json @@ -0,0 +1,4 @@ +{ + "name": "advanced", + "displayName": "RNCamera" +} \ No newline at end of file diff --git a/examples/advanced/advanced/babel.config.js b/examples/advanced/advanced/babel.config.js new file mode 100644 index 0000000..f842b77 --- /dev/null +++ b/examples/advanced/advanced/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: ['module:metro-react-native-babel-preset'], +}; diff --git a/examples/advanced/advanced/index.js b/examples/advanced/advanced/index.js new file mode 100644 index 0000000..97bcfde --- /dev/null +++ b/examples/advanced/advanced/index.js @@ -0,0 +1,6 @@ +import 'react-native-gesture-handler'; // required for correct initialization of this library +import {AppRegistry} from 'react-native'; +import App from './src/App'; +import {name as appName} from './app.json'; + +AppRegistry.registerComponent(appName, () => App); diff --git a/examples/advanced/advanced/ios/Podfile b/examples/advanced/advanced/ios/Podfile new file mode 100644 index 0000000..6894630 --- /dev/null +++ b/examples/advanced/advanced/ios/Podfile @@ -0,0 +1,40 @@ +platform :ios, '9.0' +require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' + +target 'advanced' do + # Pods for advanced + pod 'FBLazyVector', :path => "../node_modules/react-native/Libraries/FBLazyVector" + pod 'FBReactNativeSpec', :path => "../node_modules/react-native/Libraries/FBReactNativeSpec" + pod 'RCTRequired', :path => "../node_modules/react-native/Libraries/RCTRequired" + pod 'RCTTypeSafety', :path => "../node_modules/react-native/Libraries/TypeSafety" + pod 'React', :path => '../node_modules/react-native/' + pod 'React-Core', :path => '../node_modules/react-native/' + pod 'React-CoreModules', :path => '../node_modules/react-native/React/CoreModules' + pod 'React-Core/DevSupport', :path => '../node_modules/react-native/' + pod 'React-RCTActionSheet', :path => '../node_modules/react-native/Libraries/ActionSheetIOS' + pod 'React-RCTAnimation', :path => '../node_modules/react-native/Libraries/NativeAnimation' + pod 'React-RCTBlob', :path => '../node_modules/react-native/Libraries/Blob' + pod 'React-RCTImage', :path => '../node_modules/react-native/Libraries/Image' + pod 'React-RCTLinking', :path => '../node_modules/react-native/Libraries/LinkingIOS' + pod 'React-RCTNetwork', :path => '../node_modules/react-native/Libraries/Network' + pod 'React-RCTSettings', :path => '../node_modules/react-native/Libraries/Settings' + pod 'React-RCTText', :path => '../node_modules/react-native/Libraries/Text' + pod 'React-RCTVibration', :path => '../node_modules/react-native/Libraries/Vibration' + pod 'React-Core/RCTWebSocket', :path => '../node_modules/react-native/' + + pod 'React-cxxreact', :path => '../node_modules/react-native/ReactCommon/cxxreact' + pod 'React-jsi', :path => '../node_modules/react-native/ReactCommon/jsi' + pod 'React-jsiexecutor', :path => '../node_modules/react-native/ReactCommon/jsiexecutor' + pod 'React-jsinspector', :path => '../node_modules/react-native/ReactCommon/jsinspector' + pod 'ReactCommon/jscallinvoker', :path => "../node_modules/react-native/ReactCommon" + pod 'ReactCommon/turbomodule/core', :path => "../node_modules/react-native/ReactCommon" + pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga' + + pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec' + pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec' + pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec' + + + use_native_modules! +end + diff --git a/examples/advanced/advanced/ios/Podfile.lock b/examples/advanced/advanced/ios/Podfile.lock new file mode 100644 index 0000000..b2eb534 --- /dev/null +++ b/examples/advanced/advanced/ios/Podfile.lock @@ -0,0 +1,356 @@ +PODS: + - boost-for-react-native (1.63.0) + - DoubleConversion (1.1.6) + - FBLazyVector (0.61.4) + - FBReactNativeSpec (0.61.4): + - Folly (= 2018.10.22.00) + - RCTRequired (= 0.61.4) + - RCTTypeSafety (= 0.61.4) + - React-Core (= 0.61.4) + - React-jsi (= 0.61.4) + - ReactCommon/turbomodule/core (= 0.61.4) + - Folly (2018.10.22.00): + - boost-for-react-native + - DoubleConversion + - Folly/Default (= 2018.10.22.00) + - glog + - Folly/Default (2018.10.22.00): + - boost-for-react-native + - DoubleConversion + - glog + - glog (0.3.5) + - RCTRequired (0.61.4) + - RCTTypeSafety (0.61.4): + - FBLazyVector (= 0.61.4) + - Folly (= 2018.10.22.00) + - RCTRequired (= 0.61.4) + - React-Core (= 0.61.4) + - React (0.61.4): + - React-Core (= 0.61.4) + - React-Core/DevSupport (= 0.61.4) + - React-Core/RCTWebSocket (= 0.61.4) + - React-RCTActionSheet (= 0.61.4) + - React-RCTAnimation (= 0.61.4) + - React-RCTBlob (= 0.61.4) + - React-RCTImage (= 0.61.4) + - React-RCTLinking (= 0.61.4) + - React-RCTNetwork (= 0.61.4) + - React-RCTSettings (= 0.61.4) + - React-RCTText (= 0.61.4) + - React-RCTVibration (= 0.61.4) + - React-Core (0.61.4): + - Folly (= 2018.10.22.00) + - glog + - React-Core/Default (= 0.61.4) + - React-cxxreact (= 0.61.4) + - React-jsi (= 0.61.4) + - React-jsiexecutor (= 0.61.4) + - Yoga + - React-Core/CoreModulesHeaders (0.61.4): + - Folly (= 2018.10.22.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.61.4) + - React-jsi (= 0.61.4) + - React-jsiexecutor (= 0.61.4) + - Yoga + - React-Core/Default (0.61.4): + - Folly (= 2018.10.22.00) + - glog + - React-cxxreact (= 0.61.4) + - React-jsi (= 0.61.4) + - React-jsiexecutor (= 0.61.4) + - Yoga + - React-Core/DevSupport (0.61.4): + - Folly (= 2018.10.22.00) + - glog + - React-Core/Default (= 0.61.4) + - React-Core/RCTWebSocket (= 0.61.4) + - React-cxxreact (= 0.61.4) + - React-jsi (= 0.61.4) + - React-jsiexecutor (= 0.61.4) + - React-jsinspector (= 0.61.4) + - Yoga + - React-Core/RCTActionSheetHeaders (0.61.4): + - Folly (= 2018.10.22.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.61.4) + - React-jsi (= 0.61.4) + - React-jsiexecutor (= 0.61.4) + - Yoga + - React-Core/RCTAnimationHeaders (0.61.4): + - Folly (= 2018.10.22.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.61.4) + - React-jsi (= 0.61.4) + - React-jsiexecutor (= 0.61.4) + - Yoga + - React-Core/RCTBlobHeaders (0.61.4): + - Folly (= 2018.10.22.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.61.4) + - React-jsi (= 0.61.4) + - React-jsiexecutor (= 0.61.4) + - Yoga + - React-Core/RCTImageHeaders (0.61.4): + - Folly (= 2018.10.22.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.61.4) + - React-jsi (= 0.61.4) + - React-jsiexecutor (= 0.61.4) + - Yoga + - React-Core/RCTLinkingHeaders (0.61.4): + - Folly (= 2018.10.22.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.61.4) + - React-jsi (= 0.61.4) + - React-jsiexecutor (= 0.61.4) + - Yoga + - React-Core/RCTNetworkHeaders (0.61.4): + - Folly (= 2018.10.22.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.61.4) + - React-jsi (= 0.61.4) + - React-jsiexecutor (= 0.61.4) + - Yoga + - React-Core/RCTSettingsHeaders (0.61.4): + - Folly (= 2018.10.22.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.61.4) + - React-jsi (= 0.61.4) + - React-jsiexecutor (= 0.61.4) + - Yoga + - React-Core/RCTTextHeaders (0.61.4): + - Folly (= 2018.10.22.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.61.4) + - React-jsi (= 0.61.4) + - React-jsiexecutor (= 0.61.4) + - Yoga + - React-Core/RCTVibrationHeaders (0.61.4): + - Folly (= 2018.10.22.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.61.4) + - React-jsi (= 0.61.4) + - React-jsiexecutor (= 0.61.4) + - Yoga + - React-Core/RCTWebSocket (0.61.4): + - Folly (= 2018.10.22.00) + - glog + - React-Core/Default (= 0.61.4) + - React-cxxreact (= 0.61.4) + - React-jsi (= 0.61.4) + - React-jsiexecutor (= 0.61.4) + - Yoga + - React-CoreModules (0.61.4): + - FBReactNativeSpec (= 0.61.4) + - Folly (= 2018.10.22.00) + - RCTTypeSafety (= 0.61.4) + - React-Core/CoreModulesHeaders (= 0.61.4) + - React-RCTImage (= 0.61.4) + - ReactCommon/turbomodule/core (= 0.61.4) + - React-cxxreact (0.61.4): + - boost-for-react-native (= 1.63.0) + - DoubleConversion + - Folly (= 2018.10.22.00) + - glog + - React-jsinspector (= 0.61.4) + - React-jsi (0.61.4): + - boost-for-react-native (= 1.63.0) + - DoubleConversion + - Folly (= 2018.10.22.00) + - glog + - React-jsi/Default (= 0.61.4) + - React-jsi/Default (0.61.4): + - boost-for-react-native (= 1.63.0) + - DoubleConversion + - Folly (= 2018.10.22.00) + - glog + - React-jsiexecutor (0.61.4): + - DoubleConversion + - Folly (= 2018.10.22.00) + - glog + - React-cxxreact (= 0.61.4) + - React-jsi (= 0.61.4) + - React-jsinspector (0.61.4) + - react-native-camera (3.9.0): + - React + - react-native-camera/RCT (= 3.9.0) + - react-native-camera/RN (= 3.9.0) + - react-native-camera/RCT (3.9.0): + - React + - react-native-camera/RN (3.9.0): + - React + - React-RCTActionSheet (0.61.4): + - React-Core/RCTActionSheetHeaders (= 0.61.4) + - React-RCTAnimation (0.61.4): + - React-Core/RCTAnimationHeaders (= 0.61.4) + - React-RCTBlob (0.61.4): + - React-Core/RCTBlobHeaders (= 0.61.4) + - React-Core/RCTWebSocket (= 0.61.4) + - React-jsi (= 0.61.4) + - React-RCTNetwork (= 0.61.4) + - React-RCTImage (0.61.4): + - React-Core/RCTImageHeaders (= 0.61.4) + - React-RCTNetwork (= 0.61.4) + - React-RCTLinking (0.61.4): + - React-Core/RCTLinkingHeaders (= 0.61.4) + - React-RCTNetwork (0.61.4): + - React-Core/RCTNetworkHeaders (= 0.61.4) + - React-RCTSettings (0.61.4): + - React-Core/RCTSettingsHeaders (= 0.61.4) + - React-RCTText (0.61.4): + - React-Core/RCTTextHeaders (= 0.61.4) + - React-RCTVibration (0.61.4): + - React-Core/RCTVibrationHeaders (= 0.61.4) + - ReactCommon/jscallinvoker (0.61.4): + - DoubleConversion + - Folly (= 2018.10.22.00) + - glog + - React-cxxreact (= 0.61.4) + - ReactCommon/turbomodule/core (0.61.4): + - DoubleConversion + - Folly (= 2018.10.22.00) + - glog + - React-Core (= 0.61.4) + - React-cxxreact (= 0.61.4) + - React-jsi (= 0.61.4) + - ReactCommon/jscallinvoker (= 0.61.4) + - RNGestureHandler (1.5.0): + - React + - Yoga (1.14.0) + +DEPENDENCIES: + - 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/Libraries/FBReactNativeSpec`) + - Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`) + - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) + - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`) + - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) + - React (from `../node_modules/react-native/`) + - 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-native-camera (from `../node_modules/react-native-camera`) + - 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`) + - ReactCommon/jscallinvoker (from `../node_modules/react-native/ReactCommon`) + - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) + - RNGestureHandler (from `../node_modules/react-native-gesture-handler`) + - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) + +SPEC REPOS: + https://github.com/cocoapods/specs.git: + - boost-for-react-native + +EXTERNAL SOURCES: + 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/Libraries/FBReactNativeSpec" + Folly: + :podspec: "../node_modules/react-native/third-party-podspecs/Folly.podspec" + glog: + :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" + RCTRequired: + :path: "../node_modules/react-native/Libraries/RCTRequired" + RCTTypeSafety: + :path: "../node_modules/react-native/Libraries/TypeSafety" + React: + :path: "../node_modules/react-native/" + 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-native-camera: + :path: "../node_modules/react-native-camera" + 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" + ReactCommon: + :path: "../node_modules/react-native/ReactCommon" + RNGestureHandler: + :path: "../node_modules/react-native-gesture-handler" + Yoga: + :path: "../node_modules/react-native/ReactCommon/yoga" + +SPEC CHECKSUMS: + boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c + DoubleConversion: 5805e889d232975c086db112ece9ed034df7a0b2 + FBLazyVector: feb35a6b7f7b50f367be07f34012f34a79282fa3 + FBReactNativeSpec: 51477b84b1bf7ab6f9ef307c24e3dd675391be44 + Folly: 30e7936e1c45c08d884aa59369ed951a8e68cf51 + glog: 1f3da668190260b06b429bb211bfbee5cd790c28 + RCTRequired: f3b3fb6f4723e8e52facb229d0c75fdc76773849 + RCTTypeSafety: 2ec60de6abb1db050b56ecc4b60188026078fd10 + React: 10e0130b57e55a7cd8c3dee37c1261102ce295f4 + React-Core: 636212410772d05f3a1eb79d965df2962ca1c70b + React-CoreModules: 6f70d5e41919289c582f88c9ad9923fe5c87400a + React-cxxreact: ddecbe9157ec1743f52ea17bf8d95debc0d6e846 + React-jsi: ca921f4041505f9d5197139b2d09eeb020bb12e8 + React-jsiexecutor: 8dfb73b987afa9324e4009bdce62a18ce23d983c + React-jsinspector: d15478d0a8ada19864aa4d1cc1c697b41b3fa92f + react-native-camera: 8ad12cae113fd60b07236983532acc8e595c0fc3 + React-RCTActionSheet: 7369b7c85f99b6299491333affd9f01f5a130c22 + React-RCTAnimation: d07be15b2bd1d06d89417eb0343f98ffd2b099a7 + React-RCTBlob: 8e0b23d95c9baa98f6b0e127e07666aaafd96c34 + React-RCTImage: 443050d14a66e8c2332e9c055f45689d23e15cc7 + React-RCTLinking: ce9a90ba155aec41be49e75ec721bbae2d48a47e + React-RCTNetwork: 41fe54bacc67dd00e6e4c4d30dd98a13e4beabc8 + React-RCTSettings: 45e3e0a6470310b2dab2ccc6d1d73121ba3ea936 + React-RCTText: 21934e0a51d522abcd0a275407e80af45d6fd9ec + React-RCTVibration: 0f76400ee3cec6edb9c125da49fed279340d145a + ReactCommon: a6a294e7028ed67b926d29551aa9394fd989c24c + RNGestureHandler: a4ddde1ffc6e590c8127b8b7eabfdade45475c74 + Yoga: ba3d99dbee6c15ea6bbe3783d1f0cb1ffb79af0f + +PODFILE CHECKSUM: 27b3847fe4d98bb58146c377f86ebed45b40a77d + +COCOAPODS: 1.7.5 diff --git a/examples/advanced/advanced/ios/advanced.xcodeproj/project.pbxproj b/examples/advanced/advanced/ios/advanced.xcodeproj/project.pbxproj new file mode 100644 index 0000000..34b9931 --- /dev/null +++ b/examples/advanced/advanced/ios/advanced.xcodeproj/project.pbxproj @@ -0,0 +1,508 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 062607D0422842D88DF710BA /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B099670817684071AF0F1893 /* MaterialIcons.ttf */; }; + 094178A82163487B97009578 /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 6E6AFACE6DD74B8D8DE65F9D /* SimpleLineIcons.ttf */; }; + 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; + 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; + 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; + 348421C833E74C5182BCB9DD /* rubicon-icon-font.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 53E08F4C2C724DDDBB4D1F8A /* rubicon-icon-font.ttf */; }; + 3D8F8BED9802FE25EF64DF0B /* libPods-advanced.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 13933213D0463644F398ABD8 /* libPods-advanced.a */; }; + 62EB96F9E7374AACA02A0A5E /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1DBCCE5F94214C56BBB900D4 /* Octicons.ttf */; }; + 72EB31C325254DF5B991B84D /* AntDesign.ttf in Resources */ = {isa = PBXBuildFile; fileRef = DE200E779C404F619DC27169 /* AntDesign.ttf */; }; + 783D315FD7684FC8B773B484 /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3BF1497671ED475EBB25942C /* EvilIcons.ttf */; }; + 7BFA53EAC35948EC8D1B4BF3 /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D4F07CE1EF734EC2BD6EEB93 /* Ionicons.ttf */; }; + 84BE4437EEDB43EAA7FCE6CB /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 436527FFB9A04400BF5944F6 /* FontAwesome.ttf */; }; + A5FAC66B25374E97AB8AD24F /* FontAwesome5_Solid.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 891C6F6AE85849C0AEA4EE9D /* FontAwesome5_Solid.ttf */; }; + AEBB31508EBC4C2BA44C8846 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D029104C407640F2B400A4DB /* Foundation.ttf */; }; + B3CD170387DA49C4B9782E8E /* Fontisto.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B60CC3D370D545E58CD72840 /* Fontisto.ttf */; }; + C94C5AD1867A429AA8ADEF3B /* Roboto.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CEB49DD2C8EF43D18EF017B5 /* Roboto.ttf */; }; + D0B5EF2F6B634AE1A9BBFAD9 /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 230AA087B4DF4002B655AA4A /* Feather.ttf */; }; + D6F97B93699645358C8C2C8F /* MaterialCommunityIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 97956D0EABB145B699AF0F94 /* MaterialCommunityIcons.ttf */; }; + DC621F6F5E5B4E13BFC33DF8 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F16C1C727DA5491FBEBD6DE4 /* Zocial.ttf */; }; + DFFAF9505B41467784F8C6CB /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7EE85165270445CEAD66A58E /* Entypo.ttf */; }; + E4EF985626DE4E3EBAC7C646 /* Roboto_medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B6F84A95E26241E4B7549034 /* Roboto_medium.ttf */; }; + EA2436BE9CFF4671B3A05D4F /* FontAwesome5_Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F1BB551E32164FE98F9F2ADE /* FontAwesome5_Regular.ttf */; }; + F16629C0F69642AFB3CEB6D0 /* FontAwesome5_Brands.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A1551A287D074DE1BE677698 /* FontAwesome5_Brands.ttf */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; }; + 07B3BF7D3A962BA50396E297 /* Pods-advanced.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-advanced.release.xcconfig"; path = "Target Support Files/Pods-advanced/Pods-advanced.release.xcconfig"; sourceTree = ""; }; + 13933213D0463644F398ABD8 /* libPods-advanced.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-advanced.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 13B07F961A680F5B00A75B9A /* advanced.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = advanced.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = advanced/AppDelegate.h; sourceTree = ""; }; + 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = advanced/AppDelegate.m; sourceTree = ""; }; + 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; + 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = advanced/Images.xcassets; sourceTree = ""; }; + 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = advanced/Info.plist; sourceTree = ""; }; + 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = advanced/main.m; sourceTree = ""; }; + 1DBCCE5F94214C56BBB900D4 /* Octicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Octicons.ttf; path = "../node_modules/native-base/Fonts/Octicons.ttf"; sourceTree = ""; }; + 230AA087B4DF4002B655AA4A /* Feather.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Feather.ttf; path = "../node_modules/native-base/Fonts/Feather.ttf"; sourceTree = ""; }; + 3BF1497671ED475EBB25942C /* EvilIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = EvilIcons.ttf; path = "../node_modules/native-base/Fonts/EvilIcons.ttf"; sourceTree = ""; }; + 436527FFB9A04400BF5944F6 /* FontAwesome.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome.ttf; path = "../node_modules/native-base/Fonts/FontAwesome.ttf"; sourceTree = ""; }; + 53E08F4C2C724DDDBB4D1F8A /* rubicon-icon-font.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "rubicon-icon-font.ttf"; path = "../node_modules/native-base/Fonts/rubicon-icon-font.ttf"; sourceTree = ""; }; + 6E6AFACE6DD74B8D8DE65F9D /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = SimpleLineIcons.ttf; path = "../node_modules/native-base/Fonts/SimpleLineIcons.ttf"; sourceTree = ""; }; + 7EE85165270445CEAD66A58E /* Entypo.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Entypo.ttf; path = "../node_modules/native-base/Fonts/Entypo.ttf"; sourceTree = ""; }; + 891C6F6AE85849C0AEA4EE9D /* FontAwesome5_Solid.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Solid.ttf; path = "../node_modules/native-base/Fonts/FontAwesome5_Solid.ttf"; sourceTree = ""; }; + 8D2F66B2A31434AB475A52FD /* Pods-advanced.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-advanced.debug.xcconfig"; path = "Target Support Files/Pods-advanced/Pods-advanced.debug.xcconfig"; sourceTree = ""; }; + 97956D0EABB145B699AF0F94 /* MaterialCommunityIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialCommunityIcons.ttf; path = "../node_modules/native-base/Fonts/MaterialCommunityIcons.ttf"; sourceTree = ""; }; + A1551A287D074DE1BE677698 /* FontAwesome5_Brands.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Brands.ttf; path = "../node_modules/native-base/Fonts/FontAwesome5_Brands.ttf"; sourceTree = ""; }; + B099670817684071AF0F1893 /* MaterialIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialIcons.ttf; path = "../node_modules/native-base/Fonts/MaterialIcons.ttf"; sourceTree = ""; }; + B60CC3D370D545E58CD72840 /* Fontisto.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Fontisto.ttf; path = "../node_modules/native-base/Fonts/Fontisto.ttf"; sourceTree = ""; }; + B6F84A95E26241E4B7549034 /* Roboto_medium.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Roboto_medium.ttf; path = "../node_modules/native-base/Fonts/Roboto_medium.ttf"; sourceTree = ""; }; + CEB49DD2C8EF43D18EF017B5 /* Roboto.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Roboto.ttf; path = "../node_modules/native-base/Fonts/Roboto.ttf"; sourceTree = ""; }; + D029104C407640F2B400A4DB /* Foundation.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Foundation.ttf; path = "../node_modules/native-base/Fonts/Foundation.ttf"; sourceTree = ""; }; + D4F07CE1EF734EC2BD6EEB93 /* Ionicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Ionicons.ttf; path = "../node_modules/native-base/Fonts/Ionicons.ttf"; sourceTree = ""; }; + DE200E779C404F619DC27169 /* AntDesign.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = AntDesign.ttf; path = "../node_modules/native-base/Fonts/AntDesign.ttf"; sourceTree = ""; }; + ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; + ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; }; + F16C1C727DA5491FBEBD6DE4 /* Zocial.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Zocial.ttf; path = "../node_modules/native-base/Fonts/Zocial.ttf"; sourceTree = ""; }; + F1BB551E32164FE98F9F2ADE /* FontAwesome5_Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Regular.ttf; path = "../node_modules/native-base/Fonts/FontAwesome5_Regular.ttf"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 3D8F8BED9802FE25EF64DF0B /* libPods-advanced.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 13B07FAE1A68108700A75B9A /* advanced */ = { + isa = PBXGroup; + children = ( + 008F07F21AC5B25A0029DE68 /* main.jsbundle */, + 13B07FAF1A68108700A75B9A /* AppDelegate.h */, + 13B07FB01A68108700A75B9A /* AppDelegate.m */, + 13B07FB51A68108700A75B9A /* Images.xcassets */, + 13B07FB61A68108700A75B9A /* Info.plist */, + 13B07FB11A68108700A75B9A /* LaunchScreen.xib */, + 13B07FB71A68108700A75B9A /* main.m */, + ); + name = advanced; + sourceTree = ""; + }; + 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { + isa = PBXGroup; + children = ( + ED297162215061F000B7C4FE /* JavaScriptCore.framework */, + ED2971642150620600B7C4FE /* JavaScriptCore.framework */, + 13933213D0463644F398ABD8 /* libPods-advanced.a */, + ); + name = Frameworks; + sourceTree = ""; + }; + 80BFD9DB84F945EDBE3A6B57 /* Resources */ = { + isa = PBXGroup; + children = ( + DE200E779C404F619DC27169 /* AntDesign.ttf */, + 7EE85165270445CEAD66A58E /* Entypo.ttf */, + 3BF1497671ED475EBB25942C /* EvilIcons.ttf */, + 230AA087B4DF4002B655AA4A /* Feather.ttf */, + 436527FFB9A04400BF5944F6 /* FontAwesome.ttf */, + A1551A287D074DE1BE677698 /* FontAwesome5_Brands.ttf */, + F1BB551E32164FE98F9F2ADE /* FontAwesome5_Regular.ttf */, + 891C6F6AE85849C0AEA4EE9D /* FontAwesome5_Solid.ttf */, + B60CC3D370D545E58CD72840 /* Fontisto.ttf */, + D029104C407640F2B400A4DB /* Foundation.ttf */, + D4F07CE1EF734EC2BD6EEB93 /* Ionicons.ttf */, + 97956D0EABB145B699AF0F94 /* MaterialCommunityIcons.ttf */, + B099670817684071AF0F1893 /* MaterialIcons.ttf */, + 1DBCCE5F94214C56BBB900D4 /* Octicons.ttf */, + B6F84A95E26241E4B7549034 /* Roboto_medium.ttf */, + CEB49DD2C8EF43D18EF017B5 /* Roboto.ttf */, + 53E08F4C2C724DDDBB4D1F8A /* rubicon-icon-font.ttf */, + 6E6AFACE6DD74B8D8DE65F9D /* SimpleLineIcons.ttf */, + F16C1C727DA5491FBEBD6DE4 /* Zocial.ttf */, + ); + name = Resources; + sourceTree = ""; + }; + 832341AE1AAA6A7D00B99B32 /* Libraries */ = { + isa = PBXGroup; + children = ( + ); + name = Libraries; + sourceTree = ""; + }; + 83CBB9F61A601CBA00E9B192 = { + isa = PBXGroup; + children = ( + 13B07FAE1A68108700A75B9A /* advanced */, + 832341AE1AAA6A7D00B99B32 /* Libraries */, + 83CBBA001A601CBA00E9B192 /* Products */, + 2D16E6871FA4F8E400B85C8A /* Frameworks */, + CC7D0FD6B9611ABC7A660F90 /* Pods */, + 80BFD9DB84F945EDBE3A6B57 /* Resources */, + ); + indentWidth = 2; + sourceTree = ""; + tabWidth = 2; + usesTabs = 0; + }; + 83CBBA001A601CBA00E9B192 /* Products */ = { + isa = PBXGroup; + children = ( + 13B07F961A680F5B00A75B9A /* advanced.app */, + ); + name = Products; + sourceTree = ""; + }; + CC7D0FD6B9611ABC7A660F90 /* Pods */ = { + isa = PBXGroup; + children = ( + 8D2F66B2A31434AB475A52FD /* Pods-advanced.debug.xcconfig */, + 07B3BF7D3A962BA50396E297 /* Pods-advanced.release.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 13B07F861A680F5B00A75B9A /* advanced */ = { + isa = PBXNativeTarget; + buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "advanced" */; + buildPhases = ( + D02BE58F2A994D5543044933 /* [CP] Check Pods Manifest.lock */, + FD10A7F022414F080027D42C /* Start Packager */, + 13B07F871A680F5B00A75B9A /* Sources */, + 13B07F8C1A680F5B00A75B9A /* Frameworks */, + 13B07F8E1A680F5B00A75B9A /* Resources */, + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = advanced; + productName = advanced; + productReference = 13B07F961A680F5B00A75B9A /* advanced.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 83CBB9F71A601CBA00E9B192 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 940; + ORGANIZATIONNAME = Facebook; + TargetAttributes = { + 13B07F861A680F5B00A75B9A = { + DevelopmentTeam = 2MANV67FBC; + }; + }; + }; + buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "advanced" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + English, + en, + Base, + ); + mainGroup = 83CBB9F61A601CBA00E9B192; + productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 13B07F861A680F5B00A75B9A /* advanced */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 13B07F8E1A680F5B00A75B9A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, + 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */, + 72EB31C325254DF5B991B84D /* AntDesign.ttf in Resources */, + DFFAF9505B41467784F8C6CB /* Entypo.ttf in Resources */, + 783D315FD7684FC8B773B484 /* EvilIcons.ttf in Resources */, + D0B5EF2F6B634AE1A9BBFAD9 /* Feather.ttf in Resources */, + 84BE4437EEDB43EAA7FCE6CB /* FontAwesome.ttf in Resources */, + F16629C0F69642AFB3CEB6D0 /* FontAwesome5_Brands.ttf in Resources */, + EA2436BE9CFF4671B3A05D4F /* FontAwesome5_Regular.ttf in Resources */, + A5FAC66B25374E97AB8AD24F /* FontAwesome5_Solid.ttf in Resources */, + B3CD170387DA49C4B9782E8E /* Fontisto.ttf in Resources */, + AEBB31508EBC4C2BA44C8846 /* Foundation.ttf in Resources */, + 7BFA53EAC35948EC8D1B4BF3 /* Ionicons.ttf in Resources */, + D6F97B93699645358C8C2C8F /* MaterialCommunityIcons.ttf in Resources */, + 062607D0422842D88DF710BA /* MaterialIcons.ttf in Resources */, + 62EB96F9E7374AACA02A0A5E /* Octicons.ttf in Resources */, + E4EF985626DE4E3EBAC7C646 /* Roboto_medium.ttf in Resources */, + C94C5AD1867A429AA8ADEF3B /* Roboto.ttf in Resources */, + 348421C833E74C5182BCB9DD /* rubicon-icon-font.ttf in Resources */, + 094178A82163487B97009578 /* SimpleLineIcons.ttf in Resources */, + DC621F6F5E5B4E13BFC33DF8 /* Zocial.ttf in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Bundle React Native code and images"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; + }; + D02BE58F2A994D5543044933 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-advanced-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + FD10A7F022414F080027D42C /* Start Packager */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Start Packager"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > \"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\"\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n open \"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\n fi\nfi\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 13B07F871A680F5B00A75B9A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */, + 13B07FC11A68108700A75B9A /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = { + isa = PBXVariantGroup; + children = ( + 13B07FB21A68108700A75B9A /* Base */, + ); + name = LaunchScreen.xib; + path = advanced; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 13B07F941A680F5B00A75B9A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8D2F66B2A31434AB475A52FD /* Pods-advanced.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = NO; + DEVELOPMENT_TEAM = 2MANV67FBC; + INFOPLIST_FILE = advanced/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = org.reactnative.rncamera.example.advanced; + PRODUCT_NAME = advanced; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 13B07F951A680F5B00A75B9A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 07B3BF7D3A962BA50396E297 /* Pods-advanced.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 2MANV67FBC; + INFOPLIST_FILE = advanced/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = org.reactnative.rncamera.example.advanced; + PRODUCT_NAME = advanced; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; + 83CBBA201A601CBA00E9B192 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 83CBBA211A601CBA00E9B192 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "advanced" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 13B07F941A680F5B00A75B9A /* Debug */, + 13B07F951A680F5B00A75B9A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "advanced" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 83CBBA201A601CBA00E9B192 /* Debug */, + 83CBBA211A601CBA00E9B192 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; +} diff --git a/examples/advanced/advanced/ios/advanced.xcodeproj/xcshareddata/xcschemes/advanced.xcscheme b/examples/advanced/advanced/ios/advanced.xcodeproj/xcshareddata/xcschemes/advanced.xcscheme new file mode 100644 index 0000000..af0bfed --- /dev/null +++ b/examples/advanced/advanced/ios/advanced.xcodeproj/xcshareddata/xcschemes/advanced.xcscheme @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/advanced/advanced/ios/advanced.xcworkspace/contents.xcworkspacedata b/examples/advanced/advanced/ios/advanced.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..4e02dc3 --- /dev/null +++ b/examples/advanced/advanced/ios/advanced.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/examples/advanced/advanced/ios/advanced.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/advanced/advanced/ios/advanced.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/examples/advanced/advanced/ios/advanced.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/examples/advanced/advanced/ios/advanced/AppDelegate.h b/examples/advanced/advanced/ios/advanced/AppDelegate.h new file mode 100644 index 0000000..2726d5e --- /dev/null +++ b/examples/advanced/advanced/ios/advanced/AppDelegate.h @@ -0,0 +1,15 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import +#import + +@interface AppDelegate : UIResponder + +@property (nonatomic, strong) UIWindow *window; + +@end diff --git a/examples/advanced/advanced/ios/advanced/AppDelegate.m b/examples/advanced/advanced/ios/advanced/AppDelegate.m new file mode 100644 index 0000000..c2070a6 --- /dev/null +++ b/examples/advanced/advanced/ios/advanced/AppDelegate.m @@ -0,0 +1,42 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import "AppDelegate.h" + +#import +#import +#import + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions]; + RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge + moduleName:@"advanced" + initialProperties:nil]; + + rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; + + self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; + UIViewController *rootViewController = [UIViewController new]; + rootViewController.view = rootView; + self.window.rootViewController = rootViewController; + [self.window makeKeyAndVisible]; + return YES; +} + +- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge +{ +#if DEBUG + return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil]; +#else + return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; +#endif +} + +@end diff --git a/examples/advanced/advanced/ios/advanced/Base.lproj/LaunchScreen.xib b/examples/advanced/advanced/ios/advanced/Base.lproj/LaunchScreen.xib new file mode 100644 index 0000000..f3678c2 --- /dev/null +++ b/examples/advanced/advanced/ios/advanced/Base.lproj/LaunchScreen.xib @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/advanced/advanced/ios/advanced/Images.xcassets/AppIcon.appiconset/Contents.json b/examples/advanced/advanced/ios/advanced/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..118c98f --- /dev/null +++ b/examples/advanced/advanced/ios/advanced/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,38 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/examples/advanced/advanced/ios/advanced/Images.xcassets/Contents.json b/examples/advanced/advanced/ios/advanced/Images.xcassets/Contents.json new file mode 100644 index 0000000..2d92bd5 --- /dev/null +++ b/examples/advanced/advanced/ios/advanced/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/examples/advanced/advanced/ios/advanced/Info.plist b/examples/advanced/advanced/ios/advanced/Info.plist new file mode 100644 index 0000000..4e390de --- /dev/null +++ b/examples/advanced/advanced/ios/advanced/Info.plist @@ -0,0 +1,85 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + RNCamera + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + NSExceptionDomains + + localhost + + NSExceptionAllowsInsecureHTTPLoads + + + + + NSCameraUsageDescription + RNCamera needs to access your camera. + NSLocationWhenInUseUsageDescription + + NSMicrophoneUsageDescription + zInspector needs access to your microphone in order to record videos with sound. + UIAppFonts + + AntDesign.ttf + Entypo.ttf + EvilIcons.ttf + Feather.ttf + FontAwesome.ttf + FontAwesome5_Brands.ttf + FontAwesome5_Regular.ttf + FontAwesome5_Solid.ttf + Fontisto.ttf + Foundation.ttf + Ionicons.ttf + MaterialCommunityIcons.ttf + MaterialIcons.ttf + Octicons.ttf + Roboto_medium.ttf + Roboto.ttf + rubicon-icon-font.ttf + SimpleLineIcons.ttf + Zocial.ttf + + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIUserInterfaceStyle + Light + UIViewControllerBasedStatusBarAppearance + + + diff --git a/examples/advanced/advanced/ios/advanced/main.m b/examples/advanced/advanced/ios/advanced/main.m new file mode 100644 index 0000000..c316cf8 --- /dev/null +++ b/examples/advanced/advanced/ios/advanced/main.m @@ -0,0 +1,16 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import + +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/examples/advanced/advanced/metro.config.js b/examples/advanced/advanced/metro.config.js new file mode 100644 index 0000000..13a9642 --- /dev/null +++ b/examples/advanced/advanced/metro.config.js @@ -0,0 +1,17 @@ +/** + * Metro configuration for React Native + * https://github.com/facebook/react-native + * + * @format + */ + +module.exports = { + transformer: { + getTransformOptions: async () => ({ + transform: { + experimentalImportSupport: false, + inlineRequires: false, + }, + }), + }, +}; diff --git a/examples/advanced/advanced/package-lock.json b/examples/advanced/advanced/package-lock.json new file mode 100644 index 0000000..540f8ec --- /dev/null +++ b/examples/advanced/advanced/package-lock.json @@ -0,0 +1,9140 @@ +{ + "name": "advanced", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/core": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.2.tgz", + "integrity": "sha512-eeD7VEZKfhK1KUXGiyPFettgF3m513f8FoBSWiQ1xTvl1RAopLs42Wp9+Ze911I6H0N9lNqJMDgoZT7gHsipeQ==", + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.7.2", + "@babel/helpers": "^7.7.0", + "@babel/parser": "^7.7.2", + "@babel/template": "^7.7.0", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.7.2", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "json5": "^2.1.0", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@babel/generator": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.2.tgz", + "integrity": "sha512-WthSArvAjYLz4TcbKOi88me+KmDJdKSlfwwN8CnUYn9jBkzhq0ZEPuBfkAWIvjJ3AdEV1Cf/+eSQTnp3IDJKlQ==", + "requires": { + "@babel/types": "^7.7.2", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.0.tgz", + "integrity": "sha512-k50CQxMlYTYo+GGyUGFwpxKVtxVJi9yh61sXZji3zYHccK9RYliZGSTOgci85T+r+0VFN2nWbGM04PIqwfrpMg==", + "requires": { + "@babel/types": "^7.7.0" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.0.tgz", + "integrity": "sha512-Cd8r8zs4RKDwMG/92lpZcnn5WPQ3LAMQbCw42oqUh4s7vsSN5ANUZjMel0OOnxDLq57hoDDbai+ryygYfCTOsw==", + "requires": { + "@babel/helper-explode-assignable-expression": "^7.7.0", + "@babel/types": "^7.7.0" + } + }, + "@babel/helper-builder-react-jsx": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.7.0.tgz", + "integrity": "sha512-LSln3cexwInTMYYoFeVLKnYPPMfWNJ8PubTBs3hkh7wCu9iBaqq1OOyW+xGmEdLxT1nhsl+9SJ+h2oUDYz0l2A==", + "requires": { + "@babel/types": "^7.7.0", + "esutils": "^2.0.0" + } + }, + "@babel/helper-call-delegate": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.7.0.tgz", + "integrity": "sha512-Su0Mdq7uSSWGZayGMMQ+z6lnL00mMCnGAbO/R0ZO9odIdB/WNU/VfQKqMQU0fdIsxQYbRjDM4BixIa93SQIpvw==", + "requires": { + "@babel/helper-hoist-variables": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.7.0.tgz", + "integrity": "sha512-MZiB5qvTWoyiFOgootmRSDV1udjIqJW/8lmxgzKq6oDqxdmHUjeP2ZUOmgHdYjmUVNABqRrHjYAYRvj8Eox/UA==", + "requires": { + "@babel/helper-function-name": "^7.7.0", + "@babel/helper-member-expression-to-functions": "^7.7.0", + "@babel/helper-optimise-call-expression": "^7.7.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.7.0", + "@babel/helper-split-export-declaration": "^7.7.0" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.2.tgz", + "integrity": "sha512-pAil/ZixjTlrzNpjx+l/C/wJk002Wo7XbbZ8oujH/AoJ3Juv0iN/UTcPUHXKMFLqsfS0Hy6Aow8M31brUYBlQQ==", + "requires": { + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.6.0" + } + }, + "@babel/helper-define-map": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.7.0.tgz", + "integrity": "sha512-kPKWPb0dMpZi+ov1hJiwse9dWweZsz3V9rP4KdytnX1E7z3cTNmFGglwklzFPuqIcHLIY3bgKSs4vkwXXdflQA==", + "requires": { + "@babel/helper-function-name": "^7.7.0", + "@babel/types": "^7.7.0", + "lodash": "^4.17.13" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.0.tgz", + "integrity": "sha512-CDs26w2shdD1urNUAji2RJXyBFCaR+iBEGnFz3l7maizMkQe3saVw9WtjG1tz8CwbjvlFnaSLVhgnu1SWaherg==", + "requires": { + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0" + } + }, + "@babel/helper-function-name": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.0.tgz", + "integrity": "sha512-tDsJgMUAP00Ugv8O2aGEua5I2apkaQO7lBGUq1ocwN3G23JE5Dcq0uh3GvFTChPa4b40AWiAsLvCZOA2rdnQ7Q==", + "requires": { + "@babel/helper-get-function-arity": "^7.7.0", + "@babel/template": "^7.7.0", + "@babel/types": "^7.7.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.0.tgz", + "integrity": "sha512-tLdojOTz4vWcEnHWHCuPN5P85JLZWbm5Fx5ZsMEMPhF3Uoe3O7awrbM2nQ04bDOUToH/2tH/ezKEOR8zEYzqyw==", + "requires": { + "@babel/types": "^7.7.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.0.tgz", + "integrity": "sha512-LUe/92NqsDAkJjjCEWkNe+/PcpnisvnqdlRe19FahVapa4jndeuJ+FBiTX1rcAKWKcJGE+C3Q3tuEuxkSmCEiQ==", + "requires": { + "@babel/types": "^7.7.0" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.0.tgz", + "integrity": "sha512-QaCZLO2RtBcmvO/ekOLp8p7R5X2JriKRizeDpm5ChATAFWrrYDcDxPuCIBXKyBjY+i1vYSdcUTMIb8psfxHDPA==", + "requires": { + "@babel/types": "^7.7.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.7.0.tgz", + "integrity": "sha512-Dv3hLKIC1jyfTkClvyEkYP2OlkzNvWs5+Q8WgPbxM5LMeorons7iPP91JM+DU7tRbhqA1ZeooPaMFvQrn23RHw==", + "requires": { + "@babel/types": "^7.7.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.7.0.tgz", + "integrity": "sha512-rXEefBuheUYQyX4WjV19tuknrJFwyKw0HgzRwbkyTbB+Dshlq7eqkWbyjzToLrMZk/5wKVKdWFluiAsVkHXvuQ==", + "requires": { + "@babel/helper-module-imports": "^7.7.0", + "@babel/helper-simple-access": "^7.7.0", + "@babel/helper-split-export-declaration": "^7.7.0", + "@babel/template": "^7.7.0", + "@babel/types": "^7.7.0", + "lodash": "^4.17.13" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.0.tgz", + "integrity": "sha512-48TeqmbazjNU/65niiiJIJRc5JozB8acui1OS7bSd6PgxfuovWsvjfWSzlgx+gPFdVveNzUdpdIg5l56Pl5jqg==", + "requires": { + "@babel/types": "^7.7.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", + "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==" + }, + "@babel/helper-regex": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz", + "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==", + "requires": { + "lodash": "^4.17.13" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.0.tgz", + "integrity": "sha512-pHx7RN8X0UNHPB/fnuDnRXVZ316ZigkO8y8D835JlZ2SSdFKb6yH9MIYRU4fy/KPe5sPHDFOPvf8QLdbAGGiyw==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.7.0", + "@babel/helper-wrap-function": "^7.7.0", + "@babel/template": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.7.0.tgz", + "integrity": "sha512-5ALYEul5V8xNdxEeWvRsBzLMxQksT7MaStpxjJf9KsnLxpAKBtfw5NeMKZJSYDa0lKdOcy0g+JT/f5mPSulUgg==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.7.0", + "@babel/helper-optimise-call-expression": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.7.0.tgz", + "integrity": "sha512-AJ7IZD7Eem3zZRuj5JtzFAptBw7pMlS3y8Qv09vaBWoFsle0d1kAn5Wq6Q9MyBXITPOKnxwkZKoAm4bopmv26g==", + "requires": { + "@babel/template": "^7.7.0", + "@babel/types": "^7.7.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.0.tgz", + "integrity": "sha512-HgYSI8rH08neWlAH3CcdkFg9qX9YsZysZI5GD8LjhQib/mM0jGOZOVkoUiiV2Hu978fRtjtsGsW6w0pKHUWtqA==", + "requires": { + "@babel/types": "^7.7.0" + } + }, + "@babel/helper-wrap-function": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.7.0.tgz", + "integrity": "sha512-sd4QjeMgQqzshSjecZjOp8uKfUtnpmCyQhKQrVJBBgeHAB/0FPi33h3AbVlVp07qQtMD4QgYSzaMI7VwncNK/w==", + "requires": { + "@babel/helper-function-name": "^7.7.0", + "@babel/template": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0" + } + }, + "@babel/helpers": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.7.0.tgz", + "integrity": "sha512-VnNwL4YOhbejHb7x/b5F39Zdg5vIQpUUNzJwx0ww1EcVRt41bbGRZWhAURrfY32T5zTT3qwNOQFWpn+P0i0a2g==", + "requires": { + "@babel/template": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0" + } + }, + "@babel/highlight": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.3.tgz", + "integrity": "sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A==" + }, + "@babel/plugin-external-helpers": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-external-helpers/-/plugin-external-helpers-7.2.0.tgz", + "integrity": "sha512-QFmtcCShFkyAsNtdCM3lJPmRe1iB+vPZymlB4LnDIKEBj2yKQLQKtoxXxJ8ePT5fwMl4QGg303p4mB0UsSI2/g==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.7.0.tgz", + "integrity": "sha512-tufDcFA1Vj+eWvwHN+jvMN6QsV5o+vUlytNKrbMiCeDL0F2j92RURzUsUMWE5EJkLyWxjdUslCsMQa9FWth16A==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.7.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-proposal-export-default-from": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.5.2.tgz", + "integrity": "sha512-wr9Itk05L1/wyyZKVEmXWCdcsp/e185WUNl6AfYZeEKYaUPPvHXRDqO5K1VH7/UamYqGJowFRuCv30aDYZawsg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.2.0" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.4.4.tgz", + "integrity": "sha512-Amph7Epui1Dh/xxUxS2+K22/MUi6+6JVTvy3P58tja3B6yKTSjwwx0/d83rF7551D6PVSSoplQb8GCwqec7HRw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.2.0" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz", + "integrity": "sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.6.0.tgz", + "integrity": "sha512-kj4gkZ6qUggkprRq3Uh5KP8XnE1MdIO0J7MhdDX8+rAbB6dJ2UrensGIS+0NPZAaaJ1Vr0PN6oLUgXMU1uMcSg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.2.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.2.0.tgz", + "integrity": "sha512-UxYaGXYQ7rrKJS/PxIKRkv3exi05oH7rokBAsmCSsCxz1sVPZ7Fu6FzKoGgUvmY+0YgSkYHgUoCh5R5bCNBQlw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz", + "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-export-default-from": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.2.0.tgz", + "integrity": "sha512-c7nqUnNST97BWPtoe+Ssi+fJukc9P9/JMZ71IOMNQWza2E+Psrd46N6AEvtw6pqK+gt7ChjXyrw4SPDO79f3Lw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-flow": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.7.0.tgz", + "integrity": "sha512-vQMV07p+L+jZeUnvX3pEJ9EiXGCjB5CTTvsirFD9rpEuATnoAvLBLoYbw1v5tyn3d2XxSuvEKi8cV3KqYUa0vQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz", + "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.2.0.tgz", + "integrity": "sha512-lRCEaKE+LTxDQtgbYajI04ddt6WW0WJq57xqkAZ+s11h4YgfRHhVA/Y2VhfPzzFD4qeLHWg32DMp9HooY4Kqlg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", + "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.2.0.tgz", + "integrity": "sha512-HtGCtvp5Uq/jH/WNUPkK6b7rufnCPLLlDAFN7cmACoIjaOOiXxUt3SswU5loHqrhtqTsa/WoLQ1OQ1AGuZqaWA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz", + "integrity": "sha512-dGwbSMA1YhVS8+31CnPR7LB4pcbrzcV99wQzby4uAfrkZPYZlQ7ImwdpzLqi6Z6IL02b8IAL379CaMwo0x5Lag==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", + "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.0.tgz", + "integrity": "sha512-vLI2EFLVvRBL3d8roAMqtVY0Bm9C1QzLkdS57hiKrjUBSqsQYrBsMCeOg/0KK7B0eK9V71J5mWcha9yyoI2tZw==", + "requires": { + "@babel/helper-module-imports": "^7.7.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.7.0" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", + "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.3.tgz", + "integrity": "sha512-7hvrg75dubcO3ZI2rjYTzUrEuh1E9IyDEhhB6qfcooxhDA33xx2MasuLVgdxzcP6R/lipAC6n9ub9maNW6RKdw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "lodash": "^4.17.13" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.0.tgz", + "integrity": "sha512-/b3cKIZwGeUesZheU9jNYcwrEA7f/Bo4IdPmvp7oHgvks2majB5BoT5byAql44fiNQYOPzhk2w8DbgfuafkMoA==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.7.0", + "@babel/helper-define-map": "^7.7.0", + "@babel/helper-function-name": "^7.7.0", + "@babel/helper-optimise-call-expression": "^7.7.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.7.0", + "@babel/helper-split-export-declaration": "^7.7.0", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", + "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz", + "integrity": "sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", + "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-flow-strip-types": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.6.3.tgz", + "integrity": "sha512-l0ETkyEofkqFJ9LS6HChNIKtVJw2ylKbhYMlJ5C6df+ldxxaLIyXY4yOdDQQspfFpV8/vDiaWoJlvflstlYNxg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.2.0" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz", + "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.0.tgz", + "integrity": "sha512-P5HKu0d9+CzZxP5jcrWdpe7ZlFDe24bmqP6a6X8BHEBl/eizAsY8K6LX8LASZL0Jxdjm5eEfzp+FIrxCm/p8bA==", + "requires": { + "@babel/helper-function-name": "^7.7.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", + "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz", + "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.0.tgz", + "integrity": "sha512-KEMyWNNWnjOom8vR/1+d+Ocz/mILZG/eyHHO06OuBQ2aNhxT62fr4y6fGOplRx+CxCSp3IFwesL8WdINfY/3kg==", + "requires": { + "@babel/helper-module-transforms": "^7.7.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-simple-access": "^7.7.0", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-object-assign": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.2.0.tgz", + "integrity": "sha512-nmE55cZBPFgUktbF2OuoZgPRadfxosLOpSgzEPYotKSls9J4pEPcembi8r78RU37Rph6UApCpNmsQA4QMWK9Ng==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz", + "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.5.5" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz", + "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==", + "requires": { + "@babel/helper-call-delegate": "^7.4.4", + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz", + "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz", + "integrity": "sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.7.0.tgz", + "integrity": "sha512-mXhBtyVB1Ujfy+0L6934jeJcSXj/VCg6whZzEcgiiZHNS0PGC7vUCsZDQCxxztkpIdF+dY1fUMcjAgEOC3ZOMQ==", + "requires": { + "@babel/helper-builder-react-jsx": "^7.7.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.5.0.tgz", + "integrity": "sha512-58Q+Jsy4IDCZx7kqEZuSDdam/1oW8OdDX8f+Loo6xyxdfg1yF0GE2XNJQSTZCaMol93+FBzpWiPEwtbMloAcPg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.0.tgz", + "integrity": "sha512-AXmvnC+0wuj/cFkkS/HFHIojxH3ffSXE+ttulrqWjZZRaUOonfJc60e1wSNT4rV8tIunvu/R3wCp71/tLAa9xg==", + "requires": { + "regenerator-transform": "^0.14.0" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.6.2.tgz", + "integrity": "sha512-cqULw/QB4yl73cS5Y0TZlQSjDvNkzDbu0FurTZyHlJpWE5T3PCMdnyV+xXoH1opr1ldyHODe3QAX3OMAii5NxA==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "resolve": "^1.8.1", + "semver": "^5.5.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", + "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz", + "integrity": "sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", + "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz", + "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.7.2.tgz", + "integrity": "sha512-UWhDaJRqdPUtdK1s0sKYdoRuqK0NepjZto2UZltvuCgMoMZmdjhgz5hcRokie/3aYEaSz3xvusyoayVaq4PjRg==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.7.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-typescript": "^7.2.0" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.0.tgz", + "integrity": "sha512-RrThb0gdrNwFAqEAAx9OWgtx6ICK69x7i9tCnMdVrxQwSDp/Abu9DXFU5Hh16VP33Rmxh04+NGW28NsIkFvFKA==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.7.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/register": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.7.0.tgz", + "integrity": "sha512-HV3GJzTvSoyOMWGYn2TAh6uL6g+gqKTgEZ99Q3+X9UURT1VPT/WcU46R61XftIc5rXytcOHZ4Z0doDlsjPomIg==", + "requires": { + "find-cache-dir": "^2.0.0", + "lodash": "^4.17.13", + "make-dir": "^2.1.0", + "pirates": "^4.0.0", + "source-map-support": "^0.5.16" + } + }, + "@babel/runtime": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.2.tgz", + "integrity": "sha512-JONRbXbTXc9WQE2mAZd1p0Z3DZ/6vaQIkgYMSTP3KjRCyd7rCZCcfhCyX+YjwcKxcZ82UrxbRD358bpExNgrjw==", + "requires": { + "regenerator-runtime": "^0.13.2" + } + }, + "@babel/template": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.0.tgz", + "integrity": "sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/types": "^7.7.0" + } + }, + "@babel/traverse": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.2.tgz", + "integrity": "sha512-TM01cXib2+rgIZrGJOLaHV/iZUAxf4A0dt5auY6KNZ+cm6aschuJGqKJM3ROTt3raPUdIDk9siAufIFEleRwtw==", + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.7.2", + "@babel/helper-function-name": "^7.7.0", + "@babel/helper-split-export-declaration": "^7.7.0", + "@babel/parser": "^7.7.2", + "@babel/types": "^7.7.2", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "@babel/types": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.2.tgz", + "integrity": "sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA==", + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "@cnakazawa/watch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", + "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, + "@hapi/address": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.2.tgz", + "integrity": "sha512-O4QDrx+JoGKZc6aN64L04vqa7e41tIiLU+OvKdcYaEMP97UttL0f9GIi9/0A4WAMx0uBd6SidDIhktZhgOcN8Q==" + }, + "@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", + "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" + }, + "@hapi/hoek": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.0.tgz", + "integrity": "sha512-7XYT10CZfPsH7j9F1Jmg1+d0ezOux2oM2GfArAzLwWe4mE2Dr3hVjsAL6+TFY49RRJlCdJDMw3nJsLFroTc8Kw==" + }, + "@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "requires": { + "@hapi/address": "2.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", + "@hapi/topo": "3.x.x" + } + }, + "@hapi/topo": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", + "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "requires": { + "@hapi/hoek": "^8.3.0" + } + }, + "@jest/console": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", + "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", + "requires": { + "@jest/source-map": "^24.9.0", + "chalk": "^2.0.1", + "slash": "^2.0.0" + }, + "dependencies": { + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" + } + } + }, + "@jest/core": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", + "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/reporters": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-changed-files": "^24.9.0", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-resolve-dependencies": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "jest-watcher": "^24.9.0", + "micromatch": "^3.1.10", + "p-each-series": "^1.0.0", + "realpath-native": "^1.1.0", + "rimraf": "^2.5.4", + "slash": "^2.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + } + } + }, + "@jest/environment": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", + "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", + "dev": true, + "requires": { + "@jest/fake-timers": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0" + } + }, + "@jest/fake-timers": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", + "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", + "requires": { + "@jest/types": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0" + } + }, + "@jest/reporters": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", + "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "istanbul-lib-coverage": "^2.0.2", + "istanbul-lib-instrument": "^3.0.1", + "istanbul-lib-report": "^2.0.4", + "istanbul-lib-source-maps": "^3.0.1", + "istanbul-reports": "^2.2.6", + "jest-haste-map": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.6.0", + "node-notifier": "^5.4.2", + "slash": "^2.0.0", + "source-map": "^0.6.0", + "string-length": "^2.0.0" + }, + "dependencies": { + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/source-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", + "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "@jest/test-result": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", + "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", + "requires": { + "@jest/console": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/istanbul-lib-coverage": "^2.0.0" + } + }, + "@jest/test-sequencer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", + "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", + "dev": true, + "requires": { + "@jest/test-result": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0" + } + }, + "@jest/transform": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", + "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^24.9.0", + "babel-plugin-istanbul": "^5.1.0", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.1.15", + "jest-haste-map": "^24.9.0", + "jest-regex-util": "^24.9.0", + "jest-util": "^24.9.0", + "micromatch": "^3.1.10", + "pirates": "^4.0.1", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "2.4.1" + }, + "dependencies": { + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "write-file-atomic": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", + "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + } + } + }, + "@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + } + }, + "@react-native-community/cli-platform-android": { + "version": "3.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-3.0.0-alpha.7.tgz", + "integrity": "sha512-Ot/4K841f3vJZM5K7Za/bYgGeXUJyBsZZuoFvnEMAmR/tS6QCrsv8NQ7f/E3HmxvWaSEVNiiF8NiW2+qo6YDxg==", + "requires": { + "@react-native-community/cli-tools": "^3.0.0-alpha.7", + "chalk": "^2.4.2", + "execa": "^1.0.0", + "jetifier": "^1.6.2", + "logkitty": "^0.6.0", + "slash": "^3.0.0", + "xmldoc": "^1.1.2" + } + }, + "@react-native-community/cli-platform-ios": { + "version": "3.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-3.0.0-alpha.7.tgz", + "integrity": "sha512-6qM5LpzhCEhkb9MC+nxrOHX2TxoN4qm8+Vg9byIW/wExl8dWCTneRUbQ5qFlkkMksS2U63LiRVSCXK08d6x5bA==", + "requires": { + "@react-native-community/cli-tools": "^3.0.0-alpha.7", + "chalk": "^2.4.2", + "js-yaml": "^3.13.1", + "xcode": "^2.0.0" + } + }, + "@react-native-community/cli-tools": { + "version": "3.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-3.0.0-alpha.7.tgz", + "integrity": "sha512-x4XdeMtAx7RC1YP5cqLWIggXOuzuANItWi8BD8R/ak6GWMRd3X5L2HFuLa6GDXgkWSXtoUvqOilJplhVhLRrmQ==", + "requires": { + "chalk": "^2.4.2", + "lodash": "^4.17.5", + "mime": "^2.4.1", + "node-fetch": "^2.5.0" + } + }, + "@react-native-community/cli-types": { + "version": "3.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-3.0.0-alpha.7.tgz", + "integrity": "sha512-anT+l41FK7EJXOlOx8ZzIgskDuslT5A5NkMg2Kt3YzAxf8wrCBbOo5/CjnuW6pi9fvjGgB810Yw3tFSl4yZY4A==" + }, + "@react-native-community/eslint-config": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@react-native-community/eslint-config/-/eslint-config-0.0.5.tgz", + "integrity": "sha512-jwO2tnKaTPTLX5XYXMHGEnFdf543SU7jz98/OF5mDH3b7lP+BOaCD+jVfqqHoDRkcqyPlYiR1CgwVGWpi0vMWg==", + "dev": true, + "requires": { + "@typescript-eslint/eslint-plugin": "^1.5.0", + "@typescript-eslint/parser": "^1.5.0", + "babel-eslint": "10.0.1", + "eslint-plugin-eslint-comments": "^3.1.1", + "eslint-plugin-flowtype": "2.50.3", + "eslint-plugin-jest": "22.4.1", + "eslint-plugin-prettier": "2.6.2", + "eslint-plugin-react": "7.12.4", + "eslint-plugin-react-hooks": "^1.5.1", + "eslint-plugin-react-native": "3.6.0", + "prettier": "1.16.4" + } + }, + "@react-navigation/core": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-3.5.1.tgz", + "integrity": "sha512-q7NyhWVYOhVIWqL2GZKa6G78YarXaVTTtOlSDkvy4ZIggo40wZzamlnrJRvsaQX46gsgw45FAWb5SriHh8o7eA==", + "requires": { + "hoist-non-react-statics": "^3.3.0", + "path-to-regexp": "^1.7.0", + "query-string": "^6.4.2", + "react-is": "^16.8.6" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-wbg3bpgA/ZqWrZuMOeJi8+SKMhr7X9TesL/rXMjTzh0p0JUBo3II8DHboYbuIXWRlttrUFxwcu/5kygrCw8fJw==", + "requires": { + "react-is": "^16.7.0" + } + } + } + }, + "@react-navigation/native": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-3.6.2.tgz", + "integrity": "sha512-Cybeou6N82ZeRmgnGlu+wzlV3z5BZQR2dmYaNFV1TNLUGHqtvv8E7oNw9uYcz9Ox5LFbiX+FdNTn2d6ZPlK0kg==", + "requires": { + "hoist-non-react-statics": "^3.0.1", + "react-native-safe-area-view": "^0.14.1", + "react-native-screens": "^1.0.0 || ^1.0.0-alpha" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-wbg3bpgA/ZqWrZuMOeJi8+SKMhr7X9TesL/rXMjTzh0p0JUBo3II8DHboYbuIXWRlttrUFxwcu/5kygrCw8fJw==", + "requires": { + "react-is": "^16.7.0" + } + } + } + }, + "@types/babel__core": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.3.tgz", + "integrity": "sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.0.tgz", + "integrity": "sha512-c1mZUu4up5cp9KROs/QAw0gTeHrw/x7m52LcnvMxxOZ03DmLwPV0MlGmlgzV3cnSdjhJOZsj7E7FHeioai+egw==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", + "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.7.tgz", + "integrity": "sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", + "dev": true + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", + "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==" + }, + "@types/istanbul-lib-report": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", + "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==", + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", + "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", + "requires": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "@types/json-schema": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.3.tgz", + "integrity": "sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A==", + "dev": true + }, + "@types/mkdirp": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz", + "integrity": "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==", + "requires": { + "@types/node": "*" + } + }, + "@types/node": { + "version": "12.12.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.7.tgz", + "integrity": "sha512-E6Zn0rffhgd130zbCbAr/JdXfXkoOUFAKNs/rF8qnafSJ8KYaA/j3oz7dcwal+lYjLA7xvdd5J4wdYpCTlP8+w==" + }, + "@types/node-notifier": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@types/node-notifier/-/node-notifier-5.4.0.tgz", + "integrity": "sha512-M1XvCG6Rwej6+W0+kWultE46YS7erOy+W7suRmXtKwLGT3ytj6YEe9lqo47nRfL1xILzg9xJpKeNczIsWR8ymw==", + "requires": { + "@types/node": "*" + } + }, + "@types/semver": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-6.2.0.tgz", + "integrity": "sha512-1OzrNb4RuAzIT7wHSsgZRlMBlNsJl+do6UblR7JMW4oB7bbR+uBEYtUh7gEc/jM84GGilh68lSOokyM/zNUlBA==" + }, + "@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==" + }, + "@types/ws": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.3.tgz", + "integrity": "sha512-yBTM0P05Tx9iXGq00BbJPo37ox68R5vaGTXivs6RGh/BQ6QP5zqZDGWdAO6JbRE/iR1l80xeGAwCQS2nMV9S/w==", + "requires": { + "@types/node": "*" + } + }, + "@types/yargs": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.3.tgz", + "integrity": "sha512-K8/LfZq2duW33XW/tFwEAfnZlqIfVsoyRB3kfXdPXYhl0nfM8mmh7GS0jg7WrX2Dgq/0Ha/pR1PaR+BvmWwjiQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.1.0.tgz", + "integrity": "sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==" + }, + "@typescript-eslint/eslint-plugin": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.13.0.tgz", + "integrity": "sha512-WQHCozMnuNADiqMtsNzp96FNox5sOVpU8Xt4meaT4em8lOG1SrOv92/mUbEHQVh90sldKSfcOc/I0FOb/14G1g==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "1.13.0", + "eslint-utils": "^1.3.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^2.0.1", + "tsutils": "^3.7.0" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz", + "integrity": "sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "1.13.0", + "eslint-scope": "^4.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-1.13.0.tgz", + "integrity": "sha512-ITMBs52PCPgLb2nGPoeT4iU3HdQZHcPaZVw+7CsFagRJHUhyeTgorEwHXhFf3e7Evzi8oujKNpHc8TONth8AdQ==", + "dev": true, + "requires": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "1.13.0", + "@typescript-eslint/typescript-estree": "1.13.0", + "eslint-visitor-keys": "^1.0.0" + } + }, + "@typescript-eslint/typescript-estree": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz", + "integrity": "sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw==", + "dev": true, + "requires": { + "lodash.unescape": "4.0.1", + "semver": "5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + } + } + }, + "abab": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", + "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==", + "dev": true + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "absolute-path": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/absolute-path/-/absolute-path-0.0.0.tgz", + "integrity": "sha1-p4di+9rftSl76ZsV01p4Wy8JW/c=" + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", + "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", + "dev": true + }, + "acorn-globals": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", + "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", + "dev": true, + "requires": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + }, + "dependencies": { + "acorn": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", + "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", + "dev": true + } + } + }, + "acorn-jsx": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz", + "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==", + "dev": true + }, + "acorn-walk": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", + "dev": true + }, + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "requires": { + "ansi-wrap": "^0.1.0" + } + }, + "ansi-cyan": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", + "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" + }, + "ansi-fragments": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", + "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", + "requires": { + "colorette": "^1.0.7", + "slice-ansi": "^2.0.0", + "strip-ansi": "^5.0.0" + } + }, + "ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-red": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", + "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=" + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=" + }, + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" + } + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=" + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=" + }, + "array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "art": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/art/-/art-0.10.3.tgz", + "integrity": "sha512-HXwbdofRTiJT6qZX/FnchtldzJjS3vkLJxQilc3Xj+ma2MXjY4UAyQ0ls1XZYVnDvVIBiFZbC6QsvtW86TD6tQ==" + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + } + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true + }, + "babel-eslint": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.1.tgz", + "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "^1.0.0" + }, + "dependencies": { + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + } + } + }, + "babel-jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", + "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", + "dev": true, + "requires": { + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/babel__core": "^7.1.0", + "babel-plugin-istanbul": "^5.1.0", + "babel-preset-jest": "^24.9.0", + "chalk": "^2.4.2", + "slash": "^2.0.0" + }, + "dependencies": { + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + } + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-istanbul": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", + "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "find-up": "^3.0.0", + "istanbul-lib-instrument": "^3.3.0", + "test-exclude": "^5.2.3" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + } + } + }, + "babel-plugin-jest-hoist": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", + "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", + "dev": true, + "requires": { + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "7.0.0-beta.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", + "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==" + }, + "babel-preset-fbjs": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.3.0.tgz", + "integrity": "sha512-7QTLTCd2gwB2qGoi5epSULMHugSVgpcVt5YAeiFO9ABLrutDQzKfGwzxgZHLpugq8qMdg/DhRZDZ5CLKxBkEbw==", + "requires": { + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-syntax-class-properties": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoped-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-member-expression-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-super": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-property-literals": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" + } + }, + "babel-preset-jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", + "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", + "dev": true, + "requires": { + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "babel-plugin-jest-hoist": "^24.9.0" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "big-integer": { + "version": "1.6.48", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", + "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==" + }, + "blueimp-md5": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.12.0.tgz", + "integrity": "sha512-zo+HIdIhzojv6F1siQPqPFROyVy7C50KzHv/k/Iz+BtvtVzSHXiMXOpq2wCfNkeBqdCv+V8XOV96tsEt2W/3rQ==" + }, + "bplist-creator": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.8.tgz", + "integrity": "sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA==", + "requires": { + "stream-buffers": "~2.2.0" + } + }, + "bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "requires": { + "big-integer": "^1.6.44" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "browser-process-hrtime": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", + "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", + "dev": true + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "requires": { + "rsvp": "^4.8.4" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=" + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "clamp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz", + "integrity": "sha1-ZqDmQBGBbjcZaCj9yMjBRzEshjQ=" + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-spinners": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.2.0.tgz", + "integrity": "sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ==" + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", + "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", + "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + }, + "colorette": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.1.0.tgz", + "integrity": "sha512-6S062WDQUXi6hOfkO/sBPVwE5ASXY4G2+b4atvhJfSsuUUhIaUKlkjLe9692Ipyt5/a+IPF5aVTu3V5gvXq5cg==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "command-exists": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.8.tgz", + "integrity": "sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw==" + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "compressible": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", + "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", + "requires": { + "mime-db": ">= 1.40.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + } + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "core-js": { + "version": "2.6.10", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.10.tgz", + "integrity": "sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "create-react-class": { + "version": "15.6.3", + "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz", + "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==", + "requires": { + "fbjs": "^0.8.9", + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + }, + "dependencies": { + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + }, + "fbjs": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "requires": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + } + } + } + }, + "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==" + } + } + }, + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "cssstyle": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", + "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", + "dev": true, + "requires": { + "cssom": "0.3.x" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + }, + "dependencies": { + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } + } + }, + "dayjs": { + "version": "1.8.17", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.17.tgz", + "integrity": "sha512-47VY/htqYqr9GHd7HW/h56PpQzRBSJcxIQFwqL3P20bMF/3az5c3PWdVY3LmPXFl6cQCYHL7c79b9ov+2bOBbw==" + }, + "debounce": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.0.tgz", + "integrity": "sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "deepmerge": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", + "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==" + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "requires": { + "clone": "^1.0.2" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", + "dev": true + }, + "diff-sequences": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", + "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", + "dev": true + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "requires": { + "webidl-conversions": "^4.0.2" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "envinfo": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.4.0.tgz", + "integrity": "sha512-FdDfnWnCVjxTTpWE3d6Jgh5JDIA3Cw7LCgpM/pI7kK1ORkjaqI2r6NqQ+ln2j0dfpgxY00AWieSvtkiZQKIItA==" + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "errorhandler": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", + "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", + "requires": { + "accepts": "~1.3.7", + "escape-html": "~1.0.3" + } + }, + "es-abstract": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.0.tgz", + "integrity": "sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.0", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-inspect": "^1.6.0", + "object-keys": "^1.1.1", + "string.prototype.trimleft": "^2.1.0", + "string.prototype.trimright": "^2.1.0" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escodegen": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz", + "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==", + "dev": true, + "requires": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "eslint": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.6.0.tgz", + "integrity": "sha512-PpEBq7b6qY/qrOmpYQ/jTMDYfuQMELR4g4WI1M/NaSDDD/bdcMb+dj4Hgks7p41kW2caXsPsEZAEAyAgjVVC0g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz", + "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==", + "dev": true, + "requires": { + "type-fest": "^0.5.2" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "eslint-scope": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "figures": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", + "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "inquirer": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.0.tgz", + "integrity": "sha512-rSdC7zelHdRQFkWnhsMu2+2SO41mpv2oF2zy4tMhmiLWkcKbOAs87fWAJhVXttKVwhdZvymvnuM95EyEXg2/tQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^2.4.2", + "cli-cursor": "^3.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^4.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "rxjs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", + "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "type-fest": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz", + "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==", + "dev": true + } + } + }, + "eslint-config-prettier": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.5.0.tgz", + "integrity": "sha512-cjXp8SbO9VFGW/Z7mbTydqS9to8Z58E5aYhj3e1+Hx7lS9s6gL5ILKNpCqZAFOVYRcSkWPFYljHrEh8QFEK5EQ==", + "requires": { + "get-stdin": "^6.0.0" + } + }, + "eslint-plugin-eslint-comments": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.1.2.tgz", + "integrity": "sha512-QexaqrNeteFfRTad96W+Vi4Zj1KFbkHHNMMaHZEYcovKav6gdomyGzaxSDSL3GoIyUOo078wRAdYlu1caiauIQ==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "ignore": "^5.0.5" + } + }, + "eslint-plugin-flowtype": { + "version": "2.50.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.3.tgz", + "integrity": "sha512-X+AoKVOr7Re0ko/yEXyM5SSZ0tazc6ffdIOocp2fFUlWoDt7DV0Bz99mngOkAFLOAWjqRA5jPwqUCbrx13XoxQ==", + "dev": true, + "requires": { + "lodash": "^4.17.10" + } + }, + "eslint-plugin-jest": { + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-22.4.1.tgz", + "integrity": "sha512-gcLfn6P2PrFAVx3AobaOzlIEevpAEf9chTpFZz7bYfc7pz8XRv7vuKTIE4hxPKZSha6XWKKplDQ0x9Pq8xX2mg==", + "dev": true + }, + "eslint-plugin-prettier": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.2.tgz", + "integrity": "sha512-tGek5clmW5swrAx1mdPYM8oThrBE83ePh7LeseZHBWfHVGrHPhKn7Y5zgRMbU/9D5Td9K4CEmUPjGxA7iw98Og==", + "dev": true, + "requires": { + "fast-diff": "^1.1.1", + "jest-docblock": "^21.0.0" + } + }, + "eslint-plugin-react": { + "version": "7.12.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz", + "integrity": "sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ==", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.0.1", + "object.fromentries": "^2.0.0", + "prop-types": "^15.6.2", + "resolve": "^1.9.0" + } + }, + "eslint-plugin-react-hooks": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz", + "integrity": "sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==", + "dev": true + }, + "eslint-plugin-react-native": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-native/-/eslint-plugin-react-native-3.6.0.tgz", + "integrity": "sha512-BEQcHZ06hZSBYWFVuNEq0xuui5VEsWpHDsZGBtfadHfCRqRMUrkYPgdDb3bpc60qShHE83kqIv59uKdinEg91Q==", + "dev": true, + "requires": { + "eslint-plugin-react-native-globals": "^0.1.1" + } + }, + "eslint-plugin-react-native-globals": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-native-globals/-/eslint-plugin-react-native-globals-0.1.2.tgz", + "integrity": "sha512-9aEPf1JEpiTjcFAmmyw8eiIXmcNZOqaZyHO77wgm0/dWfT/oxC1SrIq8ET38pMxHYrcB6Uew+TzUVsBeczF88g==", + "dev": true + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "dev": true + }, + "espree": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz", + "integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==", + "dev": true, + "requires": { + "acorn": "^7.1.0", + "acorn-jsx": "^5.1.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + }, + "eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" + }, + "exec-sh": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", + "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==" + }, + "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" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expect": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", + "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "ansi-styles": "^3.2.0", + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.9.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "requires": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "requires": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fb-watchman": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", + "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "requires": { + "bser": "^2.0.0" + } + }, + "fbjs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-1.0.0.tgz", + "integrity": "sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA==", + "requires": { + "core-js": "^2.4.1", + "fbjs-css-vars": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + } + }, + "fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + }, + "fbjs-scripts": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fbjs-scripts/-/fbjs-scripts-1.2.0.tgz", + "integrity": "sha512-5krZ8T0Bf8uky0abPoCLrfa7Orxd8UH4Qq8hRUF2RZYNMu+FmEOrBc7Ib3YVONmxTXTlLAvyrrdrVmksDb2OqQ==", + "requires": { + "@babel/core": "^7.0.0", + "ansi-colors": "^1.0.1", + "babel-preset-fbjs": "^3.2.0", + "core-js": "^2.4.1", + "cross-spawn": "^5.1.0", + "fancy-log": "^1.3.2", + "object-assign": "^4.0.1", + "plugin-error": "^0.1.2", + "semver": "^5.1.0", + "through2": "^2.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "dependencies": { + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + } + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "optional": true, + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "debug": { + "version": "4.1.1", + "bundled": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "bundled": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "bundled": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "bundled": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "bundled": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "optional": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==" + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" + }, + "hammerjs": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", + "integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE=" + }, + "handlebars": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.2.tgz", + "integrity": "sha512-29Zxv/cynYB7mkT1rVWQnV7mGX6v7H/miQ6dbEpYTKq5eJBN7PsRB+ViYJlcT6JINTSu4dVB9kOqEun78h6Exg==", + "dev": true, + "requires": { + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "uglify-js": { + "version": "3.6.9", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.9.tgz", + "integrity": "sha512-pcnnhaoG6RtrvHJ1dFncAe8Od6Nuy30oaJ82ts6//sGSXOP5UjBMEthiProjXmMNHOfd93sqlkztifFMcb+4yw==", + "dev": true, + "optional": true, + "requires": { + "commander": "~2.20.3", + "source-map": "~0.6.1" + } + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "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": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "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": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hermes-engine": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/hermes-engine/-/hermes-engine-0.2.1.tgz", + "integrity": "sha512-eNHUQHuadDMJARpaqvlCZoK/Nitpj6oywq3vQ3wCwEsww5morX34mW5PmKWQTO7aU0ck0hgulxR+EVDlXygGxQ==" + }, + "hoist-non-react-statics": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz", + "integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs=" + }, + "hosted-git-info": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", + "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==" + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", + "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", + "dev": true + }, + "image-size": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.6.3.tgz", + "integrity": "sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA==" + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + }, + "dependencies": { + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + } + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "dev": true, + "requires": { + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + } + }, + "istanbul-lib-report": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", + "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", + "dev": true, + "requires": { + "handlebars": "^4.1.2" + } + }, + "jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", + "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", + "dev": true, + "requires": { + "import-local": "^2.0.0", + "jest-cli": "^24.9.0" + }, + "dependencies": { + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "jest-cli": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", + "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", + "dev": true, + "requires": { + "@jest/core": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "import-local": "^2.0.0", + "is-ci": "^2.0.0", + "jest-config": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "prompts": "^2.0.1", + "realpath-native": "^1.1.0", + "yargs": "^13.3.0" + } + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "jest-changed-files": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", + "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "execa": "^1.0.0", + "throat": "^4.0.0" + } + }, + "jest-config": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", + "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^24.9.0", + "@jest/types": "^24.9.0", + "babel-jest": "^24.9.0", + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^24.9.0", + "jest-environment-node": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "micromatch": "^3.1.10", + "pretty-format": "^24.9.0", + "realpath-native": "^1.1.0" + } + }, + "jest-diff": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", + "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "diff-sequences": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-docblock": { + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.2.0.tgz", + "integrity": "sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==", + "dev": true + }, + "jest-each": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", + "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "jest-get-type": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-environment-jsdom": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", + "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0", + "jsdom": "^11.5.1" + } + }, + "jest-environment-node": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", + "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0" + } + }, + "jest-get-type": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", + "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==" + }, + "jest-haste-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", + "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", + "requires": { + "@jest/types": "^24.9.0", + "anymatch": "^2.0.0", + "fb-watchman": "^2.0.0", + "fsevents": "^1.2.7", + "graceful-fs": "^4.1.15", + "invariant": "^2.2.4", + "jest-serializer": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.9.0", + "micromatch": "^3.1.10", + "sane": "^4.0.3", + "walker": "^1.0.7" + } + }, + "jest-jasmine2": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", + "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^24.9.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0", + "throat": "^4.0.0" + } + }, + "jest-leak-detector": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", + "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", + "dev": true, + "requires": { + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-matcher-utils": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", + "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-message-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", + "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^2.0.1", + "micromatch": "^3.1.10", + "slash": "^2.0.0", + "stack-utils": "^1.0.1" + }, + "dependencies": { + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" + } + } + }, + "jest-mock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", + "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", + "requires": { + "@jest/types": "^24.9.0" + } + }, + "jest-pnp-resolver": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", + "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==", + "dev": true + }, + "jest-react-native": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/jest-react-native/-/jest-react-native-18.0.0.tgz", + "integrity": "sha1-d92QnwaTJFmfInxYxhwuYhaHJro=" + }, + "jest-regex-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", + "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==", + "dev": true + }, + "jest-resolve": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", + "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "jest-pnp-resolver": "^1.2.1", + "realpath-native": "^1.1.0" + } + }, + "jest-resolve-dependencies": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", + "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-snapshot": "^24.9.0" + } + }, + "jest-runner": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", + "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.4.2", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-config": "^24.9.0", + "jest-docblock": "^24.3.0", + "jest-haste-map": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-leak-detector": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.6.0", + "source-map-support": "^0.5.6", + "throat": "^4.0.0" + }, + "dependencies": { + "jest-docblock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", + "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", + "dev": true, + "requires": { + "detect-newline": "^2.1.0" + } + } + } + }, + "jest-runtime": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", + "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.9.0", + "@jest/source-map": "^24.3.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "strip-bom": "^3.0.0", + "yargs": "^13.3.0" + }, + "dependencies": { + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "jest-serializer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", + "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==" + }, + "jest-snapshot": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", + "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "expect": "^24.9.0", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^24.9.0", + "semver": "^6.2.0" + } + }, + "jest-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", + "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", + "requires": { + "@jest/console": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/source-map": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "callsites": "^3.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.15", + "is-ci": "^2.0.0", + "mkdirp": "^0.5.1", + "slash": "^2.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "jest-validate": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", + "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", + "requires": { + "@jest/types": "^24.9.0", + "camelcase": "^5.3.1", + "chalk": "^2.0.1", + "jest-get-type": "^24.9.0", + "leven": "^3.1.0", + "pretty-format": "^24.9.0" + } + }, + "jest-watcher": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", + "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", + "dev": true, + "requires": { + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "jest-util": "^24.9.0", + "string-length": "^2.0.0" + } + }, + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jetifier": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/jetifier/-/jetifier-1.6.4.tgz", + "integrity": "sha512-+f/4OLeqY8RAmXnonI1ffeY1DR8kMNJPhv5WMFehchf7U71cjMQVKkOz1n6asz6kfVoAqKNWJz1A/18i18AcXA==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsc-android": { + "version": "245459.0.0", + "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-245459.0.0.tgz", + "integrity": "sha512-wkjURqwaB1daNkDi2OYYbsLnIdC/lUM2nPXQKRs5pqEU9chDg435bjvo+LSaHotDENygHQDHe+ntUkkw2gwMtg==" + }, + "jsdom": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", + "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "acorn": "^5.5.3", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": "^1.0.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.1", + "escodegen": "^1.9.1", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.3.0", + "nwsapi": "^2.0.7", + "parse5": "4.0.0", + "pn": "^1.1.0", + "request": "^2.87.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.4", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.1", + "ws": "^5.2.0", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + }, + "ws": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "requires": { + "jsonify": "~0.0.0" + } + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json5": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", + "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jsx-ast-utils": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz", + "integrity": "sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "object.assign": "^4.1.0" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "requires": { + "graceful-fs": "^4.1.9" + } + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "requires": { + "invert-kv": "^2.0.0" + } + }, + "left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", + "dev": true + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "requires": { + "error-ex": "^1.2.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" + }, + "lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "requires": { + "chalk": "^2.0.1" + } + }, + "logkitty": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.6.1.tgz", + "integrity": "sha512-cHuXN8qUZuzX/7kB6VyS7kB4xyD24e8gyHXIFNhIv+fjW3P+jEXNUhj0o/7qWJtv7UZpbnPgUqzu/AZQ8RAqxQ==", + "requires": { + "ansi-fragments": "^0.2.1", + "dayjs": "^1.8.15", + "yargs": "^12.0.5" + } + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "requires": { + "tmpl": "1.0.x" + } + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "requires": { + "readable-stream": "^2.0.1" + } + }, + "metro": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.56.3.tgz", + "integrity": "sha512-mxHpvBGWanZ46wAEZVLinNO5IYMcFbTdMZIRhC7r+rvoSK6r9iPj95AujBfzLXMAl36RI2O3D7yp5hOYif/gEQ==", + "requires": { + "@babel/core": "^7.0.0", + "@babel/generator": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/plugin-external-helpers": "^7.0.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "absolute-path": "^0.0.0", + "async": "^2.4.0", + "babel-preset-fbjs": "^3.1.2", + "buffer-crc32": "^0.2.13", + "chalk": "^2.4.1", + "concat-stream": "^1.6.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "denodeify": "^1.2.1", + "eventemitter3": "^3.0.0", + "fbjs": "^1.0.0", + "fs-extra": "^1.0.0", + "graceful-fs": "^4.1.3", + "image-size": "^0.6.0", + "invariant": "^2.2.4", + "jest-haste-map": "^24.7.1", + "jest-worker": "^24.6.0", + "json-stable-stringify": "^1.0.1", + "lodash.throttle": "^4.1.1", + "merge-stream": "^1.0.1", + "metro-babel-register": "0.56.3", + "metro-babel-transformer": "0.56.3", + "metro-cache": "0.56.3", + "metro-config": "0.56.3", + "metro-core": "0.56.3", + "metro-inspector-proxy": "0.56.3", + "metro-minify-uglify": "0.56.3", + "metro-react-native-babel-preset": "0.56.3", + "metro-resolver": "0.56.3", + "metro-source-map": "0.56.3", + "metro-symbolicate": "0.56.3", + "mime-types": "2.1.11", + "mkdirp": "^0.5.1", + "node-fetch": "^2.2.0", + "nullthrows": "^1.1.0", + "resolve": "^1.5.0", + "rimraf": "^2.5.4", + "serialize-error": "^2.1.0", + "source-map": "^0.5.6", + "temp": "0.8.3", + "throat": "^4.1.0", + "wordwrap": "^1.0.0", + "write-file-atomic": "^1.2.0", + "ws": "^1.1.5", + "xpipe": "^1.0.5", + "yargs": "^9.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.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" + } + }, + "fs-extra": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", + "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "^1.0.0" + } + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "mime-db": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.23.0.tgz", + "integrity": "sha1-oxtAcK2uon1zLqMzdApk0OyaZlk=" + }, + "mime-types": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.11.tgz", + "integrity": "sha1-wlnEcb2oCKhdbNGTtDCl+uRHOzw=", + "requires": { + "mime-db": "~1.23.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + }, + "yargs": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz", + "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", + "requires": { + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^7.0.0" + } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "metro-babel-register": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/metro-babel-register/-/metro-babel-register-0.56.3.tgz", + "integrity": "sha512-ILCRtNFdW6vzqmLAG2MYWdTSE1vCAZqDKNggiNhlfViuoxmWAIL0vOqixl1CHZF5z4t55+fk46A0jSN7UgPyVw==", + "requires": { + "@babel/core": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/register": "^7.0.0", + "core-js": "^2.2.2", + "escape-string-regexp": "^1.0.5" + } + }, + "metro-babel-transformer": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.56.3.tgz", + "integrity": "sha512-N5/ftb3rBkt6uKlgYAv+lwtzYc4dK0tBpfZ8pjec3kcypGuGTuf4LTHEh65EuzySreLngYI0bQzoFSn3G3DYsw==", + "requires": { + "@babel/core": "^7.0.0", + "metro-source-map": "0.56.3" + } + }, + "metro-cache": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.56.3.tgz", + "integrity": "sha512-SsryVe/TVkt2IkEGnYhB3gQlg9iMlu8WJikQHcCEjMfPEnSIzmeymrX73fwQNPnTnN7F3E0HVjH6Wvq6fh0mcA==", + "requires": { + "jest-serializer": "^24.4.0", + "metro-core": "0.56.3", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4" + } + }, + "metro-config": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.56.3.tgz", + "integrity": "sha512-C3ZLA5y5gW5auDSQN5dsCTduJg7LXEiX/tLAADOkgXWVImr5P74x9Wt8y1MMWrKx6p+4p5RMDyEwWDMXJt/DwA==", + "requires": { + "cosmiconfig": "^5.0.5", + "jest-validate": "^24.7.0", + "metro": "0.56.3", + "metro-cache": "0.56.3", + "metro-core": "0.56.3", + "pretty-format": "^24.7.0" + } + }, + "metro-core": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.56.3.tgz", + "integrity": "sha512-OAaHP3mBdlACMZRwDJzZzYC0o2S3qfb4BBK75L8H4Ds+y3QUSrjsDEpHACcpaMTOds8rBvjzn+jjB5tqNoHfBA==", + "requires": { + "jest-haste-map": "^24.7.1", + "lodash.throttle": "^4.1.1", + "metro-resolver": "0.56.3", + "wordwrap": "^1.0.0" + } + }, + "metro-inspector-proxy": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.56.3.tgz", + "integrity": "sha512-7WtHinw+VJcunQ3q8El1MqqzYSRvXEjW5QE13VYwcLtnay3pvcqACeiQmGbWI0IqxB1+QH8tf3nkA7z7pQ7Vpw==", + "requires": { + "connect": "^3.6.5", + "debug": "^2.2.0", + "rxjs": "^5.4.3", + "ws": "^1.1.5", + "yargs": "^9.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.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": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "^1.0.0" + } + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + }, + "yargs": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz", + "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", + "requires": { + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^7.0.0" + } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "metro-minify-uglify": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.56.3.tgz", + "integrity": "sha512-b9ljyeUpkJWVlFy8M/i4aNbvEBI0zN9vJh1jfU7yx+k9dX7FulLnpGmAQxxQdEszcM//sJrsKNS1oLYBxr0NMQ==", + "requires": { + "uglify-es": "^3.1.9" + } + }, + "metro-react-native-babel-preset": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.56.3.tgz", + "integrity": "sha512-tGPzX2ZwI8vQ8SiNVBPUIgKqmaRNVB6rtJtHCBQZAYRiMbxh0NHCUoFfKBej6U5qVgxiYYHyN8oB23evG4/Oow==", + "requires": { + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.2.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-exponentiation-operator": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-assign": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.0.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "react-refresh": "^0.4.0" + } + }, + "metro-react-native-babel-transformer": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.56.3.tgz", + "integrity": "sha512-T87m4jDu0gIvJo8kWEvkodWFgQ8XBzJUESs1hUUTBSMIqTa31MdWfA1gs+MipadG7OsEJpcb9m83mGr8K70MWw==", + "requires": { + "@babel/core": "^7.0.0", + "babel-preset-fbjs": "^3.1.2", + "metro-babel-transformer": "0.56.3", + "metro-react-native-babel-preset": "0.56.3", + "metro-source-map": "0.56.3" + } + }, + "metro-resolver": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.56.3.tgz", + "integrity": "sha512-VvMl4xUp0fy76WiP3YDtzMmrn6tN/jwxOBqlTy9MjN6R9sUXrGyO5thwn/uKQqp5vwBTuJev7nZL7OKzwludKA==", + "requires": { + "absolute-path": "^0.0.0" + } + }, + "metro-source-map": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.56.3.tgz", + "integrity": "sha512-CheqWbJZSM0zjcNBqELUiocwH3XArrOk6alhVuzJ2gV/WTMBQFwP0TtQssSMwjnouMHNEzY8RxErXKXBk/zJmQ==", + "requires": { + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "invariant": "^2.2.4", + "metro-symbolicate": "0.56.3", + "ob1": "0.56.3", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + } + }, + "metro-symbolicate": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.56.3.tgz", + "integrity": "sha512-fSQtjjy4eiJDThSl9eloxMElhrs+5PQB+DKKzmTFXT8e2GDga+pa1xTBFRUACMO8BXGuWmxR7SnGDw0wo5Ngrw==", + "requires": { + "invariant": "^2.2.4", + "metro-source-map": "0.56.3", + "source-map": "^0.5.6", + "through2": "^2.0.1", + "vlq": "^1.0.0" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==" + }, + "mime-db": { + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", + "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==" + }, + "mime-types": { + "version": "2.1.25", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", + "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", + "requires": { + "mime-db": "1.42.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, + "morgan": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", + "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", + "requires": { + "basic-auth": "~2.0.0", + "debug": "2.6.9", + "depd": "~1.1.2", + "on-finished": "~2.3.0", + "on-headers": "~1.0.1" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "native-base": { + "version": "2.13.8", + "resolved": "https://registry.npmjs.org/native-base/-/native-base-2.13.8.tgz", + "integrity": "sha512-47Wm7bjH5Dc99gBUeVvsURyADU97aiLMLPGX4ewPgR9kW47TD9slS/Y5vGMToBgz1bsku9anXgN2T1rpdQbpFA==", + "requires": { + "blueimp-md5": "^2.5.0", + "clamp": "^1.0.1", + "color": "~3.1.2", + "create-react-class": "^15.6.3", + "eslint-config-prettier": "^6.0.0", + "fs-extra": "^2.0.0", + "jest-react-native": "^18.0.0", + "lodash": "^4.17.14", + "native-base-shoutem-theme": "0.3.1", + "opencollective-postinstall": "^2.0.2", + "print-message": "^2.1.0", + "prop-types": "^15.5.10", + "react-native-drawer": "2.5.1", + "react-native-easy-grid": "0.2.2", + "react-native-keyboard-aware-scroll-view": "0.9.1", + "react-native-vector-icons": "^6.6.0", + "react-timer-mixin": "^0.13.4", + "react-tween-state": "^0.1.5", + "tween-functions": "^1.0.1" + }, + "dependencies": { + "fs-extra": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", + "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "requires": { + "graceful-fs": "^4.1.6" + } + } + } + }, + "native-base-shoutem-theme": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/native-base-shoutem-theme/-/native-base-shoutem-theme-0.3.1.tgz", + "integrity": "sha512-uwEGhg6gwDuJTHuhNXRKbHtNjni1UI9qfAsVchIqfK7mQAHSNPVU1QRs9Hw6O2K/qLZaP/aJmNoZGc2h2EGSwA==", + "requires": { + "hoist-non-react-statics": "^1.0.5", + "lodash": "^4.17.14", + "prop-types": "^15.5.10" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node-fetch": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" + }, + "node-notifier": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", + "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", + "requires": { + "growly": "^1.3.0", + "is-wsl": "^1.1.0", + "semver": "^5.5.0", + "shellwords": "^0.1.1", + "which": "^1.3.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "^2.0.0" + } + }, + "nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "ob1": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.56.3.tgz", + "integrity": "sha512-3JL2ZyWOHDGTEAe4kcG+TxhGPKCCikgyoUIjE82JnXnmpR1LXItM9K3WhGsi4+O7oYngMW6FjpHHoc5xJTMkTQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.fromentries": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.1.tgz", + "integrity": "sha512-PUQv8Hbg3j2QX0IQYv3iAGCbGcu4yY4KQ92/dhA4sFSixBmSmp13UpDLs6jGK8rBtbmhNNIK99LD2k293jpiGA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.15.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "requires": { + "mimic-fn": "^1.0.0" + }, + "dependencies": { + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + } + } + }, + "open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "requires": { + "is-wsl": "^1.1.0" + } + }, + "opencollective-postinstall": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz", + "integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==" + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + } + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=" + }, + "ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "requires": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + } + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" + }, + "p-each-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", + "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", + "dev": true, + "requires": { + "p-reduce": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" + }, + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", + "dev": true + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + } + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==" + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + } + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "requires": { + "pify": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + } + } + }, + "plist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz", + "integrity": "sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==", + "requires": { + "base64-js": "^1.2.3", + "xmlbuilder": "^9.0.7", + "xmldom": "0.1.x" + } + }, + "plugin-error": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", + "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", + "requires": { + "ansi-cyan": "^0.1.1", + "ansi-red": "^0.1.1", + "arr-diff": "^1.0.1", + "arr-union": "^2.0.1", + "extend-shallow": "^1.1.2" + }, + "dependencies": { + "arr-diff": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", + "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", + "requires": { + "arr-flatten": "^1.0.1", + "array-slice": "^0.2.3" + } + }, + "arr-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", + "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=" + }, + "extend-shallow": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", + "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", + "requires": { + "kind-of": "^1.1.0" + } + }, + "kind-of": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=" + } + } + }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prettier": { + "version": "1.16.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.4.tgz", + "integrity": "sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==", + "dev": true + }, + "pretty-format": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", + "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", + "requires": { + "@jest/types": "^24.9.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" + } + }, + "print-message": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/print-message/-/print-message-2.1.0.tgz", + "integrity": "sha1-tViO0IsOG/d6x7y1y3gASvr5qJE=", + "requires": { + "chalk": "1.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz", + "integrity": "sha1-UJr7ZwZudJn36zU1x3RFdyri0Bk=", + "requires": { + "ansi-styles": "^2.1.0", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "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": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "~2.0.3" + } + }, + "prompts": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.0.tgz", + "integrity": "sha512-NfbbPPg/74fT7wk2XYQ7hAIp9zJyZp5Fu19iRbORqqy1BhtrkZ0fPafBU+7bmn8ie69DpT0R6QpJIN2oisYjJg==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.3" + } + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "psl": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz", + "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "query-string": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.9.0.tgz", + "integrity": "sha512-KG4bhCFYapExLsUHrFt+kQVEegF2agm4cpF/VNc6pZVthIfCc/GK8t8VyNIE3nyXG9DK3Tf2EGkxjR6/uRdYsA==", + "requires": { + "decode-uri-component": "^0.2.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + } + }, + "raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "requires": { + "performance-now": "^2.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "react": { + "version": "16.11.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.11.0.tgz", + "integrity": "sha512-M5Y8yITaLmU0ynd0r1Yvfq98Rmll6q8AxaEe88c8e7LxO8fZ2cNgmFt0aGAS9wzf1Ao32NKXtCl+/tVVtkxq6g==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + } + }, + "react-devtools-core": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-3.6.3.tgz", + "integrity": "sha512-+P+eFy/yo8Z/UH9J0DqHZuUM5+RI2wl249TNvMx3J2jpUomLQa4Zxl56GEotGfw3PIP1eI+hVf1s53FlUONStQ==", + "requires": { + "shell-quote": "^1.6.1", + "ws": "^3.3.1" + }, + "dependencies": { + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + } + } + }, + "react-is": { + "version": "16.12.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz", + "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==" + }, + "react-native": { + "version": "0.61.4", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.61.4.tgz", + "integrity": "sha512-L8U+dDEy4vP74yWYbb+2XKaZeUkbpCUoSzcmeEM8Oznt69q71Q4fuYyxZGrzVW6tMYw9ZzGXTkfLuOh2nvLeVw==", + "requires": { + "@babel/runtime": "^7.0.0", + "@react-native-community/cli": "^3.0.0-alpha.1", + "@react-native-community/cli-platform-android": "^3.0.0-alpha.1", + "@react-native-community/cli-platform-ios": "^3.0.0-alpha.1", + "abort-controller": "^3.0.0", + "art": "^0.10.0", + "base64-js": "^1.1.2", + "connect": "^3.6.5", + "create-react-class": "^15.6.3", + "escape-string-regexp": "^1.0.5", + "event-target-shim": "^5.0.1", + "fbjs": "^1.0.0", + "fbjs-scripts": "^1.1.0", + "hermes-engine": "^0.2.1", + "invariant": "^2.2.4", + "jsc-android": "^245459.0.0", + "metro-babel-register": "^0.56.0", + "metro-react-native-babel-transformer": "^0.56.0", + "metro-source-map": "^0.56.0", + "nullthrows": "^1.1.0", + "pretty-format": "^24.7.0", + "promise": "^7.1.1", + "prop-types": "^15.7.2", + "react-devtools-core": "^3.6.3", + "react-refresh": "^0.4.0", + "regenerator-runtime": "^0.13.2", + "scheduler": "0.15.0", + "stacktrace-parser": "^0.1.3", + "whatwg-fetch": "^3.0.0" + }, + "dependencies": { + "@react-native-community/cli": { + "version": "3.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-3.0.0-alpha.7.tgz", + "integrity": "sha512-gmAnmH9sqReBEvfZxk0A3gw0Ddb6UNHYvbjjyM+qgH2TbEAWCfLHLqiHNSCYxfO3hkDyz4mj/cvtb8ahFjTdIw==", + "requires": { + "@hapi/joi": "^15.0.3", + "@react-native-community/cli-platform-android": "^3.0.0-alpha.7", + "@react-native-community/cli-platform-ios": "^3.0.0-alpha.7", + "@react-native-community/cli-tools": "^3.0.0-alpha.7", + "@react-native-community/cli-types": "^3.0.0-alpha.7", + "@types/mkdirp": "^0.5.2", + "@types/node-notifier": "^5.4.0", + "@types/semver": "^6.0.2", + "@types/ws": "^6.0.3", + "chalk": "^2.4.2", + "command-exists": "^1.2.8", + "commander": "^2.19.0", + "compression": "^1.7.1", + "connect": "^3.6.5", + "cosmiconfig": "^5.1.0", + "deepmerge": "^3.2.0", + "envinfo": "^7.1.0", + "errorhandler": "^1.5.0", + "execa": "^1.0.0", + "find-up": "^4.1.0", + "fs-extra": "^7.0.1", + "glob": "^7.1.1", + "graceful-fs": "^4.1.3", + "inquirer": "^3.0.6", + "lodash": "^4.17.5", + "metro": "^0.56.0", + "metro-config": "^0.56.0", + "metro-core": "^0.56.0", + "metro-react-native-babel-transformer": "^0.56.0", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "morgan": "^1.9.0", + "node-notifier": "^5.2.1", + "open": "^6.2.0", + "ora": "^3.4.0", + "plist": "^3.0.0", + "semver": "^6.3.0", + "serve-static": "^1.13.1", + "shell-quote": "1.6.1", + "strip-ansi": "^5.2.0", + "sudo-prompt": "^9.0.0", + "wcwidth": "^1.0.1", + "ws": "^1.1.0" + } + } + } + }, + "react-native-camera": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/react-native-camera/-/react-native-camera-3.9.0.tgz", + "integrity": "sha512-qUhog1yd7FQ9xRTxN1SP+T5f4uLuVY5eXx6mMlBCNsqvYSoKCWFHH1Kpil9fx7d2iOl/o09o/7kHNcSl9RkrkQ==", + "requires": { + "prop-types": "^15.6.2" + } + }, + "react-native-drawer": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/react-native-drawer/-/react-native-drawer-2.5.1.tgz", + "integrity": "sha512-cxcQNbSWy5sbGi7anSVp6EDr6JarOBMY9lbFOeLFeVYbONiudoqRKbgEsSDgSw3/LFCLvUXK5zdjXCOedeytxQ==", + "requires": { + "prop-types": "^15.5.8", + "tween-functions": "^1.0.1" + } + }, + "react-native-easy-grid": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/react-native-easy-grid/-/react-native-easy-grid-0.2.2.tgz", + "integrity": "sha512-MlYrNIldnEMKn6TVatQN1P64GoVlwGIuz+8ncdfJ0Wq/xtzUkQwlil8Uksyp7MhKfENE09MQnGNcba6Mx3oSAA==", + "requires": { + "lodash": "^4.17.15" + } + }, + "react-native-gesture-handler": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-1.5.0.tgz", + "integrity": "sha512-YUOXHsGLajK1cFReQ4Xh0H9GUTxDW9cUZEVu1q+dVqur2urSKi63KklAFB2l8Neob9nl1E/w0c5hGcBP9FMCIA==", + "requires": { + "hammerjs": "^2.0.8", + "hoist-non-react-statics": "^2.3.1", + "invariant": "^2.2.4", + "prop-types": "^15.7.2" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", + "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" + } + } + }, + "react-native-iphone-x-helper": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.2.1.tgz", + "integrity": "sha512-/VbpIEp8tSNNHIvstuA3Swx610whci1Zpc9mqNkqn14DkMbw+ORviln2u0XyHG1kPvvwTNGZY6QpeFwxYaSdbQ==" + }, + "react-native-keyboard-aware-scroll-view": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/react-native-keyboard-aware-scroll-view/-/react-native-keyboard-aware-scroll-view-0.9.1.tgz", + "integrity": "sha512-tBZ8rmjELN0F6t5UBp5CW3NYmZXgVnJSzVCssv/OqG2t6kiB+OUTqxNvUP24K+HARX4H+XaW0aEJSFQkQCv6KA==", + "requires": { + "prop-types": "^15.6.2", + "react-native-iphone-x-helper": "^1.0.3" + } + }, + "react-native-safe-area-view": { + "version": "0.14.8", + "resolved": "https://registry.npmjs.org/react-native-safe-area-view/-/react-native-safe-area-view-0.14.8.tgz", + "integrity": "sha512-MtRSIcZNstxv87Jet+UsPhEd1tpGe8cVskDXlP657x6rHpSrbrc+y13ZNXrwAgGNNhqQNX7UJT68ZIq//ZRmvw==", + "requires": { + "hoist-non-react-statics": "^2.3.1" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", + "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" + } + } + }, + "react-native-screens": { + "version": "1.0.0-alpha.23", + "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-1.0.0-alpha.23.tgz", + "integrity": "sha512-tOxHGQUN83MTmQB4ghoQkibqOdGiX4JQEmeyEv96MKWO/x8T2PJv84ECUos9hD3blPRQwVwSpAid1PPPhrVEaw==", + "requires": { + "debounce": "^1.2.0" + } + }, + "react-native-vector-icons": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-6.6.0.tgz", + "integrity": "sha512-MImKVx8JEvVVBnaShMr7/yTX4Y062JZMupht1T+IEgbqBj4aQeQ1z2SH4VHWKNtWtppk4kz9gYyUiMWqx6tNSw==", + "requires": { + "lodash": "^4.0.0", + "prop-types": "^15.6.2", + "yargs": "^13.2.2" + }, + "dependencies": { + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "react-navigation": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/react-navigation/-/react-navigation-4.0.10.tgz", + "integrity": "sha512-7PqvmsdQ7HIyxPUMYbd9Uq//VoMdniEOLAOSvIhb/ExtbAt/1INSjUF+RiMWOMCWLTCNvNPRvTz7xy7qwWureg==", + "requires": { + "@react-navigation/core": "^3.5.1", + "@react-navigation/native": "^3.6.2" + } + }, + "react-navigation-stack": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/react-navigation-stack/-/react-navigation-stack-1.10.3.tgz", + "integrity": "sha512-1gksFi/g/Lg9sBhgLlD0OiEB5xnatHb4C0eNMA5tli9cTVlhq375XNPIqOiTyftibBmjdApAsZFj5srUCoOu/w==", + "requires": { + "prop-types": "^15.7.2" + } + }, + "react-refresh": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.2.tgz", + "integrity": "sha512-kv5QlFFSZWo7OlJFNYbxRtY66JImuP2LcrFgyJfQaf85gSP+byzG21UbDQEYjU7f//ny8rwiEkO6py2Y+fEgAQ==" + }, + "react-test-renderer": { + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.9.0.tgz", + "integrity": "sha512-R62stB73qZyhrJo7wmCW9jgl/07ai+YzvouvCXIJLBkRlRqLx4j9RqcLEAfNfU3OxTGucqR2Whmn3/Aad6L3hQ==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "react-is": "^16.9.0", + "scheduler": "^0.15.0" + } + }, + "react-timer-mixin": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/react-timer-mixin/-/react-timer-mixin-0.13.4.tgz", + "integrity": "sha512-4+ow23tp/Tv7hBM5Az5/Be/eKKF7DIvJ09voz5LyHGQaqqz9WV8YMs31eFvcYQs7d451LSg7kDJV70XYN/Ug/Q==" + }, + "react-tween-state": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/react-tween-state/-/react-tween-state-0.1.5.tgz", + "integrity": "sha1-6YsGZVHvuTy5LdG+FJlcLj3q4zk=", + "requires": { + "raf": "^3.1.0", + "tween-functions": "^1.0.1" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + } + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "realpath-native": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", + "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", + "dev": true, + "requires": { + "util.promisify": "^1.0.0" + } + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" + }, + "regenerate-unicode-properties": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", + "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", + "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" + }, + "regenerator-transform": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", + "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", + "requires": { + "private": "^0.1.6" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "regexpu-core": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", + "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==", + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.1.0", + "regjsgen": "^0.5.0", + "regjsparser": "^0.6.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.1.0" + } + }, + "regjsgen": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", + "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==" + }, + "regjsparser": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", + "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + } + } + }, + "request-promise-core": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", + "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "request-promise-native": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", + "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", + "dev": true, + "requires": { + "request-promise-core": "1.1.3", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + }, + "resolve": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "requires": { + "is-promise": "^2.1.0" + } + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=" + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "requires": { + "rx-lite": "*" + } + }, + "rxjs": { + "version": "5.5.12", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", + "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", + "requires": { + "symbol-observable": "1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "requires": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "scheduler": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.15.0.tgz", + "integrity": "sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serialize-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", + "integrity": "sha1-ULZ51WNc34Rme9yOWa9OW4HV9go=" + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "requires": { + "array-filter": "~0.0.0", + "array-map": "~0.0.0", + "array-reduce": "~0.0.0", + "jsonify": "~0.0.0" + } + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "simple-plist": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.1.0.tgz", + "integrity": "sha512-2i5Tc0BYAqppM7jVzmNrI+aEUntPolIq4fDgji6WuNNn1D/qYdn2KwoLhZdzQkE04lu9L5tUoeJsjuJAvd+lFg==", + "requires": { + "bplist-creator": "0.0.8", + "bplist-parser": "0.2.0", + "plist": "^3.0.1" + } + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } + } + }, + "sisteransi": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.4.tgz", + "integrity": "sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", + "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" + }, + "split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==" + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stack-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", + "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==" + }, + "stacktrace-parser": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.7.tgz", + "integrity": "sha512-Evm+NuZ2ZTwGazsbsZC+EV1EGsvyxgIvtNwbyFfeXaq/8L78M5Kdh0qpmQaTkUpbOAKbbPP7c7qZa7u8XFsrUA==", + "requires": { + "type-fest": "^0.7.1" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "stream-buffers": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=" + }, + "strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=" + }, + "string-length": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", + "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", + "dev": true, + "requires": { + "astral-regex": "^1.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string.prototype.trimleft": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", + "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", + "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "dev": true + }, + "sudo-prompt": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.1.1.tgz", + "integrity": "sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=" + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + } + } + }, + "temp": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", + "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", + "requires": { + "os-tmpdir": "^1.0.0", + "rimraf": "~2.2.6" + }, + "dependencies": { + "rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=" + } + } + }, + "test-exclude": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", + "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "dev": true, + "requires": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + } + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "throat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=" + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "dev": true + }, + "tsutils": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tween-functions": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tween-functions/-/tween-functions-1.2.0.tgz", + "integrity": "sha1-GuOlDnxguz3vd06scHrLynO7w/8=" + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==" + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "ua-parser-js": { + "version": "0.7.20", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.20.tgz", + "integrity": "sha512-8OaIKfzL5cpx8eCMAhhvTlft8GYF8b2eQr6JkCyVdrgjcytyOmPCXrqXFcUnhonRpLlh5yxEZVohm6mzaowUOw==" + }, + "uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "requires": { + "commander": "~2.13.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" + }, + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", + "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==" + }, + "unicode-property-aliases-ecmascript": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", + "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==" + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + } + } + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" + }, + "v8-compile-cache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", + "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vlq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", + "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==" + }, + "w3c-hr-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", + "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", + "dev": true, + "requires": { + "browser-process-hrtime": "^0.1.2" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "requires": { + "makeerror": "1.0.x" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "requires": { + "defaults": "^1.0.3" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", + "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "slide": "^1.1.5" + } + }, + "ws": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "requires": { + "options": ">=0.0.5", + "ultron": "1.0.x" + } + }, + "xcode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xcode/-/xcode-2.0.0.tgz", + "integrity": "sha512-5xF6RCjAdDEiEsbbZaS/gBRt3jZ/177otZcpoLCjGN/u1LrfgH7/Sgeeavpr/jELpyDqN2im3AKosl2G2W8hfw==", + "requires": { + "simple-plist": "^1.0.0", + "uuid": "^3.3.2" + } + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + }, + "xmldoc": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.1.2.tgz", + "integrity": "sha512-ruPC/fyPNck2BD1dpz0AZZyrEwMOrWTO5lDdIXS91rs3wtm4j+T8Rp2o+zoOYkkAxJTZRPOSnOGei1egoRmKMQ==", + "requires": { + "sax": "^1.2.1" + } + }, + "xmldom": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", + "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=" + }, + "xpipe": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/xpipe/-/xpipe-1.0.5.tgz", + "integrity": "sha1-jdi/Rfw/f1Xw4FS4ePQ6YmFNr98=" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + } + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } +} diff --git a/examples/advanced/advanced/package.json b/examples/advanced/advanced/package.json new file mode 100644 index 0000000..8adb67e --- /dev/null +++ b/examples/advanced/advanced/package.json @@ -0,0 +1,35 @@ +{ + "name": "advanced", + "version": "0.0.1", + "private": true, + "scripts": { + "android": "react-native run-android", + "ios": "react-native run-ios", + "start": "react-native start", + "test": "jest", + "lint": "eslint ." + }, + "dependencies": { + "react": "16.11.0", + "react-native": "0.61.4", + "react-navigation": "4.0.10", + "react-navigation-stack": "1.10.3", + "native-base": "2.13.8", + "react-native-gesture-handler": "1.5.0", + "underscore": "1.9.1", + "react-native-camera": "*" + }, + "devDependencies": { + "@babel/core": "7.7.2", + "@babel/runtime": "7.7.2", + "@react-native-community/eslint-config": "0.0.5", + "babel-jest": "24.9.0", + "eslint": "6.6.0", + "jest": "24.9.0", + "metro-react-native-babel-preset": "0.56.3", + "react-test-renderer": "16.9.0" + }, + "jest": { + "preset": "react-native" + } +} diff --git a/examples/advanced/advanced/src/App.js b/examples/advanced/advanced/src/App.js new file mode 100644 index 0000000..b7fd8dc --- /dev/null +++ b/examples/advanced/advanced/src/App.js @@ -0,0 +1,73 @@ +import conf from 'src/conf'; +import React from 'react'; +import { + StatusBar, + Text as RNText +} from 'react-native'; + +import {StyleProvider, Root, Input} from 'native-base'; +import {createAppContainer} from "react-navigation"; +import { createStackNavigator } from 'react-navigation-stack'; + +import {routesMap} from 'src/routes'; +import MainHeader from 'src/baseComponents/MainHeader'; + + + +// Disable text font scaling, it is a mess with native-base +RNText.defaultProps = RNText.defaultProps || {}; +RNText.defaultProps.allowFontScaling = false; +RNText.defaultProps.fontSize = conf.theme.variables.DefaultFontSize; +Input.defaultProps = Input.defaultProps || {}; +Input.defaultProps.allowFontScaling = false; +Input.defaultProps.fontSize = conf.theme.variables.DefaultFontSize; + + + +// Main stack navigator, used for authenticated routes only. +// Login won't use navigation. If we want further non authenticated screens +// we will need a separate router for it. +const StackNavigator = createStackNavigator ( + routesMap, + { + initialRouteName: "Home", + transitionConfig: () => ({ + transitionSpec: { + isInteraction: true, + useNativeDriver: true + } + }), + + headerMode: 'screen', + + defaultNavigationOptions: ({ navigation }) => { + return { + header: props => { + return ; + }, + gesturesEnabled: false + } + } + } +) + +const NavigatorApp = createAppContainer(StackNavigator); + + +const App = () => { + return ( + + + + + + + ) +} + + + +export default App; diff --git a/examples/advanced/advanced/src/baseComponents/Content.js b/examples/advanced/advanced/src/baseComponents/Content.js new file mode 100644 index 0000000..2527dba --- /dev/null +++ b/examples/advanced/advanced/src/baseComponents/Content.js @@ -0,0 +1,44 @@ +import React from "react"; +import {connectStyle} from "native-base"; +import {SafeAreaView, ScrollView} from 'react-native'; +import KeyboardShiftView from './KeyboardShiftView'; +import conf from 'src/conf'; + +// Replacement for NB's Component +// We will assign the same styles, but replace the component +// to use our own keyboard aware component since the one used by native-base is quite outdated + +const containerStyle = { flex: 1 }; +const contentPadding = conf.theme.variables.contentPadding; + + +// Copied from native-base source +class Content extends React.Component{ + + constructor(props) { + super(props); + this.state = { + }; + } + + render(){ + let {style, padder, contentContainerStyle, ...others} = this.props; + return ( + + + + ) + } +} + +const StyledContent = connectStyle('baseComponents.Content')(Content); + +export { StyledContent as Content }; \ No newline at end of file diff --git a/examples/advanced/advanced/src/baseComponents/Header.js b/examples/advanced/advanced/src/baseComponents/Header.js new file mode 100644 index 0000000..6ef85a1 --- /dev/null +++ b/examples/advanced/advanced/src/baseComponents/Header.js @@ -0,0 +1,88 @@ +import React from "react"; +import {connectStyle} from "native-base"; +import {View, Dimensions} from 'react-native'; + +import conf from 'src/conf'; + + +let variables = conf.theme.variables; + + +// We won't use NativeBase Header component since it interferes with Android's status bar +// So we will just create a View component that acts as header +// and set those styles in the native-base config the same as Header +// Copied from native-base source + +class Header extends React.PureComponent{ + + constructor(props) { + super(props); + + let {width, height} = Dimensions.get('window'); + this.state = { + isPortrait: width <= height + }; + } + + + calculateHeight() { + let inset = variables.Inset; + + const { style } = this.props; + + const InsetValues = this.state.isPortrait ? inset.portrait : inset.landscape; + let oldHeight = null; + + if (style.height != undefined) { + oldHeight = style.height; + } else if (style[1]) { + oldHeight = style[1].height ? style[1].height : style[0].height; + } else { + oldHeight = style[0].height; + } + + let height = oldHeight + InsetValues.topInset; + + return height; + } + + calculatePadder() { + let inset = variables.Inset; + const InsetValues = this.state.isPortrait ? inset.portrait : inset.landscape; + return InsetValues.topInset; + } + + onLayout = (event) => { + let {width, height} = Dimensions.get('window'); + let isPortrait = width <= height; + if(isPortrait != this.state.isPortrait){ + this.setState({isPortrait: isPortrait}); + } + if(this.props.onLayout){ + this.props.onLayout(event); + } + + } + + render(){ + let {children, style, ...others} = this.props; + + return( + + {children} + + ) + + } +} + +Header = connectStyle('baseComponents.Header')(Header); + +export {Header}; diff --git a/examples/advanced/advanced/src/baseComponents/KeyboardShiftView.js b/examples/advanced/advanced/src/baseComponents/KeyboardShiftView.js new file mode 100644 index 0000000..2631c75 --- /dev/null +++ b/examples/advanced/advanced/src/baseComponents/KeyboardShiftView.js @@ -0,0 +1,339 @@ +import React, { Component } from 'react'; +import { Keyboard, ScrollView, Platform } from 'react-native'; +import {runAfterInteractions} from './utils'; + + +// Component similar to react-native-keyboard-aware-scroll-view +// but made for iOS only with slight modifications for nested support. TODO: Replace react-native-keyboard-aware-scroll-view at some point +// Input fields will be auto scrolled automatically. For multi line, scrollEnabled={false} must be used. +// props: +// Component: FlatList | ScrollView +// extraHeight +// innerRef + +const IS_IOS = Platform.OS == 'ios'; + + +const showEvent = IS_IOS ? 'keyboardWillShow' : 'keyboardDidShow'; +const hideEvent = IS_IOS ? 'keyboardWillHide' : 'keyboardDidHide'; + + +// using native props to avoid re-renders + + +class KeyboardShift extends Component { + constructor(props){ + super(props); + this.state = { + } + this.scroll = null; + this.lastScroll = null; + } + + componentDidMount() { + this.keyboardShowSub = Keyboard.addListener(showEvent, this.handleKeyboardShow); + this.keyboardHideSub = Keyboard.addListener(hideEvent, this.handleKeyboardHide); + this.mounted = true; + } + + componentWillUnmount() { + this.mounted = false; + this.lastScroll = null; + this.keyboardShowSub.remove(); + this.keyboardHideSub.remove(); + + if(this.cancelHide){ + this.cancelHide(); + this.cancelHide = null; + } + + if(this.cancelShow){ + this.cancelShow(); + this.cancelShow = null; + } + } + + onLayout = (event) => { + this.layout = event.nativeEvent.layout + } + + onScroll = (event) => { + if(event.nativeEvent.contentOffset){ + this.lastScroll = event.nativeEvent.contentOffset.y; + } + this.props.onScroll && this.props.onScroll(event); + } + + onScrollEndDrag = (event) =>{ + // if user manually scrolled, do not restore scroll + this.scroll = null; + this.props.onScrollEndDrag && this.props.onScrollEndDrag(event); + } + + setRef = (r) => { + this.ref = r; + if(this.props.innerRef){ + this.props.innerRef(r); + } + } + + render() { + const { Component, innerRef, onScroll, onScrollEndDrag, keyboardDismissMode, ...rest } = this.props; + return ( + + ); + } + + scrollTo = (scroll) => { + if(this.ref.scrollToOffset){ + this.ref.scrollToOffset({ + offset: scroll, + animated: true + }) + } + else{ + this.ref.scrollTo({ + animated: true, + y: scroll + }) + } + } + + handleKeyboardShow = (event) => { + + if(this.cancelHide){ + this.cancelHide(); + this.cancelHide = null; + } + + if(this.cancelShow){ + this.cancelShow(); + } + + // need to give time to other stuff to hide if any + // also set last scroll to 0 if it wasn't defined since we always must scroll on restore + this.scroll = this.lastScroll || (this.lastScroll = 0); + + this.cancelShow = runAfterInteractions(()=>{ + if(this.layout && this.ref && this.mounted){ + + const keyboardHeight = event.endCoordinates.height; + //const keyboardPosition = event.endCoordinates.screenY; + + let gap = keyboardHeight + this.props.extraHeight; + + // inset is also added on timeout so it doesn't look too awkward + this.ref.setNativeProps({contentInset: { bottom: gap }}); + this.cancelShow = null; + + } + }, 250); + + } + + handleKeyboardHide = () => { + + if(this.cancelHide){ + this.cancelHide(); + this.cancelHide = null; + } + + if(this.cancelShow){ + this.cancelShow(); + this.cancelShow = null; + } + + // only fire this if we actually did something + if(this.lastScroll != null && this.ref){ + + // update inset right away to remove visible area as soon as possible + this.ref.setNativeProps({contentInset: { bottom: 0 }}); + + this.cancelHide = runAfterInteractions(()=>{ + if(this.ref && this.mounted){ + + let scroll = this.scroll != null ? this.scroll : this.lastScroll; + this.scroll = null; + + if(scroll != null && this.props.enableResetScrollToCoords){ + this.scrollTo(scroll + 0.001); + } + this.cancelHide = null; + } + + }, 150); + + } + + + } +} + + +// very similar component with a few differences +// made to work with android's android:windowSoftInputMode="adjustResize" +// other modes *might* might work, but test it. +class KeyboardShiftAndroid extends Component { + constructor(props){ + super(props); + this.state = { + } + this.scroll = null; + this.lastScroll = null; + } + + componentDidMount() { + // Android events are far more limited + this.keyboardShowSub = Keyboard.addListener(showEvent, this.handleKeyboardShow); + this.keyboardHideSub = Keyboard.addListener(hideEvent, this.handleKeyboardHide); + this.mounted = true; + } + + componentWillUnmount() { + this.mounted = false; + this.lastScroll = null; + this.keyboardShowSub.remove(); + this.keyboardHideSub.remove(); + + if(this.cancelHide){ + this.cancelHide(); + this.cancelHide = null; + } + + if(this.cancelShow){ + this.cancelShow(); + this.cancelShow = null; + } + } + + onLayout = (event) => { + this.layout = event.nativeEvent.layout + } + + onScroll = (event) => { + if(event.nativeEvent.contentOffset){ + // update this with a timeout since scrolling might happen + // before keyboard show event + let scroll = event.nativeEvent.contentOffset.y; + if(this.scrollTimeout){ + clearTimeout(this.scrollTimeout); + } + this.scrollTimeout = setTimeout(()=>{ + this.lastScroll = scroll; + }, 260); // just a little higher than keyboard show time + + } + this.props.onScroll && this.props.onScroll(event); + } + + onScrollEndDrag = (event) =>{ + // if user manually scrolled, do not restore scroll + this.scroll = null; + this.props.onScrollEndDrag && this.props.onScrollEndDrag(event); + } + + setRef = (r) => { + this.ref = r; + if(this.props.innerRef){ + this.props.innerRef(r); + } + } + + render() { + const { Component, innerRef, onScroll, onScrollEndDrag, ...rest } = this.props; + return ( + + ); + } + + scrollTo = (scroll) => { + if(this.ref.scrollToOffset){ + this.ref.scrollToOffset({ + offset: scroll, + animated: true + }) + } + else{ + this.ref.scrollTo({ + animated: true, + y: scroll + }) + } + } + + + // this relies on the fact that keyboard did show + // happens before everything scrolls up due to height changes + handleKeyboardShow = (event) => { + + if(this.cancelHide){ + this.cancelHide(); + this.cancelHide = null; + } + + // need to give time to other stuff to hide if any + // also set last scroll to 0 if it wasn't defined since we always must scroll on restore + this.scroll = this.lastScroll || (this.lastScroll = 0); + + + } + + handleKeyboardHide = () => { + + if(this.cancelHide){ + this.cancelHide(); + this.cancelHide = null; + } + + // only fire this if we actually did something + if(this.lastScroll != null && this.ref){ + + this.cancelHide = runAfterInteractions(()=>{ + if(this.ref && this.mounted && this.scroll != null && this.props.enableResetScrollToCoords){ + this.scrollTo(this.scroll); + this.cancelHide = null; + } + + }, 150); + + } + + + } +} + + +export default class KeyboardShiftView extends React.Component{ + + render(){ + let {Component, extraHeight, innerRef, androidEnabled, ...rest} = this.props; + return IS_IOS ? + + : + (androidEnabled ? : ) + } +} + +KeyboardShiftView.defaultProps = { + Component: ScrollView, + extraHeight: 10, + keyboardDismissMode: 'interactive', + enableResetScrollToCoords: true, + keyboardShouldPersistTaps: 'handled', + androidEnabled: true +} \ No newline at end of file diff --git a/examples/advanced/advanced/src/baseComponents/MainHeader.js b/examples/advanced/advanced/src/baseComponents/MainHeader.js new file mode 100644 index 0000000..60c8dab --- /dev/null +++ b/examples/advanced/advanced/src/baseComponents/MainHeader.js @@ -0,0 +1,125 @@ + +import conf from 'src/conf'; +import React from 'react'; +import { + BackHandler, + StyleSheet, +} from 'react-native'; + +import {StyleProvider, Root, Input} from 'native-base'; +import { + Button, + Body, + Title, + Left, + Icon, + Right, + connectStyle +} from "native-base"; + +import {Header} from 'src/baseComponents/Header'; + +let variables = conf.theme.variables; + +const styles = StyleSheet.create({ + backButton: { + width: 48 * variables.sizeScaling, + }, + backButtonIcon: { + fontSize: variables.iconBackButtonSize + } +}); + + +export class SceneBackHandler extends React.PureComponent{ + + componentDidMount(){ + this.willBlur = this.props.navigation.addListener('willBlur', this.handleBlur); + this.willFocus = this.props.navigation.addListener('willFocus', this.handleFocus); + + // also add back handler here if it wasn't set already and we are focused + if(this.props.navigation.isFocused() && !this.backHandler){ + this.handleFocus(); + } + } + + componentWillUnmount(){ + this.willBlur && this.willBlur.remove(); + this.willFocus && this.willFocus.remove(); + + // blur not called on component unmount + this.backHandler && this.backHandler.remove(); + } + + handleFocus = () => { + if(!this.backHandler){ + this.backHandler = BackHandler.addEventListener('hardwareBackPress', this.onBackPressAndroid); + } + + } + + handleBlur = () => { + this.backHandler && this.backHandler.remove(); + this.backHandler = null; + } + + onBackPressAndroid = () => { + let onExit = this.props.navigation.getParam('onExit', null); + if(onExit){ + return onExit(this.props.navigation); + } + } + + render(){ + return null; + } +} + +class MainHeader extends React.PureComponent { + + handleBack = () => { + let onExit = this.props.navigation.getParam('onExit', null); + if(onExit){ + if(!onExit(this.props.navigation)){ + this.props.navigation.goBack(null); + } + } + else{ + this.props.navigation.goBack(null); + } + } + + render() { + let {transparent, back, headerStyle, title} = this.props; + return ( +

      + {back ? + + + + + : } + + {typeof title === 'string' ? {title} : title} + + + + + + + +
      + ); + } +} + +MainHeader = connectStyle("Branding")(MainHeader); + +export default MainHeader; \ No newline at end of file diff --git a/examples/advanced/advanced/src/baseComponents/ZoomView.js b/examples/advanced/advanced/src/baseComponents/ZoomView.js new file mode 100644 index 0000000..eae1397 --- /dev/null +++ b/examples/advanced/advanced/src/baseComponents/ZoomView.js @@ -0,0 +1,47 @@ +import React from 'react'; +import {View} from 'react-native'; + +import { + PinchGestureHandler, + State, +} from 'react-native-gesture-handler'; + + +export default class ZoomView extends React.Component { + + + onGesturePinch = ({ nativeEvent }) => { + this.props.onPinchProgress(nativeEvent.scale); + } + + onPinchHandlerStateChange = event => { + + if (event.nativeEvent.state === State.END){ + this.props.onPinchEnd(); + } + else if (event.nativeEvent.oldState === State.BEGAN && event.nativeEvent.state === State.ACTIVE){ + this.props.onPinchStart(); + } + }; + + render() { + return ( + + + {this.props.children} + + + ); + } +} + + + +ZoomView.defaultProps = { + onPinchProgress: (p) => {}, + onPinchStart: () => {}, + onPinchEnd: () => {} +} diff --git a/examples/advanced/advanced/src/baseComponents/orientation.js b/examples/advanced/advanced/src/baseComponents/orientation.js new file mode 100644 index 0000000..ce81c08 --- /dev/null +++ b/examples/advanced/advanced/src/baseComponents/orientation.js @@ -0,0 +1,97 @@ +import {Dimensions, StatusBar, Platform} from 'react-native'; +import conf from 'src/conf'; + +// orientation helper to handle extra spaces needed to layout the camera perfectly +// on various devices +// This coul be a reducer or something if needed globally + +const IS_IOS = Platform.OS == 'ios'; +const IS_IPHONEX = conf.theme.variables.isIphoneX; + +const IPHONE_INSET_TOP = conf.theme.variables.Inset.portrait.topInset; +const IPHONE_INSET_TOP_LANDSCAPE = conf.theme.variables.Inset.landscape.topInset; + +const IPHONE_INSET_BOTTOM = conf.theme.variables.Inset.portrait.bottomInset; +const IPHONE_INSET_BOTTOM_LANDSCAPE = conf.theme.variables.Inset.landscape.bottomInset; + + + +export function isLandscape(){ + let {width, height} = Dimensions.get('window'); + return width > height; +} + + + +// height factor that we need sometimes to consider +// such as status bar height, beause different OS report height +// differently or status bar hides/shows on IOS, or notches. + +// insetTop also used to position stuff with absolute position and consider +// status bars and notches based on orientation. +// Try to use this only for absolute positioning, use SafeAreaView otherwise +let getMinusHeight, getInsetTop, getInsetBottom; + +if(!IS_IOS){ + // on Android, we always have a fixed status bar throught the app + getMinusHeight = (isPortrait) => { + return StatusBar.currentHeight; + } + getInsetTop = (isPortrait) => { + return 0; + } + getInsetBottom = (isPortrait) => { + return 0; + } +} +else{ + if(IS_IPHONEX){ + getMinusHeight = (isPortrait) => { + return 0; + } + getInsetTop = (isPortrait) => { + return isPortrait ? IPHONE_INSET_TOP : IPHONE_INSET_TOP_LANDSCAPE; + } + getInsetBottom = (isPortrait) => { + return isPortrait ? IPHONE_INSET_BOTTOM : IPHONE_INSET_BOTTOM_LANDSCAPE; + } + } + else{ + getMinusHeight = (isPortrait) => { + return 0 + } + getInsetTop = (isPortrait) => { + return isPortrait ? IPHONE_INSET_TOP : IPHONE_INSET_TOP_LANDSCAPE; + } + getInsetBottom = (isPortrait) => { + return 0; + } + } +} + + +export function getOrientation(){ + let {width, height} = Dimensions.get('window'); + let isLandscape = width > height; + + return { + width: width, + height: height, + isLandscape: isLandscape, + isPortrait: !isLandscape, + minusHeight: getMinusHeight(!isLandscape), + insetTop: getInsetTop(!isLandscape), + insetBottom: getInsetBottom(!isLandscape), + } +} + +// Hide statusbar on iOS landscape so it is consistent with iOS 13. +Dimensions.addEventListener('change', function(){ + // give time to UI to adjust + + setTimeout(()=>{ + // On Android, always visible since it has a bunch of issues. + StatusBar.setHidden(IS_IOS && isLandscape(), 'none'); + }, 100); +}); + diff --git a/examples/advanced/advanced/src/baseComponents/utils.js b/examples/advanced/advanced/src/baseComponents/utils.js new file mode 100644 index 0000000..465ac41 --- /dev/null +++ b/examples/advanced/advanced/src/baseComponents/utils.js @@ -0,0 +1,41 @@ +import React from 'react'; +import {InteractionManager} from 'react-native'; +import {Spinner, connectStyle} from "native-base"; + + +// helper that calls interaction manager run after interactions +// but with a tiny timeout to also give time to other code to run +// some RN change broke runAfterInteractions in a way that it no longer has a huge delay as it used to +// so we add one here +// returns a cancellable object +export function runAfterInteractions(fun, to=25){ + // setTimeout(() => { + // InteractionManager.runAfterInteractions(fun) + // }, to); + + let prom = null; + let timeout = setTimeout(() => { + prom = InteractionManager.runAfterInteractions(fun); + }, to); + + return () => { + clearTimeout(timeout); + if(prom){ + prom.cancel(); + prom = null; + } + } +} + + + +class StyledSpinner extends React.PureComponent{ + render(){ + return + } +} + +StyledSpinner = connectStyle("Branding")(StyledSpinner); + + +export {StyledSpinner}; \ No newline at end of file diff --git a/examples/advanced/advanced/src/conf.js b/examples/advanced/advanced/src/conf.js new file mode 100644 index 0000000..39ea916 --- /dev/null +++ b/examples/advanced/advanced/src/conf.js @@ -0,0 +1,130 @@ +import {Dimensions} from 'react-native'; +import getTheme from './native-base-theme/components'; +import platform from './native-base-theme/variables/platform'; + + +let conf = {}; + +// Returns the recommended scaling based on screen dimensions +// as a string +const recommendedScaling = () => { + try{ + + // our guideline will be 375 width, based on iphone 7,8 and Xs + // ideas taken from https://blog.solutotlv.com/size-matters/ + const baseWidth = 375; + const factor = 0.3; // resize factor + + // Tested Widths in DPI + // 375 -> iphone 7, 8, X, 11 [Pro] (4.7 to 5.8 inches) --> normal, no prompt + // 414 -> iPhone X/Xs/11 Max (6.5 inches) --> normal, no prompt + // 768 -> iPad Pro 9.7 inch (should be the same as ipad mini) --> average, prompt + // 834 -> iPad Pro 11 inch --> large, prompt + // 1024 -> iPad Pro 12.9 inch --> large prompt + + let res = "1.0"; // our normal sizing + + let {width, height} = Dimensions.get('window'); + let value = Math.min(width, height); // just in case the device starts up rotated. + + let scale, moderateScale; + if(value != 0){ + + scale = value / baseWidth; + moderateScale = 1 + (scale - 1) * factor; + + // map our ratio to our internal scaling values + if(moderateScale >= 2.5){ + res = "2.5"; + } + else if(moderateScale <= 0.7){ // should never happen unless using a tiny phone + res = "0.7"; + } + else{ + res = (Math.round(moderateScale * 10 ) / 10).toFixed(1); + } + + } + else{ + console.warn("Warning, failed to get device screen ratio for scaling calculations, it was 0."); + } + + return res; + + } + catch(err){ + console.error("CRITICAL: Failed to get recommended scaling", err.message || err) + } +} + +// preconfigured, see native-base-theme/variables/platform for more options +// key will be the value of the primary color so we can auto select the others +conf.themes = { + + // default: was typical orange, switched to gray. See gray below + 'default': { + primaryColor: '#404040', + toolbarColor: '#404040', + brandLight: '#cfd8dc' + }, + + + // red dark + '#d32f2f': { + primaryColor: '#d32f2f', + toolbarColor: '#d32f2f', + brandLight: '#e57373', + brandDanger: '#b71c1c' + }, + + + // super blue light + '#bbdefb': { + primaryColor: '#bbdefb', + toolbarColor: '#bbdefb', + brandLight: '#e4f1fb', + + iosStatusbar: 'dark-content', + brandDark: '#d9d9d9', + brandDanger: '#eb7168', + brandSuccess: '#81c784', + brandInfo: '#4fc3f7', + brandWarning: '#fad25c', + brandBlack: '#3c3d3d', + inverseTextColor: '#3c3d3d' + }, + + // blue dark + '#1976d2': { + primaryColor: '#1976d2', + toolbarColor: '#1976d2', + brandLight: '#64b5f6' + }, + + // gray + '#404040': { + primaryColor: '#404040', + toolbarColor: '#404040', + brandLight: '#cfd8dc' + }, + + // black and white + 'black': { + primaryColor: 'black', + toolbarColor: 'black', + brandLight: 'white' + }, + +} + +const getAppTheme = (overrides, scaling) => getTheme(platform(overrides, scaling)); +const buildTheme = (overrides) => { + return getAppTheme(overrides, sizeScaling); +} + +let sizeScaling = parseFloat(recommendedScaling()) || 1; + +conf.theme = buildTheme(conf.themes.default); + + +export default conf; \ No newline at end of file diff --git a/examples/advanced/advanced/src/native-base-theme/components/Badge.js b/examples/advanced/advanced/src/native-base-theme/components/Badge.js new file mode 100644 index 0000000..f5002d2 --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Badge.js @@ -0,0 +1,52 @@ +// @flow + + + +export default (variables) => { + const badgeTheme = { + ".primary": { + backgroundColor: variables.buttonPrimaryBg + }, + ".warning": { + backgroundColor: variables.buttonWarningBg + }, + ".info": { + backgroundColor: variables.buttonInfoBg + }, + ".success": { + backgroundColor: variables.buttonSuccessBg + }, + ".danger": { + backgroundColor: variables.buttonDangerBg + }, + "NativeBase.Text": { + color: variables.badgeColor, + fontSize: variables.fontSizeBase, + lineHeight: variables.lineHeight - 1 * variables.sizeScaling, + textAlign: "center", + paddingHorizontal: 3 * variables.sizeScaling + }, + '.small': { + paddingHorizontal: 3 * variables.sizeScaling, + height: 20 * variables.sizeScaling, + "NativeBase.Text": { + fontSize: variables.noteFontSize + } + }, + '.transparent': { + backgroundColor: 'transparent', + borderRadius: 0, + "NativeBase.Text": { + color: '#000' + } + }, + backgroundColor: variables.badgeBg, + padding: variables.badgePadding, + paddingHorizontal: 6 * variables.sizeScaling, + alignSelf: "flex-end", + justifyContent: "center", //variables.platform === "ios" ? "center" : undefined, + borderRadius: 13.5 * variables.sizeScaling, + height: 27 * variables.sizeScaling + }; + return badgeTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Body.js b/examples/advanced/advanced/src/native-base-theme/components/Body.js new file mode 100644 index 0000000..fab6bd9 --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Body.js @@ -0,0 +1,12 @@ +// @flow + + +export default (variables) => { + const bodyTheme = { + flex: 1, + alignItems: 'center', + alignSelf: 'center' + }; + + return bodyTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Button.js b/examples/advanced/advanced/src/native-base-theme/components/Button.js new file mode 100644 index 0000000..c1398eb --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Button.js @@ -0,0 +1,615 @@ +// @flow + + + +export default (variables) => { + const platformStyle = variables.platformStyle; + const platform = variables.platform; + + const blackCommon = { + "NativeBase.Text": { + color: variables.brandBlack + }, + "NativeBase.H1": { + color: variables.brandBlack + }, + "NativeBase.H2": { + color: variables.brandBlack + }, + "NativeBase.H3": { + color: variables.brandBlack + }, + "NativeBase.Icon": { + color: variables.brandBlack + }, + "NativeBase.IconNB": { + color: variables.brandBlack + } + }; + + const blackCommonTransparent = { + "NativeBase.Text": { + color: variables.transparentColor + }, + "NativeBase.H1": { + color: variables.transparentColor + }, + "NativeBase.H2": { + color: variables.transparentColor + }, + "NativeBase.H3": { + color: variables.transparentColor + }, + "NativeBase.Icon": { + color: variables.transparentColor + }, + "NativeBase.IconNB": { + color: variables.transparentColor + } + }; + + const darkCommon = { + "NativeBase.Text": { + color: variables.brandDark + }, + "NativeBase.H1": { + color: variables.brandDark + }, + "NativeBase.H2": { + color: variables.brandDark + }, + "NativeBase.H3": { + color: variables.brandDark + }, + "NativeBase.Icon": { + color: variables.brandDark + }, + "NativeBase.IconNB": { + color: variables.brandDark + } + }; + + const darkCommonTransparent = { + "NativeBase.Text": { + color: variables.transparentColor + }, + "NativeBase.H1": { + color: variables.transparentColor + }, + "NativeBase.H2": { + color: variables.transparentColor + }, + "NativeBase.H3": { + color: variables.transparentColor + }, + "NativeBase.Icon": { + color: variables.transparentColor + }, + "NativeBase.IconNB": { + color: variables.transparentColor + } + }; + + const lightCommon = { + "NativeBase.Text": { + color: variables.brandLight + }, + "NativeBase.H1": { + color: variables.brandLight + }, + "NativeBase.H2": { + color: variables.brandLight + }, + "NativeBase.H3": { + color: variables.brandLight + }, + "NativeBase.Icon": { + color: variables.brandLight + }, + "NativeBase.IconNB": { + color: variables.brandLight + } + }; + const primaryCommon = { + "NativeBase.Text": { + color: variables.buttonPrimaryBg + }, + "NativeBase.H1": { + color: variables.buttonPrimaryBg + }, + "NativeBase.H2": { + color: variables.buttonPrimaryBg + }, + "NativeBase.H3": { + color: variables.buttonPrimaryBg + }, + "NativeBase.Icon": { + color: variables.buttonPrimaryBg + }, + "NativeBase.IconNB": { + color: variables.buttonPrimaryBg + } + }; + const successCommon = { + "NativeBase.Text": { + color: variables.buttonSuccessBg + }, + "NativeBase.H1": { + color: variables.buttonSuccessBg + }, + "NativeBase.H2": { + color: variables.buttonSuccessBg + }, + "NativeBase.H3": { + color: variables.buttonSuccessBg + }, + "NativeBase.Icon": { + color: variables.buttonSuccessBg + }, + "NativeBase.IconNB": { + color: variables.buttonSuccessBg + } + }; + const infoCommon = { + "NativeBase.Text": { + color: variables.buttonInfoBg + }, + "NativeBase.H1": { + color: variables.buttonInfoBg + }, + "NativeBase.H2": { + color: variables.buttonInfoBg + }, + "NativeBase.H3": { + color: variables.buttonInfoBg + }, + "NativeBase.Icon": { + color: variables.buttonInfoBg + }, + "NativeBase.IconNB": { + color: variables.buttonInfoBg + } + }; + const warningCommon = { + "NativeBase.Text": { + color: variables.buttonWarningBg + }, + "NativeBase.H1": { + color: variables.buttonWarningBg + }, + "NativeBase.H2": { + color: variables.buttonWarningBg + }, + "NativeBase.H3": { + color: variables.buttonWarningBg + }, + "NativeBase.Icon": { + color: variables.buttonWarningBg + }, + "NativeBase.IconNB": { + color: variables.buttonWarningBg + } + }; + const dangerCommon = { + "NativeBase.Text": { + color: variables.buttonDangerBg + }, + "NativeBase.H1": { + color: variables.buttonDangerBg + }, + "NativeBase.H2": { + color: variables.buttonDangerBg + }, + "NativeBase.H3": { + color: variables.buttonDangerBg + }, + "NativeBase.Icon": { + color: variables.buttonDangerBg + }, + "NativeBase.IconNB": { + color: variables.buttonDangerBg + } + }; + const buttonTheme = { + ".disabled": { + ".transparent": { + backgroundColor: 'transparent', + "NativeBase.Text": { + color: variables.buttonDisabledBg + }, + "NativeBase.H1": { + color: variables.buttonDisabledBg + }, + "NativeBase.H2": { + color: variables.buttonDisabledBg + }, + "NativeBase.H3": { + color: variables.buttonDisabledBg + }, + "NativeBase.Icon": { + color: variables.buttonDisabledBg + }, + "NativeBase.IconNB": { + color: variables.buttonDisabledBg + } + }, + "NativeBase.Text": { + color: variables.buttonDisabledText + }, + "NativeBase.Icon": { + color: variables.buttonDisabledText + }, + "NativeBase.IconNB": { + color: variables.buttonDisabledText + }, + backgroundColor: variables.buttonDisabledBg + }, + ".bordered": { + ".black": { + ...blackCommon, + backgroundColor: "transparent", + borderColor: variables.brandBlack, + borderWidth: variables.borderWidth + }, + ".dark": { + ...darkCommon, + backgroundColor: "transparent", + borderColor: variables.brandDark, + borderWidth: variables.borderWidth + }, + ".light": { + ...lightCommon, + backgroundColor: "transparent", + borderColor: variables.brandLight, + borderWidth: variables.borderWidth + }, + ".primary": { + ...primaryCommon, + backgroundColor: "transparent", + borderColor: variables.buttonPrimaryBg, + borderWidth: variables.borderWidth + }, + ".success": { + ...successCommon, + backgroundColor: "transparent", + borderColor: variables.buttonSuccessBg, + borderWidth: variables.borderWidth + }, + ".info": { + ...infoCommon, + backgroundColor: "transparent", + borderColor: variables.buttonInfoBg, + borderWidth: variables.borderWidth + }, + ".warning": { + ...warningCommon, + backgroundColor: "transparent", + borderColor: variables.buttonWarningBg, + borderWidth: variables.borderWidth + }, + ".danger": { + ...dangerCommon, + backgroundColor: "transparent", + borderColor: variables.buttonDangerBg, + borderWidth: variables.borderWidth + }, + ".disabled": { + backgroundColor: 'transparent', + borderColor: variables.buttonDisabledBg, + borderWidth: variables.borderWidth, + "NativeBase.Text": { + color: variables.buttonDisabledBg + } + }, + ...primaryCommon, + borderWidth: variables.borderWidth, + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowOpacity: null, + shadowRadius: null, + backgroundColor: "transparent" + }, + + ".black": { + ".bordered": { + ...blackCommon + }, + backgroundColor: variables.brandBlack + }, + ".dark": { + ".bordered": { + ...darkCommon + }, + backgroundColor: variables.brandDark + }, + ".light": { + ".bordered": { + ...lightCommon + }, + ...blackCommon, + backgroundColor: variables.brandLight + }, + + ".primary": { + ".bordered": { + ...primaryCommon + }, + backgroundColor: variables.buttonPrimaryBg + }, + + ".success": { + ".bordered": { + ...successCommon + }, + backgroundColor: variables.buttonSuccessBg + }, + + ".info": { + ".bordered": { + ...infoCommon + }, + backgroundColor: variables.buttonInfoBg + }, + + ".warning": { + ".bordered": { + ...warningCommon + }, + backgroundColor: variables.buttonWarningBg + }, + + ".danger": { + ".bordered": { + ...dangerCommon + }, + backgroundColor: variables.buttonDangerBg + }, + + ".block": { + justifyContent: "center", + alignSelf: "stretch" + }, + + ".full": { + justifyContent: "center", + alignSelf: "stretch", + borderRadius: 0 + }, + + ".rounded": { + // paddingHorizontal: variables.buttonPadding + 20, + borderRadius: variables.borderRadiusLarge + }, + + ".transparent": { + backgroundColor: "transparent", + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null, + ...primaryCommon, + + ".black": { + ...blackCommon, + backgroundColor: 'transparent' + }, + ".dark": { + ...darkCommon, + backgroundColor: 'transparent' + }, + ".danger": { + ...dangerCommon, + backgroundColor: 'transparent' + }, + ".warning": { + ...warningCommon, + backgroundColor: 'transparent' + }, + ".info": { + ...infoCommon, + backgroundColor: 'transparent' + }, + ".primary": { + ...primaryCommon, + backgroundColor: 'transparent' + }, + ".success": { + ...successCommon, + backgroundColor: 'transparent' + }, + ".light": { + ...lightCommon, + backgroundColor: 'transparent' + }, + ".disabled": { + backgroundColor: "transparent", + borderColor: variables.buttonDisabledBg, + borderWidth: variables.borderWidth, + "NativeBase.Text": { + color: variables.buttonDisabledBg + }, + "NativeBase.Icon": { + color: variables.buttonDisabledBg + }, + "NativeBase.IconNB": { + color: variables.buttonDisabledBg + } + } + }, + + ".small": { + height: 30 * variables.sizeScaling, + minWidth: 30 * variables.sizeScaling, + "NativeBase.Text": { + fontSize: variables.fontSizeSmall + }, + "NativeBase.Icon": { + fontSize: 20 * variables.sizeScaling, + paddingTop: 0 + }, + "NativeBase.IconNB": { + fontSize: 20 * variables.sizeScaling, + paddingTop: 0 + }, + '.noWidth':{ + minWidth: 0 + } + }, + + ".large": { + height: 60 * variables.sizeScaling, + minWidth: 60 * variables.sizeScaling, + "NativeBase.Text": { + fontSize: variables.fontSizeLarge, + }, + '.noWidth':{ + minWidth: 0 + } + }, + + ".medium": { + height: 50 * variables.sizeScaling, + minWidth: 50 * variables.sizeScaling, + "NativeBase.Text": { + fontSize: variables.fontSizeMedium, + }, + '.noWidth':{ + minWidth: 0 + } + }, + + ".capitalize": {}, + + ".vertical": { + flexDirection: "column", + height: null + }, + + "NativeBase.Text": { + fontFamily: variables.buttonFontFamily, + marginLeft: 0, + marginRight: 0, + color: variables.inverseTextColor, + fontSize: variables.buttonTextSize, + paddingHorizontal: 16 * variables.sizeScaling, + backgroundColor: "transparent" + // childPosition: 1 + }, + + "NativeBase.Icon": { + color: variables.inverseTextColor, + fontSize: variables.buttonIconSize, + marginHorizontal: 16 * variables.sizeScaling, + paddingTop: 0 + }, + "NativeBase.IconNB": { + color: variables.inverseTextColor, + fontSize: variables.buttonIconSize, + marginHorizontal: 16 * variables.sizeScaling, + paddingTop: 0 + }, + + ".iconLeft": { + "NativeBase.Text": { + marginLeft: 0 + }, + "NativeBase.IconNB": { + marginRight: 0, + marginLeft: 16 * variables.sizeScaling + }, + "NativeBase.Icon": { + marginRight: 0, + marginLeft: 16 * variables.sizeScaling + } + }, + ".iconRight": { + "NativeBase.Text": { + marginRight: 0 + }, + "NativeBase.IconNB": { + marginLeft: 0, + marginRight: 16 * variables.sizeScaling + }, + "NativeBase.Icon": { + marginLeft: 0, + marginRight: 16 * variables.sizeScaling + } + }, + ".picker": { + "NativeBase.Text": { + ".note": { + fontSize: variables.noteFontSize, + lineHeight: null + } + } + }, + ".noSpacing": { + "NativeBase.Text": { + marginHorizontal: 0, + paddingHorizontal: 8 * variables.sizeScaling, + }, + "NativeBase.IconNB": { + marginHorizontal: 0, + paddingHorizontal: 8 * variables.sizeScaling, + }, + "NativeBase.Icon": { + marginHorizontal: 0, + paddingHorizontal: 8 * variables.sizeScaling, + } + }, + + paddingVertical: variables.buttonPadding, + paddingHorizontal: 0, + backgroundColor: variables.buttonPrimaryBg, + borderRadius: variables.borderRadiusBase, + borderColor: variables.buttonPrimaryBg, + borderWidth: null, + height: variables.buttonHeight, + minWidth: variables.buttonHeight, + alignSelf: "flex-start", + flexDirection: "row", + elevation: 0, + shadowColor: platformStyle === "material" ? variables.brandBlack : undefined, + shadowOffset: + platformStyle === "material" ? { width: 0, height: 2 } : undefined, + shadowOpacity: platformStyle === "material" ? 0.2 : undefined, + shadowRadius: platformStyle === "material" ? 1.2 : undefined, + alignItems: "center", + justifyContent: "center", + + '.leftJustified': { + justifyContent: 'flex-start' + }, + '.rightJustified': { + justifyContent: 'flex-end' + }, + '.topJustified': { + alignItems: "flex-start", + }, + '.noWidth':{ + minWidth: 0 + }, + '.autoHeight': { + height: 'auto' + }, + '.selfCenter': { + alignSelf: 'center' + }, + '.marginLeft': { + marginLeft: variables.contentPadding + }, + '.marginRight': { + marginRight: variables.contentPadding + }, + '.marginBottom': { + marginBottom: variables.contentPadding + }, + '.flex1': { + flex: 1 + } + + }; + return buttonTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Card.js b/examples/advanced/advanced/src/native-base-theme/components/Card.js new file mode 100644 index 0000000..66ec497 --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Card.js @@ -0,0 +1,60 @@ +// @flow + + + +export default (variables) => { + const cardTheme = { + ".transparent": { + shadowColor: null, + shadowOffset: null, + shadowOpacity: null, + shadowRadius: null, + elevation: null, + backgroundColor: "transparent", + borderWidth: 0 + }, + ".noShadow": { + shadowColor: null, + shadowOffset: null, + shadowOpacity: null, + elevation: null + }, + ".noRadius": { + borderRadius: 0 + }, + ".noRadiusTop": { + borderTopLeftRadius: 0, + borderTopRightRadius: 0 + }, + ".primary": { + borderColor: variables.brandPrimary, + //backgroundColor: variables.brandPrimary, + + "NativeBase.CardItem": { + ".header": { + backgroundColor: variables.brandPrimary, + borderColor: variables.brandPrimary, + "NativeBase.Text": { + color: variables.inverseTextColor, + }, + }, + ".bordered": { + borderColor: variables.brandPrimary + } + } + }, + marginVertical: 5 * variables.sizeScaling, + borderWidth: variables.borderWidth, + borderRadius: variables.cardBorderRadius, + borderColor: variables.cardBorderColor, + flexWrap: "nowrap", + backgroundColor: variables.cardDefaultBg, + shadowColor: "#000", + shadowOffset: { width: 0, height: 2 }, + shadowOpacity: 0.1, + shadowRadius: 1.5, + elevation: 1 + }; + + return cardTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/CardItem.js b/examples/advanced/advanced/src/native-base-theme/components/CardItem.js new file mode 100644 index 0000000..2eec3b4 --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/CardItem.js @@ -0,0 +1,112 @@ +// @flow + +import { StyleSheet } from "react-native"; + + +export default (variables) => { + const platform = variables.platform; + + const cardItemTheme = { + "NativeBase.Left": { + "NativeBase.Body": { + flex: 1, + marginLeft: 10 * variables.sizeScaling, + alignItems: null + }, + flex: 0, + flexDirection: "row", + alignItems: "center" + }, + ".content": { + "NativeBase.Text": { + color: platform === "ios" ? "#555" : "#222", + fontSize: variables.DefaultFontSize - 2 * variables.sizeScaling + } + }, + ".cardBody": { + padding: -5 * variables.sizeScaling, + "NativeBase.Text": { + marginTop: 5 * variables.sizeScaling + } + }, + "NativeBase.Body": { + flex: 1, + alignSelf: "stretch", + alignItems: "flex-start" + }, + "NativeBase.Right": { + + "NativeBase.Thumbnail": { + alignSelf: null + }, + "NativeBase.Image": { + alignSelf: null + }, + "NativeBase.Radio": { + alignSelf: null + }, + "NativeBase.Checkbox": { + alignSelf: null + }, + "NativeBase.Switch": { + alignSelf: null + }, + flex: 0 + }, + ".header": { + "NativeBase.Text": { + fontSize: variables.headerFontSize, + fontWeight: platform === "ios" ? "600" : "600" + }, + borderTopWidth: 0, + borderBottomWidth: variables.borderWidth, + borderColor: variables.cardBorderColor, + backgroundColor: variables.cardHeaderBg, + borderRadius: variables.cardBorderRadius, + borderBottomLeftRadius: 0, + borderBottomRightRadius: 0, + paddingVertical: variables.cardItemPadding + }, + ".footer": { + "NativeBase.Text": { + fontSize: variables.headerFontSize, + fontWeight: platform === "ios" ? "600" : "600" + }, + borderTopWidth: variables.borderWidth, + borderBottomWidth: 0, + backgroundColor: variables.cardHeaderBg, + borderRadius: variables.cardBorderRadius, + borderTopLeftRadius: 0, + borderTopRightRadius: 0 + }, + ".bordered": { + borderBottomWidth: variables.borderWidth, + borderColor: variables.cardBorderColor + }, + '.first': { + borderTopLeftRadius: variables.cardBorderRadius, + borderTopRightRadius: variables.cardBorderRadius + }, + '.last': { + borderBottomLeftRadius: variables.cardBorderRadius, + borderBottomRightRadius: variables.cardBorderRadius + }, + flexDirection: "row", + alignItems: "center", + padding: variables.cardItemPadding, + paddingVertical: variables.cardItemPadding, + //backgroundColor: variables.cardDefaultBg, + + ".noPadding": { + paddingHorizontal: 0 + }, + ".noRadius": { + borderRadius: 0 + }, + '.noBorder': { + borderWidth: 0, + }, + }; + + return cardItemTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/CheckBox.js b/examples/advanced/advanced/src/native-base-theme/components/CheckBox.js new file mode 100644 index 0000000..e96d3e9 --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/CheckBox.js @@ -0,0 +1,37 @@ +// @flow + + + +export default (variables) => { + const checkBoxTheme = { + ".checked": { + "NativeBase.Icon": { + color: variables.checkboxTickColor + }, + "NativeBase.IconNB": { + color: variables.checkboxTickColor + } + }, + "NativeBase.Icon": { + color: "transparent", + lineHeight: variables.CheckboxIconSize, + marginTop: variables.CheckboxIconMarginTop, + fontSize: variables.CheckboxFontSize + }, + "NativeBase.IconNB": { + color: "transparent", + lineHeight: variables.CheckboxIconSize, + marginTop: variables.CheckboxIconMarginTop, + fontSize: variables.CheckboxFontSize + }, + borderRadius: variables.CheckboxRadius, + overflow: "hidden", + width: variables.checkboxSize, + height: variables.checkboxSize, + borderWidth: variables.CheckboxBorderWidth, + paddingLeft: variables.CheckboxPaddingLeft - 1 * variables.sizeScaling, + paddingBottom: variables.CheckboxPaddingBottom + }; + + return checkBoxTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Container.js b/examples/advanced/advanced/src/native-base-theme/components/Container.js new file mode 100644 index 0000000..47f5754 --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Container.js @@ -0,0 +1,28 @@ +// @flow + +import { Platform, Dimensions } from "react-native"; + + +const deviceHeight = Dimensions.get("window").height; + +export default (variables) => { + const theme = { + flex: 1, + //height: Platform.OS === "ios" ? deviceHeight : deviceHeight - 120, + backgroundColor: variables.containerBgColor, + '.toolbarColor': { + backgroundColor: variables.toolbarDefaultBg + }, + '.transparent': { + backgroundColor: 'transparent' + }, + '.semiTransparent': { + backgroundColor: 'rgba(0,0,0, 0.9)' + }, + '.fullBlack': { + backgroundColor: 'black' + } + }; + + return theme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Content.js b/examples/advanced/advanced/src/native-base-theme/components/Content.js new file mode 100644 index 0000000..3e9222f --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Content.js @@ -0,0 +1,22 @@ +// @flow + + + +export default (variables) => { + const contentTheme = { + flex: 1, + backgroundColor: 'transparent', + '.colored': { + backgroundColor: variables.containerBgColor, + }, + '.semiTransparent': { + backgroundColor: 'rgba(0,0,0, 0.9)' + }, + "NativeBase.Segment": { + borderWidth: 0, + backgroundColor: "transparent" + } + }; + + return contentTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Fab.js b/examples/advanced/advanced/src/native-base-theme/components/Fab.js new file mode 100644 index 0000000..49b7265 --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Fab.js @@ -0,0 +1,29 @@ +// @flow + + + +export default (variables) => { + const platform = variables.platform; + + const fabTheme = { + "NativeBase.Button": { + alignItems: "center", + padding: null, + justifyContent: "center", + "NativeBase.Icon": { + alignSelf: "center", + fontSize: 20 * variables.sizeScaling, + marginLeft: 0, + marginRight: 0, + }, + "NativeBase.IconNB": { + alignSelf: "center", + fontSize: 20 * variables.sizeScaling, + marginLeft: 0, + marginRight: 0, + }, + }, + }; + + return fabTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Footer.js b/examples/advanced/advanced/src/native-base-theme/components/Footer.js new file mode 100644 index 0000000..d3c5153 --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Footer.js @@ -0,0 +1,129 @@ +// @flow + + + +export default (variables) => { + const platformStyle = variables.platformStyle; + const platform = variables.platform; + + const iconCommon = { + "NativeBase.Icon": { + color: variables.tabBarActiveTextColor + } + }; + const iconNBCommon = { + "NativeBase.IconNB": { + color: variables.tabBarActiveTextColor + } + }; + const textCommon = { + "NativeBase.Text": { + color: variables.tabBarActiveTextColor + } + }; + const footerTheme = { + "NativeBase.Left": { + "NativeBase.Button": { + ".transparent": { + backgroundColor: "transparent", + borderColor: null, + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null, + ...iconCommon, + ...iconNBCommon, + ...textCommon + }, + alignSelf: null, + ...iconCommon, + ...iconNBCommon, + // ...textCommon + }, + flex: 1, + alignSelf: "center", + alignItems: "flex-start" + }, + "NativeBase.Body": { + flex: 1, + alignItems: "center", + alignSelf: "center", + flexDirection: "row", + "NativeBase.Button": { + alignSelf: "center", + ".transparent": { + backgroundColor: "transparent", + borderColor: null, + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null, + ...iconCommon, + ...iconNBCommon, + ...textCommon + }, + ".full": { + height: variables.footerHeight, + paddingBottom: variables.footerPaddingBottom, + flex: 1 + }, + ...iconCommon, + ...iconNBCommon, + // ...textCommon + } + }, + "NativeBase.Right": { + "NativeBase.Button": { + ".transparent": { + backgroundColor: "transparent", + borderColor: null, + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null, + ...iconCommon, + ...iconNBCommon, + ...textCommon + }, + alignSelf: null, + ...iconCommon, + ...iconNBCommon, + // ...textCommon + }, + flex: 1, + alignSelf: "center", + alignItems: "flex-end" + }, + backgroundColor: variables.footerDefaultBg, + flexDirection: "row", + justifyContent: "center", + borderTopWidth: undefined, + // platform === "ios" && platformStyle !== "material" + // ? variables.borderWidth + // : undefined, + borderColor: undefined, + // platform === "ios" && platformStyle !== "material" + // ? "#cbcbcb" + // : undefined, + height: variables.footerHeight, + paddingBottom: variables.footerPaddingBottom, + elevation: 3, + left: 0, + right: 0, + + '.landscape': { + position: 'absolute', + top: 0, + // right: !variables.isIphoneX ? 0 : null, + // left: !variables.isIphoneX ? null : 0, + right: 0, + left: null, + height: !variables.isIphoneX ? '100%' : Math.min(variables.deviceWidth, variables.deviceHeight), + width: variables.footerWidth, + } + }; + return footerTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/FooterTab.js b/examples/advanced/advanced/src/native-base-theme/components/FooterTab.js new file mode 100644 index 0000000..85c240d --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/FooterTab.js @@ -0,0 +1,112 @@ +// @flow + +import { Platform } from "react-native"; + + + +export default (variables) => { + const platform = variables.platform; + + const nativeBaseButton = { + ".active": { + "NativeBase.Text": { + color: variables.tabBarActiveTextColor, + fontSize: variables.tabBarTextSize, + lineHeight: 16 * variables.sizeScaling + }, + "NativeBase.Icon": { + color: variables.tabBarActiveTextColor + }, + "NativeBase.IconNB": { + color: variables.tabBarActiveTextColor + }, + backgroundColor: variables.tabActiveBgColor + }, + ".transparent": { + "NativeBase.Text": { + color: variables.tabBarTextColor, + }, + "NativeBase.H1": { + color: variables.tabBarTextColor, + }, + "NativeBase.H2": { + color: variables.tabBarTextColor, + }, + "NativeBase.H3": { + color: variables.tabBarTextColor, + }, + "NativeBase.Icon": { + color: variables.tabBarTextColor + }, + "NativeBase.IconNB": { + color: variables.tabBarTextColor + } + }, + flexDirection: null, + backgroundColor: "transparent", + borderColor: null, + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null, + alignSelf: "center", + flex: 1, + height: variables.footerHeight - 5 * variables.sizeScaling, + justifyContent: "center", + ".badge": { + "NativeBase.Badge": { + "NativeBase.Text": { + fontSize: 11 * variables.sizeScaling, + fontWeight: platform === "ios" ? "600" : "600", + lineHeight: 14 * variables.sizeScaling + }, + top: -3, + alignSelf: "center", + left: 10, + zIndex: 99, + height: 18 * variables.sizeScaling, + padding: 1.7 * variables.sizeScaling, + paddingHorizontal: 3 * variables.sizeScaling + }, + "NativeBase.Icon": { + marginTop: -18 * variables.sizeScaling + } + }, + "NativeBase.Icon": { + color: variables.tabBarTextColor + }, + "NativeBase.IconNB": { + color: variables.tabBarTextColor + }, + "NativeBase.Text": { + color: variables.tabBarTextColor, + fontSize: variables.tabBarTextSize, + lineHeight: 16 * variables.sizeScaling + } + } + + const footerTabTheme = { + "NativeBase.Button": nativeBaseButton, + backgroundColor: Platform.OS === "android" + ? variables.footerDefaultBg + : undefined, + flexDirection: "row", + justifyContent: "space-between", + flex: 1, + alignSelf: "stretch", + + '.landscape': { + flexDirection: 'column', + marginTop: variables.platform === 'ios' ? 15 : 0, // do not scale this one + + // gotta override these too + "NativeBase.Button": Object.assign({}, nativeBaseButton, { + width: '100%', + margin: 0, + }) + } + }; + + return footerTabTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Form.js b/examples/advanced/advanced/src/native-base-theme/components/Form.js new file mode 100644 index 0000000..e0cafed --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Form.js @@ -0,0 +1,90 @@ +// @flow + + + +export default (variables) => { + const platform = variables.platform; + + const theme = { + "NativeBase.Item": { + ".fixedLabel": { + "NativeBase.Label": { + paddingLeft: null + }, + marginLeft: 15 * variables.sizeScaling + }, + ".inlineLabel": { + "NativeBase.Label": { + paddingLeft: null + }, + marginLeft: 15 * variables.sizeScaling + }, + ".placeholderLabel": { + "NativeBase.Input": {} + }, + ".stackedLabel": { + "NativeBase.Label": { + top: 5, + paddingLeft: null + }, + "NativeBase.Input": { + paddingLeft: null, + marginLeft: null + }, + "NativeBase.Icon": { + marginTop: 36 * variables.sizeScaling + }, + marginLeft: 15 * variables.sizeScaling + }, + ".floatingLabel": { + "NativeBase.Input": { + paddingLeft: null, + top: 10, + marginLeft: null + }, + "NativeBase.Label": { + left: 0, + top: 6 + }, + "NativeBase.Icon": { + top: 6 + }, + marginTop: 15 * variables.sizeScaling, + marginLeft: 15 * variables.sizeScaling + }, + ".regular": { + "NativeBase.Label": { + left: 0 + }, + marginLeft: 0 + }, + ".rounded": { + "NativeBase.Label": { + left: 0 + }, + marginLeft: 0 + }, + ".underline": { + "NativeBase.Label": { + left: 0, + top: 0, + position: "relative" + }, + "NativeBase.Input": { + left: -15 * variables.sizeScaling + }, + marginLeft: 15 * variables.sizeScaling + }, + ".last": { + marginLeft: 0, + paddingLeft: 15 * variables.sizeScaling + }, + "NativeBase.Label": { + paddingRight: 5 * variables.sizeScaling + }, + marginLeft: 15 * variables.sizeScaling + } + }; + + return theme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/H1.js b/examples/advanced/advanced/src/native-base-theme/components/H1.js new file mode 100644 index 0000000..bd67e92 --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/H1.js @@ -0,0 +1,37 @@ +// @flow + + + +export default (variables) => { + const h1Theme = { + color: variables.textColor, + fontSize: variables.fontSizeH1, + lineHeight: variables.lineHeightH1, + '.transparent': { + color: variables.transparentColor + }, + '.inverse': { + color: variables.inverseTextColor, + }, + '.dark': { + color: variables.brandDark + }, + '.black': { + color: variables.brandBlack + }, + '.light':{ + color: variables.brandLight + }, + '.danger':{ + color: variables.brandDanger + }, + '.success':{ + color: variables.brandSuccess + }, + ".block": { + width: '100%' + }, + }; + + return h1Theme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/H2.js b/examples/advanced/advanced/src/native-base-theme/components/H2.js new file mode 100644 index 0000000..e396db4 --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/H2.js @@ -0,0 +1,37 @@ +// @flow + + + +export default (variables) => { + const h2Theme = { + color: variables.textColor, + fontSize: variables.fontSizeH2, + lineHeight: variables.lineHeightH2, + '.transparent': { + color: variables.transparentColor + }, + '.inverse': { + color: variables.inverseTextColor, + }, + '.dark': { + color: variables.brandDark + }, + '.black': { + color: variables.brandBlack + }, + '.light':{ + color: variables.brandLight + }, + '.danger':{ + color: variables.brandDanger + }, + '.success':{ + color: variables.brandSuccess + }, + ".block": { + width: '100%' + }, + }; + + return h2Theme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/H3.js b/examples/advanced/advanced/src/native-base-theme/components/H3.js new file mode 100644 index 0000000..0d24366 --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/H3.js @@ -0,0 +1,37 @@ +// @flow + + + +export default (variables) => { + const h3Theme = { + color: variables.textColor, + fontSize: variables.fontSizeH3, + lineHeight: variables.lineHeightH3, + '.transparent': { + color: variables.transparentColor + }, + '.inverse': { + color: variables.inverseTextColor, + }, + '.dark': { + color: variables.brandDark + }, + '.black': { + color: variables.brandBlack + }, + '.light':{ + color: variables.brandLight + }, + '.danger':{ + color: variables.brandDanger + }, + '.success':{ + color: variables.brandSuccess + }, + ".block": { + width: '100%' + }, + }; + + return h3Theme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Header.js b/examples/advanced/advanced/src/native-base-theme/components/Header.js new file mode 100644 index 0000000..4900337 --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Header.js @@ -0,0 +1,381 @@ +import { PixelRatio, StatusBar } from "react-native"; + + +export default (variables) => { + const platformStyle = variables.platformStyle; + const platform = variables.platform; + + const textStyle = { + color: variables.toolbarBtnTextColor, + top: 0, + paddingHorizontal: 8 * variables.sizeScaling, + '.transparent': { + color: variables.toolbarBtnTextColor, + } + } + + const titleStyle = { + color: variables.toolbarBtnTextColor, + '.transparent': { + color: variables.toolbarBtnTextColor, + } + } + + const transparentTextStyle = { + color: variables.transparentColor, + '.transparent': { + color: variables.transparentColor + } + } + + const iconStyle = { + color: variables.toolbarBtnTextColor, + fontSize: variables.iconHeaderSize, + marginTop: 0, + marginHorizontal: 8 * variables.sizeScaling, + paddingTop: 1 * variables.sizeScaling, + '.transparent': { + color: variables.toolbarBtnTextColor, + } + } + + const transparentIconStyle = { + color: variables.transparentColor, + '.transparent': { + color: variables.transparentColor + } + } + + const buttonStyle = { + ".transparent": { + backgroundColor: "transparent", + borderColor: null, + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null, + "NativeBase.Icon": { + color: variables.toolbarBtnTextColor, + '.transparent': { + color: variables.toolbarBtnTextColor, + } + }, + "NativeBase.IconNB": { + color: variables.toolbarBtnTextColor, + '.transparent': { + color: variables.toolbarBtnTextColor, + } + }, + "NativeBase.Text": { + color: variables.toolbarBtnTextColor, + '.transparent': { + color: variables.toolbarBtnTextColor, + } + } + }, + + "NativeBase.Icon": iconStyle, + "NativeBase.IconNB": iconStyle, + "NativeBase.Text": textStyle, + + ".noSpacing": { + "NativeBase.Text": { + marginHorizontal: 0, + paddingHorizontal: 8 * variables.sizeScaling, + }, + "NativeBase.IconNB": { + marginHorizontal: 0, + paddingHorizontal: 8 * variables.sizeScaling, + }, + "NativeBase.Icon": { + marginHorizontal: 0, + paddingHorizontal: 8 * variables.sizeScaling, + }, + minWidth: 38 * variables.sizeScaling, + + }, + + alignSelf: null + } + + const transparentButton = { + backgroundColor: "transparent", + borderColor: null, + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null, + + ".transparent": { + "NativeBase.Icon": transparentIconStyle, + "NativeBase.IconNB": transparentIconStyle, + "NativeBase.Text": transparentTextStyle + }, + + "NativeBase.Icon": transparentIconStyle, + "NativeBase.IconNB": transparentIconStyle, + "NativeBase.Text": transparentTextStyle + } + + + + + const headerTheme = { + ".span": { + height: 128 * variables.sizeScaling, + "NativeBase.Left": { + alignSelf: "flex-start" + }, + "NativeBase.Body": { + alignSelf: "flex-end", + alignItems: "flex-start", + justifyContent: "center", + paddingBottom: 26 * variables.sizeScaling + }, + "NativeBase.Right": { + alignSelf: "flex-start" + } + }, + ".hasSubtitle": { + "NativeBase.Body": { + "NativeBase.Title": { + fontSize: variables.titleFontSize - 2 * variables.sizeScaling, + fontFamily: variables.titleFontfamily, + textAlign: "center", + fontWeight: "500", + paddingBottom: 3 * variables.sizeScaling + }, + "NativeBase.Subtitle": { + fontSize: variables.subTitleFontSize, + fontFamily: variables.titleFontfamily, + color: variables.subtitleColor, + textAlign: "center" + } + } + }, + ".noShadow": { + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null + }, + ".hasTabs": { + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null, + borderBottomWidth: null + }, + ".hasSegment": { + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null, + borderBottomWidth: null, + "NativeBase.Left": { + flex: 0.3 + }, + "NativeBase.Right": { + flex: 0.3 + }, + "NativeBase.Body": { + flex: 1, + "NativeBase.Segment": { + marginRight: 0, + alignSelf: "center", + "NativeBase.Button": { + paddingLeft: 0, + paddingRight: 0 + } + } + } + }, + ".noLeft": { + "NativeBase.Left": { + width: platform === "ios" ? undefined : 0, + flex: platform === "ios" ? 1 : 0 + }, + "NativeBase.Body": { + "NativeBase.Title": { + paddingLeft: platform === "ios" ? undefined : (10 * variables.sizeScaling) + }, + "NativeBase.Subtitle": { + paddingLeft: platform === "ios" ? undefined : (10 * variables.sizeScaling) + } + } + }, + + ".searchBar": { + "NativeBase.Item": { + "NativeBase.Icon": { + backgroundColor: "transparent", + color: variables.dropdownLinkColor, + fontSize: variables.toolbarSearchIconSize, + alignItems: "center", + marginTop: 2 * variables.sizeScaling, + paddingRight: 10 * variables.sizeScaling, + paddingLeft: 10 * variables.sizeScaling + }, + "NativeBase.IconNB": { + backgroundColor: "transparent", + color: null, + alignSelf: "center" + }, + "NativeBase.Input": { + alignSelf: "center", + lineHeight: null, + height: variables.searchBarInputHeight + }, + alignSelf: "center", + alignItems: "center", + justifyContent: "flex-start", + flex: 1, + height: variables.searchBarHeight, + borderColor: "transparent", + backgroundColor: variables.toolbarInputColor + }, + "NativeBase.Button": { + ".transparent": { + paddingLeft: platform === "ios" ? (10 * variables.sizeScaling) : null + }, + width: platform === "ios" ? undefined : 0, + height: platform === "ios" ? undefined : 0 + } + }, + ".rounded": { + "NativeBase.Item": { + borderRadius: (platform === "ios" && platformStyle !== "material" ? 25 : 3) * variables.sizeScaling + } + }, + "NativeBase.Left": { + "NativeBase.Button": buttonStyle, + "NativeBase.Text": textStyle, + "NativeBase.Title": titleStyle, + "NativeBase.Icon": iconStyle, + "NativeBase.IconNB": iconStyle, + + flex: 0, + alignSelf: "center", + alignItems: "flex-start", + '.paddingRight': { + paddingRight: variables.contentPadding + }, + '.paddingLeft': { + paddingLeft: variables.contentPadding + } + }, + "NativeBase.Body": { + "NativeBase.Button": buttonStyle, + "NativeBase.Text": textStyle, + "NativeBase.Title": titleStyle, + "NativeBase.Icon": iconStyle, + "NativeBase.IconNB": iconStyle, + "NativeBase.Segment": { + borderWidth: 0, + alignSelf: "flex-end", + marginRight: (platform === "ios" ? -40 : -55) * variables.sizeScaling + }, + + flex: 1, + alignItems: 'flex-start', + alignSelf: "center", + + + '.paddingRight': { + paddingRight: variables.contentPadding + }, + '.paddingLeft': { + paddingLeft: variables.contentPadding + } + }, + "NativeBase.Right": { + "NativeBase.Button": buttonStyle, + "NativeBase.Text": textStyle, + "NativeBase.Title": titleStyle, + "NativeBase.Icon": iconStyle, + "NativeBase.IconNB": iconStyle, + + flex: 0, + alignSelf: "center", + alignItems: "flex-end", + flexDirection: "row", + justifyContent: "flex-end", + '.paddingRight': { + paddingRight: variables.contentPadding + }, + '.paddingLeft': { + paddingLeft: variables.contentPadding + } + }, + backgroundColor: variables.toolbarDefaultBg, + flexDirection: "row", + paddingLeft: 0, //platform === "ios" && variables.platformStyle !== "material" ? 6 : 10, + paddingRight: 0, + justifyContent: "center", + paddingTop: 0, // Header component will handle paddings. + borderBottomWidth: + platform === "ios" ? variables.borderWidth : 0, + borderBottomColor: variables.toolbarDefaultBorder, + height: variables.toolbarHeight, + elevation: 3, + shadowColor: platformStyle === "material" ? "#000" : undefined, + shadowOffset: + platformStyle === "material" ? { width: 0, height: 2 } : undefined, + shadowOpacity: platformStyle === "material" ? 0.2 : undefined, + shadowRadius: platformStyle === "material" ? 1.2 : undefined, + top: 0, + left: 0, + right: 0, + zIndex: 100, + + '.noPadding': { + paddingLeft: 0, + paddingRight: 0 + }, + + ".transparent": { + backgroundColor: "rgba(0,0,0,0.4)", + borderBottomColor: "transparent", + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null, + + "NativeBase.Button": transparentButton, + "NativeBase.Text": transparentTextStyle, + "NativeBase.Title": transparentTextStyle, + "NativeBase.Icon": transparentIconStyle, + "NativeBase.IconNB": transparentIconStyle, + + "NativeBase.Left": { + "NativeBase.Button": transparentButton, + "NativeBase.Text": transparentTextStyle, + "NativeBase.Title": transparentTextStyle, + "NativeBase.Icon": transparentIconStyle, + "NativeBase.IconNB": transparentIconStyle, + }, + "NativeBase.Body": { + "NativeBase.Button": transparentButton, + "NativeBase.Text": transparentTextStyle, + "NativeBase.Title": transparentTextStyle, + "NativeBase.Icon": transparentIconStyle, + "NativeBase.IconNB": transparentIconStyle, + }, + "NativeBase.Right": { + "NativeBase.Button": transparentButton, + "NativeBase.Text": transparentTextStyle, + "NativeBase.Title": transparentTextStyle, + "NativeBase.Icon": transparentIconStyle, + "NativeBase.IconNB": transparentIconStyle, + }, + } + }; + + return headerTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Icon.js b/examples/advanced/advanced/src/native-base-theme/components/Icon.js new file mode 100644 index 0000000..1563918 --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Icon.js @@ -0,0 +1,58 @@ +// @flow + + + +export default (variables) => { + const iconTheme = { + fontSize: variables.iconFontSize, + color: variables.textColor, + + '.transparent': { + color: variables.transparentColor + }, + '.inverse': { + color: variables.inverseTextColor, + }, + '.dark': { + color: variables.brandDark + }, + '.black': { + color: variables.brandBlack + }, + '.light':{ + color: variables.brandLight + }, + '.danger':{ + color: variables.brandDanger + }, + '.success':{ + color: variables.brandSuccess + }, + ".warning": { + color: variables.brandWarning + }, + '.brandInfo': { + color: variables.brandInfo + }, + '.noMargin':{ + marginHorizontal: 0, + }, + '.noMarginLeft':{ + marginLeft: 0 + }, + '.noMarginRight':{ + marginRight: 0 + }, + '.normal': { + fontSize: variables.iconFontSize + }, + '.small': { + fontSize: variables.iconFontSize - 10 * variables.sizeScaling, + }, + '.large': { + fontSize: variables.iconFontSize + 5 * variables.sizeScaling, + } + }; + + return iconTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Input.js b/examples/advanced/advanced/src/native-base-theme/components/Input.js new file mode 100644 index 0000000..2510b42 --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Input.js @@ -0,0 +1,33 @@ +// @flow + + +export default (variables) => { + const inputTheme = { + '.multiline': { + height: null, + }, + '.transparent': { + color: variables.transparentColor + }, + '.inverse': { + color: variables.inverseTextColor, + }, + '.light':{ + color: variables.brandLight + }, + ".block": { + width: '100%' + }, + '.italic': { + fontStyle: 'italic' + }, + height: variables.inputHeightBase, + color: variables.inputColor, + paddingLeft: 0, //5, + paddingRight: 0, //5 + flex: 1, + fontSize: variables.inputFontSize + }; + + return inputTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/InputGroup.js b/examples/advanced/advanced/src/native-base-theme/components/InputGroup.js new file mode 100644 index 0000000..709c43d --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/InputGroup.js @@ -0,0 +1,132 @@ +// @flow + + + +export default (variables) => { + const inputGroupTheme = { + "NativeBase.Icon": { + fontSize: variables.buttonIconSize, + color: variables.sTabBarActiveTextColor, + paddingHorizontal: 5 * variables.sizeScaling + }, + "NativeBase.IconNB": { + fontSize: variables.buttonIconSize, + color: variables.sTabBarActiveTextColor, + paddingHorizontal: 5 * variables.sizeScaling + }, + "NativeBase.Input": { + height: variables.inputHeightBase, + color: variables.inputColor, + paddingLeft: 5 * variables.sizeScaling, + paddingRight: 5 * variables.sizeScaling, + flex: 1, + fontSize: variables.inputFontSize, + lineHeight: variables.inputLineHeight + }, + ".underline": { + ".success": { + borderColor: variables.inputSuccessBorderColor + }, + ".error": { + borderColor: variables.inputErrorBorderColor + }, + paddingLeft: 5 * variables.sizeScaling, + borderWidth: variables.borderWidth, + borderTopWidth: 0, + borderRightWidth: 0, + borderLeftWidth: 0, + borderColor: variables.inputBorderColor + }, + ".regular": { + ".success": { + borderColor: variables.inputSuccessBorderColor + }, + ".error": { + borderColor: variables.inputErrorBorderColor + }, + paddingLeft: 5 * variables.sizeScaling, + borderWidth: variables.borderWidth, + borderColor: variables.inputBorderColor + }, + ".rounded": { + ".success": { + borderColor: variables.inputSuccessBorderColor + }, + ".error": { + borderColor: variables.inputErrorBorderColor + }, + paddingLeft: 5 * variables.sizeScaling, + borderWidth: variables.borderWidth, + borderRadius: variables.inputGroupRoundedBorderRadius, + borderColor: variables.inputBorderColor + }, + + ".success": { + "NativeBase.Icon": { + color: variables.inputSuccessBorderColor + }, + "NativeBase.IconNB": { + color: variables.inputSuccessBorderColor + }, + ".rounded": { + borderRadius: 30 * variables.sizeScaling, + borderColor: variables.inputSuccessBorderColor + }, + ".regular": { + borderColor: variables.inputSuccessBorderColor + }, + ".underline": { + borderWidth: variables.borderWidth, + borderTopWidth: 0, + borderRightWidth: 0, + borderLeftWidth: 0, + borderColor: variables.inputSuccessBorderColor + }, + borderColor: variables.inputSuccessBorderColor + }, + + ".error": { + "NativeBase.Icon": { + color: variables.inputErrorBorderColor + }, + "NativeBase.IconNB": { + color: variables.inputErrorBorderColor + }, + ".rounded": { + borderRadius: 30 * variables.sizeScaling, + borderColor: variables.inputErrorBorderColor + }, + ".regular": { + borderColor: variables.inputErrorBorderColor + }, + ".underline": { + borderWidth: variables.borderWidth, + borderTopWidth: 0, + borderRightWidth: 0, + borderLeftWidth: 0, + borderColor: variables.inputErrorBorderColor + }, + borderColor: variables.inputErrorBorderColor + }, + ".disabled": { + "NativeBase.Icon": { + color: "#384850" + }, + "NativeBase.IconNB": { + color: "#384850" + } + }, + + paddingLeft: 5 * variables.sizeScaling, + borderWidth: variables.borderWidth, + borderTopWidth: 0, + borderRightWidth: 0, + borderLeftWidth: 0, + borderColor: variables.inputBorderColor, + backgroundColor: "transparent", + flexDirection: "row", + alignItems: "center" + }; + + return inputGroupTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Item.js b/examples/advanced/advanced/src/native-base-theme/components/Item.js new file mode 100644 index 0000000..e547d21 --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Item.js @@ -0,0 +1,246 @@ +// @flow + +import { Platform } from "react-native"; + + + +export default (variables) => { + const itemTheme = { + ".floatingLabel": { + "NativeBase.Input": { + height: variables.inputHeightBase, + top: 0, + paddingTop: 0, + paddingBottom: 0, + ".multiline": { + minHeight: variables.inputHeightBase + } + }, + "NativeBase.Label": { + paddingTop: 0, + marginBottom: 0, + }, + "NativeBase.Icon": { + top: 0, + paddingTop: 0, + }, + "NativeBase.IconNB": { + top: 0, + paddingTop: 0, + } + }, + ".fixedLabel": { + "NativeBase.Label": { + position: null, + top: null, + left: null, + right: null, + flex: 1, + height: null, + width: null, + fontSize: variables.inputFontSize + }, + "NativeBase.Input": { + flex: 2, + fontSize: variables.inputFontSize + } + }, + ".stackedLabel": { + "NativeBase.Label": { + position: null, + top: null, + left: null, + right: null, + paddingTop: 5 * variables.sizeScaling, + alignSelf: "flex-start", + fontSize: variables.inputFontSize - 2 * variables.sizeScaling + }, + "NativeBase.Icon": { + marginTop: 36 * variables.sizeScaling + }, + "NativeBase.Input": { + alignSelf: Platform.OS === "ios" ? "stretch" : "flex-start", + flex: 1, + width: Platform.OS === "ios" ? null : variables.deviceWidth - 25, + fontSize: variables.inputFontSize, + lineHeight: variables.inputLineHeight - 6 * variables.sizeScaling, + ".secureTextEntry": { + fontSize: variables.inputFontSize + }, + ".multiline": { + paddingTop: Platform.OS === "ios" ? (9 * variables.sizeScaling) : undefined, + paddingBottom: Platform.OS === "ios" ? (9 * variables.sizeScaling) : undefined + } + }, + flexDirection: null, + minHeight: variables.inputHeightBase + 15 * variables.sizeScaling + }, + ".inlineLabel": { + "NativeBase.Label": { + position: null, + top: null, + left: null, + right: null, + paddingRight: 20 * variables.sizeScaling, + height: null, + width: null, + fontSize: variables.inputFontSize + }, + "NativeBase.Input": { + paddingLeft: 5 * variables.sizeScaling, + fontSize: variables.inputFontSize + }, + flexDirection: "row" + }, + "NativeBase.Label": { + fontSize: variables.inputFontSize, + color: variables.labelColor, + paddingRight: 5 * variables.sizeScaling + }, + "NativeBase.Icon": { + fontSize: variables.buttonIconSize, + paddingRight: 8 * variables.sizeScaling + }, + "NativeBase.IconNB": { + fontSize: variables.buttonIconSize, + paddingRight: 8 * variables.sizeScaling + }, + "NativeBase.Input": { + ".multiline": { + height: null + }, + height: variables.inputHeightBase, + color: variables.inputColor, + flex: 1, + //top: Platform.OS === "ios" ? (1.5 * variables.sizeScaling) : undefined, + fontSize: variables.inputFontSize + }, + ".underline": { + "NativeBase.Input": { + paddingLeft: 15 * variables.sizeScaling + }, + ".success": { + borderColor: variables.inputSuccessBorderColor + }, + ".error": { + borderColor: variables.inputErrorBorderColor + }, + borderWidth: variables.borderWidth, + borderTopWidth: 0, + borderRightWidth: 0, + borderLeftWidth: 0, + borderColor: variables.inputBorderColor + }, + ".regular": { + "NativeBase.Input": { + paddingLeft: 8 * variables.sizeScaling + }, + "NativeBase.Icon": { + paddingLeft: 10 * variables.sizeScaling + }, + ".success": { + borderColor: variables.inputSuccessBorderColor + }, + ".error": { + borderColor: variables.inputErrorBorderColor + }, + borderWidth: variables.borderWidth, + borderColor: variables.inputBorderColor + }, + ".rounded": { + "NativeBase.Input": { + paddingLeft: 8 * variables.sizeScaling + }, + "NativeBase.Icon": { + paddingLeft: 10 * variables.sizeScaling + }, + ".success": { + borderColor: variables.inputSuccessBorderColor + }, + ".error": { + borderColor: variables.inputErrorBorderColor + }, + borderWidth: variables.borderWidth, + borderRadius: 30 * variables.sizeScaling, + borderColor: variables.inputBorderColor + }, + + ".success": { + "NativeBase.Icon": { + color: variables.inputSuccessBorderColor + }, + "NativeBase.IconNB": { + color: variables.inputSuccessBorderColor + }, + ".rounded": { + borderRadius: 30 * variables.sizeScaling, + borderColor: variables.inputSuccessBorderColor + }, + ".regular": { + borderColor: variables.inputSuccessBorderColor + }, + ".underline": { + borderWidth: variables.borderWidth, + borderTopWidth: 0, + borderRightWidth: 0, + borderLeftWidth: 0, + borderColor: variables.inputSuccessBorderColor + }, + borderColor: variables.inputSuccessBorderColor + }, + + ".error": { + "NativeBase.Icon": { + color: variables.inputErrorBorderColor + }, + "NativeBase.IconNB": { + color: variables.inputErrorBorderColor + }, + ".rounded": { + borderRadius: 30 * variables.sizeScaling, + borderColor: variables.inputErrorBorderColor + }, + ".regular": { + borderColor: variables.inputErrorBorderColor + }, + ".underline": { + borderWidth: variables.borderWidth, + borderTopWidth: 0, + borderRightWidth: 0, + borderLeftWidth: 0, + borderColor: variables.inputErrorBorderColor + }, + borderColor: variables.inputErrorBorderColor + }, + ".disabled": { + "NativeBase.Icon": { + color: "#384850" + }, + "NativeBase.IconNB": { + color: "#384850" + } + }, + ".picker": { + marginLeft: 0 + }, + + borderWidth: variables.borderWidth, + borderTopWidth: 0, + borderRightWidth: 0, + borderLeftWidth: 0, + borderColor: variables.inputBorderColor, + backgroundColor: "transparent", + flexDirection: "row", + alignItems: "center", + margin: 0, + + '.padder': { + padding: variables.contentPadding, + }, + '.marginBottom': { + marginBottom: variables.contentPadding, + } + }; + + return itemTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Label.js b/examples/advanced/advanced/src/native-base-theme/components/Label.js new file mode 100644 index 0000000..40d2bc7 --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Label.js @@ -0,0 +1,33 @@ +// @flow + + + +export default (variables) => { + const labelTheme = { + fontSize: variables.DefaultFontSize, + fontFamily: variables.fontFamily, + color: variables.labelColor, + ".focused": { + width: 0 + }, + ".block": { + width: '100%' + }, + '.transparent': { + color: variables.transparentColor + }, + '.inverse': { + color: variables.inverseTextColor, + }, + '.light':{ + color: variables.brandLight + }, + '.float': { + fontSize: variables.DefaultFontSize, + fontFamily: variables.fontFamily, + color: variables.labelColor, + } + }; + + return labelTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Left.js b/examples/advanced/advanced/src/native-base-theme/components/Left.js new file mode 100644 index 0000000..7b311e2 --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Left.js @@ -0,0 +1,12 @@ +// @flow + + +export default (variables) => { + const leftTheme = { + flex: 1, + alignSelf: 'center', + alignItems: 'flex-start', + }; + + return leftTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/ListItem.js b/examples/advanced/advanced/src/native-base-theme/components/ListItem.js new file mode 100644 index 0000000..78e0427 --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/ListItem.js @@ -0,0 +1,442 @@ +// @flow + +import { Platform, PixelRatio } from "react-native"; + +import pickerTheme from "./Picker"; + + +export default (variables) => { + const platform = variables.platform; + const selectedStyle = { + "NativeBase.Text": { + color: variables.listItemSelected + }, + "NativeBase.Icon": { + color: variables.listItemSelected + } + }; + + const listItemTheme = { + "NativeBase.InputGroup": { + "NativeBase.Icon": { + paddingRight: 5 * variables.sizeScaling + }, + "NativeBase.IconNB": { + paddingRight: 5 * variables.sizeScaling + }, + "NativeBase.Input": { + paddingHorizontal: 5 * variables.sizeScaling + }, + flex: 1, + borderWidth: null, + margin: -10 * variables.sizeScaling, + borderBottomColor: "transparent" + }, + ".searchBar": { + "NativeBase.Item": { + "NativeBase.Icon": { + backgroundColor: "transparent", + color: variables.dropdownLinkColor, + fontSize: + platform === "ios" + ? variables.iconFontSize - 10 * variables.sizeScaling + : variables.iconFontSize - 5 * variables.sizeScaling, + alignItems: "center", + marginTop: 2 * variables.sizeScaling, + paddingRight: 8 * variables.sizeScaling + }, + "NativeBase.IconNB": { + backgroundColor: "transparent", + color: null, + alignSelf: "center" + }, + "NativeBase.Input": { + alignSelf: "center" + }, + alignSelf: "center", + alignItems: "center", + justifyContent: "flex-start", + flex: 1, + height: (platform === "ios" ? 30 : 40) * variables.sizeScaling, + borderColor: "transparent", + backgroundColor: "#fff", + borderRadius: 5 * variables.sizeScaling + }, + "NativeBase.Button": { + ".transparent": { + "NativeBase.Text": { + fontWeight: "500" + }, + paddingHorizontal: null, + paddingLeft: platform === "ios" ? (10 * variables.sizeScaling) : null + }, + paddingHorizontal: platform === "ios" ? undefined : null, + width: platform === "ios" ? undefined : 0, + height: platform === "ios" ? undefined : 0 + }, + backgroundColor: variables.toolbarInputColor, + padding: 10 * variables.sizeScaling, + marginLeft: null + }, + "NativeBase.CheckBox": { + marginLeft: -10 * variables.sizeScaling, + marginRight: 10 * variables.sizeScaling + }, + ".first": { + ".itemHeader": { + paddingTop: variables.listItemPadding + 3 * variables.sizeScaling + } + }, + ".itemHeader": { + ".first": { + paddingTop: variables.listItemPadding + 3 * variables.sizeScaling + }, + borderBottomWidth: platform === "ios" ? variables.borderWidth : null, + marginLeft: null, + padding: variables.listItemPadding, + paddingLeft: variables.listItemPadding + 5 * variables.sizeScaling, + paddingTop: + platform === "ios" ? (variables.listItemPadding + 25 * variables.sizeScaling) : undefined, + paddingBottom: + platform === "android" ? (variables.listItemPadding + 20 * variables.sizeScaling): undefined, + flexDirection: "row", + borderColor: variables.listBorderColor, + "NativeBase.Text": { + fontSize: variables.fontSizeSmall, + color: platform === "ios" ? undefined : variables.listNoteColor + } + }, + ".itemDivider": { + borderBottomWidth: null, + marginLeft: null, + padding: variables.listItemPadding, + paddingLeft: variables.listItemPadding + 5 * variables.sizeScaling, + backgroundColor: variables.listDividerBg, + flexDirection: "row", + borderColor: variables.listBorderColor + }, + ".selected": { + "NativeBase.Left": { + ...selectedStyle + }, + "NativeBase.Body": { + ...selectedStyle + }, + "NativeBase.Right": { + ...selectedStyle + }, + ...selectedStyle + }, + "NativeBase.Left": { + "NativeBase.Body": { + "NativeBase.Text": { + ".note": { + color: variables.listNoteColor, + fontWeight: "200" + }, + fontWeight: "600" + }, + marginLeft: 10 * variables.sizeScaling, + alignItems: null, + alignSelf: null + }, + "NativeBase.Icon": { + width: variables.iconFontSize - 10 * variables.sizeScaling, + fontSize: variables.iconFontSize - 10 * variables.sizeScaling + }, + "NativeBase.IconNB": { + width: variables.iconFontSize - 10 * variables.sizeScaling, + fontSize: variables.iconFontSize - 10 * variables.sizeScaling + }, + "NativeBase.Text": { + alignSelf: "center" + }, + flexDirection: "row" + }, + "NativeBase.Body": { + "NativeBase.Text": { + marginHorizontal: variables.listItemPadding, + ".note": { + color: variables.listNoteColor, + fontWeight: "200" + } + }, + alignSelf: null, + alignItems: null + }, + "NativeBase.Right": { + "NativeBase.Badge": { + alignSelf: null + }, + "NativeBase.PickerNB": { + "NativeBase.Button": { + marginRight: -15 * variables.sizeScaling, + "NativeBase.Text": { + color: variables.topTabBarActiveTextColor + } + } + }, + "NativeBase.Button": { + alignSelf: null, + ".transparent": { + "NativeBase.Text": { + color: variables.topTabBarActiveTextColor + } + } + }, + "NativeBase.Icon": { + alignSelf: null, + fontSize: variables.iconFontSize - 8 * variables.sizeScaling, + color: "#c9c8cd" + }, + "NativeBase.IconNB": { + alignSelf: null, + fontSize: variables.iconFontSize - 8 * variables.sizeScaling, + color: "#c9c8cd" + }, + "NativeBase.Text": { + ".note": { + color: variables.listNoteColor, + fontWeight: "200" + }, + alignSelf: null + }, + "NativeBase.Thumbnail": { + alignSelf: null + }, + "NativeBase.Image": { + alignSelf: null + }, + "NativeBase.Radio": { + alignSelf: null + }, + "NativeBase.Checkbox": { + alignSelf: null + }, + "NativeBase.Switch": { + alignSelf: null + }, + padding: null, + flex: 0.28 + }, + "NativeBase.Text": { + ".note": { + color: variables.listNoteColor, + fontWeight: "200" + }, + alignSelf: "center" + }, + ".last": { + marginLeft: -(variables.listItemPadding + 5 * variables.sizeScaling), + paddingLeft: (variables.listItemPadding + 5 * variables.sizeScaling) * 2, + top: 1 + }, + ".avatar": { + "NativeBase.Left": { + flex: 0, + alignSelf: "flex-start", + paddingTop: 14 * variables.sizeScaling + }, + "NativeBase.Body": { + "NativeBase.Text": { + marginLeft: null + }, + flex: 1, + paddingVertical: variables.listItemPadding, + borderBottomWidth: variables.borderWidth, + borderColor: variables.listBorderColor, + marginLeft: variables.listItemPadding + 5 * variables.sizeScaling + }, + "NativeBase.Right": { + "NativeBase.Text": { + ".note": { + fontSize: variables.noteFontSize - 2 + } + }, + flex: 0, + paddingRight: variables.listItemPadding + 5 * variables.sizeScaling, + alignSelf: "stretch", + paddingVertical: variables.listItemPadding, + borderBottomWidth: variables.borderWidth, + borderColor: variables.listBorderColor + }, + ".noBorder": { + "NativeBase.Body": { + borderBottomWidth: null + }, + "NativeBase.Right": { + borderBottomWidth: null + } + }, + borderBottomWidth: null, + paddingVertical: null, + paddingRight: null + }, + ".thumbnail": { + "NativeBase.Left": { + flex: 0 + }, + "NativeBase.Body": { + "NativeBase.Text": { + marginLeft: null + }, + flex: 1, + paddingVertical: variables.listItemPadding + 8 * variables.sizeScaling, + borderBottomWidth: variables.borderWidth, + borderColor: variables.listBorderColor, + marginLeft: variables.listItemPadding + 5 * variables.sizeScaling + }, + "NativeBase.Right": { + "NativeBase.Button": { + ".transparent": { + "NativeBase.Text": { + fontSize: variables.listNoteSize, + color: variables.sTabBarActiveTextColor + } + }, + height: null + }, + flex: 0, + justifyContent: "center", + alignSelf: "stretch", + paddingRight: variables.listItemPadding + 5 * variables.sizeScaling, + paddingVertical: variables.listItemPadding + 5 * variables.sizeScaling, + borderBottomWidth: variables.borderWidth, + borderColor: variables.listBorderColor + }, + ".noBorder": { + "NativeBase.Body": { + borderBottomWidth: null + }, + "NativeBase.Right": { + borderBottomWidth: null + } + }, + borderBottomWidth: null, + paddingVertical: null, + paddingRight: null + }, + ".icon": { + ".last": { + "NativeBase.Body": { + borderBottomWidth: null + }, + "NativeBase.Right": { + borderBottomWidth: null + }, + borderBottomWidth: variables.borderWidth, + borderColor: variables.listBorderColor + }, + "NativeBase.Left": { + "NativeBase.Button": { + "NativeBase.IconNB": { + marginHorizontal: null, + fontSize: variables.iconFontSize - 5 * variables.sizeScaling + }, + "NativeBase.Icon": { + marginHorizontal: null, + fontSize: variables.iconFontSize - 8 * variables.sizeScaling + }, + alignSelf: "center", + height: 29 * variables.sizeScaling, + width: 29 * variables.sizeScaling, + borderRadius: 6 * variables.sizeScaling, + paddingVertical: null, + paddingHorizontal: null, + alignItems: "center", + justifyContent: "center" + }, + "NativeBase.Icon": { + width: variables.iconFontSize - 5 * variables.sizeScaling, + fontSize: variables.iconFontSize - 2 * variables.sizeScaling + }, + "NativeBase.IconNB": { + width: variables.iconFontSize - 5 * variables.sizeScaling, + fontSize: variables.iconFontSize - 2 * variables.sizeScaling + }, + paddingRight: variables.listItemPadding + 5 * variables.sizeScaling, + flex: 0, + height: 44 * variables.sizeScaling, + justifyContent: "center", + alignItems: "center" + }, + "NativeBase.Body": { + "NativeBase.Text": { + marginLeft: null, + }, + flex: 1, + height: 44 * variables.sizeScaling, + justifyContent: "center", + borderBottomWidth: variables.borderWidth, + borderColor: variables.listBorderColor + }, + "NativeBase.Right": { + "NativeBase.Text": { + textAlign: "center", + color: "#8F8E95" + }, + "NativeBase.IconNB": { + color: "#C8C7CC", + fontSize: variables.iconFontSize - 10 * variables.sizeScaling, + alignSelf: "center", + paddingLeft: 10 * variables.sizeScaling, + paddingTop: 3 * variables.sizeScaling + }, + "NativeBase.Icon": { + color: "#C8C7CC", + fontSize: variables.iconFontSize - 10 * variables.sizeScaling, + alignSelf: "center", + paddingLeft: 10 * variables.sizeScaling, + paddingTop: 3 * variables.sizeScaling + }, + "NativeBase.Switch": { + marginRight: Platform.OS === "ios" ? undefined : (-5 * variables.sizeScaling), + alignSelf: null + }, + "NativeBase.PickerNB": { + ...pickerTheme(variables) + }, + flexDirection: "row", + alignItems: "center", + flex: 0, + alignSelf: "stretch", + height: 44 * variables.sizeScaling, + justifyContent: "flex-end", + borderBottomWidth: variables.borderWidth, + borderColor: variables.listBorderColor, + paddingRight: variables.listItemPadding + 5 * variables.sizeScaling + }, + ".noBorder": { + "NativeBase.Body": { + borderBottomWidth: null + }, + "NativeBase.Right": { + borderBottomWidth: null + } + }, + borderBottomWidth: null, + paddingVertical: null, + paddingRight: null, + height: 44 * variables.sizeScaling, + justifyContent: "center" + }, + ".noBorder": { + borderBottomWidth: null + }, + ".noIndent": { + marginLeft: null, + padding: variables.listItemPadding, + paddingLeft: variables.listItemPadding + 6 * variables.sizeScaling + }, + alignItems: "center", + flexDirection: "row", + paddingRight: variables.listItemPadding + 6 * variables.sizeScaling, + paddingVertical: variables.listItemPadding, + marginLeft: variables.listItemPadding + 6 * variables.sizeScaling, + borderBottomWidth: variables.borderWidth, + backgroundColor: variables.listBg, + borderColor: variables.listBorderColor + }; + + return listItemTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Picker.android.js b/examples/advanced/advanced/src/native-base-theme/components/Picker.android.js new file mode 100644 index 0000000..698d64b --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Picker.android.js @@ -0,0 +1,16 @@ +// @flow + + + +export default (variables) => { + const pickerTheme = { + ".note": { + color: "#8F8E95" + }, + // width: 90, + marginRight: -4 * variables.sizeScaling, + flexGrow: 1 + }; + + return pickerTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Picker.ios.js b/examples/advanced/advanced/src/native-base-theme/components/Picker.ios.js new file mode 100644 index 0000000..57ffa7f --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Picker.ios.js @@ -0,0 +1,9 @@ +// @flow + + + +export default (variables) => { + const pickerTheme = {}; + + return pickerTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Picker.js b/examples/advanced/advanced/src/native-base-theme/components/Picker.js new file mode 100644 index 0000000..698d64b --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Picker.js @@ -0,0 +1,16 @@ +// @flow + + + +export default (variables) => { + const pickerTheme = { + ".note": { + color: "#8F8E95" + }, + // width: 90, + marginRight: -4 * variables.sizeScaling, + flexGrow: 1 + }; + + return pickerTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Radio.js b/examples/advanced/advanced/src/native-base-theme/components/Radio.js new file mode 100644 index 0000000..09f6953 --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Radio.js @@ -0,0 +1,28 @@ +// @flow + +import { Platform } from "react-native"; + + + +export default (variables) => { + const radioTheme = { + ".selected": { + "NativeBase.IconNB": { + color: Platform.OS === "ios" + ? variables.radioColor + : variables.radioSelectedColorAndroid, + lineHeight: Platform.OS === "ios" ? (25 * variables.sizeScaling) : variables.radioBtnLineHeight, + height: Platform.OS === "ios" ? (20 * variables.sizeScaling) : undefined + } + }, + "NativeBase.IconNB": { + color: Platform.OS === "ios" ? "transparent" : undefined, + lineHeight: Platform.OS === "ios" + ? undefined + : variables.radioBtnLineHeight, + fontSize: Platform.OS === "ios" ? undefined : variables.radioBtnSize + } + }; + + return radioTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Right.js b/examples/advanced/advanced/src/native-base-theme/components/Right.js new file mode 100644 index 0000000..b1759fa --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Right.js @@ -0,0 +1,15 @@ +// @flow + + +export default (variables) => { + const rightTheme = { + 'NativeBase.Button': { + alignSelf: null, + }, + flex: 1, + alignSelf: 'center', + alignItems: 'flex-end', + }; + + return rightTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Segment.js b/examples/advanced/advanced/src/native-base-theme/components/Segment.js new file mode 100644 index 0000000..49b0bfc --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Segment.js @@ -0,0 +1,56 @@ +// @flow + + + +export default (variables) => { + const platform = variables.platform; + + const segmentTheme = { + height: variables.buttonHeight, + borderColor: variables.segmentBorderColorMain, + flexDirection: "row", + justifyContent: "center", + backgroundColor: variables.segmentBackgroundColor, + "NativeBase.Button": { + alignSelf: "center", + borderRadius: 0, + paddingTop: 3 * variables.sizeScaling, + paddingBottom: 3 * variables.sizeScaling, + height: 30 * variables.sizeScaling, + backgroundColor: "transparent", + borderWidth: 1, + borderLeftWidth: 0, + borderColor: variables.segmentBorderColor, + elevation: 0, + ".active": { + backgroundColor: variables.segmentActiveBackgroundColor, + "NativeBase.Text": { + color: variables.segmentActiveTextColor + }, + "NativeBase.Icon": { + color: variables.segmentActiveTextColor + } + }, + ".first": { + borderTopLeftRadius: platform === "ios" ? 5 : undefined, + borderBottomLeftRadius: platform === "ios" ? 5 : undefined, + borderLeftWidth: 1 + }, + ".last": { + borderTopRightRadius: platform === "ios" ? 5 : undefined, + borderBottomRightRadius: platform === "ios" ? 5 : undefined + }, + "NativeBase.Text": { + color: variables.segmentTextColor, + fontSize: variables.fontSizeSmall + }, + "NativeBase.Icon": { + fontSize: 22 * variables.sizeScaling, + paddingTop: 0, + color: variables.segmentTextColor + } + } + }; + + return segmentTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Separator.js b/examples/advanced/advanced/src/native-base-theme/components/Separator.js new file mode 100644 index 0000000..7263ebc --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Separator.js @@ -0,0 +1,48 @@ +// @flow + + +export default (variables) => { + const theme = { + '.group': { + height: 50 * variables.sizeScaling, + paddingVertical: variables.listItemPadding - 8 * variables.sizeScaling, + paddingTop: variables.listItemPadding + 12 * variables.sizeScaling, + '.bordered': { + height: 50 * variables.sizeScaling, + paddingVertical: variables.listItemPadding - 8 * variables.sizeScaling, + paddingTop: variables.listItemPadding + 12 * variables.sizeScaling, + }, + }, + '.bordered': { + '.noTopBorder': { + borderTopWidth: 0, + }, + '.noBottomBorder': { + borderBottomWidth: 0, + }, + height: 40 * variables.sizeScaling, + paddingTop: variables.listItemPadding + 2 * variables.sizeScaling, + paddingBottom: variables.listItemPadding, + borderBottomWidth: variables.borderWidth, + borderTopWidth: variables.borderWidth, + borderColor: variables.listBorderColor, + }, + 'NativeBase.Text': { + fontSize: variables.tabBarTextSize, + color: '#777', + }, + '.noTopBorder': { + borderTopWidth: 0, + }, + '.noBottomBorder': { + borderBottomWidth: 0, + }, + height: 42 * variables.sizeScaling, + backgroundColor: '#F0EFF5', + flex: 1, + justifyContent: 'center', + paddingLeft: variables.listItemPadding + 5 * variables.sizeScaling, + }; + + return theme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Spinner.js b/examples/advanced/advanced/src/native-base-theme/components/Spinner.js new file mode 100644 index 0000000..dab94ac --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Spinner.js @@ -0,0 +1,11 @@ +// @flow + + + +export default (variables) => { + const spinnerTheme = { + height: 80 * variables.sizeScaling + }; + + return spinnerTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Subtitle.js b/examples/advanced/advanced/src/native-base-theme/components/Subtitle.js new file mode 100644 index 0000000..d7f40cb --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Subtitle.js @@ -0,0 +1,18 @@ +// @flow + +import { Platform } from "react-native"; + + + +export default (variables) => { + const subtitleTheme = { + fontSize: variables.subTitleFontSize, + fontFamily: variables.titleFontfamily, + color: variables.subtitleColor, + textAlign: "center", + paddingLeft: (Platform.OS === "ios" ? 4 : 0) * variables.sizeScaling, + marginLeft: Platform.OS === "ios" ? undefined : (-3 * variables.sizeScaling) + }; + + return subtitleTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/SwipeRow.js b/examples/advanced/advanced/src/native-base-theme/components/SwipeRow.js new file mode 100644 index 0000000..8adfb77 --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/SwipeRow.js @@ -0,0 +1,48 @@ +// @flow + + + +export default (variables) => { + const swipeRowTheme = { + "NativeBase.ListItem": { + ".list": { + backgroundColor: "#FFF", + }, + marginLeft: 0, + }, + "NativeBase.Left": { + flex: 0, + alignSelf: null, + alignItems: null, + "NativeBase.Button": { + flex: 1, + alignItems: "center", + justifyContent: "center", + alignSelf: "stretch", + borderRadius: 0, + }, + }, + "NativeBase.Right": { + flex: 0, + alignSelf: null, + alignItems: null, + "NativeBase.Button": { + flex: 1, + alignItems: "center", + justifyContent: "center", + alignSelf: "stretch", + borderRadius: 0, + }, + }, + "NativeBase.Button": { + flex: 1, + height: null, + alignItems: "center", + justifyContent: "center", + alignSelf: "stretch", + borderRadius: 0, + }, + }; + + return swipeRowTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Switch.js b/examples/advanced/advanced/src/native-base-theme/components/Switch.js new file mode 100644 index 0000000..c232242 --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Switch.js @@ -0,0 +1,11 @@ +// @flow + + + +export default (variables) => { + const switchTheme = { + marginVertical: -5 * variables.sizeScaling, + }; + + return switchTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Tab.js b/examples/advanced/advanced/src/native-base-theme/components/Tab.js new file mode 100644 index 0000000..ba2a67e --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Tab.js @@ -0,0 +1,12 @@ +// @flow + + + +export default (variables) => { + const tabTheme = { + flex: 1, + backgroundColor: "#FFF" + }; + + return tabTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/TabBar.js b/examples/advanced/advanced/src/native-base-theme/components/TabBar.js new file mode 100644 index 0000000..a5190fe --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/TabBar.js @@ -0,0 +1,57 @@ +// @flow + + + +export default (variables) => { + const tabBarTheme = { + ".tabIcon": { + height: undefined + }, + ".vertical": { + height: 60 * variables.sizeScaling + }, + "NativeBase.Button": { + ".transparent": { + "NativeBase.Text": { + fontSize: variables.tabFontSize, + color: variables.sTabBarActiveTextColor, + fontWeight: "400" + }, + "NativeBase.IconNB": { + color: variables.sTabBarActiveTextColor + } + }, + "NativeBase.IconNB": { + color: variables.sTabBarActiveTextColor + }, + "NativeBase.Text": { + fontSize: variables.tabFontSize, + color: variables.sTabBarActiveTextColor, + fontWeight: "400" + }, + ".isTabActive": { + "NativeBase.Text": { + fontWeight: "900" + } + }, + flex: 1, + alignSelf: "stretch", + alignItems: "center", + justifyContent: "center", + borderRadius: null, + borderBottomColor: "transparent", + backgroundColor: variables.tabBgColor + }, + height: variables.buttonHeight, + flexDirection: "row", + justifyContent: "space-around", + borderWidth: 1, + borderTopWidth: 0, + borderLeftWidth: 0, + borderRightWidth: 0, + borderBottomColor: "#ccc", + backgroundColor: variables.tabBgColor + }; + + return tabBarTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/TabContainer.js b/examples/advanced/advanced/src/native-base-theme/components/TabContainer.js new file mode 100644 index 0000000..77d8b70 --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/TabContainer.js @@ -0,0 +1,26 @@ +// @flow + + +import { Platform } from "react-native"; + +export default (variables) => { + const platformStyle = variables.platformStyle; + const platform = variables.platform; + + const tabContainerTheme = { + elevation: 3, + height: 50 * variables.sizeScaling, + flexDirection: "row", + shadowColor: platformStyle === "material" ? "#000" : undefined, + shadowOffset: platformStyle === "material" + ? { width: 0, height: 2 } + : undefined, + shadowOpacity: platformStyle === "material" ? 0.2 : undefined, + shadowRadius: platformStyle === "material" ? 1.2 : undefined, + justifyContent: "space-around", + borderBottomWidth: Platform.OS === "ios" ? variables.borderWidth : 0, + borderColor: variables.topTabBarBorderColor + }; + + return tabContainerTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/TabHeading.js b/examples/advanced/advanced/src/native-base-theme/components/TabHeading.js new file mode 100644 index 0000000..ae999a3 --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/TabHeading.js @@ -0,0 +1,39 @@ +// @flow + + + +export default (variables) => { + const platform = variables.platform; + + const tabHeadingTheme = { + flexDirection: "row", + backgroundColor: variables.tabDefaultBg, + flex: 1, + alignItems: "center", + justifyContent: "center", + ".scrollable": { + paddingHorizontal: 20 * variables.sizeScaling, + flex: platform === "android" ? 0 : 1, + minWidth: platform === "android" ? undefined : (60 * variables.sizeScaling) + }, + "NativeBase.Text": { + color: variables.topTabBarTextColor, + marginHorizontal: 7 * variables.sizeScaling + }, + "NativeBase.Icon": { + color: variables.topTabBarTextColor, + fontSize: platform === "ios" ? (26 * variables.sizeScaling) : undefined + }, + ".active": { + "NativeBase.Text": { + color: variables.topTabBarActiveTextColor, + fontWeight: "600" + }, + "NativeBase.Icon": { + color: variables.topTabBarActiveTextColor + } + } + }; + + return tabHeadingTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Text.js b/examples/advanced/advanced/src/native-base-theme/components/Text.js new file mode 100644 index 0000000..c023087 --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Text.js @@ -0,0 +1,80 @@ +// @flow + + + +export default (variables) => { + const textTheme = { + fontSize: variables.DefaultFontSize, + fontFamily: variables.fontFamily, + color: variables.textColor, + ".note": { + //color: "#a7a7a7", + fontSize: variables.noteFontSize + }, + '.medium': { + fontSize: variables.fontSizeMedium, + }, + '.large': { + fontSize: variables.fontSizeLarge, + }, + ".label": { + color: variables.labelColor, + }, + '.transparent': { + color: variables.transparentColor, + }, + '.inverse': { + color: variables.inverseTextColor, + }, + '.light':{ + color: variables.brandLight + }, + '.danger':{ + color: variables.brandDanger + }, + '.warning':{ + color: variables.brandWarning + }, + '.dark': { + color: variables.brandDark + }, + '.black': { + color: variables.brandBlack + }, + '.success': { + color: variables.brandSuccess + }, + ".block": { + width: '100%' + }, + '.placeholder': { + color: variables.inputColorPlaceholder, + '.transparent': { + color: variables.inputColorPlaceholderTransparent + }, + '.inverse': { + color: variables.inverseTextColor, + } + }, + '.disabled': { + color: variables.buttonDisabledBg + }, + ".underlined": { + textDecorationLine: 'underline' + }, + '.italic': { + fontStyle: 'italic' + }, + '.bold': { + fontWeight: 'bold' + }, + '.flex1': { + flex: 1 + }, + '.paddingBottom': { + paddingBottom: variables.contentPadding + } + }; + + return textTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Textarea.js b/examples/advanced/advanced/src/native-base-theme/components/Textarea.js new file mode 100644 index 0000000..89536db --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Textarea.js @@ -0,0 +1,43 @@ +// @flow + + + +export default (variables) => { + const textAreaTheme = { + ".underline": { + borderBottomWidth: variables.borderWidth, + marginTop: 5 * variables.sizeScaling, + borderColor: variables.inputBorderColor + }, + ".bordered": { + borderWidth: 1, + marginTop: 5 * variables.sizeScaling, + borderColor: variables.inputBorderColor + }, + '.transparent': { + color: variables.transparentColor + }, + '.dark': { + color: variables.brandDark + }, + '.black': { + color: variables.brandBlack + }, + '.light':{ + color: variables.brandLight + }, + '.success':{ + color: variables.brandSuccess + }, + ".block": { + width: '100%' + }, + color: variables.textColor, + paddingLeft: 10 * variables.sizeScaling, + paddingRight: 5 * variables.sizeScaling, + fontSize: variables.DefaultFontSize, + textAlignVertical: "top" + }; + + return textAreaTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Thumbnail.js b/examples/advanced/advanced/src/native-base-theme/components/Thumbnail.js new file mode 100644 index 0000000..6dd13eb --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Thumbnail.js @@ -0,0 +1,41 @@ +// @flow + + +export default (variables) => { + const thumbnailTheme = { + '.square': { + borderRadius: 0, + '.small': { + width: 36 * variables.sizeScaling, + height: 36 * variables.sizeScaling, + borderRadius: 0, + }, + '.large': { + width: 80 * variables.sizeScaling, + height: 80 * variables.sizeScaling, + borderRadius: 0, + }, + }, + '.small': { + width: 36 * variables.sizeScaling, + height: 36 * variables.sizeScaling, + borderRadius: 18 * variables.sizeScaling, + '.square': { + borderRadius: 0, + }, + }, + '.large': { + width: 80 * variables.sizeScaling, + height: 80 * variables.sizeScaling, + borderRadius: 40 * variables.sizeScaling, + '.square': { + borderRadius: 0, + }, + }, + width: 56 * variables.sizeScaling, + height: 56 * variables.sizeScaling, + borderRadius: 28 * variables.sizeScaling, + }; + + return thumbnailTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Title.js b/examples/advanced/advanced/src/native-base-theme/components/Title.js new file mode 100644 index 0000000..9acf669 --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Title.js @@ -0,0 +1,30 @@ +// @flow + +import { Platform } from "react-native"; + + + +export default (variables) => { + const titleTheme = { + fontSize: variables.titleFontSize, + fontFamily: variables.titleFontfamily, + fontWeight: "600", //Platform.OS === "ios" ? "700" : undefined, + textAlign: "center", + paddingLeft: 0,//Platform.OS === "ios" ? 4 : 0, + paddingTop: 0, + + '.transparent': { + color: variables.transparentColor, + }, + '.inverse': { + color: variables.inverseTextColor, + }, + + '.padder': { + marginHorizontal: 0, + paddingHorizontal: 8 * variables.sizeScaling + } + }; + + return titleTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/Toast.js b/examples/advanced/advanced/src/native-base-theme/components/Toast.js new file mode 100644 index 0000000..fecb77a --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/Toast.js @@ -0,0 +1,41 @@ +// @flow + + + +export default (variables) => { + const platform = variables.platform; + + const toastTheme = { + ".danger": { + backgroundColor: variables.brandDanger + }, + ".warning": { + backgroundColor: variables.brandWarning + }, + ".success": { + backgroundColor: variables.brandSuccess + }, + backgroundColor: "rgba(0,0,0,0.8)", + borderRadius: platform === "ios" ? (5 * variables.sizeScaling) : 0, + flexDirection: "row", + justifyContent: "space-between", + alignItems: "center", + padding: 10 * variables.sizeScaling, + minHeight: 50 * variables.sizeScaling, + "NativeBase.Text": { + color: "#fff", + flex: 1 + }, + "NativeBase.Button": { + backgroundColor: "transparent", + height: 30 * variables.sizeScaling, + elevation: 0, + "NativeBase.Text": { + fontSize: variables.fontSizeSmall, + color: "#fff" + } + } + }; + + return toastTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/View.js b/examples/advanced/advanced/src/native-base-theme/components/View.js new file mode 100644 index 0000000..7326641 --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/View.js @@ -0,0 +1,13 @@ +// @flow + + + +export default (variables) => { + const viewTheme = { + ".padder": { + padding: variables.contentPadding + } + }; + + return viewTheme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/components/index.js b/examples/advanced/advanced/src/native-base-theme/components/index.js new file mode 100644 index 0000000..26d9be8 --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/components/index.js @@ -0,0 +1,258 @@ +// @flow + +import _ from "lodash"; + +import bodyTheme from "./Body"; +import leftTheme from "./Left"; +import rightTheme from "./Right"; +import headerTheme from "./Header"; +import switchTheme from "./Switch"; +import thumbnailTheme from "./Thumbnail"; +import containerTheme from "./Container"; +import contentTheme from "./Content"; +import buttonTheme from "./Button"; +import titleTheme from "./Title"; +import subtitleTheme from "./Subtitle"; +import inputGroupTheme from "./InputGroup"; +import badgeTheme from "./Badge"; +import checkBoxTheme from "./CheckBox"; +import cardTheme from "./Card"; +import radioTheme from "./Radio"; +import h3Theme from "./H3"; +import h2Theme from "./H2"; +import h1Theme from "./H1"; +import footerTheme from "./Footer"; +import footerTabTheme from "./FooterTab"; +import fabTheme from "./Fab"; +import itemTheme from "./Item"; +import labelTheme from "./Label"; +import textAreaTheme from "./Textarea"; +import textTheme from "./Text"; +import toastTheme from "./Toast"; +import tabTheme from "./Tab"; +import tabBarTheme from "./TabBar"; +import tabContainerTheme from "./TabContainer"; +import viewTheme from "./View"; +import tabHeadingTheme from "./TabHeading"; +import iconTheme from "./Icon"; +import inputTheme from "./Input"; +import swipeRowTheme from "./SwipeRow"; +import segmentTheme from "./Segment"; +import spinnerTheme from "./Spinner"; +import cardItemTheme from "./CardItem"; +import listItemTheme from "./ListItem"; +import formTheme from "./Form"; +import separatorTheme from "./Separator"; +import pickerTheme from "./Picker" + + + +export default (variables) => { + const theme = { + variables, + + // to export all variables + "Branding": { + ...variables, + borderBottomWidth: variables.borderWidth // need this for some reason borderWidth is always empty if using connectStyle + }, + + // do not use NB Header + "baseComponents.Header": { + ...headerTheme(variables) + }, + + // do not use NB Content + "baseComponents.Content": { + ...contentTheme(variables) + }, + + // do not use NB Item + "baseComponents.Item": { + ...itemTheme(variables) + }, + + "NativeBase.Left": { + ...leftTheme(variables) + }, + "NativeBase.Right": { + ...rightTheme(variables) + }, + "NativeBase.Body": { + ...bodyTheme(variables) + }, + + "NativeBase.Button": { + ...buttonTheme(variables) + }, + + "NativeBase.Title": { + ...titleTheme(variables) + }, + "NativeBase.Subtitle": { + ...subtitleTheme(variables) + }, + + "NativeBase.InputGroup": { + ...inputGroupTheme(variables) + }, + + "NativeBase.Input": { + ...inputTheme(variables) + }, + + "NativeBase.Badge": { + ...badgeTheme(variables) + }, + + "NativeBase.CheckBox": { + ...checkBoxTheme(variables) + }, + + "NativeBase.Radio": { + ...radioTheme(variables) + }, + + "NativeBase.Card": { + ...cardTheme(variables) + }, + + "NativeBase.CardItem": { + ...cardItemTheme(variables) + }, + + "NativeBase.Toast": { + ...toastTheme(variables) + }, + + "NativeBase.H1": { + ...h1Theme(variables) + }, + "NativeBase.H2": { + ...h2Theme(variables) + }, + "NativeBase.H3": { + ...h3Theme(variables) + }, + "NativeBase.Form": { + ...formTheme(variables) + }, + + "NativeBase.Container": { + ...containerTheme(variables) + }, + + "NativeBase.Footer": { + ...footerTheme(variables) + }, + + "NativeBase.Tabs": { + flex: 1 + }, + + "NativeBase.FooterTab": { + ...footerTabTheme(variables) + }, + + "NativeBase.ListItem": { + ...listItemTheme(variables) + }, + + "NativeBase.ListItem1": { + ...listItemTheme(variables) + }, + + "NativeBase.Icon": { + ...iconTheme(variables) + }, + "NativeBase.IconNB": { + ...iconTheme(variables) + }, + "NativeBase.Text": { + ...textTheme(variables) + }, + "NativeBase.Spinner": { + ...spinnerTheme(variables) + }, + + "NativeBase.Fab": { + ...fabTheme(variables) + }, + + "NativeBase.Label": { + ...labelTheme(variables) + }, + + "NativeBase.Textarea": { + ...textAreaTheme(variables) + }, + + "NativeBase.PickerNB": { + ...pickerTheme(variables), + "NativeBase.Button": { + "NativeBase.Text": {} + } + }, + + "NativeBase.Tab": { + ...tabTheme(variables) + }, + + "NativeBase.Segment": { + ...segmentTheme(variables) + }, + + "NativeBase.TabBar": { + ...tabBarTheme(variables) + }, + "NativeBase.ViewNB": { + ...viewTheme(variables) + }, + "NativeBase.TabHeading": { + ...tabHeadingTheme(variables) + }, + "NativeBase.TabContainer": { + ...tabContainerTheme(variables) + }, + "NativeBase.Switch": { + ...switchTheme(variables) + }, + "NativeBase.Separator": { + ...separatorTheme(variables) + }, + "NativeBase.SwipeRow": { + ...swipeRowTheme(variables) + }, + "NativeBase.Thumbnail": { + ...thumbnailTheme(variables) + } + }; + + const cssifyTheme = (grandparent, parent, parentKey) => { + _.forEach(parent, (style, styleName) => { + if ( + styleName.indexOf(".") === 0 && + parentKey && + parentKey.indexOf(".") === 0 + ) { + if (grandparent) { + if (!grandparent[styleName]) { + grandparent[styleName] = {}; + } else { + grandparent[styleName][parentKey] = style; + } + } + } + if (style && typeof style === "object" && styleName !== "fontVariant" && styleName !== "transform") { + cssifyTheme(parent, style, styleName); + } + }); + }; + + cssifyTheme(null, theme, null); + + // patch this here once it's fixed on native-base + //theme['NativeBase.Text'].fontVariant = ['tabular-nums']; + + return theme; +}; diff --git a/examples/advanced/advanced/src/native-base-theme/variables/platform.js b/examples/advanced/advanced/src/native-base-theme/variables/platform.js new file mode 100644 index 0000000..448acf4 --- /dev/null +++ b/examples/advanced/advanced/src/native-base-theme/variables/platform.js @@ -0,0 +1,414 @@ +// @flow + +import color from "color"; + +import { Platform, Dimensions, PixelRatio } from "react-native"; + +const deviceHeight = Dimensions.get("window").height; +const deviceWidth = Dimensions.get("window").width; +const platform = Platform.OS; +const platformStyle = undefined; +const isIphoneX = +platform === "ios" && (deviceHeight === 812 || deviceWidth === 812 || deviceHeight === 896 || deviceWidth === 896); + + +// --------------------------- +// In order to access the theme variables from within a component, we made a small work around +// because the library does not support it natively. +// Created a "Branding" theme variable/component (at ./components/index) that exports all variables +// +// import {connectStyle} from 'native-base'; +// ... in render: this.props.style.[variable I want] +// export default connectStyle("Branding")(MyComponent); +// +// --------------------------- + +export default function getVariables(overrides, sizeScaling=1){ + + let primaryColor = overrides.primaryColor || '#FAAC18'; + let iosPrimaryColor = overrides.primaryColor || '#FAAC18'; + let toolbarColor = overrides.toolbarColor || '#FAAC18'; + let statusBarColor = overrides.statusBarColor || toolbarColor; + let brandLight = overrides.brandLight || "#FFD185"; + + let brandInfo = overrides.brandInfo || "#03a9f4"; + let brandSuccess = overrides.brandSuccess || "#5cb85c"; + let brandDanger = overrides.brandDanger || "#d9534f"; + let brandWarning = overrides.brandWarning || "#f0ad4e"; + let brandBlack = overrides.brandBlack || '#121212'; + let brandDark = overrides.brandDark || "#121212"; + + + let textColor = overrides.textColor || brandBlack; + let labelColor = '#575757'; + let labelColorTransparent = '#a5a5a5'; + let inverseTextColor = overrides.inverseTextColor || "#FFF"; + let transparentColor = overrides.transparentColor || "#FFF"; + + // becareful overriding these since they are used as static variables everywhere + // and cannot be updated in real time. + let inputColorPlaceholder = "#7b7b7b"; + let inputColorPlaceholderTransparent = '#a5a5a5'; + let inputBorderColor = "#575757"; + let darkBorderColor = "#121212"; + + let headerTextColor = overrides.headerTextColor || inverseTextColor; + + let iosStatusbar = overrides.iosStatusbar || 'light-content'; // "dark-content" : "light-content", + + // these will be adjuster by scaling later. + let fontSize = 15; + let fontSizeSmall = 14; + let fontSizeMedium = 17; + let fontSizeLarge = 22; + let headerFontSize = 16; + let noteFontSize = 13; + let buttonHeight = 45; // make sure this is smaller than large values from Button + + + return { + platformStyle, + platform, + sizeScaling, + + //Accordion + accordionBorderColor: '#d3d3d3', + accordionContentPadding: 10 * sizeScaling, + accordionIconFontSize: 18 * sizeScaling, + contentStyle: '#f5f4f5', + expandedIconStyle: '#000', + headerStyle: '#edebed', + iconStyle: '#000', + + // ActionSheet + elevation: 4, + containerTouchableBackgroundColor: 'rgba(0,0,0,0.4)', + innerTouchableBackgroundColor: '#fff', + listItemHeight: 50 * sizeScaling, + listItemBorderColor: 'transparent', + marginHorizontal: -15 * sizeScaling, + marginLeft: 14 * sizeScaling, + marginTop: 15 * sizeScaling, + minHeight: 56 * sizeScaling, + padding: 15 * sizeScaling, + touchableTextColor: '#757575', + + // Android + androidRipple: false, + androidRippleColor: "rgba(256, 256, 256, 0.35)", + androidRippleColorDark: "rgba(0, 0, 0, 0.15)", + buttonUppercaseAndroidText: false, + + // Badge + badgeBg: "#ED1727", + badgeColor: "#fff", + badgePadding: 0, + + // Button + buttonFontFamily: platform === "ios" ? "System" : "Roboto", + buttonDisabledBg: "#a5a5a5", + buttonDisabledText: '#f4f4f4', + buttonPadding: 6 * sizeScaling, + buttonDefaultActiveOpacity: 0.5, + buttonDefaultFlex: 1, + buttonDefaultBorderRadius: 2 * sizeScaling, + buttonDefaultBorderWidth: 1, + buttonHeight: buttonHeight * sizeScaling, + + get buttonPrimaryBg() { + return this.brandPrimary; + }, + get buttonPrimaryColor() { + return this.inverseTextColor; + }, + get buttonInfoBg() { + return this.brandInfo; + }, + get buttonInfoColor() { + return this.inverseTextColor; + }, + get buttonSuccessBg() { + return this.brandSuccess; + }, + get buttonSuccessColor() { + return this.inverseTextColor; + }, + get buttonDangerBg() { + return this.brandDanger; + }, + get buttonDangerColor() { + return this.inverseTextColor; + }, + get buttonWarningBg() { + return this.brandWarning; + }, + get buttonWarningColor() { + return this.inverseTextColor; + }, + get buttonTextSize() { + return this.fontSizeBase; //platform === "ios" ? this.fontSizeBase : this.fontSizeBase; + }, + get buttonTextSizeLarge() { + return fontSizeLarge; + }, + get buttonTextSizeSmall() { + return fontSizeSmall; + }, + get borderRadiusLarge() { + return this.fontSizeBase * 3.8; + }, + get iconSizeLarge() { + return this.iconFontSize * 1.5; + }, + get iconSizeSmall() { + return this.iconFontSize * 0.6; + }, + + // Card + cardDefaultBg: '#f6f8fa',//'"#fff", + cardHeaderBg: '#eaebed', + cardBorderColor: "#ccc", + cardBorderRadius: 8 * sizeScaling, + cardItemPadding: (platform === "ios" ? 10 : 12) * sizeScaling, + + // CheckBox + CheckboxRadius: (platform === "ios" ? 10 : 0) * sizeScaling, + CheckboxBorderWidth: platform === "ios" ? 1 : 2, + CheckboxPaddingLeft: (platform === "ios" ? 5 : 2) * sizeScaling, + CheckboxPaddingBottom: (platform === "ios" ? 5 : 5) * sizeScaling, + CheckboxIconSize: (platform === "ios" ? 21 : 16) * sizeScaling, + CheckboxIconMarginTop: platform === "ios" ? undefined : 1, + CheckboxFontSize: (platform === "ios" ? 23 : 17) * sizeScaling, + checkboxBgColor: platform === "ios" ? iosPrimaryColor : primaryColor, + checkboxSize: 20 * sizeScaling, + checkboxTickColor: inverseTextColor, + checkboxDefaultColor: 'transparent', + checkboxTextShadowRadius: 0, + + // Color + brandPrimary: platform === "ios" ? iosPrimaryColor : primaryColor, + brandInfo: brandInfo, + brandSuccess: brandSuccess, + brandDanger: brandDanger, + brandWarning: brandWarning, + brandDark: brandDark, + brandBlack: brandBlack, + brandLight: brandLight, + + //Container + containerBgColor: "#fff", + + //Date Picker + datePickerFlex: 1, + datePickerPadding: 10 * sizeScaling, + datePickerTextColor: "#000", + datePickerBg: "transparent", + + // FAB + fabWidth: 56 * sizeScaling, + + // Font + DefaultFontSize: fontSize * sizeScaling, + + fontSizeBase: fontSize * sizeScaling, + fontSizeSmall: fontSizeSmall * sizeScaling, + fontSizeMedium: fontSizeMedium * sizeScaling, + fontSizeLarge: fontSizeLarge * sizeScaling, + headerFontSize: headerFontSize * sizeScaling, + noteFontSize: noteFontSize * sizeScaling, + + fontFamily: platform === "ios" ? "System" : "Roboto", + get fontSizeH1() { + return this.fontSizeBase * 1.8; + }, + get fontSizeH2() { + return this.fontSizeBase * 1.6; + }, + get fontSizeH3() { + return this.fontSizeBase * 1.4; + }, + + // Footer + footerHeight: (platform === "ios" ? 60 : 56) * sizeScaling, + footerWidth: (platform === "ios" ? 60 : 60) * sizeScaling, // for landscape mode + footerDefaultBg: toolbarColor, //platform === "ios" ? "#F8F8F8" : toolbarColor, + footerPaddingBottom: 0, + + // FooterTab + tabBarTextColor: headerTextColor, //platform === "ios" ? "#6b6b6b" : "#fff", + tabBarTextSize: (platform === "ios" ? 15 : 15) * sizeScaling, + activeTab: headerTextColor, //platform === "ios" ? iosPrimaryColor : "#fff", + sTabBarActiveTextColor: iosPrimaryColor, + tabBarActiveTextColor: headerTextColor, //platform === "ios" ? iosPrimaryColor : "#fff", + tabActiveBgColor: primaryColor, //platform === "ios" ? "#cde1f9" : primaryColor, + + // Header + toolbarBtnColor: headerTextColor, //platform === "ios" ? iosPrimaryColor : "#fff", + toolbarDefaultBg: toolbarColor, //platform === "ios" ? "#F8F8F8" : toolbarColor, + toolbarHeight: 52 * sizeScaling, // iOS header will adjust this as needed to compensate for status bars + toolbarSearchIconSize: (platform === "ios" ? 20 : 23) * sizeScaling, + toolbarInputColor: headerTextColor, //platform === "ios" ? "#CECDD2" : "#fff", + searchBarHeight: (platform === "ios" ? 30 : 40) * sizeScaling, + searchBarInputHeight: (platform === "ios" ? 30 : 30 ) * sizeScaling, + toolbarBtnTextColor: headerTextColor, //platform === "ios" ? iosPrimaryColor : "#fff", + toolbarDefaultBorder: primaryColor, //platform === "ios" ? "#a7a6ab" : primaryColor, + transparentColor: transparentColor, + iosStatusbar: iosStatusbar, + statusBarColor: statusBarColor, + // get statusBarColor() { + // return color(this.toolbarDefaultBg) + // .darken(0.2) + // .hex(); + // }, + get darkenHeader() { + return color(this.tabBgColor) + .darken(0.03) + .hex(); + }, + + // Icon + iconFamily: "Ionicons", + iconFontSize: (platform === "ios" ? 28 : 28) * sizeScaling, + iconHeaderSize: (platform === "ios" ? 24 : 24) * sizeScaling, + iconBackButtonSize: 28 * sizeScaling, + buttonIconSize: (platform === "ios" ? 24 : 24) * sizeScaling, + + // InputGroup + inputFontSize: fontSize * sizeScaling, + inputBorderColor: inputBorderColor, //D9D5DC + darkBorderColor: darkBorderColor, + inputSuccessBorderColor: "#2b8339", + inputErrorBorderColor: "#ed2f2f", + inputHeightBase: 30 * sizeScaling, + inputColor: textColor, + inputColorPlaceholder: inputColorPlaceholder, + inputColorPlaceholderTransparent: inputColorPlaceholderTransparent, + + // Line Height + buttonLineHeight: 19 * sizeScaling, + lineHeightH1: 32 * sizeScaling, + lineHeightH2: 27 * sizeScaling, + lineHeightH3: 22 * sizeScaling, + lineHeight: 20 * sizeScaling, //platform === "ios" ? 20 : 20, + listItemSelected: platform === "ios" ? iosPrimaryColor : primaryColor, + + // List + listBg: "transparent", + listBorderColor: "#c9c9c9", + listDividerBg: "#f4f4f4", + listBtnUnderlayColor: "#DDD", + listItemPadding: (platform === "ios" ? 10 : 12) * sizeScaling, + listNoteColor: inputColorPlaceholder, + listNoteSize: 13 * sizeScaling, + + // Progress Bar + defaultProgressColor: "#E4202D", + inverseProgressColor: "#1A191B", + + // Radio Button + radioBtnSize: (platform === "ios" ? 25 : 23) * sizeScaling, + radioSelectedColorAndroid: primaryColor, + radioBtnLineHeight: (platform === "ios" ? 29 : 24) * sizeScaling, + get radioColor() { + return this.brandPrimary; + }, + + // Segment + segmentBackgroundColor: platform === "ios" ? iosPrimaryColor: primaryColor, + segmentActiveBackgroundColor: "#fff", //platform === "ios" ? iosPrimaryColor : "#fff", + segmentTextColor: "#fff", //platform === "ios" ? iosPrimaryColor : "#fff", + segmentActiveTextColor: primaryColor, //platform === "ios" ? "#fff" : primaryColor, + segmentBorderColor: "#fff", //platform === "ios" ? iosPrimaryColor : "#fff", + segmentBorderColorMain: platform === "ios" ? iosPrimaryColor : primaryColor, + + // Spinner + defaultSpinnerColor: "#45D56E", + inverseSpinnerColor: "#1A191B", + + // Tab + tabBarDisabledTextColor: '#BDBDBD', + tabDefaultBg: platform === "ios" ? iosPrimaryColor : primaryColor, + topTabBarTextColor: headerTextColor, //platform === "ios" ? "#6b6b6b" : "#b3c7f9", + topTabBarActiveTextColor: headerTextColor, //platform === "ios" ? iosPrimaryColor: "#fff", + topTabBarBorderColor: headerTextColor, //platform === "ios" ? "#a7a6ab" : "#fff", + topTabBarActiveBorderColor: headerTextColor, //platform === "ios" ? iosPrimaryColor : "#fff", + + // Tabs + tabBgColor: "#F8F8F8", + tabFontSize: fontSize * sizeScaling, + + // Text + textColor: textColor, + labelColor: labelColor, + labelColorTransparent: labelColorTransparent, + inverseTextColor: inverseTextColor, + get defaultTextColor() { + return this.textColor; + }, + + // Title + titleFontfamily: platform === "ios" ? "System" : "Roboto_medium", + titleFontSize: (platform === "ios" ? 17 : 17) * sizeScaling, + subTitleFontSize: (platform === "ios" ? 11 : 11) * sizeScaling, + subtitleColor: headerTextColor, //platform === "ios" ? "#8e8e93" : "#FFF", + titleFontColor: headerTextColor, //platform === "ios" ? "#000" : "#FFF", + + // Other + borderRadiusBase: (platform === "ios" ? 5 : 2) * sizeScaling, + //borderWidth: 0.5, /// PixelRatio.getPixelSizeForLayoutSize(1), + borderWidth: 1 / PixelRatio.getPixelSizeForLayoutSize(1), + contentPadding: 10 * sizeScaling, + dropdownLinkColor: "#414142", + inputLineHeight: 24 * sizeScaling, + deviceWidth, + deviceHeight, + isIphoneX, + inputGroupRoundedBorderRadius: 30 * sizeScaling, + + //iPhoneX SafeArea - barely used, use SafeAreaView instead + Inset: isIphoneX ? { + portrait: { + topInset: 32, + leftInset: 0, + rightInset: 0, + bottomInset: 20 + }, + landscape: { + topInset: 15, + leftInset: 0, + rightInset: 0, + bottomInset: 10 + } + } : + Platform.OS == 'ios' ? + { + portrait: { + topInset: 20, // to account for portrait status bar + leftInset: 0, + rightInset: 0, + bottomInset: 0 + }, + landscape: { + topInset: 0, + leftInset: 0, + rightInset: 0, + bottomInset: 0 + } + } + : + { // so we don't need to check for iphoneX or not + portrait: { + topInset: 0, // Android toolbar/notch does not interfere with screen + leftInset: 0, + rightInset: 0, + bottomInset: 0 + }, + landscape: { + topInset: 0, + leftInset: 0, + rightInset: 0, + bottomInset: 0 + } + } + }; +} diff --git a/examples/advanced/advanced/src/package.json b/examples/advanced/advanced/src/package.json new file mode 100644 index 0000000..6745195 --- /dev/null +++ b/examples/advanced/advanced/src/package.json @@ -0,0 +1,3 @@ +{ + "name": "src" +} diff --git a/examples/advanced/advanced/src/routes.js b/examples/advanced/advanced/src/routes.js new file mode 100644 index 0000000..4d47da4 --- /dev/null +++ b/examples/advanced/advanced/src/routes.js @@ -0,0 +1,33 @@ +// Components and pages for routes +import Home from "./screens/Home"; +import Camera from './screens/Camera'; + + +// Configure main authenticated routes + +const routes = [ + { + name: "Home", + label: "Home", + screen: Home, + }, + { + name: "Camera", + label: "Camera", + screen: Camera + } +]; + + +let routesMap = {}; +for(let r of routes){ + routesMap[r.name] = { + screen: r.screen, + navigationOptions: ({ navigation }) => ({ + title: r.label, + drawerLabel: r.label + }) + } +} + +export {routes, routesMap}; \ No newline at end of file diff --git a/examples/advanced/advanced/src/screens/Camera.js b/examples/advanced/advanced/src/screens/Camera.js new file mode 100644 index 0000000..43ddf28 --- /dev/null +++ b/examples/advanced/advanced/src/screens/Camera.js @@ -0,0 +1,965 @@ +import React, {Component} from 'react'; +import { + Platform, + StyleSheet, + Dimensions, + View, + Alert, + SafeAreaView, + AppState, + TouchableOpacity +} from 'react-native'; +import _ from 'underscore'; +import { Container, Button, Text, Icon, Footer, FooterTab, Spinner, H2, connectStyle, Toast } from 'native-base'; +import { RNCamera } from 'react-native-camera'; +import {NavigationEvents} from 'react-navigation'; + +import conf from 'src/conf'; +import {getOrientation} from 'src/baseComponents/orientation'; +import KeyboardShiftView from 'src/baseComponents/KeyboardShiftView'; +import ZoomView from 'src/baseComponents/ZoomView'; +import {runAfterInteractions} from 'src/baseComponents/utils'; +import MainHeader from 'src/baseComponents/MainHeader'; + + +const IS_IOS = Platform.OS == 'ios'; +const touchCoordsSize = 100 * conf.theme.variables.sizeScaling; +const flashIcons = { + 'on': , + 'auto': , + 'off': , + 'torch': , +} +const MAX_ZOOM = 8; // iOS only +const ZOOM_F = IS_IOS ? 0.01 : 0.1; +const BACK_TYPE = RNCamera.Constants.Type.back; +const FRONT_TYPE = RNCamera.Constants.Type.front; + +const WB_OPTIONS = [ + RNCamera.Constants.WhiteBalance.auto, + RNCamera.Constants.WhiteBalance.sunny, + RNCamera.Constants.WhiteBalance.cloudy, + RNCamera.Constants.WhiteBalance.shadow, + RNCamera.Constants.WhiteBalance.incandescent, + RNCamera.Constants.WhiteBalance.fluorescent +]; + +const WB_OPTIONS_MAP = { + 0: 'WB', + 1: "SU", + 2: "CL", + 3: "SH", + 4: "IN", + 5: "FL" +} + +const getCameraType = (type) => { + + if(type == 'AVCaptureDeviceTypeBuiltInTelephotoCamera'){ + return 'zoomed'; + } + if(type == 'AVCaptureDeviceTypeBuiltInUltraWideCamera'){ + return 'wide'; + } + + return 'normal'; +} + + +const flex1 = {flex: 1}; + +const styles = StyleSheet.create({ + content: {flex: 1}, + actionStyles: { + position: 'absolute', + bottom: 0, + width: '100%', + backgroundColor: 'transparent' + }, + capturingStyle: { + position: 'absolute', + bottom: 0, + width: '100%', + backgroundColor: 'rgba(0,0,0,0.4)', + padding: conf.theme.variables.contentPadding, + }, + cameraLoading: {flex: 1, alignSelf: 'center'}, + cameraNotAuthorized: { + padding: 20 * conf.theme.variables.sizeScaling, + paddingTop: 35 * conf.theme.variables.sizeScaling + }, + + cameraButton: { + flex: 1 + }, + + buttonsView: { + flex: 1, + width: '100%', + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center' + }, + + cameraSelectionRow: { + flexDirection: 'row', + flex: 1, + alignItems: 'center', + justifyContent: 'center' + }, + + ratioButton: { + width: 100 * conf.theme.variables.sizeScaling + }, +}) + + +const cameraNotAuthorized = Camera access was not granted. Please go to your phone's settings and allow camera access.; + +const defaultCameraOptions = { + flashMode: 'off', // on, auto, off, torch + wb: 0, + zoom: 0, // 0-1 + focusCoords: undefined +} + +function parseRatio(str){ + let [p1, p2] = str.split(":"); + p1 = parseInt(p1); + p2 = parseInt(p2); + return p1 / p2; +} + +class CameraSelectorButton extends React.PureComponent{ + + onChange = () => { + if(!this.props.isSelected){ + this.props.onChange(this.props.camera.id); + } + } + + + render(){ + let {camera, isSelected} = this.props; + let cameraType = camera.cameraType; + let IconComp; + + if(camera.type == BACK_TYPE){ + if(cameraType == 'wide'){ + IconComp = (props) => ; + + } + else if(cameraType == 'zoomed'){ + IconComp = (props) => ; + } + else{ + IconComp = (props) => ; + } + } + else if(camera.type == FRONT_TYPE){ + IconComp = (props) => ; + } + // should never happen + else{ + IconComp = (props) => ; + } + + + return ( + + ) + } +} + +class CameraSelector extends React.PureComponent{ + + loopCamera = () => { + let {cameraId, cameraIds, onChange} = this.props; + + if(cameraId != null && cameraIds.length){ + let newIdx = (cameraIds.findIndex(i => i.id == cameraId) + 1) % cameraIds.length; + onChange(cameraIds[newIdx].id); + + } + else{ + // if no available camera ids, always call with null + onChange(null); + } + } + + + render(){ + let {cameraId, cameraIds} = this.props; + + if(!cameraIds){return null;} + + // camera ID is null, means we have no info about the camera. + // fallback to regular switch + if(cameraId == null){ + return ( + + ) + } + + // 0 or 1 cameras, no button + if(cameraIds.length <= 1){ + return null; + } + + // 2 cameras, 1 button, no set default option + if(cameraIds.length == 2){ + return ( + + ) + } + + // 3 or more cameras, multiple buttons + return ( + + {cameraIds.map((v, i) => { + return ( + + ) + })} + + ) + } +} + + +class Camera extends Component{ + + constructor(props) { + super(props); + this.state = { + ...defaultCameraOptions, + orientation: getOrientation(), + takingPic: false, + recording: false, + audioDisabled: false, + elapsed: 0, + cameraReady: false, + cameraIds: null, // null means not checked, empty list means no results + cameraType: BACK_TYPE, + cameraId: null, + aspectRatioStr: "4:3", + aspectRatio: parseRatio("4:3") + }; + + this._prevPinch = 1; + + } + + + componentDidMount(){ + this.mounted = true; + AppState.addEventListener('change', this.handleAppStateChange); + Dimensions.addEventListener('change', this.adjustOrientation); + } + + componentWillUnmount(){ + this.mounted = false; + AppState.removeEventListener('change', this.handleAppStateChange); + this.stopVideo(); + } + + adjustOrientation = () => { + setTimeout(()=>{ + if(this.mounted){ + this.setState({orientation: getOrientation()}); + } + }, 50); + } + + // audio permission will be android only + onCameraStatusChange = (s) => { + if(s.cameraStatus == 'READY'){ + + let audioDisabled = s.recordAudioPermissionStatus == 'NOT_AUTHORIZED'; + this.setState({audioDisabled: audioDisabled}, async () => { + + let ids = []; + + // dummy for simulator test + // uncomment above and below + // let ids = [ + // {id: '1', type: BACK_TYPE, deviceType: 'AVCaptureDeviceTypeBuiltInWideAngleCamera'}, + // {id: '2', type: BACK_TYPE, deviceType: 'AVCaptureDeviceTypeBuiltInTelephotoCamera'}, + // {id: '3', type: BACK_TYPE, deviceType: 'AVCaptureDeviceTypeBuiltInUltraWideCamera'}, + // {id: '4', type: FRONT_TYPE, deviceType: 'AVCaptureDeviceTypeBuiltInWideAngleCamera'}, + // ] + + let cameraId = null; + + try{ + ids = await this.camera.getCameraIdsAsync(); + + // map deviceType to our types + ids = ids.map(d => { + d.cameraType = getCameraType(d.deviceType); + return d; + }); + + if(ids.length){ + + // select the first back camera found + cameraId = ids[0].id; + + for(let c of ids){ + + if(c.type == BACK_TYPE){ + cameraId = c.id; + break; + } + } + } + } + catch(err){ + console.error("Failed to get camera ids", err.message || err); + } + + // sort ids so front cameras are first + ids = _.sortBy(ids, v => v.type == FRONT_TYPE ? 0 : 1); + + this.setState({cameraIds: ids, cameraId: cameraId}); + + }); + } + else{ + if(this.state.cameraReady){ + this.setState({cameraReady: false}); + } + } + } + + onCameraReady = () => { + if(!this.state.cameraReady){ + this.setState({cameraReady: true}); + } + } + + onCameraMountError = () => { + setTimeout(()=>{ + Alert.alert("Error", "Camera start failed."); + }, 150); + } + + + handleAppStateChange = (nextAppState) => { + } + + + onDidFocus = () => { + this.focused = true; + + } + + onDidBlur = async () => { + this.focused = false; + this.stopVideo(); + } + + + onPinchProgress = (p) => { + let p2 = p - this._prevPinch; + + if(p2 > 0 && p2 > ZOOM_F){ + this._prevPinch = p; + this.setState({zoom: Math.min(this.state.zoom + ZOOM_F, 1)}) + } + else if (p2 < 0 && p2 < -ZOOM_F){ + this._prevPinch = p; + this.setState({zoom: Math.max(this.state.zoom - ZOOM_F, 0)}) + } + } + + onTapToFocus = (event) => { + + if(!this.cameraStyle || this.state.takingPic){ + return; + } + + const {pageX, pageY} = event.nativeEvent; + let {width, height, top, left} = this.cameraStyle; + + // compensate for top/left changes + let pageX2 = pageX - left; + let pageY2 = pageY - top; + + // normalize coords as described by https://gist.github.com/Craigtut/6632a9ac7cfff55e74fb561862bc4edb + const x0 = pageX2 / width; + const y0 = pageY2 / height; + + let x = x0; + let y = y0; + + // if portrait, need to apply a transform because RNCamera always measures coords in landscape mode + // with the home button on the right. If the phone is rotated with the home button to the left + // we will have issues here, and we have no way to detect that orientation! + // TODO: Fix this, however, that orientation should never be used due to camera positon + if(this.state.orientation.isPortrait){ + x = y0; + y = -x0 + 1; + } + + this.setState({ + focusCoords: { + x: x, + y: y, + autoExposure: true + }, + touchCoords: { + x: pageX2 - 50, + y: pageY2 - 50 + } + }); + + // remove focus rectangle + if(this.focusTimeout){ + clearTimeout(this.focusTimeout); + this.focusTimeout = null; + } + + } + + onTapToFocusOut = () => { + if(this.state.touchCoords){ + this.focusTimeout = setTimeout(()=>{ + if(this.mounted){ + this.setState({touchCoords: null}); + } + }, 1500); + } + } + + onPinchStart = () => { + this._prevPinch = 1; + + } + + onPinchEnd = () => { + this._prevPinch = 1; + } + + onAudioInterrupted = () => { + this.setState({audioDisabled: true}); + } + + onAudioConnected = () => { + this.setState({audioDisabled: false}); + } + + onPictureTaken = () => { + this.setState({takingPic: false}); + } + + onRecordingStart = () => { + this.reportRequestPrompt = true; + + if(this._recordingTimer){ + clearInterval(this._recordingTimer); + this._recordingTimer = null; + } + + if(this.state.recording){ + this.setState({elapsed: 0}) + this._recordingTimer = setInterval(()=>{ + this.setState({elapsed: this.state.elapsed + 1}) + }, 1000); + } + } + + onRecordingEnd = () => { + this.reportRequestPrompt = true; + + if(this._recordingTimer){ + clearInterval(this._recordingTimer); + this._recordingTimer = null; + } + } + + goBack = () => { + this.props.navigation.goBack(); + } + + render() { + + let {orientation, takingPic, cameraReady, recording, audioDisabled, zoom, wb, cameraType, cameraId, cameraIds, flashMode, elapsed} = this.state; + let {style} = this.props; + + let isPortrait = orientation.isPortrait; + + let disable = takingPic || !cameraReady; + let disableOrRecording = disable || recording; + + // flag to decide how to layout camera buttons + let cameraCount = 0; + + // we have queried the list of cameras + if(cameraIds != null){ + if(cameraId == null){ + cameraCount = 2; // no camera id info, assume 2 cameras to switch from back and front + } + else{ + cameraCount = cameraIds.length; + } + } + + + let buttons = ( + + + + + {recording ? + + : + + } + + + + ); + + + let cameraStyle; + + // style to cover all the screen exactly + // leaving footer and extra heights + let mainViewStyle = { + flex: 1, + width: isPortrait ? orientation.width : orientation.width - style.footerWidth, + height: orientation.height - (style.footerHeight * isPortrait) - orientation.minusHeight - orientation.insetBottom + } + + if(isPortrait){ + let height = orientation.width * this.state.aspectRatio; + cameraStyle = { + position: 'absolute', + top: Math.max(0, (mainViewStyle.height - height) / 2), + left: 0, + width: orientation.width, + height: height + } + } + else{ + let height = orientation.height - orientation.minusHeight; + let width = height * this.state.aspectRatio; + + cameraStyle = { + position: 'absolute', + top: 0, + left: Math.max(0, (mainViewStyle.width - width) / 2), + width: width, + height: height + } + } + + this.cameraStyle = cameraStyle; + + return ( + + + + + + + + + + { + this.camera = ref; + }} + style={cameraStyle} + type={cameraType} + cameraId={cameraId} + //useCamera2Api={true} + onAudioInterrupted={this.onAudioInterrupted} + onAudioConnected={this.onAudioConnected} + onPictureTaken={this.onPictureTaken} + onRecordingStart={this.onRecordingStart} + onRecordingEnd={this.onRecordingEnd} + ratio={this.state.aspectRatioStr} + flashMode={flashMode} + zoom={zoom} + maxZoom={MAX_ZOOM} + whiteBalance={WB_OPTIONS[wb]} + autoFocusPointOfInterest={this.state.focusCoords} + androidCameraPermissionOptions={{ + title: 'Permission to use camera', + message: 'We need your permission to use your camera', + buttonPositive: 'Ok', + buttonNegative: 'Cancel', + }} + androidRecordAudioPermissionOptions={{ + title: 'Permission to use audio recording', + message: 'We need your permission to use your audio', + buttonPositive: 'Ok', + buttonNegative: 'Cancel', + }} + onStatusChange={this.onCameraStatusChange} + onCameraReady={this.onCameraReady} + onMountError={this.onCameraMountError} + pendingAuthorizationView={ + + + + } + notAuthorizedView={ + + {cameraNotAuthorized} + + } + > + + + + {this.state.touchCoords ? + + + : null} + + + + + {!takingPic && !recording && !this.state.spinnerVisible && cameraReady ? + + + {cameraCount > 2 ? + + + + + : null} + + + + {cameraCount <= 2 ? + + : null} + + + + + + {(cameraCount > 1 && cameraCount <= 2) ? + + : null} + + + + + : null } + + {(takingPic || recording)? + + {takingPic ?

      Capturing Picture...

      :

      {`Capturing Video${audioDisabled ? ' (muted)' : ''}... (${elapsed != -1 ? elapsed : "Preparing Camera..."})`}

      } +
      + : null} + +
      +
      + + + {isPortrait ? +
      + + {buttons} + +
      + : +
      + + {buttons} + +
      + } +
      + ); + } + + takePicture = async () => { + if (this.camera) { + + if(this.state.takingPic || this.state.recording || !this.state.cameraReady){ + return; + } + // if we have a non original quality, skip processing and compression. + // we will use JPEG compression on resize. + let options = { + quality: 0.85, + fixOrientation: true, + forceUpOrientation: true, + writeExif: true + }; + + this.setState({takingPic: true}); + + let data = null; + + try{ + data = await this.camera.takePictureAsync(options); + } + catch(err){ + Alert.alert("Error", "Failed to take picture: " + (err.message || err)); + return; + } + + Alert.alert("Picture Taken!", JSON.stringify(data, null, 2)); + + } + } + + startVideo = async () => { + if (this.camera && !this.state.recording) { + + // need to do this in order to avoid race conditions + this.state.recording = true; + + const options = { + quality: '480p', + maxDuration: 60, + maxFileSize: 100 * 1024 * 1024 + }; + + + this.setState({recording: true, elapsed: -1}, async () => { + + let result = null; + try { + result = await this.camera.recordAsync(options); + } + catch(err){ + console.warn("VIDEO RECORD FAIL", err.message, err); + Alert.alert("Error", "Failed to store recorded video: " + err.message); + } + + + if(result){ + Alert.alert("Video recorded!", JSON.stringify(result)); + } + + // give time for the camera to recover + setTimeout(()=>{ + this.setState({recording: false}); + }, 500); + + // might be cleared on recording stop or + // here if we had errors + if(this._recordingTimer){ + clearInterval(this._recordingTimer); + this._recordingTimer = null; + } + + }); + + } + } + + stopVideo = () => { + if(this.camera && this.state.recording){ + this.camera.stopRecording(); + } + } + + toggleFlash = () => { + if (this.state.flashMode === 'torch') { + this.setState({ flashMode: 'off' }); + } else if (this.state.flashMode === 'off') { + this.setState({ flashMode: 'auto' }); + } else if (this.state.flashMode === 'auto') { + this.setState({ flashMode: 'on' }); + } else if (this.state.flashMode === 'on') { + this.setState({ flashMode: 'torch' }); + } + } + + + changeWB = () => { + this.setState({ + wb: (this.state.wb + 1) % WB_OPTIONS.length + }) + } + + toggleRatio = () => { + if(this.state.aspectRatioStr == "4:3"){ + this.setState({ + aspectRatioStr: "1:1", + aspectRatio: parseRatio("1:1") + }); + } + else if(this.state.aspectRatioStr == "1:1"){ + this.setState({ + aspectRatioStr: "16:9", + aspectRatio: parseRatio("16:9") + }); + } + else{ + this.setState({ + aspectRatioStr: "4:3", + aspectRatio: parseRatio("4:3") + }); + } + } + + onCameraChange = (cameraId) => { + + this.setState({cameraReady: false}, () => { + runAfterInteractions(() => { + + // cameraId will be null if we failed to get a camera by ID or + // our id list is empty. Fallback to back/front setting + + if(cameraId == null){ + let cameraType = this.state.cameraType; + if(cameraType == FRONT_TYPE){ + this.setState({cameraType: BACK_TYPE, cameraId: null, ...defaultCameraOptions}); + } + else{ + this.setState({cameraType: FRONT_TYPE, cameraId: null, ...defaultCameraOptions}); + } + } + else{ + this.setState({cameraId: cameraId, ...defaultCameraOptions}); + } + }); + }); + } + + + resetZoom = () => { + this._prevPinch = 1; + this.setState({zoom: 0}); + } +} + +Camera.navigationOptions = ({ navigation }) => { + return { + header: props => null + } +} + + + +Camera = connectStyle("Branding")(Camera); + + +export default Camera; \ No newline at end of file diff --git a/examples/advanced/advanced/src/screens/Home.js b/examples/advanced/advanced/src/screens/Home.js new file mode 100644 index 0000000..c5a4e60 --- /dev/null +++ b/examples/advanced/advanced/src/screens/Home.js @@ -0,0 +1,75 @@ +import React from 'react'; +import {BackHandler, Alert} from 'react-native'; +import { + Button, + Text, + Container, + Icon, + connectStyle +} from "native-base"; + +import {Content} from 'src/baseComponents/Content'; +import MainHeader from 'src/baseComponents/MainHeader'; + + +class Home extends React.Component { + constructor(props){ + super(props); + this.state = {}; + + + // custom exit handler + this.props.navigation.setParams({ + 'onExit': this.onExit + }); + + } + + onExit = () => { + Alert.alert( + 'Confirm', + 'Are you sure you want to close the application?', + [ + { + text: 'Cancel', + style: 'cancel', + }, + {text: 'Yes', onPress: () => BackHandler.exitApp()}, + ], + {cancelable: true}, + ); + + return true; + } + + render(){ + return ( + + + Welcome to RNCamera. Press below to test it! + + + + + ) + } +} + +// Different header, no back +Home.navigationOptions = ({ navigation }) => { + return { + header: props => + } +} + +Home = connectStyle("Branding")(Home); + +export default Home; \ No newline at end of file diff --git a/examples/advanced/readme.md b/examples/advanced/readme.md new file mode 100644 index 0000000..1dfdbf6 --- /dev/null +++ b/examples/advanced/readme.md @@ -0,0 +1,18 @@ +# RNCamera example app 2 + +Example app that uses all of the commonly used camera features, either by using RNCamera features or implementing the ones not available by default (e.g., tap to focus and pinch to zoom). + +As opposed to the basic example, we will link directly to RNCamera from npm's last version. This means that the example can be run as a stand alone project. + + +# Running + +cd advanced + +npm install (no linking is required) + +iOS: react-native run-ios +Android: react-native run-android + + +Note: A real device is required to test most camera features. diff --git a/examples/basic/.gitignore b/examples/basic/.gitignore new file mode 100644 index 0000000..d917661 --- /dev/null +++ b/examples/basic/.gitignore @@ -0,0 +1,43 @@ +# OSX +# +.DS_Store + +# Xcode +# +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate +project.xcworkspace + +# Android/IJ +# +*.iml +.idea +.gradle +local.properties + +# node.js +# +node_modules/ +npm-debug.log + +# BUCK +buck-out/ +\.buckd/ +android/app/libs +android/keystores/debug.keystore + +ios/Frameworks/FaceDetector/Frameworks/**/* diff --git a/examples/basic/App.js b/examples/basic/App.js new file mode 100644 index 0000000..c478191 --- /dev/null +++ b/examples/basic/App.js @@ -0,0 +1,545 @@ +/* eslint-disable no-console */ +import React from 'react'; +import { + StyleSheet, + Text, + View, + TouchableOpacity, + Slider, + TouchableWithoutFeedback, + Dimensions, +} from 'react-native'; +// eslint-disable-next-line import/no-unresolved +import { RNCamera } from 'react-native-camera'; + +const flashModeOrder = { + off: 'on', + on: 'auto', + auto: 'torch', + torch: 'off', +}; + +const wbOrder = { + auto: 'sunny', + sunny: 'cloudy', + cloudy: 'shadow', + shadow: 'fluorescent', + fluorescent: 'incandescent', + incandescent: 'auto', +}; + +const landmarkSize = 2; + +export default class CameraScreen extends React.Component { + state = { + flash: 'off', + zoom: 0, + autoFocus: 'on', + autoFocusPoint: { + normalized: { x: 0.5, y: 0.5 }, // normalized values required for autoFocusPointOfInterest + drawRectPosition: { + x: Dimensions.get('window').width * 0.5 - 32, + y: Dimensions.get('window').height * 0.5 - 32, + }, + }, + depth: 0, + type: 'back', + whiteBalance: 'auto', + ratio: '16:9', + recordOptions: { + mute: false, + maxDuration: 5, + quality: RNCamera.Constants.VideoQuality['288p'], + }, + isRecording: false, + canDetectFaces: false, + canDetectText: false, + canDetectBarcode: false, + faces: [], + textBlocks: [], + barcodes: [], + }; + + toggleFacing() { + this.setState({ + type: this.state.type === 'back' ? 'front' : 'back', + }); + } + + toggleFlash() { + this.setState({ + flash: flashModeOrder[this.state.flash], + }); + } + + toggleWB() { + this.setState({ + whiteBalance: wbOrder[this.state.whiteBalance], + }); + } + + toggleFocus() { + this.setState({ + autoFocus: this.state.autoFocus === 'on' ? 'off' : 'on', + }); + } + + touchToFocus(event) { + const { pageX, pageY } = event.nativeEvent; + const screenWidth = Dimensions.get('window').width; + const screenHeight = Dimensions.get('window').height; + const isPortrait = screenHeight > screenWidth; + + let x = pageX / screenWidth; + let y = pageY / screenHeight; + // Coordinate transform for portrait. See autoFocusPointOfInterest in docs for more info + if (isPortrait) { + x = pageY / screenHeight; + y = -(pageX / screenWidth) + 1; + } + + this.setState({ + autoFocusPoint: { + normalized: { x, y }, + drawRectPosition: { x: pageX, y: pageY }, + }, + }); + } + + zoomOut() { + this.setState({ + zoom: this.state.zoom - 0.1 < 0 ? 0 : this.state.zoom - 0.1, + }); + } + + zoomIn() { + this.setState({ + zoom: this.state.zoom + 0.1 > 1 ? 1 : this.state.zoom + 0.1, + }); + } + + setFocusDepth(depth) { + this.setState({ + depth, + }); + } + + takePicture = async function() { + if (this.camera) { + const data = await this.camera.takePictureAsync(); + console.warn('takePicture ', data); + } + }; + + takeVideo = async function() { + if (this.camera) { + try { + const promise = this.camera.recordAsync(this.state.recordOptions); + + if (promise) { + this.setState({ isRecording: true }); + const data = await promise; + this.setState({ isRecording: false }); + console.warn('takeVideo', data); + } + } catch (e) { + console.error(e); + } + } + }; + + toggle = value => () => this.setState(prevState => ({ [value]: !prevState[value] })); + + facesDetected = ({ faces }) => this.setState({ faces }); + + renderFace = ({ bounds, faceID, rollAngle, yawAngle }) => ( + + ID: {faceID} + rollAngle: {rollAngle.toFixed(0)} + yawAngle: {yawAngle.toFixed(0)} + + ); + + renderLandmarksOfFace(face) { + const renderLandmark = position => + position && ( + + ); + return ( + + {renderLandmark(face.leftEyePosition)} + {renderLandmark(face.rightEyePosition)} + {renderLandmark(face.leftEarPosition)} + {renderLandmark(face.rightEarPosition)} + {renderLandmark(face.leftCheekPosition)} + {renderLandmark(face.rightCheekPosition)} + {renderLandmark(face.leftMouthPosition)} + {renderLandmark(face.mouthPosition)} + {renderLandmark(face.rightMouthPosition)} + {renderLandmark(face.noseBasePosition)} + {renderLandmark(face.bottomMouthPosition)} + + ); + } + + renderFaces = () => ( + + {this.state.faces.map(this.renderFace)} + + ); + + renderLandmarks = () => ( + + {this.state.faces.map(this.renderLandmarksOfFace)} + + ); + + renderTextBlocks = () => ( + + {this.state.textBlocks.map(this.renderTextBlock)} + + ); + + renderTextBlock = ({ bounds, value }) => ( + + + {value} + + + + ); + + textRecognized = object => { + const { textBlocks } = object; + this.setState({ textBlocks }); + }; + + barcodeRecognized = ({ barcodes }) => this.setState({ barcodes }); + + renderBarcodes = () => ( + + {this.state.barcodes.map(this.renderBarcode)} + + ); + + renderBarcode = ({ bounds, data, type }) => ( + + + {`${data} ${type}`} + + + ); + + renderCamera() { + const { canDetectFaces, canDetectText, canDetectBarcode } = this.state; + + const drawFocusRingPosition = { + top: this.state.autoFocusPoint.drawRectPosition.y - 32, + left: this.state.autoFocusPoint.drawRectPosition.x - 32, + }; + return ( + { + this.camera = ref; + }} + style={{ + flex: 1, + justifyContent: 'space-between', + }} + type={this.state.type} + flashMode={this.state.flash} + autoFocus={this.state.autoFocus} + autoFocusPointOfInterest={this.state.autoFocusPoint.normalized} + zoom={this.state.zoom} + whiteBalance={this.state.whiteBalance} + ratio={this.state.ratio} + focusDepth={this.state.depth} + androidCameraPermissionOptions={{ + title: 'Permission to use camera', + message: 'We need your permission to use your camera', + buttonPositive: 'Ok', + buttonNegative: 'Cancel', + }} + faceDetectionLandmarks={ + RNCamera.Constants.FaceDetection.Landmarks + ? RNCamera.Constants.FaceDetection.Landmarks.all + : undefined + } + onFacesDetected={canDetectFaces ? this.facesDetected : null} + onTextRecognized={canDetectText ? this.textRecognized : null} + onGoogleVisionBarcodesDetected={canDetectBarcode ? this.barcodeRecognized : null} + > + + + + + + + + + + FLIP + + + FLASH: {this.state.flash} + + + WB: {this.state.whiteBalance} + + + + + + {!canDetectFaces ? 'Detect Faces' : 'Detecting Faces'} + + + + + {!canDetectText ? 'Detect Text' : 'Detecting Text'} + + + + + {!canDetectBarcode ? 'Detect Barcode' : 'Detecting Barcode'} + + + + + + + + + + {} : this.takeVideo.bind(this)} + > + {this.state.isRecording ? ( + ☕ + ) : ( + REC + )} + + + {this.state.zoom !== 0 && ( + Zoom: {this.state.zoom} + )} + + + + + + + - + + + AF : {this.state.autoFocus} + + + SNAP + + + + {!!canDetectFaces && this.renderFaces()} + {!!canDetectFaces && this.renderLandmarks()} + {!!canDetectText && this.renderTextBlocks()} + {!!canDetectBarcode && this.renderBarcodes()} + + ); + } + + render() { + return {this.renderCamera()}; + } +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + paddingTop: 10, + backgroundColor: '#000', + }, + flipButton: { + flex: 0.3, + height: 40, + marginHorizontal: 2, + marginBottom: 10, + marginTop: 10, + borderRadius: 8, + borderColor: 'white', + borderWidth: 1, + padding: 5, + alignItems: 'center', + justifyContent: 'center', + }, + autoFocusBox: { + position: 'absolute', + height: 64, + width: 64, + borderRadius: 12, + borderWidth: 2, + borderColor: 'white', + opacity: 0.4, + }, + flipText: { + color: 'white', + fontSize: 15, + }, + zoomText: { + position: 'absolute', + bottom: 70, + zIndex: 2, + left: 2, + }, + picButton: { + backgroundColor: 'darkseagreen', + }, + facesContainer: { + position: 'absolute', + bottom: 0, + right: 0, + left: 0, + top: 0, + }, + face: { + padding: 10, + borderWidth: 2, + borderRadius: 2, + position: 'absolute', + borderColor: '#FFD700', + justifyContent: 'center', + backgroundColor: 'rgba(0, 0, 0, 0.5)', + }, + landmark: { + width: landmarkSize, + height: landmarkSize, + position: 'absolute', + backgroundColor: 'red', + }, + faceText: { + color: '#FFD700', + fontWeight: 'bold', + textAlign: 'center', + margin: 10, + backgroundColor: 'transparent', + }, + text: { + padding: 10, + borderWidth: 2, + borderRadius: 2, + position: 'absolute', + borderColor: '#F00', + justifyContent: 'center', + }, + textBlock: { + color: '#F00', + position: 'absolute', + textAlign: 'center', + backgroundColor: 'transparent', + }, +}); diff --git a/examples/basic/README.md b/examples/basic/README.md new file mode 100644 index 0000000..17070bc --- /dev/null +++ b/examples/basic/README.md @@ -0,0 +1,28 @@ +# React Native Camera Basic Example + +An example project demonstrating the use of react-native-camera. + +### Features + +Shows all different attributes of the camera like front and back cameras, flash modes, WB, etc. + +Demonstrates the usage of the face detection feature by drawing polygons around the detected face. + +### Setup + +run `yarn install` + +### Contributing + +* Pull Requests are welcome, if you open a pull request we will do our best to get to it in a timely manner +* Pull Request Reviews and even more welcome! we need help testing, reviewing, and updating open PRs +* If you are interested in contributing more actively, please contact me (same username on Twitter, Facebook, etc.) Thanks! +* If you want to help us coding, join Expo slack https://slack.expo.io/, so we can chat over there. (#react-native-camera) + +### FAQ + +## Why is `react-native-camera` not listed as a dependency in `package.json`? + +`react-native` uses `metro` for dependency resolution. In order to not recursively install this example into the `node_modules` of this example we use `rn-cli.config.js` to resolve `react-native-camera`. This also allows a quicker iteration when developing (without having to `yarn install` after every single change in `react-native-camera`). + +Also the Header Search Paths in `ios/RNCameraExample.xcodeproj/project.pbxproj` are changed to fit the `react-native-camera` root directory. diff --git a/examples/basic/__tests__/App.js b/examples/basic/__tests__/App.js new file mode 100644 index 0000000..fa45c70 --- /dev/null +++ b/examples/basic/__tests__/App.js @@ -0,0 +1,10 @@ +import 'react-native'; +import React from 'react'; +import App from '../App'; + +// Note: test renderer must be required after react-native. +import renderer from 'react-test-renderer'; + +it('renders correctly', () => { + renderer.create(); +}); diff --git a/examples/basic/android/app/BUCK b/examples/basic/android/app/BUCK new file mode 100644 index 0000000..e104f85 --- /dev/null +++ b/examples/basic/android/app/BUCK @@ -0,0 +1,65 @@ +# To learn about Buck see [Docs](https://buckbuild.com/). +# To run your application with Buck: +# - install Buck +# - `npm start` - to start the packager +# - `cd android` +# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"` +# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck +# - `buck install -r android/app` - compile, install and run application +# + +lib_deps = [] + +for jarfile in glob(['libs/*.jar']): + name = 'jars__' + jarfile[jarfile.rindex('/') + 1: jarfile.rindex('.jar')] + lib_deps.append(':' + name) + prebuilt_jar( + name = name, + binary_jar = jarfile, + ) + +for aarfile in glob(['libs/*.aar']): + name = 'aars__' + aarfile[aarfile.rindex('/') + 1: aarfile.rindex('.aar')] + lib_deps.append(':' + name) + android_prebuilt_aar( + name = name, + aar = aarfile, + ) + +android_library( + name = "all-libs", + exported_deps = lib_deps, +) + +android_library( + name = "app-code", + srcs = glob([ + "src/main/java/**/*.java", + ]), + deps = [ + ":all-libs", + ":build_config", + ":res", + ], +) + +android_build_config( + name = "build_config", + package = "com.rncameraexample", +) + +android_resource( + name = "res", + package = "com.rncameraexample", + res = "src/main/res", +) + +android_binary( + name = "app", + keystore = "//android/keystores:debug", + manifest = "src/main/AndroidManifest.xml", + package_type = "debug", + deps = [ + ":app-code", + ], +) diff --git a/examples/basic/android/app/build.gradle b/examples/basic/android/app/build.gradle new file mode 100644 index 0000000..60cbb82 --- /dev/null +++ b/examples/basic/android/app/build.gradle @@ -0,0 +1,149 @@ +apply plugin: "com.android.application" + +import com.android.build.OutputFile + +/** + * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets + * and bundleReleaseJsAndAssets). + * These basically call `react-native bundle` with the correct arguments during the Android build + * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the + * bundle directly from the development server. Below you can see all the possible configurations + * and their defaults. If you decide to add a configuration block, make sure to add it before the + * `apply from: "../../node_modules/react-native/react.gradle"` line. + * + * project.ext.react = [ + * // the name of the generated asset file containing your JS bundle + * bundleAssetName: "index.android.bundle", + * + * // the entry file for bundle generation + * entryFile: "index.android.js", + * + * // whether to bundle JS and assets in debug mode + * bundleInDebug: false, + * + * // whether to bundle JS and assets in release mode + * bundleInRelease: true, + * + * // whether to bundle JS and assets in another build variant (if configured). + * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants + * // The configuration property can be in the following formats + * // 'bundleIn${productFlavor}${buildType}' + * // 'bundleIn${buildType}' + * // bundleInFreeDebug: true, + * // bundleInPaidRelease: true, + * // bundleInBeta: true, + * + * // whether to disable dev mode in custom build variants (by default only disabled in release) + * // for example: to disable dev mode in the staging build type (if configured) + * devDisabledInStaging: true, + * // The configuration property can be in the following formats + * // 'devDisabledIn${productFlavor}${buildType}' + * // 'devDisabledIn${buildType}' + * + * // the root of your project, i.e. where "package.json" lives + * root: "../../", + * + * // where to put the JS bundle asset in debug mode + * jsBundleDirDebug: "$buildDir/intermediates/assets/debug", + * + * // where to put the JS bundle asset in release mode + * jsBundleDirRelease: "$buildDir/intermediates/assets/release", + * + * // where to put drawable resources / React Native assets, e.g. the ones you use via + * // require('./image.png')), in debug mode + * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug", + * + * // where to put drawable resources / React Native assets, e.g. the ones you use via + * // require('./image.png')), in release mode + * resourcesDirRelease: "$buildDir/intermediates/res/merged/release", + * + * // by default the gradle tasks are skipped if none of the JS files or assets change; this means + * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to + * // date; if you have any other folders that you want to ignore for performance reasons (gradle + * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/ + * // for example, you might want to remove it from here. + * inputExcludes: ["android/**", "ios/**"], + * + * // override which node gets called and with what additional arguments + * nodeExecutableAndArgs: ["node"], + * + * // supply additional arguments to the packager + * extraPackagerArgs: [] + * ] + */ + +project.ext.react = [ + entryFile: "index.js" +] + +apply from: "../../node_modules/react-native/react.gradle" + +/** + * Set this to true to create two separate APKs instead of one: + * - An APK that only works on ARM devices + * - An APK that only works on x86 devices + * The advantage is the size of the APK is reduced by about 4MB. + * Upload all the APKs to the Play Store and people will download + * the correct one based on the CPU architecture of their device. + */ +def enableSeparateBuildPerCPUArchitecture = false + +/** + * Run Proguard to shrink the Java bytecode in release builds. + */ +def enableProguardInReleaseBuilds = false + +android { + compileSdkVersion rootProject.ext.compileSdkVersion + buildToolsVersion rootProject.ext.buildToolsVersion + + defaultConfig { + applicationId "com.rncameraexample" + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + versionCode 1 + versionName "1.0" + missingDimensionStrategy 'react-native-camera', 'general' + } + splits { + abi { + reset() + enable enableSeparateBuildPerCPUArchitecture + universalApk false // If true, also generate a universal APK + include "armeabi-v7a", "x86", "arm64-v8a", "x86_64" + } + } + buildTypes { + release { + minifyEnabled enableProguardInReleaseBuilds + proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" + } + } + // applicationVariants are e.g. debug, release + applicationVariants.all { variant -> + variant.outputs.each { output -> + // For each separate APK per architecture, set a unique version code as described here: + // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits + def versionCodes = ["armeabi-v7a":1, "x86":2, "arm64-v8a": 3, "x86_64": 4] + def abi = output.getFilter(OutputFile.ABI) + if (abi != null) { // null for the universal-debug, universal-release variants + output.versionCodeOverride = + versionCodes.get(abi) * 1048576 + defaultConfig.versionCode + } + } + } +} + +dependencies { + implementation project(':react-native-camera') + implementation fileTree(dir: "libs", include: ["*.jar"]) + implementation 'androidx.appcompat:appcompat:1.0.0' + implementation "com.facebook.react:react-native:+" // From node_modules +} + +// Run this once to be able to run the application with BUCK +// puts all compile dependencies into folder libs for BUCK to use +task copyDownloadableDepsToLibs(type: Copy) { + from configurations.compile + into 'libs' +} diff --git a/examples/basic/android/app/proguard-rules.pro b/examples/basic/android/app/proguard-rules.pro new file mode 100644 index 0000000..6e8516c --- /dev/null +++ b/examples/basic/android/app/proguard-rules.pro @@ -0,0 +1,70 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Disabling obfuscation is useful if you collect stack traces from production crashes +# (unless you are using a system that supports de-obfuscate the stack traces). +-dontobfuscate + +# React Native + +# Keep our interfaces so they can be used by other ProGuard rules. +# See http://sourceforge.net/p/proguard/bugs/466/ +-keep,allowobfuscation @interface com.facebook.proguard.annotations.DoNotStrip +-keep,allowobfuscation @interface com.facebook.proguard.annotations.KeepGettersAndSetters +-keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip + +# Do not strip any method/class that is annotated with @DoNotStrip +-keep @com.facebook.proguard.annotations.DoNotStrip class * +-keep @com.facebook.common.internal.DoNotStrip class * +-keepclassmembers class * { + @com.facebook.proguard.annotations.DoNotStrip *; + @com.facebook.common.internal.DoNotStrip *; +} + +-keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * { + void set*(***); + *** get*(); +} + +-keep class * extends com.facebook.react.bridge.JavaScriptModule { *; } +-keep class * extends com.facebook.react.bridge.NativeModule { *; } +-keepclassmembers,includedescriptorclasses class * { native ; } +-keepclassmembers class * { @com.facebook.react.uimanager.UIProp ; } +-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactProp ; } +-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactPropGroup ; } + +-dontwarn com.facebook.react.** + +# TextLayoutBuilder uses a non-public Android constructor within StaticLayout. +# See libs/proxy/src/main/java/com/facebook/fbui/textlayoutbuilder/proxy for details. +-dontwarn android.text.StaticLayout + +# okhttp + +-keepattributes Signature +-keepattributes *Annotation* +-keep class okhttp3.** { *; } +-keep interface okhttp3.** { *; } +-dontwarn okhttp3.** + +# okio + +-keep class sun.misc.Unsafe { *; } +-dontwarn java.nio.file.* +-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement +-dontwarn okio.** diff --git a/examples/basic/android/app/src/main/AndroidManifest.xml b/examples/basic/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..9923431 --- /dev/null +++ b/examples/basic/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + diff --git a/examples/basic/android/app/src/main/java/com/rncameraexample/MainActivity.java b/examples/basic/android/app/src/main/java/com/rncameraexample/MainActivity.java new file mode 100644 index 0000000..91061ea --- /dev/null +++ b/examples/basic/android/app/src/main/java/com/rncameraexample/MainActivity.java @@ -0,0 +1,15 @@ +package com.rncameraexample; + +import com.facebook.react.ReactActivity; + +public class MainActivity extends ReactActivity { + + /** + * Returns the name of the main component registered from JavaScript. + * This is used to schedule rendering of the component. + */ + @Override + protected String getMainComponentName() { + return "RNCameraExample"; + } +} diff --git a/examples/basic/android/app/src/main/java/com/rncameraexample/MainApplication.java b/examples/basic/android/app/src/main/java/com/rncameraexample/MainApplication.java new file mode 100644 index 0000000..d2302ec --- /dev/null +++ b/examples/basic/android/app/src/main/java/com/rncameraexample/MainApplication.java @@ -0,0 +1,47 @@ +package com.rncameraexample; + +import android.app.Application; + +import com.facebook.react.ReactApplication; +import org.reactnative.camera.RNCameraPackage; +import com.facebook.react.ReactNativeHost; +import com.facebook.react.ReactPackage; +import com.facebook.react.shell.MainReactPackage; +import com.facebook.soloader.SoLoader; + +import java.util.Arrays; +import java.util.List; + +public class MainApplication extends Application implements ReactApplication { + + private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { + @Override + public boolean getUseDeveloperSupport() { + return BuildConfig.DEBUG; + } + + @Override + protected List getPackages() { + return Arrays.asList( + new MainReactPackage(), + new RNCameraPackage() + ); + } + + @Override + protected String getJSMainModuleName() { + return "index"; + } + }; + + @Override + public ReactNativeHost getReactNativeHost() { + return mReactNativeHost; + } + + @Override + public void onCreate() { + super.onCreate(); + SoLoader.init(this, /* native exopackage */ false); + } +} diff --git a/examples/basic/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/examples/basic/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..cde69bcccec65160d92116f20ffce4fce0b5245c GIT binary patch literal 3418 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 literal 0 HcmV?d00001 diff --git a/examples/basic/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/examples/basic/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..bfa42f0e7b91d006d22352c9ff2f134e504e3c1d GIT binary patch literal 4842 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 literal 0 HcmV?d00001 diff --git a/examples/basic/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/examples/basic/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..324e72cdd7480cb983fa1bcc7ce686e51ef87fe7 GIT binary patch literal 7718 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 literal 0 HcmV?d00001 diff --git a/examples/basic/android/app/src/main/res/values/strings.xml b/examples/basic/android/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..cf09a9c --- /dev/null +++ b/examples/basic/android/app/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + RNCameraExample + diff --git a/examples/basic/android/app/src/main/res/values/styles.xml b/examples/basic/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..319eb0c --- /dev/null +++ b/examples/basic/android/app/src/main/res/values/styles.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/examples/basic/android/build.gradle b/examples/basic/android/build.gradle new file mode 100644 index 0000000..563bcda --- /dev/null +++ b/examples/basic/android/build.gradle @@ -0,0 +1,45 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + ext { + buildToolsVersion = "28.0.3" + minSdkVersion = 16 + compileSdkVersion = 28 + targetSdkVersion = 28 + supportLibVersion = "28.0.0" + } + repositories { + google() + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:3.3.1' + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + repositories { + mavenLocal() + google() + jcenter() + maven { url "https://jitpack.io" } + maven { + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm + url "$rootDir/../node_modules/react-native/android" + } + } +} + +subprojects { subproject -> + afterEvaluate{ + if((subproject.plugins.hasPlugin('android') || subproject.plugins.hasPlugin('android-library'))) { + android { + compileSdkVersion rootProject.ext.compileSdkVersion + buildToolsVersion rootProject.ext.buildToolsVersion + } + } + } +} diff --git a/examples/basic/android/gradle.properties b/examples/basic/android/gradle.properties new file mode 100644 index 0000000..8bc02a2 --- /dev/null +++ b/examples/basic/android/gradle.properties @@ -0,0 +1,22 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +# Default value: -Xmx10248m -XX:MaxPermSize=256m +org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=1g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true + +android.useDeprecatedNdk=true +android.enableJetifier=true +android.useAndroidX=true diff --git a/examples/basic/android/gradle/wrapper/gradle-wrapper.jar b/examples/basic/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..b5166dad4d90021f6a0b45268c0755719f1d5cd4 GIT binary patch literal 52266 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
      izQycD<<50V$c*N*^@OdG*H91fYg5#Pj5}j& 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 z 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 literal 0 HcmV?d00001 diff --git a/examples/basic/android/gradle/wrapper/gradle-wrapper.properties b/examples/basic/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..0ac2296 --- /dev/null +++ b/examples/basic/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Sun Jan 07 08:54:18 PST 2018 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip diff --git a/examples/basic/android/gradlew b/examples/basic/android/gradlew new file mode 100644 index 0000000..91a7e26 --- /dev/null +++ b/examples/basic/android/gradlew @@ -0,0 +1,164 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# For Cygwin, ensure paths are in UNIX format before anything is touched. +if $cygwin ; then + [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` +fi + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >&- +APP_HOME="`pwd -P`" +cd "$SAVED" >&- + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/examples/basic/android/gradlew.bat b/examples/basic/android/gradlew.bat new file mode 100644 index 0000000..8a0b282 --- /dev/null +++ b/examples/basic/android/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/examples/basic/android/keystores/BUCK b/examples/basic/android/keystores/BUCK new file mode 100644 index 0000000..88e4c31 --- /dev/null +++ b/examples/basic/android/keystores/BUCK @@ -0,0 +1,8 @@ +keystore( + name = "debug", + properties = "debug.keystore.properties", + store = "debug.keystore", + visibility = [ + "PUBLIC", + ], +) diff --git a/examples/basic/android/keystores/debug.keystore.properties b/examples/basic/android/keystores/debug.keystore.properties new file mode 100644 index 0000000..121bfb4 --- /dev/null +++ b/examples/basic/android/keystores/debug.keystore.properties @@ -0,0 +1,4 @@ +key.store=debug.keystore +key.alias=androiddebugkey +key.store.password=android +key.alias.password=android diff --git a/examples/basic/android/settings.gradle b/examples/basic/android/settings.gradle new file mode 100644 index 0000000..4417fd7 --- /dev/null +++ b/examples/basic/android/settings.gradle @@ -0,0 +1,5 @@ +rootProject.name = 'RNCameraExample' +include ':react-native-camera' +project(':react-native-camera').projectDir = new File(rootProject.projectDir, '../../../android') + +include ':app' diff --git a/examples/basic/app.json b/examples/basic/app.json new file mode 100644 index 0000000..5b9bcbe --- /dev/null +++ b/examples/basic/app.json @@ -0,0 +1,4 @@ +{ + "name": "RNCameraExample", + "displayName": "RNCameraExample" +} \ No newline at end of file diff --git a/examples/basic/babel.config.js b/examples/basic/babel.config.js new file mode 100644 index 0000000..b66a04a --- /dev/null +++ b/examples/basic/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: ["module:metro-react-native-babel-preset"] +} diff --git a/examples/basic/index.js b/examples/basic/index.js new file mode 100644 index 0000000..550bf6d --- /dev/null +++ b/examples/basic/index.js @@ -0,0 +1,4 @@ +import { AppRegistry } from 'react-native'; +import App from './App'; + +AppRegistry.registerComponent('RNCameraExample', () => App); diff --git a/examples/basic/ios/RNCameraExample-tvOS/Info.plist b/examples/basic/ios/RNCameraExample-tvOS/Info.plist new file mode 100644 index 0000000..2fb6a11 --- /dev/null +++ b/examples/basic/ios/RNCameraExample-tvOS/Info.plist @@ -0,0 +1,54 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + NSLocationWhenInUseUsageDescription + + NSAppTransportSecurity + + + NSExceptionDomains + + localhost + + NSExceptionAllowsInsecureHTTPLoads + + + + + + diff --git a/examples/basic/ios/RNCameraExample-tvOSTests/Info.plist b/examples/basic/ios/RNCameraExample-tvOSTests/Info.plist new file mode 100644 index 0000000..886825c --- /dev/null +++ b/examples/basic/ios/RNCameraExample-tvOSTests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/examples/basic/ios/RNCameraExample.xcodeproj/project.pbxproj b/examples/basic/ios/RNCameraExample.xcodeproj/project.pbxproj new file mode 100644 index 0000000..6d66520 --- /dev/null +++ b/examples/basic/ios/RNCameraExample.xcodeproj/project.pbxproj @@ -0,0 +1,1543 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; }; + 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; }; + 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; }; + 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; }; + 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; }; + 00E356F31AD99517003FC87E /* RNCameraExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* RNCameraExampleTests.m */; }; + 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; }; + 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; }; + 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; }; + 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; + 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; + 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; + 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; + 146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; + 260F11A62256C95200351F4B /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 260F11A52256C95200351F4B /* JavaScriptCore.framework */; }; + 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; + 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; + 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; + 2D02E4C21E0B4AEC006451C7 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */; }; + 2D02E4C31E0B4AEC006451C7 /* libRCTImage-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */; }; + 2D02E4C41E0B4AEC006451C7 /* libRCTLinking-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */; }; + 2D02E4C51E0B4AEC006451C7 /* libRCTNetwork-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */; }; + 2D02E4C61E0B4AEC006451C7 /* libRCTSettings-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */; }; + 2D02E4C71E0B4AEC006451C7 /* libRCTText-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */; }; + 2D02E4C81E0B4AEC006451C7 /* libRCTWebSocket-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */; }; + 2D02E4C91E0B4AEC006451C7 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3EA31DF850E9000B6D8A /* libReact.a */; }; + 2DCD954D1E0B4F2C00145EB5 /* RNCameraExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* RNCameraExampleTests.m */; }; + 5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; }; + 71169F7C2024F47400B79C53 /* libRNCamera.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 71169F7B2024F45100B79C53 /* libRNCamera.a */; }; + 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; }; + ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTActionSheet; + }; + 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTGeolocation; + }; + 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 58B5115D1A9E6B3D00147676; + remoteInfo = RCTImage; + }; + 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 58B511DB1A9E6C8500147676; + remoteInfo = RCTNetwork; + }; + 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 832C81801AAF6DEF007FA2F7; + remoteInfo = RCTVibration; + }; + 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 13B07F861A680F5B00A75B9A; + remoteInfo = RNCameraExample; + }; + 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTSettings; + }; + 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3C86DF461ADF2C930047B81A; + remoteInfo = RCTWebSocket; + }; + 146834031AC3E56700842450 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192; + remoteInfo = React; + }; + 260F119B2256C79100351F4B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EDEBC6D6214B3E7000DD5AC8; + remoteInfo = jsi; + }; + 260F119D2256C79100351F4B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EDEBC73B214B45A300DD5AC8; + remoteInfo = jsiexecutor; + }; + 260F119F2256C79100351F4B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = ED296FB6214C9A0900B7C4FE; + remoteInfo = "jsi-tvOS"; + }; + 260F11A12256C79100351F4B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = ED296FEE214C9CF800B7C4FE; + remoteInfo = "jsiexecutor-tvOS"; + }; + 292484B82162B80C00ECA8A6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EBF21BDC1FC498900052F4D5; + remoteInfo = jsinspector; + }; + 292484BA2162B80C00ECA8A6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EBF21BFA1FC4989A0052F4D5; + remoteInfo = "jsinspector-tvOS"; + }; + 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 2D02E47A1E0B4A5D006451C7; + remoteInfo = "RNCameraExample-tvOS"; + }; + 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A283A1D9B042B00D4039D; + remoteInfo = "RCTImage-tvOS"; + }; + 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28471D9B043800D4039D; + remoteInfo = "RCTLinking-tvOS"; + }; + 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28541D9B044C00D4039D; + remoteInfo = "RCTNetwork-tvOS"; + }; + 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28611D9B046600D4039D; + remoteInfo = "RCTSettings-tvOS"; + }; + 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A287B1D9B048500D4039D; + remoteInfo = "RCTText-tvOS"; + }; + 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28881D9B049200D4039D; + remoteInfo = "RCTWebSocket-tvOS"; + }; + 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28131D9B038B00D4039D; + remoteInfo = "React-tvOS"; + }; + 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3C059A1DE3340900C268FA; + remoteInfo = yoga; + }; + 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3C06751DE3340C00C268FA; + remoteInfo = "yoga-tvOS"; + }; + 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3CD9251DE5FBEC00167DC4; + remoteInfo = cxxreact; + }; + 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3CD9321DE5FBEE00167DC4; + remoteInfo = "cxxreact-tvOS"; + }; + 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTAnimation; + }; + 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28201D9B03D100D4039D; + remoteInfo = "RCTAnimation-tvOS"; + }; + 71169F7A2024F45100B79C53 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 71169F762024F45100B79C53 /* RNCamera.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 4107012F1ACB723B00C6AA39; + remoteInfo = RNCamera; + }; + 71B586E3202257EF00B133C7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = ADD01A681E09402E00F6D226; + remoteInfo = "RCTBlob-tvOS"; + }; + 71B586F8202257EF00B133C7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3DBE0D001F3B181A0099AA32; + remoteInfo = fishhook; + }; + 71B586FA202257EF00B133C7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3DBE0D0D1F3B181C0099AA32; + remoteInfo = "fishhook-tvOS"; + }; + 71B5870A202257EF00B133C7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 139D7ECE1E25DB7D00323FB7; + remoteInfo = "third-party"; + }; + 71B5870C202257EF00B133C7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D383D3C1EBD27B6005632C8; + remoteInfo = "third-party-tvOS"; + }; + 71B5870E202257EF00B133C7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 139D7E881E25C6D100323FB7; + remoteInfo = "double-conversion"; + }; + 71B58710202257EF00B133C7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D383D621EBD27B9005632C8; + remoteInfo = "double-conversion-tvOS"; + }; + 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTLinking; + }; + 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 58B5119B1A9E6C1200147676; + remoteInfo = RCTText; + }; + ADBDB9261DFEBF0700ED6528 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 358F4ED71D1E81A9004DF814; + remoteInfo = RCTBlob; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; }; + 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = "../node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj"; sourceTree = ""; }; + 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = "../node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj"; sourceTree = ""; }; + 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = ""; }; + 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = "../node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj"; sourceTree = ""; }; + 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = "../node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj"; sourceTree = ""; }; + 00E356EE1AD99517003FC87E /* RNCameraExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RNCameraExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 00E356F21AD99517003FC87E /* RNCameraExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RNCameraExampleTests.m; sourceTree = ""; }; + 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = ""; }; + 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = ""; }; + 13B07F961A680F5B00A75B9A /* RNCameraExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RNCameraExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = RNCameraExample/AppDelegate.h; sourceTree = ""; }; + 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = RNCameraExample/AppDelegate.m; sourceTree = ""; }; + 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; + 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = RNCameraExample/Images.xcassets; sourceTree = ""; }; + 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = RNCameraExample/Info.plist; sourceTree = ""; }; + 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = RNCameraExample/main.m; sourceTree = ""; }; + 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = ""; }; + 260F11A52256C95200351F4B /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; + 2D02E47B1E0B4A5D006451C7 /* RNCameraExample-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "RNCameraExample-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 2D02E4901E0B4A5D006451C7 /* RNCameraExample-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "RNCameraExample-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = ""; }; + 71169F762024F45100B79C53 /* RNCamera.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RNCamera.xcodeproj; path = ../../../ios/RNCamera.xcodeproj; sourceTree = ""; }; + 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = ""; }; + 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; }; + ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTBlob.xcodeproj; path = "../node_modules/react-native/Libraries/Blob/RCTBlob.xcodeproj"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 00E356EB1AD99517003FC87E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 260F11A62256C95200351F4B /* JavaScriptCore.framework in Frameworks */, + 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */, + 146834051AC3E58100842450 /* libReact.a in Frameworks */, + 71169F7C2024F47400B79C53 /* libRNCamera.a in Frameworks */, + ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */, + 5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */, + 5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */, + 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */, + 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */, + 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */, + 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */, + 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */, + 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */, + 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */, + 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E4781E0B4A5D006451C7 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 2D02E4C91E0B4AEC006451C7 /* libReact.a in Frameworks */, + 2D02E4C21E0B4AEC006451C7 /* libRCTAnimation.a in Frameworks */, + 2D02E4C31E0B4AEC006451C7 /* libRCTImage-tvOS.a in Frameworks */, + 2D02E4C41E0B4AEC006451C7 /* libRCTLinking-tvOS.a in Frameworks */, + 2D02E4C51E0B4AEC006451C7 /* libRCTNetwork-tvOS.a in Frameworks */, + 2D02E4C61E0B4AEC006451C7 /* libRCTSettings-tvOS.a in Frameworks */, + 2D02E4C71E0B4AEC006451C7 /* libRCTText-tvOS.a in Frameworks */, + 2D02E4C81E0B4AEC006451C7 /* libRCTWebSocket-tvOS.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E48D1E0B4A5D006451C7 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 00C302A81ABCB8CE00DB3ED1 /* Products */ = { + isa = PBXGroup; + children = ( + 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */, + ); + name = Products; + sourceTree = ""; + }; + 00C302B61ABCB90400DB3ED1 /* Products */ = { + isa = PBXGroup; + children = ( + 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */, + ); + name = Products; + sourceTree = ""; + }; + 00C302BC1ABCB91800DB3ED1 /* Products */ = { + isa = PBXGroup; + children = ( + 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */, + 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 00C302D41ABCB9D200DB3ED1 /* Products */ = { + isa = PBXGroup; + children = ( + 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */, + 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 00C302E01ABCB9EE00DB3ED1 /* Products */ = { + isa = PBXGroup; + children = ( + 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */, + ); + name = Products; + sourceTree = ""; + }; + 00E356EF1AD99517003FC87E /* RNCameraExampleTests */ = { + isa = PBXGroup; + children = ( + 00E356F21AD99517003FC87E /* RNCameraExampleTests.m */, + 00E356F01AD99517003FC87E /* Supporting Files */, + ); + path = RNCameraExampleTests; + sourceTree = ""; + }; + 00E356F01AD99517003FC87E /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 00E356F11AD99517003FC87E /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 139105B71AF99BAD00B5F7CC /* Products */ = { + isa = PBXGroup; + children = ( + 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */, + 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 139FDEE71B06529A00C62182 /* Products */ = { + isa = PBXGroup; + children = ( + 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */, + 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */, + 71B586F9202257EF00B133C7 /* libfishhook.a */, + 71B586FB202257EF00B133C7 /* libfishhook-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 13B07FAE1A68108700A75B9A /* RNCameraExample */ = { + isa = PBXGroup; + children = ( + 008F07F21AC5B25A0029DE68 /* main.jsbundle */, + 13B07FAF1A68108700A75B9A /* AppDelegate.h */, + 13B07FB01A68108700A75B9A /* AppDelegate.m */, + 13B07FB51A68108700A75B9A /* Images.xcassets */, + 13B07FB61A68108700A75B9A /* Info.plist */, + 13B07FB11A68108700A75B9A /* LaunchScreen.xib */, + 13B07FB71A68108700A75B9A /* main.m */, + ); + name = RNCameraExample; + sourceTree = ""; + }; + 146834001AC3E56700842450 /* Products */ = { + isa = PBXGroup; + children = ( + 146834041AC3E56700842450 /* libReact.a */, + 3DAD3EA31DF850E9000B6D8A /* libReact.a */, + 3DAD3EA51DF850E9000B6D8A /* libyoga.a */, + 3DAD3EA71DF850E9000B6D8A /* libyoga.a */, + 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */, + 3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */, + 292484B92162B80C00ECA8A6 /* libjsinspector.a */, + 292484BB2162B80C00ECA8A6 /* libjsinspector-tvOS.a */, + 71B5870B202257EF00B133C7 /* libthird-party.a */, + 71B5870D202257EF00B133C7 /* libthird-party.a */, + 71B5870F202257EF00B133C7 /* libdouble-conversion.a */, + 71B58711202257EF00B133C7 /* libdouble-conversion.a */, + 260F119C2256C79100351F4B /* libjsi.a */, + 260F119E2256C79100351F4B /* libjsiexecutor.a */, + 260F11A02256C79100351F4B /* libjsi-tvOS.a */, + 260F11A22256C79100351F4B /* libjsiexecutor-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 260F11A42256C95100351F4B /* Frameworks */ = { + isa = PBXGroup; + children = ( + 260F11A52256C95200351F4B /* JavaScriptCore.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 5E91572E1DD0AC6500FF2AA8 /* Products */ = { + isa = PBXGroup; + children = ( + 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */, + 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */, + ); + name = Products; + sourceTree = ""; + }; + 71169F772024F45100B79C53 /* Products */ = { + isa = PBXGroup; + children = ( + 71169F7B2024F45100B79C53 /* libRNCamera.a */, + ); + name = Products; + sourceTree = ""; + }; + 78C398B11ACF4ADC00677621 /* Products */ = { + isa = PBXGroup; + children = ( + 78C398B91ACF4ADC00677621 /* libRCTLinking.a */, + 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 832341AE1AAA6A7D00B99B32 /* Libraries */ = { + isa = PBXGroup; + children = ( + 71169F762024F45100B79C53 /* RNCamera.xcodeproj */, + 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */, + 146833FF1AC3E56700842450 /* React.xcodeproj */, + 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */, + ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */, + 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */, + 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */, + 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */, + 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */, + 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */, + 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */, + 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */, + 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */, + ); + name = Libraries; + sourceTree = ""; + }; + 832341B11AAA6A8300B99B32 /* Products */ = { + isa = PBXGroup; + children = ( + 832341B51AAA6A8300B99B32 /* libRCTText.a */, + 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 83CBB9F61A601CBA00E9B192 = { + isa = PBXGroup; + children = ( + 13B07FAE1A68108700A75B9A /* RNCameraExample */, + 832341AE1AAA6A7D00B99B32 /* Libraries */, + 00E356EF1AD99517003FC87E /* RNCameraExampleTests */, + 83CBBA001A601CBA00E9B192 /* Products */, + 260F11A42256C95100351F4B /* Frameworks */, + ); + indentWidth = 2; + sourceTree = ""; + tabWidth = 2; + usesTabs = 0; + }; + 83CBBA001A601CBA00E9B192 /* Products */ = { + isa = PBXGroup; + children = ( + 13B07F961A680F5B00A75B9A /* RNCameraExample.app */, + 00E356EE1AD99517003FC87E /* RNCameraExampleTests.xctest */, + 2D02E47B1E0B4A5D006451C7 /* RNCameraExample-tvOS.app */, + 2D02E4901E0B4A5D006451C7 /* RNCameraExample-tvOSTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + ADBDB9201DFEBF0600ED6528 /* Products */ = { + isa = PBXGroup; + children = ( + ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */, + 71B586E4202257EF00B133C7 /* libRCTBlob-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 00E356ED1AD99517003FC87E /* RNCameraExampleTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "RNCameraExampleTests" */; + buildPhases = ( + 00E356EA1AD99517003FC87E /* Sources */, + 00E356EB1AD99517003FC87E /* Frameworks */, + 00E356EC1AD99517003FC87E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 00E356F51AD99517003FC87E /* PBXTargetDependency */, + ); + name = RNCameraExampleTests; + productName = RNCameraExampleTests; + productReference = 00E356EE1AD99517003FC87E /* RNCameraExampleTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 13B07F861A680F5B00A75B9A /* RNCameraExample */ = { + isa = PBXNativeTarget; + buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "RNCameraExample" */; + buildPhases = ( + 13B07F871A680F5B00A75B9A /* Sources */, + 13B07F8C1A680F5B00A75B9A /* Frameworks */, + 13B07F8E1A680F5B00A75B9A /* Resources */, + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = RNCameraExample; + productName = "Hello World"; + productReference = 13B07F961A680F5B00A75B9A /* RNCameraExample.app */; + productType = "com.apple.product-type.application"; + }; + 2D02E47A1E0B4A5D006451C7 /* RNCameraExample-tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "RNCameraExample-tvOS" */; + buildPhases = ( + 2D02E4771E0B4A5D006451C7 /* Sources */, + 2D02E4781E0B4A5D006451C7 /* Frameworks */, + 2D02E4791E0B4A5D006451C7 /* Resources */, + 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "RNCameraExample-tvOS"; + productName = "RNCameraExample-tvOS"; + productReference = 2D02E47B1E0B4A5D006451C7 /* RNCameraExample-tvOS.app */; + productType = "com.apple.product-type.application"; + }; + 2D02E48F1E0B4A5D006451C7 /* RNCameraExample-tvOSTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "RNCameraExample-tvOSTests" */; + buildPhases = ( + 2D02E48C1E0B4A5D006451C7 /* Sources */, + 2D02E48D1E0B4A5D006451C7 /* Frameworks */, + 2D02E48E1E0B4A5D006451C7 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */, + ); + name = "RNCameraExample-tvOSTests"; + productName = "RNCameraExample-tvOSTests"; + productReference = 2D02E4901E0B4A5D006451C7 /* RNCameraExample-tvOSTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 83CBB9F71A601CBA00E9B192 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 610; + ORGANIZATIONNAME = Facebook; + TargetAttributes = { + 00E356ED1AD99517003FC87E = { + CreatedOnToolsVersion = 6.2; + DevelopmentTeam = PEG44W5TBT; + TestTargetID = 13B07F861A680F5B00A75B9A; + }; + 13B07F861A680F5B00A75B9A = { + DevelopmentTeam = PEG44W5TBT; + ProvisioningStyle = Automatic; + }; + 2D02E47A1E0B4A5D006451C7 = { + CreatedOnToolsVersion = 8.2.1; + ProvisioningStyle = Automatic; + }; + 2D02E48F1E0B4A5D006451C7 = { + CreatedOnToolsVersion = 8.2.1; + ProvisioningStyle = Automatic; + TestTargetID = 2D02E47A1E0B4A5D006451C7; + }; + }; + }; + buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "RNCameraExample" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 83CBB9F61A601CBA00E9B192; + productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */; + ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; + }, + { + ProductGroup = 5E91572E1DD0AC6500FF2AA8 /* Products */; + ProjectRef = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; + }, + { + ProductGroup = ADBDB9201DFEBF0600ED6528 /* Products */; + ProjectRef = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */; + }, + { + ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */; + ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; + }, + { + ProductGroup = 00C302BC1ABCB91800DB3ED1 /* Products */; + ProjectRef = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; + }, + { + ProductGroup = 78C398B11ACF4ADC00677621 /* Products */; + ProjectRef = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; + }, + { + ProductGroup = 00C302D41ABCB9D200DB3ED1 /* Products */; + ProjectRef = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; + }, + { + ProductGroup = 139105B71AF99BAD00B5F7CC /* Products */; + ProjectRef = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; + }, + { + ProductGroup = 832341B11AAA6A8300B99B32 /* Products */; + ProjectRef = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; + }, + { + ProductGroup = 00C302E01ABCB9EE00DB3ED1 /* Products */; + ProjectRef = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; + }, + { + ProductGroup = 139FDEE71B06529A00C62182 /* Products */; + ProjectRef = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; + }, + { + ProductGroup = 146834001AC3E56700842450 /* Products */; + ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */; + }, + { + ProductGroup = 71169F772024F45100B79C53 /* Products */; + ProjectRef = 71169F762024F45100B79C53 /* RNCamera.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + 13B07F861A680F5B00A75B9A /* RNCameraExample */, + 00E356ED1AD99517003FC87E /* RNCameraExampleTests */, + 2D02E47A1E0B4A5D006451C7 /* RNCameraExample-tvOS */, + 2D02E48F1E0B4A5D006451C7 /* RNCameraExample-tvOSTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTActionSheet.a; + remoteRef = 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTGeolocation.a; + remoteRef = 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTImage.a; + remoteRef = 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTNetwork.a; + remoteRef = 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTVibration.a; + remoteRef = 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTSettings.a; + remoteRef = 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTWebSocket.a; + remoteRef = 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 146834041AC3E56700842450 /* libReact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libReact.a; + remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 260F119C2256C79100351F4B /* libjsi.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libjsi.a; + remoteRef = 260F119B2256C79100351F4B /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 260F119E2256C79100351F4B /* libjsiexecutor.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libjsiexecutor.a; + remoteRef = 260F119D2256C79100351F4B /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 260F11A02256C79100351F4B /* libjsi-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libjsi-tvOS.a"; + remoteRef = 260F119F2256C79100351F4B /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 260F11A22256C79100351F4B /* libjsiexecutor-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libjsiexecutor-tvOS.a"; + remoteRef = 260F11A12256C79100351F4B /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 292484B92162B80C00ECA8A6 /* libjsinspector.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libjsinspector.a; + remoteRef = 292484B82162B80C00ECA8A6 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 292484BB2162B80C00ECA8A6 /* libjsinspector-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libjsinspector-tvOS.a"; + remoteRef = 292484BA2162B80C00ECA8A6 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTImage-tvOS.a"; + remoteRef = 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTLinking-tvOS.a"; + remoteRef = 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTNetwork-tvOS.a"; + remoteRef = 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTSettings-tvOS.a"; + remoteRef = 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTText-tvOS.a"; + remoteRef = 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTWebSocket-tvOS.a"; + remoteRef = 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA31DF850E9000B6D8A /* libReact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libReact.a; + remoteRef = 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA51DF850E9000B6D8A /* libyoga.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libyoga.a; + remoteRef = 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA71DF850E9000B6D8A /* libyoga.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libyoga.a; + remoteRef = 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libcxxreact.a; + remoteRef = 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libcxxreact.a; + remoteRef = 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTAnimation.a; + remoteRef = 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTAnimation.a; + remoteRef = 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 71169F7B2024F45100B79C53 /* libRNCamera.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNCamera.a; + remoteRef = 71169F7A2024F45100B79C53 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 71B586E4202257EF00B133C7 /* libRCTBlob-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTBlob-tvOS.a"; + remoteRef = 71B586E3202257EF00B133C7 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 71B586F9202257EF00B133C7 /* libfishhook.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libfishhook.a; + remoteRef = 71B586F8202257EF00B133C7 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 71B586FB202257EF00B133C7 /* libfishhook-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libfishhook-tvOS.a"; + remoteRef = 71B586FA202257EF00B133C7 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 71B5870B202257EF00B133C7 /* libthird-party.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libthird-party.a"; + remoteRef = 71B5870A202257EF00B133C7 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 71B5870D202257EF00B133C7 /* libthird-party.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libthird-party.a"; + remoteRef = 71B5870C202257EF00B133C7 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 71B5870F202257EF00B133C7 /* libdouble-conversion.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libdouble-conversion.a"; + remoteRef = 71B5870E202257EF00B133C7 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 71B58711202257EF00B133C7 /* libdouble-conversion.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libdouble-conversion.a"; + remoteRef = 71B58710202257EF00B133C7 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTLinking.a; + remoteRef = 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 832341B51AAA6A8300B99B32 /* libRCTText.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTText.a; + remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTBlob.a; + remoteRef = ADBDB9261DFEBF0700ED6528 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXResourcesBuildPhase section */ + 00E356EC1AD99517003FC87E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 13B07F8E1A680F5B00A75B9A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, + 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E4791E0B4A5D006451C7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E48E1E0B4A5D006451C7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Bundle React Native code and images"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; + }; + 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Bundle React Native Code And Images"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 00E356EA1AD99517003FC87E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 00E356F31AD99517003FC87E /* RNCameraExampleTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 13B07F871A680F5B00A75B9A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */, + 13B07FC11A68108700A75B9A /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E4771E0B4A5D006451C7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */, + 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E48C1E0B4A5D006451C7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2DCD954D1E0B4F2C00145EB5 /* RNCameraExampleTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 00E356F51AD99517003FC87E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 13B07F861A680F5B00A75B9A /* RNCameraExample */; + targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; + }; + 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 2D02E47A1E0B4A5D006451C7 /* RNCameraExample-tvOS */; + targetProxy = 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = { + isa = PBXVariantGroup; + children = ( + 13B07FB21A68108700A75B9A /* Base */, + ); + name = LaunchScreen.xib; + path = RNCameraExample; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 00E356F61AD99517003FC87E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + DEVELOPMENT_TEAM = PEG44W5TBT; + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-camera/ios/**", + ); + INFOPLIST_FILE = RNCameraExampleTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + OTHER_LDFLAGS = ( + "-ObjC", + "-lc++", + "-lz", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RNCameraExample.app/RNCameraExample"; + }; + name = Debug; + }; + 00E356F71AD99517003FC87E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + COPY_PHASE_STRIP = NO; + DEVELOPMENT_TEAM = PEG44W5TBT; + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-camera/ios/**", + ); + INFOPLIST_FILE = RNCameraExampleTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + OTHER_LDFLAGS = ( + "-ObjC", + "-lc++", + "-lz", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RNCameraExample.app/RNCameraExample"; + }; + name = Release; + }; + 13B07F941A680F5B00A75B9A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = NO; + DEVELOPMENT_TEAM = PEG44W5TBT; + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../../../ios/**", + ); + INFOPLIST_FILE = RNCameraExample/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + "-lz", + ); + PRODUCT_NAME = RNCameraExample; + PROVISIONING_PROFILE_SPECIFIER = ""; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 13B07F951A680F5B00A75B9A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = PEG44W5TBT; + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../../../ios/**", + ); + INFOPLIST_FILE = RNCameraExample/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + "-lz", + ); + PRODUCT_NAME = RNCameraExample; + PROVISIONING_PROFILE_SPECIFIER = ""; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; + 2D02E4971E0B4A5E006451C7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-camera/ios/**", + ); + INFOPLIST_FILE = "RNCameraExample-tvOS/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + OTHER_LDFLAGS = ( + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.RNCameraExample-tvOS"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = appletvos; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 9.2; + }; + name = Debug; + }; + 2D02E4981E0B4A5E006451C7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-camera/ios/**", + ); + INFOPLIST_FILE = "RNCameraExample-tvOS/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + OTHER_LDFLAGS = ( + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.RNCameraExample-tvOS"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = appletvos; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 9.2; + }; + name = Release; + }; + 2D02E4991E0B4A5E006451C7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "RNCameraExample-tvOSTests/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.RNCameraExample-tvOSTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = appletvos; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RNCameraExample-tvOS.app/RNCameraExample-tvOS"; + TVOS_DEPLOYMENT_TARGET = 10.1; + }; + name = Debug; + }; + 2D02E49A1E0B4A5E006451C7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "RNCameraExample-tvOSTests/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.RNCameraExample-tvOSTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = appletvos; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RNCameraExample-tvOS.app/RNCameraExample-tvOS"; + TVOS_DEPLOYMENT_TARGET = 10.1; + }; + name = Release; + }; + 83CBBA201A601CBA00E9B192 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 83CBBA211A601CBA00E9B192 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "RNCameraExampleTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 00E356F61AD99517003FC87E /* Debug */, + 00E356F71AD99517003FC87E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "RNCameraExample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 13B07F941A680F5B00A75B9A /* Debug */, + 13B07F951A680F5B00A75B9A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "RNCameraExample-tvOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2D02E4971E0B4A5E006451C7 /* Debug */, + 2D02E4981E0B4A5E006451C7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "RNCameraExample-tvOSTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2D02E4991E0B4A5E006451C7 /* Debug */, + 2D02E49A1E0B4A5E006451C7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "RNCameraExample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 83CBBA201A601CBA00E9B192 /* Debug */, + 83CBBA211A601CBA00E9B192 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; +} diff --git a/examples/basic/ios/RNCameraExample.xcodeproj/xcshareddata/xcschemes/RNCameraExample-tvOS.xcscheme b/examples/basic/ios/RNCameraExample.xcodeproj/xcshareddata/xcschemes/RNCameraExample-tvOS.xcscheme new file mode 100644 index 0000000..94ceb8e --- /dev/null +++ b/examples/basic/ios/RNCameraExample.xcodeproj/xcshareddata/xcschemes/RNCameraExample-tvOS.xcscheme @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/basic/ios/RNCameraExample.xcodeproj/xcshareddata/xcschemes/RNCameraExample.xcscheme b/examples/basic/ios/RNCameraExample.xcodeproj/xcshareddata/xcschemes/RNCameraExample.xcscheme new file mode 100644 index 0000000..ce9c5e1 --- /dev/null +++ b/examples/basic/ios/RNCameraExample.xcodeproj/xcshareddata/xcschemes/RNCameraExample.xcscheme @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/basic/ios/RNCameraExample/AppDelegate.h b/examples/basic/ios/RNCameraExample/AppDelegate.h new file mode 100644 index 0000000..a9654d5 --- /dev/null +++ b/examples/basic/ios/RNCameraExample/AppDelegate.h @@ -0,0 +1,16 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +@interface AppDelegate : UIResponder + +@property (nonatomic, strong) UIWindow *window; + +@end diff --git a/examples/basic/ios/RNCameraExample/AppDelegate.m b/examples/basic/ios/RNCameraExample/AppDelegate.m new file mode 100644 index 0000000..8adfacf --- /dev/null +++ b/examples/basic/ios/RNCameraExample/AppDelegate.m @@ -0,0 +1,37 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "AppDelegate.h" + +#import +#import + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + NSURL *jsCodeLocation; + + jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil]; + + RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation + moduleName:@"RNCameraExample" + initialProperties:nil + launchOptions:launchOptions]; + rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; + + self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; + UIViewController *rootViewController = [UIViewController new]; + rootViewController.view = rootView; + self.window.rootViewController = rootViewController; + [self.window makeKeyAndVisible]; + return YES; +} + +@end diff --git a/examples/basic/ios/RNCameraExample/Base.lproj/LaunchScreen.xib b/examples/basic/ios/RNCameraExample/Base.lproj/LaunchScreen.xib new file mode 100644 index 0000000..9a9fe8e --- /dev/null +++ b/examples/basic/ios/RNCameraExample/Base.lproj/LaunchScreen.xib @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/basic/ios/RNCameraExample/Images.xcassets/AppIcon.appiconset/Contents.json b/examples/basic/ios/RNCameraExample/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..118c98f --- /dev/null +++ b/examples/basic/ios/RNCameraExample/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,38 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/examples/basic/ios/RNCameraExample/Images.xcassets/Contents.json b/examples/basic/ios/RNCameraExample/Images.xcassets/Contents.json new file mode 100644 index 0000000..2d92bd5 --- /dev/null +++ b/examples/basic/ios/RNCameraExample/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/examples/basic/ios/RNCameraExample/Info.plist b/examples/basic/ios/RNCameraExample/Info.plist new file mode 100644 index 0000000..cd1630e --- /dev/null +++ b/examples/basic/ios/RNCameraExample/Info.plist @@ -0,0 +1,57 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + RNCameraExample + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + NSAppTransportSecurity + + NSExceptionDomains + + localhost + + NSExceptionAllowsInsecureHTTPLoads + + + + + NSCameraUsageDescription + Used to take photos + NSLocationWhenInUseUsageDescription + + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + + diff --git a/examples/basic/ios/RNCameraExample/main.m b/examples/basic/ios/RNCameraExample/main.m new file mode 100644 index 0000000..3d767fc --- /dev/null +++ b/examples/basic/ios/RNCameraExample/main.m @@ -0,0 +1,18 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/examples/basic/ios/RNCameraExampleTests/Info.plist b/examples/basic/ios/RNCameraExampleTests/Info.plist new file mode 100644 index 0000000..886825c --- /dev/null +++ b/examples/basic/ios/RNCameraExampleTests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/examples/basic/ios/RNCameraExampleTests/RNCameraExampleTests.m b/examples/basic/ios/RNCameraExampleTests/RNCameraExampleTests.m new file mode 100644 index 0000000..da2107c --- /dev/null +++ b/examples/basic/ios/RNCameraExampleTests/RNCameraExampleTests.m @@ -0,0 +1,70 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import +#import + +#import +#import + +#define TIMEOUT_SECONDS 600 +#define TEXT_TO_LOOK_FOR @"Welcome to React Native!" + +@interface RNCameraExampleTests : XCTestCase + +@end + +@implementation RNCameraExampleTests + +- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test +{ + if (test(view)) { + return YES; + } + for (UIView *subview in [view subviews]) { + if ([self findSubviewInView:subview matching:test]) { + return YES; + } + } + return NO; +} + +- (void)testRendersWelcomeScreen +{ + UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController]; + NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS]; + BOOL foundElement = NO; + + __block NSString *redboxError = nil; + RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) { + if (level >= RCTLogLevelError) { + redboxError = message; + } + }); + + while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) { + [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; + [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; + + foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) { + if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) { + return YES; + } + return NO; + }]; + } + + RCTSetLogFunction(RCTDefaultLogFunction); + + XCTAssertNil(redboxError, @"RedBox error: %@", redboxError); + XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS); +} + + +@end diff --git a/examples/basic/metro.config.js b/examples/basic/metro.config.js new file mode 100644 index 0000000..1b8c6db --- /dev/null +++ b/examples/basic/metro.config.js @@ -0,0 +1,30 @@ +/** + * This file overrides metro config so + */ +'use strict'; + +const path = require('path'); +const blacklist = require('metro-config/src/defaults/blacklist'); + +const reactNativeCameraRoot = path.resolve(__dirname, '..', '..'); + +module.exports = { + transformer: { + getTransformOptions: async () => ({ + transform: { + experimentalImportSupport: false, + inlineRequires: false, + }, + }), + }, + watchFolders: [path.resolve(__dirname, 'node_modules'), reactNativeCameraRoot], + resolver: { + blacklistRE: blacklist([ + new RegExp(`${reactNativeCameraRoot}/examples/mlkit/.*`), + new RegExp(`${reactNativeCameraRoot}/node_modules/react-native/.*`), + new RegExp( + `${reactNativeCameraRoot}/examples/advanced/advanced/node_modules/react-native/.*`, + ), + ]), + }, +}; diff --git a/examples/basic/package.json b/examples/basic/package.json new file mode 100644 index 0000000..499a50a --- /dev/null +++ b/examples/basic/package.json @@ -0,0 +1,25 @@ +{ + "name": "RNCameraExample", + "version": "0.0.1", + "dependencies": { + "@babel/runtime": "^7.1.2", + "babel": "^6.23.0", + "react": "16.8.3", + "react-native": "0.59.1" + }, + "devDependencies": { + "babel-jest": "23.6.0", + "jest": "23.6.0", + "metro-react-native-babel-preset": "0.53.1", + "react-test-renderer": "16.8.3" + }, + "jest": { + "preset": "react-native" + }, + "private": true, + "scripts": { + "clear": "node node_modules/react-native/local-cli/cli.js start --reset-cache", + "start": "node node_modules/react-native/local-cli/cli.js start", + "test": "jest" + } +} diff --git a/examples/basic/rn-cli.config.js b/examples/basic/rn-cli.config.js new file mode 100644 index 0000000..9d82c8b --- /dev/null +++ b/examples/basic/rn-cli.config.js @@ -0,0 +1,27 @@ +/** + * This file overrides metro config so + */ +'use strict'; + +const path = require('path'); +const blacklist = require('metro-config/src/defaults/blacklist'); + +const reactNativeCameraRoot = path.resolve(__dirname, '..', '..'); + +module.exports = { + transformer: { + getTransformOptions: async () => ({ + transform: { + experimentalImportSupport: false, + inlineRequires: false, + }, + }), + }, + watchFolders: [path.resolve(__dirname, 'node_modules'), reactNativeCameraRoot], + resolver: { + blacklistRE: blacklist([ + new RegExp(`${reactNativeCameraRoot}/examples/mlkit/.*`), + new RegExp(`${reactNativeCameraRoot}/node_modules/react-native/.*`), + ]), + }, +}; diff --git a/examples/basic/yarn.lock b/examples/basic/yarn.lock new file mode 100644 index 0000000..030b810 --- /dev/null +++ b/examples/basic/yarn.lock @@ -0,0 +1,6124 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.0.0-beta.35": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" + integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== + dependencies: + "@babel/highlight" "^7.0.0" + +"@babel/core@^7.0.0": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.1.2.tgz#f8d2a9ceb6832887329a7b60f9d035791400ba4e" + integrity sha512-IFeSSnjXdhDaoysIlev//UzHZbdEmm7D0EIH2qtse9xK7mXEZQpYjs2P00XlP1qYsYvid79p+Zgg6tz1mp6iVw== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.1.2" + "@babel/helpers" "^7.1.2" + "@babel/parser" "^7.1.2" + "@babel/template" "^7.1.2" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.1.2" + convert-source-map "^1.1.0" + debug "^3.1.0" + json5 "^0.5.0" + lodash "^4.17.10" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.0.0", "@babel/generator@^7.1.2": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.1.2.tgz#fde75c072575ce7abbd97322e8fef5bae67e4630" + integrity sha512-70A9HWLS/1RHk3Ck8tNHKxOoKQuSKocYgwDN85Pyl/RBduss6AKxUR7RIZ/lzduQMSYfWEM4DDBu6A+XGbkFig== + dependencies: + "@babel/types" "^7.1.2" + jsesc "^2.5.1" + lodash "^4.17.10" + source-map "^0.5.0" + trim-right "^1.0.1" + +"@babel/helper-annotate-as-pure@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" + integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" + integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-builder-react-jsx@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0.tgz#fa154cb53eb918cf2a9a7ce928e29eb649c5acdb" + integrity sha512-ebJ2JM6NAKW0fQEqN8hOLxK84RbRz9OkUhGS/Xd5u56ejMfVbayJ4+LykERZCOUM6faa6Fp3SZNX3fcT16MKHw== + dependencies: + "@babel/types" "^7.0.0" + esutils "^2.0.0" + +"@babel/helper-call-delegate@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz#6a957f105f37755e8645343d3038a22e1449cc4a" + integrity sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ== + dependencies: + "@babel/helper-hoist-variables" "^7.0.0" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-define-map@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz#3b74caec329b3c80c116290887c0dd9ae468c20c" + integrity sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/types" "^7.0.0" + lodash "^4.17.10" + +"@babel/helper-explode-assignable-expression@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" + integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA== + dependencies: + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-function-name@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" + integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== + dependencies: + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/template" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-get-function-arity@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" + integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-hoist-variables@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz#46adc4c5e758645ae7a45deb92bab0918c23bb88" + integrity sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-member-expression-to-functions@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f" + integrity sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-module-imports@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" + integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-module-transforms@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.1.0.tgz#470d4f9676d9fad50b324cdcce5fbabbc3da5787" + integrity sha512-0JZRd2yhawo79Rcm4w0LwSMILFmFXjugG3yqf+P/UsKsRS1mJCmMwwlHDlMg7Avr9LrvSpp4ZSULO9r8jpCzcw== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-simple-access" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.0.0" + "@babel/template" "^7.1.0" + "@babel/types" "^7.0.0" + lodash "^4.17.10" + +"@babel/helper-optimise-call-expression@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" + integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-plugin-utils@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" + integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== + +"@babel/helper-regex@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.0.0.tgz#2c1718923b57f9bbe64705ffe5640ac64d9bdb27" + integrity sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg== + dependencies: + lodash "^4.17.10" + +"@babel/helper-remap-async-to-generator@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" + integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-wrap-function" "^7.1.0" + "@babel/template" "^7.1.0" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-replace-supers@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.1.0.tgz#5fc31de522ec0ef0899dc9b3e7cf6a5dd655f362" + integrity sha512-BvcDWYZRWVuDeXTYZWxekQNO5D4kO55aArwZOTFXw6rlLQA8ZaDicJR1sO47h+HrnCiDFiww0fSPV0d713KBGQ== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.0.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-simple-access@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" + integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w== + dependencies: + "@babel/template" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-split-export-declaration@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813" + integrity sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-wrap-function@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.1.0.tgz#8cf54e9190706067f016af8f75cb3df829cc8c66" + integrity sha512-R6HU3dete+rwsdAfrOzTlE9Mcpk4RjU3aX3gi9grtmugQY0u79X7eogUvfXA5sI81Mfq1cn6AgxihfN33STjJA== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/template" "^7.1.0" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helpers@^7.1.2": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.1.2.tgz#ab752e8c35ef7d39987df4e8586c63b8846234b5" + integrity sha512-Myc3pUE8eswD73aWcartxB16K6CGmHDv9KxOmD2CeOs/FaEAQodr3VYGmlvOmog60vNQ2w8QbatuahepZwrHiA== + dependencies: + "@babel/template" "^7.1.2" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.1.2" + +"@babel/highlight@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" + integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.1.2": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.1.2.tgz#85c5c47af6d244fab77bce6b9bd830e38c978409" + integrity sha512-x5HFsW+E/nQalGMw7hu+fvPqnBeBaIr0lWJ2SG0PPL2j+Pm9lYvCrsZJGIgauPIENx0v10INIyFjmSNUD/gSqQ== + +"@babel/plugin-external-helpers@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.0.0.tgz#61ee7ba5dba27d7cad72a13d46bec23c060b762e" + integrity sha512-tZKTMdhZvTy0KCEX5EGQQm1RHr7jUa36q/yax1baEA0yZapVYmu10yW7LTqijITgSq416gPVjrcexiA6y4pJlA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-proposal-class-properties@^7.0.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.1.0.tgz#9af01856b1241db60ec8838d84691aa0bd1e8df4" + integrity sha512-/PCJWN+CKt5v1xcGn4vnuu13QDoV+P7NcICP44BoonAJoPSGwVkgrXihFIQGiEjjPlUDBIw1cM7wYFLARS2/hw== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-member-expression-to-functions" "^7.0.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.1.0" + "@babel/plugin-syntax-class-properties" "^7.0.0" + +"@babel/plugin-proposal-export-default-from@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.0.0.tgz#a057bbfd4649facfe39f33a537e18554bdd2b5da" + integrity sha512-cWhkx6SyjZ4caFOanoPmDNgQCuYYTmou4QXy886JsyLTw/vhWQbop2gLKsWyyswrJkKTB7fSNxVYbP/oEsoySA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-export-default-from" "^7.0.0" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.0.0.tgz#b72ec31adf612d062dc0348316246127a451e45f" + integrity sha512-QIN3UFo1ul4ruAsjIqK43PeXedo1qY74zeGrODJl1KfCGeMc6qJC4rb5Ylml/smzxibqsDeVZGH+TmWHCldRQQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" + +"@babel/plugin-proposal-object-rest-spread@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0.tgz#9a17b547f64d0676b6c9cecd4edf74a82ab85e7e" + integrity sha512-14fhfoPcNu7itSen7Py1iGN0gEm87hX/B+8nZPqkdmANyyYWYMY2pjA3r8WXbWVKMzfnSNS0xY8GVS0IjXi/iw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + +"@babel/plugin-proposal-optional-catch-binding@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0.tgz#b610d928fe551ff7117d42c8bb410eec312a6425" + integrity sha512-JPqAvLG1s13B/AuoBjdBYvn38RqW6n1TzrQO839/sIpqLpbnXKacsAgpZHzLD83Sm8SDXMkkrAvEnJ25+0yIpw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.0.0" + +"@babel/plugin-proposal-optional-chaining@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.0.0.tgz#3d344d4152253379b8758e7d041148e8787c4a9d" + integrity sha512-7x8HLa71OzNiofbQUVakS0Kmg++6a+cXNfS7QKHbbv03SuSaumJyaWsfNgw+T7aqrJlqurYpZqrkPgXu0iZK0w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-optional-chaining" "^7.0.0" + +"@babel/plugin-syntax-class-properties@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.0.0.tgz#e051af5d300cbfbcec4a7476e37a803489881634" + integrity sha512-cR12g0Qzn4sgkjrbrzWy2GE7m9vMl/sFkqZ3gIpAQdrvPDnLM8180i+ANDFIXfjHo9aqp0ccJlQ0QNZcFUbf9w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-dynamic-import@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.0.0.tgz#6dfb7d8b6c3be14ce952962f658f3b7eb54c33ee" + integrity sha512-Gt9xNyRrCHCiyX/ZxDGOcBnlJl0I3IWicpZRC4CdC0P5a/I07Ya2OAMEBU+J7GmRFVmIetqEYRko6QYRuKOESw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-export-default-from@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.0.0.tgz#084b639bce3d42f3c5bf3f68ccb42220bb2d729d" + integrity sha512-HNnjg/fFFbnuLAqr/Ocp1Y3GB4AjmXcu1xxn3ql3bS2kGrB/qi+Povshb8i3hOkE5jNozzh8r/0/lq1w8oOWbQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-flow@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.0.0.tgz#70638aeaad9ee426bc532e51523cff8ff02f6f17" + integrity sha512-zGcuZWiWWDa5qTZ6iAnpG0fnX/GOu49pGR5PFvkQ9GmKNaSphXQnlNXh/LG20sqWtNrx/eB6krzfEzcwvUyeFA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-flow@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz#a765f061f803bc48f240c26f8747faf97c26bf7c" + integrity sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-jsx@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.0.0.tgz#034d5e2b4e14ccaea2e4c137af7e4afb39375ffd" + integrity sha512-PdmL2AoPsCLWxhIr3kG2+F9v4WH06Q3z+NoGVpQgnUNGcagXHq5sB3OXxkSahKq9TLdNMN/AJzFYSOo8UKDMHg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.0.0.tgz#b60931d5a15da82625fff6657c39419969598743" + integrity sha512-oAJmMsAvTSIk9y0sZdU2S/nY44PEUuHN7EzNDMgbuR4e/OwyfR9lSmoBJBZ2lslFZIqhksrTt4i+av7uKfNYDw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-object-rest-spread@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0.tgz#37d8fbcaf216bd658ea1aebbeb8b75e88ebc549b" + integrity sha512-5A0n4p6bIiVe5OvQPxBnesezsgFJdHhSs3uFSvaPdMqtsovajLZ+G2vZyvNe10EzJBWWo3AcHGKhAFUxqwp2dw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0.tgz#886f72008b3a8b185977f7cb70713b45e51ee475" + integrity sha512-Wc+HVvwjcq5qBg1w5RG9o9RVzmCaAg/Vp0erHCKpAYV8La6I94o4GQAmFYNmkzoMO6gzoOSulpKeSSz6mPEoZw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-optional-chaining@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.0.0.tgz#1e6ecba124310b5d3a8fc1e00d50b1c4c2e05e68" + integrity sha512-QXedQsZf8yua1nNrXSePT0TsGSQH9A1iK08m9dhCMdZeJaaxYcQfXdgHWVV6Cp7WE/afPVvSKIsAHK5wP+yxDA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-typescript@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.0.0.tgz#90f4fe0a741ae9c0dcdc3017717c05a0cbbd5158" + integrity sha512-5fxmdqiAQVQTIS+KSvYeZuTt91wKtBTYi6JlIkvbQ6hmO+9fZE81ezxmMiFMIsxE7CdRSgzn7nQ1BChcvK9OpA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-arrow-functions@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0.tgz#a6c14875848c68a3b4b3163a486535ef25c7e749" + integrity sha512-2EZDBl1WIO/q4DIkIp4s86sdp4ZifL51MoIviLY/gG/mLSuOIEg7J8o6mhbxOTvUJkaN50n+8u41FVsr5KLy/w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-async-to-generator@^7.0.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.1.0.tgz#109e036496c51dd65857e16acab3bafdf3c57811" + integrity sha512-rNmcmoQ78IrvNCIt/R9U+cixUHeYAzgusTFgIAv+wQb9HJU4szhpDD6e5GCACmj/JP5KxuCwM96bX3L9v4ZN/g== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.1.0" + +"@babel/plugin-transform-block-scoped-functions@^7.0.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" + integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-block-scoping@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0.tgz#1745075edffd7cdaf69fab2fb6f9694424b7e9bc" + integrity sha512-GWEMCrmHQcYWISilUrk9GDqH4enf3UmhOEbNbNrlNAX1ssH3MsS1xLOS6rdjRVPgA7XXVPn87tRkdTEoA/dxEg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + lodash "^4.17.10" + +"@babel/plugin-transform-classes@^7.0.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.1.0.tgz#ab3f8a564361800cbc8ab1ca6f21108038432249" + integrity sha512-rNaqoD+4OCBZjM7VaskladgqnZ1LO6o2UxuWSDzljzW21pN1KXkB7BstAVweZdxQkHAujps5QMNOTWesBciKFg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-define-map" "^7.1.0" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.0.0" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0.tgz#2fbb8900cd3e8258f2a2ede909b90e7556185e31" + integrity sha512-ubouZdChNAv4AAWAgU7QKbB93NU5sHwInEWfp+/OzJKA02E6Woh9RVoX4sZrbRwtybky/d7baTUqwFx+HgbvMA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-destructuring@^7.0.0": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.1.2.tgz#5fa77d473f5a0a3f5266ad7ce2e8c995a164d60a" + integrity sha512-cvToXvp/OsYxtEn57XJu9BvsGSEYjAh9UeUuXpoi7x6QHB7YdWyQ4lRU/q0Fu1IJNT0o0u4FQ1DMQBzJ8/8vZg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-exponentiation-operator@^7.0.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.1.0.tgz#9c34c2ee7fd77e02779cfa37e403a2e1003ccc73" + integrity sha512-uZt9kD1Pp/JubkukOGQml9tqAeI8NkE98oZnHZ2qHRElmeKCodbTZgOEUtujSCSLhHSBWbzNiFSDIMC4/RBTLQ== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-flow-strip-types@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.0.0.tgz#c40ced34c2783985d90d9f9ac77a13e6fb396a01" + integrity sha512-WhXUNb4It5a19RsgKKbQPrjmy4yWOY1KynpEbNw7bnd1QTcrT/EIl3MJvnGgpgvrKyKbqX7nUNOJfkpLOnoDKA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.0.0" + +"@babel/plugin-transform-for-of@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0.tgz#f2ba4eadb83bd17dc3c7e9b30f4707365e1c3e39" + integrity sha512-TlxKecN20X2tt2UEr2LNE6aqA0oPeMT1Y3cgz8k4Dn1j5ObT8M3nl9aA37LLklx0PBZKETC9ZAf9n/6SujTuXA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-function-name@^7.0.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.1.0.tgz#29c5550d5c46208e7f730516d41eeddd4affadbb" + integrity sha512-VxOa1TMlFMtqPW2IDYZQaHsFrq/dDoIjgN098NowhexhZcz3UGlvPgZXuE1jEvNygyWyxRacqDpCZt+par1FNg== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-literals@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0.tgz#2aec1d29cdd24c407359c930cdd89e914ee8ff86" + integrity sha512-1NTDBWkeNXgpUcyoVFxbr9hS57EpZYXpje92zv0SUzjdu3enaRwF/l3cmyRnXLtIdyJASyiS6PtybK+CgKf7jA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-member-expression-literals@^7.0.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz#fa10aa5c58a2cb6afcf2c9ffa8cb4d8b3d489a2d" + integrity sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-modules-commonjs@^7.0.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.1.0.tgz#0a9d86451cbbfb29bd15186306897c67f6f9a05c" + integrity sha512-wtNwtMjn1XGwM0AXPspQgvmE6msSJP15CX2RVfpTSTNPLhKhaOjaIfBaVfj4iUZ/VrFSodcFedwtPg/NxwQlPA== + dependencies: + "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-simple-access" "^7.1.0" + +"@babel/plugin-transform-object-assign@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.0.0.tgz#fca6d7500d9675c42868b8f3882979201b9a5ad8" + integrity sha512-Dag8mxx7/03oj8F8PkNso8GEMhwGfeT0TL6KfMsa9Brjx4IpwZVl3WBvEmYks8BMhPmrvM5NQ/tjaMbwEj5ijA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-object-super@^7.0.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz#b35d4c10f56bab5d650047dad0f1d8e8814b6598" + integrity sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.1.0" + +"@babel/plugin-transform-parameters@^7.0.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.1.0.tgz#44f492f9d618c9124026e62301c296bf606a7aed" + integrity sha512-vHV7oxkEJ8IHxTfRr3hNGzV446GAb+0hgbA7o/0Jd76s+YzccdWuTU296FOCOl/xweU4t/Ya4g41yWz80RFCRw== + dependencies: + "@babel/helper-call-delegate" "^7.1.0" + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-property-literals@^7.0.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz#03e33f653f5b25c4eb572c98b9485055b389e905" + integrity sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-react-display-name@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.0.0.tgz#93759e6c023782e52c2da3b75eca60d4f10533ee" + integrity sha512-BX8xKuQTO0HzINxT6j/GiCwoJB0AOMs0HmLbEnAvcte8U8rSkNa/eSCAY+l1OA4JnCVq2jw2p6U8QQryy2fTPg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-react-jsx-source@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.0.0.tgz#28e00584f9598c0dd279f6280eee213fa0121c3c" + integrity sha512-OSeEpFJEH5dw/TtxTg4nijl4nHBbhqbKL94Xo/Y17WKIf2qJWeIk/QeXACF19lG1vMezkxqruwnTjVizaW7u7w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.0.0" + +"@babel/plugin-transform-react-jsx@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.0.0.tgz#524379e4eca5363cd10c4446ba163f093da75f3e" + integrity sha512-0TMP21hXsSUjIQJmu/r7RiVxeFrXRcMUigbKu0BLegJK9PkYodHstaszcig7zxXfaBji2LYUdtqIkHs+hgYkJQ== + dependencies: + "@babel/helper-builder-react-jsx" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.0.0" + +"@babel/plugin-transform-regenerator@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz#5b41686b4ed40bef874d7ed6a84bdd849c13e0c1" + integrity sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw== + dependencies: + regenerator-transform "^0.13.3" + +"@babel/plugin-transform-runtime@^7.0.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.1.0.tgz#9f76920d42551bb577e2dc594df229b5f7624b63" + integrity sha512-WFLMgzu5DLQEah0lKTJzYb14vd6UiES7PTnXcvrPZ1VrwFeJ+mTbvr65fFAsXYMt2bIoOoC0jk76zY1S7HZjUg== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + resolve "^1.8.1" + semver "^5.5.1" + +"@babel/plugin-transform-shorthand-properties@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0.tgz#85f8af592dcc07647541a0350e8c95c7bf419d15" + integrity sha512-g/99LI4vm5iOf5r1Gdxq5Xmu91zvjhEG5+yZDJW268AZELAu4J1EiFLnkSG3yuUsZyOipVOVUKoGPYwfsTymhw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-spread@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0.tgz#93583ce48dd8c85e53f3a46056c856e4af30b49b" + integrity sha512-L702YFy2EvirrR4shTj0g2xQp7aNwZoWNCkNu2mcoU0uyzMl0XRwDSwzB/xp6DSUFiBmEXuyAyEN16LsgVqGGQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-sticky-regex@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0.tgz#30a9d64ac2ab46eec087b8530535becd90e73366" + integrity sha512-LFUToxiyS/WD+XEWpkx/XJBrUXKewSZpzX68s+yEOtIbdnsRjpryDw9U06gYc6klYEij/+KQVRnD3nz3AoKmjw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" + +"@babel/plugin-transform-template-literals@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0.tgz#084f1952efe5b153ddae69eb8945f882c7a97c65" + integrity sha512-vA6rkTCabRZu7Nbl9DfLZE1imj4tzdWcg5vtdQGvj+OH9itNNB6hxuRMHuIY8SGnEt1T9g5foqs9LnrHzsqEFg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-typescript@^7.0.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.1.0.tgz#81e7b4be90e7317cbd04bf1163ebf06b2adee60b" + integrity sha512-TOTtVeT+fekAesiCHnPz+PSkYSdOSLyLn42DI45nxg6iCdlQY6LIj/tYqpMB0y+YicoTUiYiXqF8rG6SKfhw6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-typescript" "^7.0.0" + +"@babel/plugin-transform-unicode-regex@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0.tgz#c6780e5b1863a76fe792d90eded9fcd5b51d68fc" + integrity sha512-uJBrJhBOEa3D033P95nPHu3nbFwFE9ZgXsfEitzoIXIwqAZWk7uXcg06yFKXz9FSxBH5ucgU/cYdX0IV8ldHKw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" + regexpu-core "^4.1.3" + +"@babel/register@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.0.0.tgz#fa634bae1bfa429f60615b754fc1f1d745edd827" + integrity sha512-f/+CRmaCe7rVEvcvPvxeA8j5aJhHC3aJie7YuqcMDhUOuyWLA7J/aNrTaHIzoWPEhpHA54mec4Mm8fv8KBlv3g== + dependencies: + core-js "^2.5.7" + find-cache-dir "^1.0.0" + home-or-tmp "^3.0.0" + lodash "^4.17.10" + mkdirp "^0.5.1" + pirates "^4.0.0" + source-map-support "^0.5.9" + +"@babel/runtime@^7.0.0": + version "7.4.3" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.3.tgz#79888e452034223ad9609187a0ad1fe0d2ad4bdc" + integrity sha512-9lsJwJLxDh/T3Q3SZszfWOTkk3pHbkmH+3KY+zwIDmsNlxsumuhS2TH3NIpktU4kNvfzy+k3eLT7aTJSPTo0OA== + dependencies: + regenerator-runtime "^0.13.2" + +"@babel/runtime@^7.1.2": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.1.2.tgz#81c89935f4647706fc54541145e6b4ecfef4b8e3" + integrity sha512-Y3SCjmhSupzFB6wcv1KmmFucH6gDVnI30WjOcicV10ju0cZjak3Jcs67YLIXBrmZYw1xCrVeJPbycFwrqNyxpg== + dependencies: + regenerator-runtime "^0.12.0" + +"@babel/template@^7.0.0", "@babel/template@^7.1.0", "@babel/template@^7.1.2": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.1.2.tgz#090484a574fef5a2d2d7726a674eceda5c5b5644" + integrity sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.1.2" + "@babel/types" "^7.1.2" + +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.0.tgz#503ec6669387efd182c3888c4eec07bcc45d91b2" + integrity sha512-bwgln0FsMoxm3pLOgrrnGaXk18sSM9JNf1/nHC/FksmNGFbYnPWY4GYCfLxyP1KRmfsxqkRpfoa6xr6VuuSxdw== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.0.0" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.0.0" + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + debug "^3.1.0" + globals "^11.1.0" + lodash "^4.17.10" + +"@babel/types@^7.0.0", "@babel/types@^7.1.2": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.1.2.tgz#183e7952cf6691628afdc2e2b90d03240bac80c0" + integrity sha512-pb1I05sZEKiSlMUV9UReaqsCPUpgbHHHu2n1piRm7JkuBkm6QxcaIzKu6FMnMtCbih/cEYTR+RGYYC96Yk9HAg== + dependencies: + esutils "^2.0.2" + lodash "^4.17.10" + to-fast-properties "^2.0.0" + +"@react-native-community/cli@^1.2.1": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-1.6.0.tgz#889fbb1eff961945df28bb7e896dcee8516b010f" + integrity sha512-OV3N5O/wzjb8OTZDiFerX0gf9/KzLJOvDttU38BqIvn8+OLkH6SIgGrKked9vrKKvH5bFG6jmCmKCW5gP+tOwQ== + dependencies: + chalk "^1.1.1" + commander "^2.19.0" + compression "^1.7.1" + connect "^3.6.5" + denodeify "^1.2.1" + envinfo "^5.7.0" + errorhandler "^1.5.0" + escape-string-regexp "^1.0.5" + execa "^1.0.0" + fs-extra "^7.0.1" + glob "^7.1.1" + graceful-fs "^4.1.3" + inquirer "^3.0.6" + lodash "^4.17.5" + metro "^0.51.0" + metro-config "^0.51.0" + metro-core "^0.51.0" + metro-memory-fs "^0.51.0" + metro-react-native-babel-transformer "^0.51.0" + mime "^1.3.4" + minimist "^1.2.0" + mkdirp "^0.5.1" + morgan "^1.9.0" + node-fetch "^2.2.0" + node-notifier "^5.2.1" + opn "^3.0.2" + plist "^3.0.0" + semver "^5.0.3" + serve-static "^1.13.1" + shell-quote "1.6.1" + slash "^2.0.0" + ws "^1.1.0" + xcode "^2.0.0" + xmldoc "^0.4.0" + +abab@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" + integrity sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +absolute-path@^0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/absolute-path/-/absolute-path-0.0.0.tgz#a78762fbdadfb5297be99b15d35a785b2f095bf7" + integrity sha1-p4di+9rftSl76ZsV01p4Wy8JW/c= + +accepts@~1.3.3, accepts@~1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" + integrity sha1-63d99gEXI6OxTopywIBcjoZ0a9I= + dependencies: + mime-types "~2.1.18" + negotiator "0.6.1" + +acorn-globals@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.0.tgz#e3b6f8da3c1552a95ae627571f7dd6923bb54103" + integrity sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw== + dependencies: + acorn "^6.0.1" + acorn-walk "^6.0.1" + +acorn-walk@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.0.tgz#c957f4a1460da46af4a0388ce28b4c99355b0cbc" + integrity sha512-ugTb7Lq7u4GfWSqqpwE0bGyoBZNMTok/zDBXxfEG0QM50jNlGhIWjRC1pPN7bvV1anhF+bs+/gNcRw+o55Evbg== + +acorn@^5.5.3: + version "5.7.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" + integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== + +acorn@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.2.tgz#6a459041c320ab17592c6317abbfdf4bbaa98ca4" + integrity sha512-GXmKIvbrN3TV7aVqAzVFaMW8F8wzVX7voEBRO3bDA64+EX37YSayggRJP5Xig6HYHBkWKpFg9W5gg6orklubhg== + +ajv@^5.3.0: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + +ansi-colors@^1.0.1: + version "1.1.0" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" + integrity sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA== + dependencies: + ansi-wrap "^0.1.0" + +ansi-cyan@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-cyan/-/ansi-cyan-0.1.1.tgz#538ae528af8982f28ae30d86f2f17456d2609873" + integrity sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM= + dependencies: + ansi-wrap "0.1.0" + +ansi-escapes@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" + integrity sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw== + +ansi-gray@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" + integrity sha1-KWLPVOyXksSFEKPetSRDaGHvclE= + dependencies: + ansi-wrap "0.1.0" + +ansi-red@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-red/-/ansi-red-0.1.1.tgz#8c638f9d1080800a353c9c28c8a81ca4705d946c" + integrity sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw= + dependencies: + ansi-wrap "0.1.0" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-wrap@0.1.0, ansi-wrap@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" + integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= + +ansi@^0.3.0, ansi@~0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/ansi/-/ansi-0.3.1.tgz#0c42d4fb17160d5a9af1e484bace1c66922c1b21" + integrity sha1-DELU+xcWDVqa8eSEus4cZpIsGyE= + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +append-transform@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" + integrity sha1-126/jKlNJ24keja61EpLdKthGZE= + dependencies: + default-require-extensions "^1.0.0" + +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-1.1.0.tgz#687c32758163588fef7de7b36fabe495eb1a399a" + integrity sha1-aHwydYFjWI/vfeezb6vklesaOZo= + dependencies: + arr-flatten "^1.0.1" + array-slice "^0.2.3" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8= + dependencies: + arr-flatten "^1.0.1" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.0.1, arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-2.1.0.tgz#20f9eab5ec70f5c7d215b1077b1c39161d292c7d" + integrity sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0= + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= + +array-filter@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" + integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw= + +array-map@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" + integrity sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI= + +array-reduce@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys= + +array-slice@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" + integrity sha1-3Tz7gO15c6dRF82sabC5nshhhvU= + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + +art@^0.10.0: + version "0.10.3" + resolved "https://registry.yarnpkg.com/art/-/art-0.10.3.tgz#b01d84a968ccce6208df55a733838c96caeeaea2" + integrity sha512-HXwbdofRTiJT6qZX/FnchtldzJjS3vkLJxQilc3Xj+ma2MXjY4UAyQ0ls1XZYVnDvVIBiFZbC6QsvtW86TD6tQ== + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +async-limiter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== + +async@^2.1.4, async@^2.4.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" + integrity sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ== + dependencies: + lodash "^4.17.10" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +atob@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" + integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== + +babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@^6.0.0, babel-core@^6.26.0: + version "6.26.3" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" + integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.1" + debug "^2.6.9" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.8" + slash "^1.0.0" + source-map "^0.5.7" + +babel-generator@^6.18.0, babel-generator@^6.26.0: + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-jest@23.6.0, babel-jest@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-23.6.0.tgz#a644232366557a2240a0c083da6b25786185a2f1" + integrity sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew== + dependencies: + babel-plugin-istanbul "^4.1.6" + babel-preset-jest "^23.2.0" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-istanbul@^4.1.6: + version "4.1.6" + resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" + integrity sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ== + dependencies: + babel-plugin-syntax-object-rest-spread "^6.13.0" + find-up "^2.1.0" + istanbul-lib-instrument "^1.10.1" + test-exclude "^4.2.1" + +babel-plugin-jest-hoist@^23.2.0: + version "23.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz#e61fae05a1ca8801aadee57a6d66b8cefaf44167" + integrity sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc= + +babel-plugin-syntax-object-rest-spread@^6.13.0: + version "6.13.0" + resolved "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= + +babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf" + integrity sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ== + +babel-preset-fbjs@^3.0.1, babel-preset-fbjs@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-3.2.0.tgz#c0e6347d3e0379ed84b3c2434d3467567aa05297" + integrity sha512-5Jo+JeWiVz2wHUUyAlvb/sSYnXNig9r+HqGAOSfh5Fzxp7SnAaR/tEGRJ1ZX7C77kfk82658w6R5Z+uPATTD9g== + dependencies: + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-syntax-class-properties" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-block-scoped-functions" "^7.0.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + "@babel/plugin-transform-for-of" "^7.0.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-member-expression-literals" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-object-super" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-property-literals" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-template-literals" "^7.0.0" + babel-plugin-syntax-trailing-function-commas "^7.0.0-beta.0" + +babel-preset-jest@^23.2.0: + version "23.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz#8ec7a03a138f001a1a8fb1e8113652bf1a55da46" + integrity sha1-jsegOhOPABoaj7HoETZSvxpV2kY= + dependencies: + babel-plugin-jest-hoist "^23.2.0" + babel-plugin-syntax-object-rest-spread "^6.13.0" + +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.0.0, babel-traverse@^6.18.0, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babel@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel/-/babel-6.23.0.tgz#d0d1e7d803e974765beea3232d4e153c0efb90f4" + integrity sha1-0NHn2APpdHZb7qMjLU4VPA77kPQ= + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-js@^1.1.2, base64-js@^1.2.3: + version "1.3.0" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" + integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +basic-auth@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" + integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== + dependencies: + safe-buffer "5.1.2" + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +big-integer@^1.6.7: + version "1.6.36" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.36.tgz#78631076265d4ae3555c04f85e7d9d2f3a071a36" + integrity sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg== + +bplist-creator@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.7.tgz#37df1536092824b87c42f957b01344117372ae45" + integrity sha1-N98VNgkoJLh8QvlXsBNEEXNyrkU= + dependencies: + stream-buffers "~2.2.0" + +bplist-parser@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.1.1.tgz#d60d5dcc20cba6dc7e1f299b35d3e1f95dafbae6" + integrity sha1-1g1dzCDLptx+HymbNdPh+V2vuuY= + dependencies: + big-integer "^1.6.7" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc= + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +browser-process-hrtime@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" + integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw== + +browser-resolve@^1.11.3: + version "1.11.3" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" + integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== + dependencies: + resolve "1.1.7" + +bser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" + integrity sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk= + dependencies: + node-int64 "^0.4.0" + +buffer-crc32@^0.2.13: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +builtin-modules@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + +capture-exit@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f" + integrity sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28= + dependencies: + rsvp "^3.3.3" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + 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" + +chalk@^2.0.0, chalk@^2.0.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" + integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chardet@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= + +chownr@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" + integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== + +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +combined-stream@1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" + integrity sha1-cj599ugBrFYTETp+RFqbactjKBg= + dependencies: + delayed-stream "~1.0.0" + +combined-stream@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" + integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.19.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" + integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + +commander@^2.9.0: + version "2.18.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970" + integrity sha512-6CYPa+JP2ftfRU2qkDK+UTVeQYosOg/2GbcjIcKPHfinyOLPVGXu/ovN86RP49Re5ndJK1N0kuiidFFuepc4ZQ== + +commander@~2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" + integrity sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA== + +commander@~2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-emitter@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= + +compressible@~2.0.14: + version "2.0.15" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.15.tgz#857a9ab0a7e5a07d8d837ed43fe2defff64fe212" + integrity sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw== + dependencies: + mime-db ">= 1.36.0 < 2" + +compression@^1.7.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.3.tgz#27e0e176aaf260f7f2c2813c3e440adb9f1993db" + integrity sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.14" + debug "2.6.9" + on-headers "~1.0.1" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +connect@^3.6.5: + version "3.6.6" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.6.tgz#09eff6c55af7236e137135a72574858b6786f524" + integrity sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ= + dependencies: + debug "2.6.9" + finalhandler "1.1.0" + parseurl "~1.3.2" + utils-merge "1.0.1" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" + integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== + dependencies: + safe-buffer "~5.1.1" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-js@^1.0.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= + +core-js@^2.2.2, core-js@^2.4.0, core-js@^2.4.1, core-js@^2.5.0, core-js@^2.5.7: + version "2.5.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" + integrity sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw== + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^5.0.5: + version "5.0.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.6.tgz#dca6cf680a0bd03589aff684700858c81abeeb39" + integrity sha512-6DWfizHriCrFWURP1/qyhsiFvYdlJzbCzmtFWh744+KyWsJo5+kPzUZZaMRSSItoYc0pxFX7gEO7ZC1/gN/7AQ== + dependencies: + is-directory "^0.3.1" + js-yaml "^3.9.0" + parse-json "^4.0.0" + +create-react-class@^15.6.3: + version "15.6.3" + resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036" + integrity sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg== + dependencies: + fbjs "^0.8.9" + loose-envify "^1.3.1" + object-assign "^4.1.1" + +cross-spawn@^5.0.1, cross-spawn@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": + version "0.3.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797" + integrity sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog== + +cssstyle@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.1.1.tgz#18b038a9c44d65f7a8e428a653b9f6fe42faf5fb" + integrity sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog== + dependencies: + cssom "0.3.x" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +data-urls@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.0.1.tgz#d416ac3896918f29ca84d81085bc3705834da579" + integrity sha512-0HdcMZzK6ubMUnsMmQmG0AcLQPvbvb47R0+7CCZQCYgcd8OUWG91CG7sM6GoXgjz+WLl4ArFzHtBMy/QqSF4eg== + dependencies: + abab "^2.0.0" + whatwg-mimetype "^2.1.0" + whatwg-url "^7.0.0" + +debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.1.0: + version "3.2.5" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.5.tgz#c2418fbfd7a29f4d4f70ff4cea604d4b64c46407" + integrity sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg== + dependencies: + ms "^2.1.1" + +decamelize@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +default-require-extensions@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" + integrity sha1-836hXT4T/9m0N9M+GnW1+5eHTLg= + dependencies: + strip-bom "^2.0.0" + +define-properties@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +denodeify@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631" + integrity sha1-OjYof1A05pnnV3kBBSwubJQlFjE= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= + dependencies: + repeating "^2.0.0" + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + +detect-newline@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= + +diff@^3.2.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== + +dom-walk@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" + integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg= + +domexception@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== + dependencies: + webidl-conversions "^4.0.2" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +encodeurl@~1.0.1, encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= + dependencies: + iconv-lite "~0.4.13" + +end-of-stream@^1.1.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== + dependencies: + once "^1.4.0" + +envinfo@^5.7.0: + version "5.10.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-5.10.0.tgz#503a9774ae15b93ea68bdfae2ccd6306624ea6df" + integrity sha512-rXbzXWvnQxy+TcqZlARbWVQwgGVVouVJgFZhLVN5htjLxl1thstrP2ZGi0pXC309AbK7gVOPU+ulz/tmpCI7iw== + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +errorhandler@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/errorhandler/-/errorhandler-1.5.0.tgz#eaba64ca5d542a311ac945f582defc336165d9f4" + integrity sha1-6rpkyl1UKjEayUX1gt78M2Fl2fQ= + dependencies: + accepts "~1.3.3" + escape-html "~1.0.3" + +es-abstract@^1.5.1: + version "1.12.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" + integrity sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA== + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.1" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" + +es-to-primitive@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" + integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escodegen@^1.9.1: + version "1.11.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" + integrity sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw== + dependencies: + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +esprima@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +estraverse@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= + +esutils@^2.0.0, esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +event-target-shim@^1.0.5: + version "1.1.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-1.1.1.tgz#a86e5ee6bdaa16054475da797ccddf0c55698491" + integrity sha1-qG5e5r2qFgVEddp5fM3fDFVphJE= + +eventemitter3@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" + integrity sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA== + +exec-sh@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36" + integrity sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw== + dependencies: + merge "^1.2.0" + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s= + dependencies: + is-posix-bracket "^0.1.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc= + dependencies: + fill-range "^2.1.0" + +expect@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-23.6.0.tgz#1e0c8d3ba9a581c87bd71fb9bc8862d443425f98" + integrity sha512-dgSoOHgmtn/aDGRVFWclQyPDKl2CQRq0hmIEoUAuQs/2rn2NcvCWcSCovm6BLeuB/7EZuLGu2QfnR+qRt5OM4w== + dependencies: + ansi-styles "^3.2.0" + jest-diff "^23.6.0" + jest-get-type "^22.1.0" + jest-matcher-utils "^23.6.0" + jest-message-util "^23.4.0" + jest-regex-util "^23.3.0" + +extend-shallow@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-1.1.4.tgz#19d6bf94dfc09d76ba711f39b872d21ff4dd9071" + integrity sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE= + dependencies: + kind-of "^1.1.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^2.0.4: + version "2.2.0" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" + integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== + dependencies: + chardet "^0.4.0" + iconv-lite "^0.4.17" + tmp "^0.0.33" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE= + dependencies: + is-extglob "^1.0.0" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fancy-log@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.2.tgz#f41125e3d84f2e7d89a43d06d958c8f78be16be1" + integrity sha1-9BEl49hPLn2JpD0G2VjI94vha+E= + dependencies: + ansi-gray "^0.1.1" + color-support "^1.1.3" + time-stamp "^1.0.0" + +fast-deep-equal@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" + integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fb-watchman@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + integrity sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg= + dependencies: + bser "^2.0.0" + +fbjs-css-vars@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" + integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== + +fbjs-scripts@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fbjs-scripts/-/fbjs-scripts-1.2.0.tgz#069a0c0634242d10031c6460ef1fccefcdae8b27" + integrity sha512-5krZ8T0Bf8uky0abPoCLrfa7Orxd8UH4Qq8hRUF2RZYNMu+FmEOrBc7Ib3YVONmxTXTlLAvyrrdrVmksDb2OqQ== + dependencies: + "@babel/core" "^7.0.0" + ansi-colors "^1.0.1" + babel-preset-fbjs "^3.2.0" + core-js "^2.4.1" + cross-spawn "^5.1.0" + fancy-log "^1.3.2" + object-assign "^4.0.1" + plugin-error "^0.1.2" + semver "^5.1.0" + through2 "^2.0.0" + +fbjs@^0.8.9: + version "0.8.17" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" + integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= + dependencies: + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.18" + +fbjs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-1.0.0.tgz#52c215e0883a3c86af2a7a776ed51525ae8e0a5a" + integrity sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA== + dependencies: + core-js "^2.4.1" + fbjs-css-vars "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.18" + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + +filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= + +fileset@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + integrity sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA= + dependencies: + glob "^7.0.3" + minimatch "^3.0.3" + +fill-range@^2.1.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" + integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q== + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^3.0.0" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +finalhandler@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" + integrity sha1-zgtoVbRYU+eRsvzGgARtiCU91/U= + dependencies: + debug "2.6.9" + encodeurl "~1.0.1" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.2" + statuses "~1.3.1" + unpipe "~1.0.0" + +find-cache-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" + integrity sha1-kojj6ePMN0hxfTnq3hfPcfww7m8= + dependencies: + commondir "^1.0.1" + make-dir "^1.0.0" + pkg-dir "^2.0.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +for-in@^1.0.1, for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= + dependencies: + for-in "^1.0.1" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" + integrity sha1-SXBJi+YEwgwAXU9cI67NIda0kJk= + dependencies: + asynckit "^0.4.0" + combined-stream "1.0.6" + mime-types "^2.1.12" + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +fs-extra@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" + integrity sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA= + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" + integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ== + dependencies: + minipass "^2.2.1" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" + integrity sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg== + dependencies: + nan "^2.9.2" + node-pre-gyp "^0.10.0" + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gauge@~1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-1.2.7.tgz#e9cec5483d3d4ee0ef44b60a7d99e4935e136d93" + integrity sha1-6c7FSD09TuDvRLYKfZnkk14TbZM= + dependencies: + ansi "^0.3.0" + has-unicode "^2.0.0" + lodash.pad "^4.1.0" + lodash.padend "^4.1.0" + lodash.padstart "^4.1.0" + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= + dependencies: + is-glob "^2.0.0" + +glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" + integrity sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8= + dependencies: + min-document "^2.19.0" + process "~0.5.1" + +globals@^11.1.0: + version "11.7.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.7.0.tgz#a583faa43055b1aca771914bf68258e2fc125673" + integrity sha512-K8BNSPySfeShBQXsahYB/AbbWruVOTyVpgoIDnl8odPpeSfP2J5QO2oLFFdl2j7GfDCtZj2bMKar2T49itTPCg== + +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== + +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg= + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= + +handlebars@^4.0.3: + version "4.5.3" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482" + integrity sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA== + dependencies: + neo-async "^2.6.0" + optimist "^0.6.1" + source-map "^0.6.1" + optionalDependencies: + uglify-js "^3.1.4" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.0.tgz#44657f5688a22cfd4b72486e81b3a3fb11742c29" + integrity sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA== + dependencies: + ajv "^5.3.0" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +home-or-tmp@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-3.0.0.tgz#57a8fe24cf33cdd524860a15821ddc25c86671fb" + integrity sha1-V6j+JM8zzdUkhgoVgh3cJchmcfs= + +hosted-git-info@^2.1.4: + version "2.7.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" + integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== + +html-encoding-sniffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== + dependencies: + whatwg-encoding "^1.0.1" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.4, iconv-lite@~0.4.13: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore-walk@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== + dependencies: + minimatch "^3.0.4" + +image-size@^0.6.0: + version "0.6.3" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.6.3.tgz#e7e5c65bb534bd7cdcedd6cb5166272a85f75fb2" + integrity sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA== + +import-local@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" + integrity sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ== + dependencies: + pkg-dir "^2.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.3, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +inquirer@^3.0.6: + version "3.3.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" + integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.0.4" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rx-lite "^4.0.8" + rx-lite-aggregates "^4.0.8" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + +invariant@^2.2.2, invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74= + dependencies: + builtin-modules "^1.0.0" + +is-callable@^1.1.3, is-callable@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== + +is-ci@^1.0.10: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + dependencies: + ci-info "^1.5.0" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-dotfile@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ= + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-generator-fn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" + integrity sha1-lp1J4bszKfa7fwkIm+JleLLd1Go= + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= + dependencies: + is-extglob "^1.0.0" + +is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8= + dependencies: + kind-of "^3.0.2" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== + +is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= + +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= + +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= + dependencies: + has "^1.0.1" + +is-stream@^1.0.1, is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-symbol@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" + integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== + dependencies: + has-symbols "^1.0.0" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isomorphic-fetch@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +istanbul-api@^1.3.1: + version "1.3.7" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.7.tgz#a86c770d2b03e11e3f778cd7aedd82d2722092aa" + integrity sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA== + dependencies: + async "^2.1.4" + fileset "^2.0.2" + istanbul-lib-coverage "^1.2.1" + istanbul-lib-hook "^1.2.2" + istanbul-lib-instrument "^1.10.2" + istanbul-lib-report "^1.1.5" + istanbul-lib-source-maps "^1.2.6" + istanbul-reports "^1.5.1" + js-yaml "^3.7.0" + mkdirp "^0.5.1" + once "^1.4.0" + +istanbul-lib-coverage@^1.2.0, istanbul-lib-coverage@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0" + integrity sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ== + +istanbul-lib-hook@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz#bc6bf07f12a641fbf1c85391d0daa8f0aea6bf86" + integrity sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw== + dependencies: + append-transform "^0.4.0" + +istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca" + integrity sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A== + dependencies: + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.18.0" + istanbul-lib-coverage "^1.2.1" + semver "^5.3.0" + +istanbul-lib-report@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c" + integrity sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw== + dependencies: + istanbul-lib-coverage "^1.2.1" + mkdirp "^0.5.1" + path-parse "^1.0.5" + supports-color "^3.1.2" + +istanbul-lib-source-maps@^1.2.4, istanbul-lib-source-maps@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz#37b9ff661580f8fca11232752ee42e08c6675d8f" + integrity sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg== + dependencies: + debug "^3.1.0" + istanbul-lib-coverage "^1.2.1" + mkdirp "^0.5.1" + rimraf "^2.6.1" + source-map "^0.5.3" + +istanbul-reports@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a" + integrity sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw== + dependencies: + handlebars "^4.0.3" + +jest-changed-files@^23.4.2: + version "23.4.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-23.4.2.tgz#1eed688370cd5eebafe4ae93d34bb3b64968fe83" + integrity sha512-EyNhTAUWEfwnK0Is/09LxoqNDOn7mU7S3EHskG52djOFS/z+IT0jT3h3Ql61+dklcG7bJJitIWEMB4Sp1piHmA== + dependencies: + throat "^4.0.0" + +jest-cli@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-23.6.0.tgz#61ab917744338f443ef2baa282ddffdd658a5da4" + integrity sha512-hgeD1zRUp1E1zsiyOXjEn4LzRLWdJBV//ukAHGlx6s5mfCNJTbhbHjgxnDUXA8fsKWN/HqFFF6X5XcCwC/IvYQ== + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.1.11" + import-local "^1.0.0" + is-ci "^1.0.10" + istanbul-api "^1.3.1" + istanbul-lib-coverage "^1.2.0" + istanbul-lib-instrument "^1.10.1" + istanbul-lib-source-maps "^1.2.4" + jest-changed-files "^23.4.2" + jest-config "^23.6.0" + jest-environment-jsdom "^23.4.0" + jest-get-type "^22.1.0" + jest-haste-map "^23.6.0" + jest-message-util "^23.4.0" + jest-regex-util "^23.3.0" + jest-resolve-dependencies "^23.6.0" + jest-runner "^23.6.0" + jest-runtime "^23.6.0" + jest-snapshot "^23.6.0" + jest-util "^23.4.0" + jest-validate "^23.6.0" + jest-watcher "^23.4.0" + jest-worker "^23.2.0" + micromatch "^2.3.11" + node-notifier "^5.2.1" + prompts "^0.1.9" + realpath-native "^1.0.0" + rimraf "^2.5.4" + slash "^1.0.0" + string-length "^2.0.0" + strip-ansi "^4.0.0" + which "^1.2.12" + yargs "^11.0.0" + +jest-config@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-23.6.0.tgz#f82546a90ade2d8c7026fbf6ac5207fc22f8eb1d" + integrity sha512-i8V7z9BeDXab1+VNo78WM0AtWpBRXJLnkT+lyT+Slx/cbP5sZJ0+NDuLcmBE5hXAoK0aUp7vI+MOxR+R4d8SRQ== + dependencies: + babel-core "^6.0.0" + babel-jest "^23.6.0" + chalk "^2.0.1" + glob "^7.1.1" + jest-environment-jsdom "^23.4.0" + jest-environment-node "^23.4.0" + jest-get-type "^22.1.0" + jest-jasmine2 "^23.6.0" + jest-regex-util "^23.3.0" + jest-resolve "^23.6.0" + jest-util "^23.4.0" + jest-validate "^23.6.0" + micromatch "^2.3.11" + pretty-format "^23.6.0" + +jest-diff@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.6.0.tgz#1500f3f16e850bb3d71233408089be099f610c7d" + integrity sha512-Gz9l5Ov+X3aL5L37IT+8hoCUsof1CVYBb2QEkOupK64XyRR3h+uRpYIm97K7sY8diFxowR8pIGEdyfMKTixo3g== + dependencies: + chalk "^2.0.1" + diff "^3.2.0" + jest-get-type "^22.1.0" + pretty-format "^23.6.0" + +jest-docblock@^23.2.0: + version "23.2.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-23.2.0.tgz#f085e1f18548d99fdd69b20207e6fd55d91383a7" + integrity sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c= + dependencies: + detect-newline "^2.1.0" + +jest-each@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-23.6.0.tgz#ba0c3a82a8054387016139c733a05242d3d71575" + integrity sha512-x7V6M/WGJo6/kLoissORuvLIeAoyo2YqLOoCDkohgJ4XOXSqOtyvr8FbInlAWS77ojBsZrafbozWoKVRdtxFCg== + dependencies: + chalk "^2.0.1" + pretty-format "^23.6.0" + +jest-environment-jsdom@^23.4.0: + version "23.4.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz#056a7952b3fea513ac62a140a2c368c79d9e6023" + integrity sha1-BWp5UrP+pROsYqFAosNox52eYCM= + dependencies: + jest-mock "^23.2.0" + jest-util "^23.4.0" + jsdom "^11.5.1" + +jest-environment-node@^23.4.0: + version "23.4.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-23.4.0.tgz#57e80ed0841dea303167cce8cd79521debafde10" + integrity sha1-V+gO0IQd6jAxZ8zozXlSHeuv3hA= + dependencies: + jest-mock "^23.2.0" + jest-util "^23.4.0" + +jest-get-type@^22.1.0: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" + integrity sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w== + +jest-haste-map@24.0.0-alpha.6: + version "24.0.0-alpha.6" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.0.0-alpha.6.tgz#fb2c785080f391b923db51846b86840d0d773076" + integrity sha512-+NO2HMbjvrG8BC39ieLukdpFrcPhhjCJGhpbHodHNZygH1Tt06WrlNYGpZtWKx/zpf533tCtMQXO/q59JenjNw== + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.11" + invariant "^2.2.4" + jest-serializer "^24.0.0-alpha.6" + jest-worker "^24.0.0-alpha.6" + micromatch "^2.3.11" + sane "^3.0.0" + +jest-haste-map@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-23.6.0.tgz#2e3eb997814ca696d62afdb3f2529f5bbc935e16" + integrity sha512-uyNhMyl6dr6HaXGHp8VF7cK6KpC6G9z9LiMNsst+rJIZ8l7wY0tk8qwjPmEghczojZ2/ZhtEdIabZ0OQRJSGGg== + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.11" + invariant "^2.2.4" + jest-docblock "^23.2.0" + jest-serializer "^23.0.1" + jest-worker "^23.2.0" + micromatch "^2.3.11" + sane "^2.0.0" + +jest-jasmine2@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-23.6.0.tgz#840e937f848a6c8638df24360ab869cc718592e0" + integrity sha512-pe2Ytgs1nyCs8IvsEJRiRTPC0eVYd8L/dXJGU08GFuBwZ4sYH/lmFDdOL3ZmvJR8QKqV9MFuwlsAi/EWkFUbsQ== + dependencies: + babel-traverse "^6.0.0" + chalk "^2.0.1" + co "^4.6.0" + expect "^23.6.0" + is-generator-fn "^1.0.0" + jest-diff "^23.6.0" + jest-each "^23.6.0" + jest-matcher-utils "^23.6.0" + jest-message-util "^23.4.0" + jest-snapshot "^23.6.0" + jest-util "^23.4.0" + pretty-format "^23.6.0" + +jest-leak-detector@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-23.6.0.tgz#e4230fd42cf381a1a1971237ad56897de7e171de" + integrity sha512-f/8zA04rsl1Nzj10HIyEsXvYlMpMPcy0QkQilVZDFOaPbv2ur71X5u2+C4ZQJGyV/xvVXtCCZ3wQ99IgQxftCg== + dependencies: + pretty-format "^23.6.0" + +jest-matcher-utils@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-23.6.0.tgz#726bcea0c5294261a7417afb6da3186b4b8cac80" + integrity sha512-rosyCHQfBcol4NsckTn01cdelzWLU9Cq7aaigDf8VwwpIRvWE/9zLgX2bON+FkEW69/0UuYslUe22SOdEf2nog== + dependencies: + chalk "^2.0.1" + jest-get-type "^22.1.0" + pretty-format "^23.6.0" + +jest-message-util@^23.4.0: + version "23.4.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-23.4.0.tgz#17610c50942349508d01a3d1e0bda2c079086a9f" + integrity sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8= + dependencies: + "@babel/code-frame" "^7.0.0-beta.35" + chalk "^2.0.1" + micromatch "^2.3.11" + slash "^1.0.0" + stack-utils "^1.0.1" + +jest-mock@^23.2.0: + version "23.2.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-23.2.0.tgz#ad1c60f29e8719d47c26e1138098b6d18b261134" + integrity sha1-rRxg8p6HGdR8JuETgJi20YsmETQ= + +jest-regex-util@^23.3.0: + version "23.3.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-23.3.0.tgz#5f86729547c2785c4002ceaa8f849fe8ca471bc5" + integrity sha1-X4ZylUfCeFxAAs6qj4Sf6MpHG8U= + +jest-resolve-dependencies@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-23.6.0.tgz#b4526af24c8540d9a3fab102c15081cf509b723d" + integrity sha512-EkQWkFWjGKwRtRyIwRwI6rtPAEyPWlUC2MpzHissYnzJeHcyCn1Hc8j7Nn1xUVrS5C6W5+ZL37XTem4D4pLZdA== + dependencies: + jest-regex-util "^23.3.0" + jest-snapshot "^23.6.0" + +jest-resolve@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-23.6.0.tgz#cf1d1a24ce7ee7b23d661c33ba2150f3aebfa0ae" + integrity sha512-XyoRxNtO7YGpQDmtQCmZjum1MljDqUCob7XlZ6jy9gsMugHdN2hY4+Acz9Qvjz2mSsOnPSH7skBmDYCHXVZqkA== + dependencies: + browser-resolve "^1.11.3" + chalk "^2.0.1" + realpath-native "^1.0.0" + +jest-runner@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-23.6.0.tgz#3894bd219ffc3f3cb94dc48a4170a2e6f23a5a38" + integrity sha512-kw0+uj710dzSJKU6ygri851CObtCD9cN8aNkg8jWJf4ewFyEa6kwmiH/r/M1Ec5IL/6VFa0wnAk6w+gzUtjJzA== + dependencies: + exit "^0.1.2" + graceful-fs "^4.1.11" + jest-config "^23.6.0" + jest-docblock "^23.2.0" + jest-haste-map "^23.6.0" + jest-jasmine2 "^23.6.0" + jest-leak-detector "^23.6.0" + jest-message-util "^23.4.0" + jest-runtime "^23.6.0" + jest-util "^23.4.0" + jest-worker "^23.2.0" + source-map-support "^0.5.6" + throat "^4.0.0" + +jest-runtime@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-23.6.0.tgz#059e58c8ab445917cd0e0d84ac2ba68de8f23082" + integrity sha512-ycnLTNPT2Gv+TRhnAYAQ0B3SryEXhhRj1kA6hBPSeZaNQkJ7GbZsxOLUkwg6YmvWGdX3BB3PYKFLDQCAE1zNOw== + dependencies: + babel-core "^6.0.0" + babel-plugin-istanbul "^4.1.6" + chalk "^2.0.1" + convert-source-map "^1.4.0" + exit "^0.1.2" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.1.11" + jest-config "^23.6.0" + jest-haste-map "^23.6.0" + jest-message-util "^23.4.0" + jest-regex-util "^23.3.0" + jest-resolve "^23.6.0" + jest-snapshot "^23.6.0" + jest-util "^23.4.0" + jest-validate "^23.6.0" + micromatch "^2.3.11" + realpath-native "^1.0.0" + slash "^1.0.0" + strip-bom "3.0.0" + write-file-atomic "^2.1.0" + yargs "^11.0.0" + +jest-serializer@24.0.0-alpha.6: + version "24.0.0-alpha.6" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.0.0-alpha.6.tgz#27d2fee4b1a85698717a30c3ec2ab80767312597" + integrity sha512-IPA5T6/GhlE6dedSk7Cd7YfuORnYjN0VD5iJVFn1Q81RJjpj++Hen5kJbKcg547vXsQ1TddV15qOA/zeIfOCLw== + +jest-serializer@^23.0.1: + version "23.0.1" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-23.0.1.tgz#a3776aeb311e90fe83fab9e533e85102bd164165" + integrity sha1-o3dq6zEekP6D+rnlM+hRAr0WQWU= + +jest-serializer@^24.0.0-alpha.6: + version "24.4.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.4.0.tgz#f70c5918c8ea9235ccb1276d232e459080588db3" + integrity sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q== + +jest-snapshot@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-23.6.0.tgz#f9c2625d1b18acda01ec2d2b826c0ce58a5aa17a" + integrity sha512-tM7/Bprftun6Cvj2Awh/ikS7zV3pVwjRYU2qNYS51VZHgaAMBs5l4o/69AiDHhQrj5+LA2Lq4VIvK7zYk/bswg== + dependencies: + babel-types "^6.0.0" + chalk "^2.0.1" + jest-diff "^23.6.0" + jest-matcher-utils "^23.6.0" + jest-message-util "^23.4.0" + jest-resolve "^23.6.0" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + pretty-format "^23.6.0" + semver "^5.5.0" + +jest-util@^23.4.0: + version "23.4.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-23.4.0.tgz#4d063cb927baf0a23831ff61bec2cbbf49793561" + integrity sha1-TQY8uSe68KI4Mf9hvsLLv0l5NWE= + dependencies: + callsites "^2.0.0" + chalk "^2.0.1" + graceful-fs "^4.1.11" + is-ci "^1.0.10" + jest-message-util "^23.4.0" + mkdirp "^0.5.1" + slash "^1.0.0" + source-map "^0.6.0" + +jest-validate@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.6.0.tgz#36761f99d1ed33fcd425b4e4c5595d62b6597474" + integrity sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A== + dependencies: + chalk "^2.0.1" + jest-get-type "^22.1.0" + leven "^2.1.0" + pretty-format "^23.6.0" + +jest-watcher@^23.4.0: + version "23.4.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-23.4.0.tgz#d2e28ce74f8dad6c6afc922b92cabef6ed05c91c" + integrity sha1-0uKM50+NrWxq/JIrksq+9u0FyRw= + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.1" + string-length "^2.0.0" + +jest-worker@24.0.0-alpha.6: + version "24.0.0-alpha.6" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.0.0-alpha.6.tgz#463681b92c117c57107135c14b9b9d6cd51d80ce" + integrity sha512-iXtH7MR9bjWlNnlnRBcrBRrb4cSVxML96La5vsnmBvDI+mJnkP5uEt6Fgpo5Y8f3z9y2Rd7wuPnKRxqQsiU/dA== + dependencies: + merge-stream "^1.0.1" + +jest-worker@^23.2.0: + version "23.2.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-23.2.0.tgz#faf706a8da36fae60eb26957257fa7b5d8ea02b9" + integrity sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk= + dependencies: + merge-stream "^1.0.1" + +jest-worker@^24.0.0-alpha.6: + version "24.6.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.6.0.tgz#7f81ceae34b7cde0c9827a6980c35b7cdc0161b3" + integrity sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ== + dependencies: + merge-stream "^1.0.1" + supports-color "^6.1.0" + +jest@23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-23.6.0.tgz#ad5835e923ebf6e19e7a1d7529a432edfee7813d" + integrity sha512-lWzcd+HSiqeuxyhG+EnZds6iO3Y3ZEnMrfZq/OTGvF/C+Z4fPMCdhWTGSAiO2Oym9rbEXfwddHhh6jqrTF3+Lw== + dependencies: + import-local "^1.0.0" + jest-cli "^23.6.0" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + +js-yaml@^3.7.0, js-yaml@^3.9.0: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsdom@^11.5.1: + version "11.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" + integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw== + dependencies: + abab "^2.0.0" + acorn "^5.5.3" + acorn-globals "^4.1.0" + array-equal "^1.0.0" + cssom ">= 0.3.2 < 0.4.0" + cssstyle "^1.0.0" + data-urls "^1.0.0" + domexception "^1.0.1" + escodegen "^1.9.1" + html-encoding-sniffer "^1.0.2" + left-pad "^1.3.0" + nwsapi "^2.0.7" + parse5 "4.0.0" + pn "^1.1.0" + request "^2.87.0" + request-promise-native "^1.0.5" + sax "^1.2.4" + symbol-tree "^3.2.2" + tough-cookie "^2.3.4" + w3c-hr-time "^1.0.1" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.3" + whatwg-mimetype "^2.1.0" + whatwg-url "^6.4.1" + ws "^5.2.0" + xml-name-validator "^3.0.0" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= + +jsesc@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe" + integrity sha1-5CGiqOINawgZ3yiQj3glJrlt0f4= + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json5@^0.5.0, json5@^0.5.1: + version "0.5.1" + resolved "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +kind-of@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz#140a3d2d41a36d2efcfa9377b62c24f8495a5c44" + integrity sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ= + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== + +klaw@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk= + optionalDependencies: + graceful-fs "^4.1.9" + +kleur@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-2.0.2.tgz#b704f4944d95e255d038f0cb05fb8a602c55a300" + integrity sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ== + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= + dependencies: + invert-kv "^1.0.0" + +left-pad@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" + integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== + +leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +lodash.pad@^4.1.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/lodash.pad/-/lodash.pad-4.5.1.tgz#4330949a833a7c8da22cc20f6a26c4d59debba70" + integrity sha1-QzCUmoM6fI2iLMIPaibE1Z3runA= + +lodash.padend@^4.1.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e" + integrity sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4= + +lodash.padstart@^4.1.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b" + integrity sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs= + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + +lodash.throttle@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" + integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= + +lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0, lodash@^4.6.1: + version "4.17.14" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" + integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lru-cache@^4.0.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" + integrity sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= + dependencies: + tmpl "1.0.x" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +math-random@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" + integrity sha1-izqsWIuKZuSXXjzepn97sylgH6w= + +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= + dependencies: + mimic-fn "^1.0.0" + +merge-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" + integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE= + dependencies: + readable-stream "^2.0.1" + +merge@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" + integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== + +metro-babel-register@0.51.0: + version "0.51.0" + resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.51.0.tgz#d86d3f2d90b45c7a3c6ae67a53bd1e50bad7a24d" + integrity sha512-rhdvHFOZ7/ub019A3+aYs8YeLydb02/FAMsKr2Nz2Jlf6VUxWrMnrcT0NYX16F9TGdi2ulRlJ9dwvUmdhkk+Bw== + dependencies: + "@babel/core" "^7.0.0" + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-optional-chaining" "^7.0.0" + "@babel/plugin-transform-async-to-generator" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/register" "^7.0.0" + core-js "^2.2.2" + escape-string-regexp "^1.0.5" + +metro-babel-transformer@0.51.0: + version "0.51.0" + resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.51.0.tgz#9ee5199163ac46b2057527b3f8cbd8b089ffc03e" + integrity sha512-M7KEY/hjD3E8tJEliWgI0VOSaJtqaznC0ItM6FiMrhoGDqqa1BvGofl+EPcKqjBSOV1UgExua/T1VOIWbjwQsw== + dependencies: + "@babel/core" "^7.0.0" + +metro-babel-transformer@0.51.1: + version "0.51.1" + resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.51.1.tgz#97be9e2b96c78aa202b52ae05fb86f71327aef72" + integrity sha512-+tOnZZzOzufB86ASdfimUEGB1jBKsdsVpPdjNJZkueTFyvYlGqWDQKHM1w9bwKMeM/czPQ48Y6m8Bou6le0X4w== + dependencies: + "@babel/core" "^7.0.0" + +metro-babel7-plugin-react-transform@0.51.0: + version "0.51.0" + resolved "https://registry.yarnpkg.com/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.51.0.tgz#af27dd81666b91f05d2b371b0d6d283c585e38b6" + integrity sha512-dZ95kXcE2FJMoRsYhxr7YLCbOlHWKwe0bOpihRhfImDTgFfuKIzU4ROQwMUbE0NCbzB+ATFsa2FZ3pHDJ5GI0w== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + +metro-babel7-plugin-react-transform@0.51.1: + version "0.51.1" + resolved "https://registry.yarnpkg.com/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.51.1.tgz#9cce2c340cc4006fc82aa6dfab27af22d592607e" + integrity sha512-wzn4X9KgmAMZ7Bi6v9KxA7dw+AHGL0RODPxU5NDJ3A6d0yERvzfZ3qkzWhz8jbFkVBK12cu5DTho3HBazKQDOw== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + +metro-babel7-plugin-react-transform@0.53.1: + version "0.53.1" + resolved "https://registry.yarnpkg.com/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.53.1.tgz#9ad31e5c84f5003333a6a3cf79f2d093cd3b2ddc" + integrity sha512-98lEpTu7mox/7QurxVuLnbjrGDdayjpS2Z1T4vkLcP+mBxzloKJuTRnmtyWC8cNlx9qjimHGDlqtNY78rQ8rsA== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + +metro-cache@0.51.1: + version "0.51.1" + resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.51.1.tgz#d0b296eab8e009214413bba87e4eac3d9b44cd04" + integrity sha512-0m1+aicsw77LVAehNuTxDpE1c/7Xv/ajRD+UL/lFCWUxnrjSbxVtIKr8l5DxEY11082c1axVRuaV9e436W+eXg== + dependencies: + jest-serializer "24.0.0-alpha.6" + metro-core "0.51.1" + mkdirp "^0.5.1" + rimraf "^2.5.4" + +metro-config@0.51.1, metro-config@^0.51.0: + version "0.51.1" + resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.51.1.tgz#8f1a241ce2c0b521cd492c39bc5c6c69e3397b82" + integrity sha512-WCNd0tTI9gb/ubgTqK1+ljZL4b3hsXVinsOAtep4nHiVb6DSDdbO2yXDD2rpYx3NE6hDRMFS9HHg6G0139pAqQ== + dependencies: + cosmiconfig "^5.0.5" + metro "0.51.1" + metro-cache "0.51.1" + metro-core "0.51.1" + pretty-format "24.0.0-alpha.6" + +metro-core@0.51.1, metro-core@^0.51.0: + version "0.51.1" + resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.51.1.tgz#e7227fb1dd1bb3f953272fad9876e6201140b038" + integrity sha512-sG1yACjdFqmIzZN50HqLTKUMp1oy0AehHhmIuYeIllo1DjX6Y2o3UAT3rGP8U+SAqJGXf/OWzl6VNyRPGDENfA== + dependencies: + jest-haste-map "24.0.0-alpha.6" + lodash.throttle "^4.1.1" + metro-resolver "0.51.1" + wordwrap "^1.0.0" + +metro-memory-fs@^0.51.0: + version "0.51.1" + resolved "https://registry.yarnpkg.com/metro-memory-fs/-/metro-memory-fs-0.51.1.tgz#624291f5956b0fd11532d80b1b85d550926f96c9" + integrity sha512-dXVUpLPLwfQcYHd1HlqHGVzBsiwvUdT92TDSbdc10152TP+iynHBqLDWbxt0MAtd6c/QXwOuGZZ1IcX3+lv5iw== + +metro-minify-uglify@0.51.1: + version "0.51.1" + resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.51.1.tgz#60cd8fe4d3e82d6670c717b8ddb52ae63199c0e4" + integrity sha512-HAqd/rFrQ6mnbqVAszDXIKTg2rqHlY9Fm8DReakgbkAeyMbF2mH3kEgtesPmTrhajdFk81UZcNSm6wxj1JMgVg== + dependencies: + uglify-es "^3.1.9" + +metro-react-native-babel-preset@0.51.0: + version "0.51.0" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.51.0.tgz#978d960acf2d214bbbe43e59145878d663bd07de" + integrity sha512-Y/aPeLl4RzY8IEAneOyDcpdjto/8yjIuX9eUWRngjSqdHYhGQtqiSBpfTpo0BvXpwNRLwCLHyXo58gNpckTJFw== + dependencies: + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-export-default-from" "^7.0.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-optional-chaining" "^7.0.0" + "@babel/plugin-syntax-dynamic-import" "^7.0.0" + "@babel/plugin-syntax-export-default-from" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.0.0" + "@babel/plugin-transform-exponentiation-operator" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + "@babel/plugin-transform-for-of" "^7.0.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-object-assign" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/plugin-transform-regenerator" "^7.0.0" + "@babel/plugin-transform-runtime" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-sticky-regex" "^7.0.0" + "@babel/plugin-transform-template-literals" "^7.0.0" + "@babel/plugin-transform-typescript" "^7.0.0" + "@babel/plugin-transform-unicode-regex" "^7.0.0" + "@babel/template" "^7.0.0" + metro-babel7-plugin-react-transform "0.51.0" + react-transform-hmr "^1.0.4" + +metro-react-native-babel-preset@0.51.1: + version "0.51.1" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.51.1.tgz#44aeeedfea37f7c2ab8f6f273fa71b90fe65f089" + integrity sha512-e9tsYDFhU70gar0jQWcZXRPJVCv4k7tEs6Pm74wXO2OO/T1MEumbvniDIGwGG8bG8RUnYdHhjcaiub2Vc5BRWw== + dependencies: + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-export-default-from" "^7.0.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-optional-chaining" "^7.0.0" + "@babel/plugin-syntax-dynamic-import" "^7.0.0" + "@babel/plugin-syntax-export-default-from" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.0.0" + "@babel/plugin-transform-exponentiation-operator" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + "@babel/plugin-transform-for-of" "^7.0.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-object-assign" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/plugin-transform-regenerator" "^7.0.0" + "@babel/plugin-transform-runtime" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-sticky-regex" "^7.0.0" + "@babel/plugin-transform-template-literals" "^7.0.0" + "@babel/plugin-transform-typescript" "^7.0.0" + "@babel/plugin-transform-unicode-regex" "^7.0.0" + "@babel/template" "^7.0.0" + metro-babel7-plugin-react-transform "0.51.1" + react-transform-hmr "^1.0.4" + +metro-react-native-babel-preset@0.53.1: + version "0.53.1" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.53.1.tgz#6cd9e41a1b9a6e210e71ef2adf114219b4eaf2ec" + integrity sha512-Uf8EGL8kIPhDkoSdAAysNPxPQclUS2R1QC4cwnc8bkk2f6yqGn+1CorfiY9AaqlLEth5mKQqdtRYFDTFfB9QyA== + dependencies: + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-export-default-from" "^7.0.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-optional-chaining" "^7.0.0" + "@babel/plugin-syntax-dynamic-import" "^7.0.0" + "@babel/plugin-syntax-export-default-from" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.2.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.0.0" + "@babel/plugin-transform-exponentiation-operator" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + "@babel/plugin-transform-for-of" "^7.0.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-object-assign" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/plugin-transform-regenerator" "^7.0.0" + "@babel/plugin-transform-runtime" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-sticky-regex" "^7.0.0" + "@babel/plugin-transform-template-literals" "^7.0.0" + "@babel/plugin-transform-typescript" "^7.0.0" + "@babel/plugin-transform-unicode-regex" "^7.0.0" + "@babel/template" "^7.0.0" + metro-babel7-plugin-react-transform "0.53.1" + react-transform-hmr "^1.0.4" + +metro-react-native-babel-transformer@0.51.0: + version "0.51.0" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.51.0.tgz#57a695e97a19d95de63c9633f9d0dc024ee8e99a" + integrity sha512-VFnqtE0qrVmU1HV9B04o53+NZHvDwR+CWCoEx4+7vCqJ9Tvas741biqCjah9xtifoKdElQELk6x0soOAWCDFJA== + dependencies: + "@babel/core" "^7.0.0" + babel-preset-fbjs "^3.0.1" + metro-babel-transformer "0.51.0" + metro-react-native-babel-preset "0.51.0" + +metro-react-native-babel-transformer@^0.51.0: + version "0.51.1" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.51.1.tgz#bac34f988c150c725cd1875c13701cc2032615f9" + integrity sha512-D0KU+JPb/Z76nUWt3+bkjKggOlGvqAVI2BpIH2JFKprpUyBjWaCRqHnkBfZGixYwUfmu93MIlKJWr6iKzzFrlg== + dependencies: + "@babel/core" "^7.0.0" + babel-preset-fbjs "^3.0.1" + metro-babel-transformer "0.51.1" + metro-react-native-babel-preset "0.51.1" + +metro-resolver@0.51.1: + version "0.51.1" + resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.51.1.tgz#4c26f0baee47d30250187adca3d34c902e627611" + integrity sha512-zmWbD/287NDA/jLPuPV0hne/YMMSG0dljzu21TYMg2lXRLur/zROJHHhyepZvuBHgInXBi4Vhr2wvuSnY39SuA== + dependencies: + absolute-path "^0.0.0" + +metro-source-map@0.51.1: + version "0.51.1" + resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.51.1.tgz#1a8da138e98e184304d5558b4f92a5c2141822d0" + integrity sha512-JyrE+RV4YumrboHPHTGsUUGERjQ681ImRLrSYDGcmNv4tfpk9nvAK26UAas4IvBYFCC9oW90m0udt3kaQGv59Q== + dependencies: + source-map "^0.5.6" + +metro@0.51.1, metro@^0.51.0: + version "0.51.1" + resolved "https://registry.yarnpkg.com/metro/-/metro-0.51.1.tgz#b0aad4731593b9f244261bad1abb2a006d1c8969" + integrity sha512-nM0dqn8LQlMjhChl2fzTUq2EWiUebZM7nkesD9vQe47W10bj/tbRLPiIIAxht6SRDbPd/hRA+t39PxLhPSKEKg== + dependencies: + "@babel/core" "^7.0.0" + "@babel/generator" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/plugin-external-helpers" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + absolute-path "^0.0.0" + async "^2.4.0" + babel-preset-fbjs "^3.0.1" + buffer-crc32 "^0.2.13" + chalk "^2.4.1" + concat-stream "^1.6.0" + connect "^3.6.5" + debug "^2.2.0" + denodeify "^1.2.1" + eventemitter3 "^3.0.0" + fbjs "^1.0.0" + fs-extra "^1.0.0" + graceful-fs "^4.1.3" + image-size "^0.6.0" + invariant "^2.2.4" + jest-haste-map "24.0.0-alpha.6" + jest-worker "24.0.0-alpha.6" + json-stable-stringify "^1.0.1" + lodash.throttle "^4.1.1" + merge-stream "^1.0.1" + metro-babel-transformer "0.51.1" + metro-cache "0.51.1" + metro-config "0.51.1" + metro-core "0.51.1" + metro-minify-uglify "0.51.1" + metro-react-native-babel-preset "0.51.1" + metro-resolver "0.51.1" + metro-source-map "0.51.1" + mime-types "2.1.11" + mkdirp "^0.5.1" + node-fetch "^2.2.0" + nullthrows "^1.1.0" + react-transform-hmr "^1.0.4" + resolve "^1.5.0" + rimraf "^2.5.4" + serialize-error "^2.1.0" + source-map "^0.5.6" + temp "0.8.3" + throat "^4.1.0" + wordwrap "^1.0.0" + write-file-atomic "^1.2.0" + ws "^1.1.5" + xpipe "^1.0.5" + yargs "^9.0.0" + +micromatch@^2.3.11: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +"mime-db@>= 1.36.0 < 2", mime-db@~1.36.0: + version "1.36.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.36.0.tgz#5020478db3c7fe93aad7bbcc4dcf869c43363397" + integrity sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw== + +mime-db@~1.23.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.23.0.tgz#a31b4070adaea27d732ea333740a64d0ec9a6659" + integrity sha1-oxtAcK2uon1zLqMzdApk0OyaZlk= + +mime-types@2.1.11: + version "2.1.11" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.11.tgz#c259c471bda808a85d6cd193b430a5fae4473b3c" + integrity sha1-wlnEcb2oCKhdbNGTtDCl+uRHOzw= + dependencies: + mime-db "~1.23.0" + +mime-types@^2.1.12, mime-types@~2.1.18, mime-types@~2.1.19: + version "2.1.20" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.20.tgz#930cb719d571e903738520f8470911548ca2cc19" + integrity sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A== + dependencies: + mime-db "~1.36.0" + +mime@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== + +mime@^1.3.4: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= + dependencies: + dom-walk "^0.1.0" + +minimatch@^3.0.3, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +minimist@^1.1.1, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= + +minipass@^2.2.1, minipass@^2.3.3: + version "2.3.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.4.tgz#4768d7605ed6194d6d576169b9e12ef71e9d9957" + integrity sha512-mlouk1OHlaUE8Odt1drMtG1bAJA4ZA6B/ehysgV0LUIrDHdKgo1KorZq3pK0b/7Z7LJIQ12MNM6aC+Tn6lUZ5w== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb" + integrity sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA== + dependencies: + minipass "^2.2.1" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +morgan@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz#0a8d16734a1d9afbc824b99df87e738e58e2da59" + integrity sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA== + dependencies: + basic-auth "~2.0.0" + debug "2.6.9" + depd "~1.1.2" + on-finished "~2.3.0" + on-headers "~1.0.1" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + +nan@^2.9.2: + version "2.11.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.1.tgz#90e22bccb8ca57ea4cd37cc83d3819b52eea6766" + integrity sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +needle@^2.2.1: + version "2.2.4" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" + integrity sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA== + dependencies: + debug "^2.1.2" + iconv-lite "^0.4.4" + sax "^1.2.4" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk= + +neo-async@^2.6.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-fetch@^1.0.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +node-fetch@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.2.0.tgz#4ee79bde909262f9775f731e3656d0db55ced5b5" + integrity sha512-OayFWziIxiHY8bCUyLX6sTpDH8Jsbp4FfYd1j1f7vZyfgkcOnAyM4oQR16f8a0s7Gl/viMGRey8eScYk4V4EZA== + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + +node-notifier@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea" + integrity sha512-MIBs+AAd6dJ2SklbbE8RUDRlIVhU8MaNLh1A9SUZDUHPiZkWLFde6UNwG41yQHZEToHgJMXqyVZ9UcS/ReOVTg== + dependencies: + growly "^1.3.0" + semver "^5.4.1" + shellwords "^0.1.1" + which "^1.3.0" + +node-pre-gyp@^0.10.0: + version "0.10.3" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" + integrity sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A== + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.3.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + integrity sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw== + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.0.1, normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +npm-bundled@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979" + integrity sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g== + +npm-packlist@^1.1.6: + version "1.1.11" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.11.tgz#84e8c683cbe7867d34b1d357d893ce29e28a02de" + integrity sha512-CxKlZ24urLkJk+9kCm48RTQ7L4hsmgSVzEk0TLGPzzyuFxD7VNgy5Sl24tOLMzQv773a/NeJ1ce1DKeacqffEA== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npmlog@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692" + integrity sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI= + dependencies: + ansi "~0.3.1" + are-we-there-yet "~1.1.2" + gauge "~1.2.5" + +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +nullthrows@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.0.tgz#832bb19ef7fedab989f81675c846e2858a3917a2" + integrity sha512-YoigDq49JRqVCUlb4XlwZirXQiNCoXdwoyfklXJAEYHN+XKHWgDkrcWxNgxEtP7N+XF9Akp7Lr6wLq8HZxLttw== + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +nwsapi@^2.0.7: + version "2.0.9" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.0.9.tgz#77ac0cdfdcad52b6a1151a84e73254edc33ed016" + integrity sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ== + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-keys@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" + integrity sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.getownpropertydescriptors@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.1" + +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo= + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + integrity sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c= + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +opn@^3.0.2: + version "3.0.3" + resolved "https://registry.npmjs.org/opn/-/opn-3.0.3.tgz#b6d99e7399f78d65c3baaffef1fb288e9b85243a" + integrity sha1-ttmec5n3jWXDuq/+8fsojpuFJDo= + dependencies: + object-assign "^4.0.1" + +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +options@>=0.0.5: + version "0.0.6" + resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" + integrity sha1-7CLTEoBrtT5zF3Pnza788cZDEo8= + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-locale@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse5@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" + integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== + +parseurl@~1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M= + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pirates@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.0.tgz#850b18781b4ac6ec58a43c9ed9ec5fe6796addbd" + integrity sha512-8t5BsXy1LUIjn3WWOlOuFDuKswhQb/tkak641lvBgmPOBUQHXveORtlMCp6OdPV1dtuTaEahKA8VNz6uLfKBtA== + dependencies: + node-modules-regexp "^1.0.0" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + +plist@^3.0.0, plist@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.1.tgz#a9b931d17c304e8912ef0ba3bdd6182baf2e1f8c" + integrity sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ== + dependencies: + base64-js "^1.2.3" + xmlbuilder "^9.0.7" + xmldom "0.1.x" + +plugin-error@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-0.1.2.tgz#3b9bb3335ccf00f425e07437e19276967da47ace" + integrity sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4= + dependencies: + ansi-cyan "^0.1.1" + ansi-red "^0.1.1" + arr-diff "^1.0.1" + arr-union "^2.0.1" + extend-shallow "^1.1.2" + +pn@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= + +pretty-format@24.0.0-alpha.6: + version "24.0.0-alpha.6" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.0.0-alpha.6.tgz#25ad2fa46b342d6278bf241c5d2114d4376fbac1" + integrity sha512-zG2m6YJeuzwBFqb5EIdmwYVf30sap+iMRuYNPytOccEXZMAJbPIFGKVJ/U0WjQegmnQbRo9CI7j6j3HtDaifiA== + dependencies: + ansi-regex "^4.0.0" + ansi-styles "^3.2.0" + +pretty-format@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760" + integrity sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw== + dependencies: + ansi-regex "^3.0.0" + ansi-styles "^3.2.0" + +private@^0.1.6, private@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + +process-nextick-args@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== + +process@~0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" + integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8= + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + +prompts@^0.1.9: + version "0.1.14" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-0.1.14.tgz#a8e15c612c5c9ec8f8111847df3337c9cbd443b2" + integrity sha512-rxkyiE9YH6zAz/rZpywySLKkpaj0NMVyNw1qhsubdbjjSgcayjTShDreZGlFMcGSu5sab3bAKPfFk78PB90+8w== + dependencies: + kleur "^2.0.1" + sisteransi "^0.1.1" + +prop-types@^15.5.8, prop-types@^15.6.2: + version "15.6.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" + integrity sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ== + dependencies: + loose-envify "^1.3.1" + object-assign "^4.1.1" + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.24: + version "1.1.29" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67" + integrity sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +randomatic@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.0.tgz#36f2ca708e9e567f5ed2ec01949026d50aa10116" + integrity sha512-KnGPVE0lo2WoXxIZ7cPR8YBpiol4gsSuOwDSg410oHh80ZMp5EiypNqL2K4Z77vJn6lB5rap7IkAmcUlalcnBQ== + dependencies: + is-number "^4.0.0" + kind-of "^6.0.0" + math-random "^1.0.1" + +range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-clone-referenced-element@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/react-clone-referenced-element/-/react-clone-referenced-element-1.1.0.tgz#9cdda7f2aeb54fea791f3ab8c6ab96c7a77d0158" + integrity sha512-FKOsfKbBkPxYE8576EM6uAfHC4rnMpLyH6/TJUL4WcHUEB3EUn8AxPjnnV/IiwSSzsClvHYK+sDELKN/EJ0WYg== + +react-deep-force-update@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.1.2.tgz#3d2ae45c2c9040cbb1772be52f8ea1ade6ca2ee1" + integrity sha512-WUSQJ4P/wWcusaH+zZmbECOk7H5N2pOIl0vzheeornkIMhu+qrNdGFm0bDZLCb0hSF0jf/kH1SgkNGfBdTc4wA== + +react-devtools-core@^3.6.0: + version "3.6.1" + resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-3.6.1.tgz#51af81ceada65209bbccb8b547a01187cd1cbf04" + integrity sha512-I/LSX+tpeTrGKaF1wXSfJ/kP+6iaP2JfshEjW8LtQBdz6c6HhzOJtjZXhqOUrAdysuey8M1/JgPY1flSVVt8Ig== + dependencies: + shell-quote "^1.6.1" + ws "^3.3.1" + +react-is@^16.8.3: + version "16.8.6" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" + integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA== + +react-native@0.59.1: + version "0.59.1" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.59.1.tgz#3274dcc0f9558799bd41c8092acac2a79bd627ce" + integrity sha512-KA/MyoCQLGavPBc/Q2QRfdbxHuKHTcYTks9xwwRPzgDqTfmTuDcyoC6jUBTfhZ0LEes5GMoKVM4eVrYUbprOmw== + dependencies: + "@babel/runtime" "^7.0.0" + "@react-native-community/cli" "^1.2.1" + absolute-path "^0.0.0" + art "^0.10.0" + base64-js "^1.1.2" + chalk "^2.4.1" + commander "^2.9.0" + compression "^1.7.1" + connect "^3.6.5" + create-react-class "^15.6.3" + debug "^2.2.0" + denodeify "^1.2.1" + errorhandler "^1.5.0" + escape-string-regexp "^1.0.5" + event-target-shim "^1.0.5" + fbjs "^1.0.0" + fbjs-scripts "^1.0.0" + fs-extra "^1.0.0" + glob "^7.1.1" + graceful-fs "^4.1.3" + inquirer "^3.0.6" + invariant "^2.2.4" + lodash "^4.17.5" + metro-babel-register "0.51.0" + metro-react-native-babel-transformer "0.51.0" + mime "^1.3.4" + minimist "^1.2.0" + mkdirp "^0.5.1" + morgan "^1.9.0" + node-fetch "^2.2.0" + node-notifier "^5.2.1" + npmlog "^2.0.4" + nullthrows "^1.1.0" + opn "^3.0.2" + optimist "^0.6.1" + plist "^3.0.0" + pretty-format "24.0.0-alpha.6" + promise "^7.1.1" + prop-types "^15.5.8" + react-clone-referenced-element "^1.0.1" + react-devtools-core "^3.6.0" + regenerator-runtime "^0.11.0" + rimraf "^2.5.4" + semver "^5.0.3" + serve-static "^1.13.1" + shell-quote "1.6.1" + stacktrace-parser "^0.1.3" + ws "^1.1.5" + xmldoc "^0.4.0" + yargs "^9.0.0" + +react-proxy@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/react-proxy/-/react-proxy-1.1.8.tgz#9dbfd9d927528c3aa9f444e4558c37830ab8c26a" + integrity sha1-nb/Z2SdSjDqp9ETkVYw3gwq4wmo= + dependencies: + lodash "^4.6.1" + react-deep-force-update "^1.0.0" + +react-test-renderer@16.8.3: + version "16.8.3" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.8.3.tgz#230006af264cc46aeef94392e04747c21839e05e" + integrity sha512-rjJGYebduKNZH0k1bUivVrRLX04JfIQ0FKJLPK10TAb06XWhfi4gTobooF9K/DEFNW98iGac3OSxkfIJUN9Mdg== + dependencies: + object-assign "^4.1.1" + prop-types "^15.6.2" + react-is "^16.8.3" + scheduler "^0.13.3" + +react-transform-hmr@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/react-transform-hmr/-/react-transform-hmr-1.0.4.tgz#e1a40bd0aaefc72e8dfd7a7cda09af85066397bb" + integrity sha1-4aQL0Krvxy6N/Xp82gmvhQZjl7s= + dependencies: + global "^4.3.0" + react-proxy "^1.1.7" + +react@16.8.3: + version "16.8.3" + resolved "https://registry.yarnpkg.com/react/-/react-16.8.3.tgz#c6f988a2ce895375de216edcfaedd6b9a76451d9" + integrity sha512-3UoSIsEq8yTJuSu0luO1QQWYbgGEILm+eJl2QN/VLDi7hL+EN18M3q3oVZwmVzzBJ3DkM7RMdRwBmZZ+b4IzSA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + scheduler "^0.13.3" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +readable-stream@^2.0.1, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2: + version "2.3.6" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +realpath-native@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.2.tgz#cd51ce089b513b45cf9b1516c82989b51ccc6560" + integrity sha512-+S3zTvVt9yTntFrBpm7TQmQ3tzpCrnA1a/y+3cUHAc9ZR6aIjG0WNLR+Rj79QpJktY+VeW/TQtFlQ1bzsehI8g== + dependencies: + util.promisify "^1.0.0" + +regenerate-unicode-properties@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c" + integrity sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regenerator-runtime@^0.12.0: + version "0.12.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" + integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg== + +regenerator-runtime@^0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447" + integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA== + +regenerator-transform@^0.13.3: + version "0.13.3" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.3.tgz#264bd9ff38a8ce24b06e0636496b2c856b57bcbb" + integrity sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA== + dependencies: + private "^0.1.6" + +regex-cache@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ== + dependencies: + is-equal-shallow "^0.1.3" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexpu-core@^4.1.3: + version "4.2.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.2.0.tgz#a3744fa03806cffe146dea4421a3e73bdcc47b1d" + integrity sha512-Z835VSnJJ46CNBttalHD/dB+Sj2ezmY6Xp38npwU87peK6mqOzOpV8eYktdkLTEkzzD+JsTcxd84ozd8I14+rw== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^7.0.0" + regjsgen "^0.4.0" + regjsparser "^0.3.0" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.0.2" + +regjsgen@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.4.0.tgz#c1eb4c89a209263f8717c782591523913ede2561" + integrity sha512-X51Lte1gCYUdlwhF28+2YMO0U6WeN0GLpgpA7LK7mbdDnkQYiwvEpmpe0F/cv5L14EbxgrdayAG3JETBv0dbXA== + +regjsparser@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.3.0.tgz#3c326da7fcfd69fa0d332575a41c8c0cdf588c96" + integrity sha512-zza72oZBBHzt64G7DxdqrOo/30bhHkwMUoT0WqfGu98XLd7N+1tsy5MJ96Bk4MD0y74n629RhmrGW6XlnLLwCA== + dependencies: + jsesc "~0.5.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.5.2, repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + +request-promise-core@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" + integrity sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY= + dependencies: + lodash "^4.13.1" + +request-promise-native@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" + integrity sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU= + dependencies: + request-promise-core "1.1.1" + stealthy-require "^1.1.0" + tough-cookie ">=2.3.3" + +request@^2.87.0: + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.0" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.4.3" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= + +resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" + integrity sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA== + dependencies: + path-parse "^1.0.5" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +rimraf@^2.5.4, rimraf@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w== + dependencies: + glob "^7.0.5" + +rimraf@~2.2.6: + version "2.2.8" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" + integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI= + +rsvp@^3.3.3: + version "3.6.2" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" + integrity sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw== + +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= + dependencies: + is-promise "^2.1.0" + +rx-lite-aggregates@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= + dependencies: + rx-lite "*" + +rx-lite@*, rx-lite@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= + +safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sane@^2.0.0: + version "2.5.2" + resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.2.tgz#b4dc1861c21b427e929507a3e751e2a2cb8ab3fa" + integrity sha1-tNwYYcIbQn6SlQej51HiosuKs/o= + dependencies: + anymatch "^2.0.0" + capture-exit "^1.2.0" + exec-sh "^0.2.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.18.0" + optionalDependencies: + fsevents "^1.2.3" + +sane@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-3.1.0.tgz#995193b7dc1445ef1fe41ddfca2faf9f111854c6" + integrity sha512-G5GClRRxT1cELXfdAq7UKtUsv8q/ZC5k8lQGmjEm4HcAl3HzBy68iglyNCmw4+0tiXPCBZntslHlRhbnsSws+Q== + dependencies: + anymatch "^2.0.0" + capture-exit "^1.2.0" + exec-sh "^0.2.0" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.18.0" + optionalDependencies: + fsevents "^1.2.3" + +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +sax@~1.1.1: + version "1.1.6" + resolved "https://registry.npmjs.org/sax/-/sax-1.1.6.tgz#5d616be8a5e607d54e114afae55b7eaf2fcc3240" + integrity sha1-XWFr6KXmB9VOEUr65Vt+ry/MMkA= + +scheduler@^0.13.3: + version "0.13.6" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.6.tgz#466a4ec332467b31a91b9bf74e5347072e4cd889" + integrity sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1: + version "5.5.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477" + integrity sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw== + +send@0.16.2: + version "0.16.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" + integrity sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.6.2" + mime "1.4.1" + ms "2.0.0" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.4.0" + +serialize-error@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a" + integrity sha1-ULZ51WNc34Rme9yOWa9OW4HV9go= + +serve-static@^1.13.1: + version "1.13.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" + integrity sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.2" + send "0.16.2" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE= + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.1" + to-object-path "^0.3.0" + +set-value@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shell-quote@1.6.1, shell-quote@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" + integrity sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c= + dependencies: + array-filter "~0.0.0" + array-map "~0.0.0" + array-reduce "~0.0.0" + jsonify "~0.0.0" + +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +simple-plist@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.0.0.tgz#bed3085633b22f371e111f45d159a1ccf94b81eb" + integrity sha512-043L2rO80LVF7zfZ+fqhsEkoJFvW8o59rt/l4ctx1TJWoTx7/jkiS1R5TatD15Z1oYnuLJytzE7gcnnBuIPL2g== + dependencies: + bplist-creator "0.0.7" + bplist-parser "0.1.1" + plist "^3.0.1" + +sisteransi@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-0.1.1.tgz#5431447d5f7d1675aac667ccd0b865a4994cb3ce" + integrity sha512-PmGOd02bM9YO5ifxpw36nrNMBTptEtfRl4qUYl9SndkolplkrZZOW7PGHjrZL53QvMVj9nQ+TKqUnRsw4tJa4g== + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +slide@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +source-map-resolve@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== + dependencies: + atob "^2.1.1" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== + dependencies: + source-map "^0.5.6" + +source-map-support@^0.5.6, source-map-support@^0.5.9: + version "0.5.9" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" + integrity sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spdx-correct@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.1.tgz#434434ff9d1726b4d9f4219d1004813d80639e30" + integrity sha512-hxSPZbRZvSDuOvADntOElzJpenIR7wXJkuoUcUtS0erbgt2fgeaoPIYretfKpslMhfFDY4k0MZ2F5CUzhBsSvQ== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz#e2a303236cac54b04031fa7a5a79c7e701df852f" + integrity sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.14.2" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98" + integrity sha1-xvxhZIo9nE52T9P8306hBeSSupg= + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + safer-buffer "^2.0.2" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +stack-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" + integrity sha1-1PM6tU6OOHeLDKXP07OvsS22hiA= + +stacktrace-parser@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.4.tgz#01397922e5f62ecf30845522c95c4fe1d25e7d4e" + integrity sha1-ATl5IuX2Ls8whFUiyVxP4dJefU4= + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +statuses@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" + integrity sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4= + +statuses@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew== + +stealthy-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + +stream-buffers@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" + integrity sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ= + +string-length@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" + integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0= + dependencies: + astral-regex "^1.0.0" + strip-ansi "^4.0.0" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-bom@3.0.0, strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^3.1.2: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= + dependencies: + has-flag "^1.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +symbol-tree@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY= + +tar@^4: + version "4.4.6" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.6.tgz#63110f09c00b4e60ac8bcfe1bf3c8660235fbc9b" + integrity sha512-tMkTnh9EdzxyfW+6GK6fCahagXsnYk6kE6S9Gr9pjVdys769+laCTbodXDhPAjzVtEBazRgP0gYqOjnk9dQzLg== + dependencies: + chownr "^1.0.1" + fs-minipass "^1.2.5" + minipass "^2.3.3" + minizlib "^1.1.0" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.2" + +temp@0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" + integrity sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k= + dependencies: + os-tmpdir "^1.0.0" + rimraf "~2.2.6" + +test-exclude@^4.2.1: + version "4.2.3" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.3.tgz#a9a5e64474e4398339245a0a769ad7c2f4a97c20" + integrity sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA== + dependencies: + arrify "^1.0.1" + micromatch "^2.3.11" + object-assign "^4.1.0" + read-pkg-up "^1.0.1" + require-main-filename "^1.0.1" + +throat@^4.0.0, throat@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" + integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= + +through2@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + integrity sha1-AARWmzfHx0ujnEPzzteNGtlBQL4= + dependencies: + readable-stream "^2.1.5" + xtend "~4.0.1" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +time-stamp@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" + integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM= + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= + +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +tough-cookie@>=2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== + dependencies: + psl "^1.1.24" + punycode "^1.4.1" + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= + dependencies: + punycode "^2.1.0" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +ua-parser-js@^0.7.18: + version "0.7.18" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.18.tgz#a7bfd92f56edfb117083b69e31d2aa8882d4b1ed" + integrity sha512-LtzwHlVHwFGTptfNSgezHp7WUlwiqb0gA9AALRbKaERfxwJoiX0A73QbTToxteIAuIaFshhgIZfqK8s7clqgnA== + +uglify-es@^3.1.9: + version "3.3.9" + resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" + integrity sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ== + dependencies: + commander "~2.13.0" + source-map "~0.6.1" + +uglify-js@^3.1.4: + version "3.7.3" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.3.tgz#f918fce9182f466d5140f24bb0ff35c2d32dcc6a" + integrity sha512-7tINm46/3puUA4hCkKYo4Xdts+JDaVC9ZPRcG8Xw9R4nhO/gZgUM3TENq8IF4Vatk8qCig4MzP/c8G4u2BkVQg== + dependencies: + commander "~2.20.3" + source-map "~0.6.1" + +ultron@1.0.x: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" + integrity sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po= + +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz#9f1dc76926d6ccf452310564fd834ace059663d4" + integrity sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz#5a533f31b4317ea76f17d807fa0d116546111dd0" + integrity sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg== + +union-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^0.4.3" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util.promisify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +w3c-hr-time@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" + integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU= + dependencies: + browser-process-hrtime "^0.1.2" + +walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= + dependencies: + makeerror "1.0.x" + +watch@~0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" + integrity sha1-KAlUdsbffJDJYxOJkMClQj60uYY= + dependencies: + exec-sh "^0.2.0" + minimist "^1.2.0" + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-fetch@>=0.10.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" + integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== + +whatwg-mimetype@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.2.0.tgz#a3d58ef10b76009b042d03e25591ece89b88d171" + integrity sha512-5YSO1nMd5D1hY3WzAQV3PzZL83W3YeyR1yW9PcH26Weh1t+Vzh9B6XkDh7aXm83HBZ4nSMvkjvN2H2ySWIvBgw== + +whatwg-url@^6.4.1: + version "6.5.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" + integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +whatwg-url@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" + integrity sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.12, which@^1.2.9, which@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +wordwrap@^1.0.0, wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^1.2.0: + version "1.3.4" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f" + integrity sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8= + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + slide "^1.1.5" + +write-file-atomic@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" + integrity sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +ws@^1.1.0, ws@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" + integrity sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w== + dependencies: + options ">=0.0.5" + ultron "1.0.x" + +ws@^3.3.1: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + +ws@^5.2.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" + integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== + dependencies: + async-limiter "~1.0.0" + +xcode@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/xcode/-/xcode-2.0.0.tgz#134f1f94c26fbfe8a9aaa9724bfb2772419da1a2" + integrity sha512-5xF6RCjAdDEiEsbbZaS/gBRt3jZ/177otZcpoLCjGN/u1LrfgH7/Sgeeavpr/jELpyDqN2im3AKosl2G2W8hfw== + dependencies: + simple-plist "^1.0.0" + uuid "^3.3.2" + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +xmlbuilder@^9.0.7: + version "9.0.7" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= + +xmldoc@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/xmldoc/-/xmldoc-0.4.0.tgz#d257224be8393eaacbf837ef227fd8ec25b36888" + integrity sha1-0lciS+g5PqrL+DfvIn/Y7CWzaIg= + dependencies: + sax "~1.1.1" + +xmldom@0.1.x: + version "0.1.27" + resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" + integrity sha1-1QH5ezvbQDr4757MIFcxh6rawOk= + +xpipe@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/xpipe/-/xpipe-1.0.5.tgz#8dd8bf45fc3f7f55f0e054b878f43a62614dafdf" + integrity sha1-jdi/Rfw/f1Xw4FS4ePQ6YmFNr98= + +xtend@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.0, yallist@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" + integrity sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k= + +yargs-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k= + dependencies: + camelcase "^4.1.0" + +yargs-parser@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" + integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= + dependencies: + camelcase "^4.1.0" + +yargs@^11.0.0: + version "11.1.0" + resolved "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" + integrity sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A== + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^9.0.2" + +yargs@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c" + integrity sha1-UqzCP+7Kw0BCB47njAwAf1CF20w= + dependencies: + camelcase "^4.1.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + read-pkg-up "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^7.0.0" diff --git a/examples/mlkit/.buckconfig b/examples/mlkit/.buckconfig new file mode 100644 index 0000000..934256c --- /dev/null +++ b/examples/mlkit/.buckconfig @@ -0,0 +1,6 @@ + +[android] + target = Google Inc.:Google APIs:23 + +[maven_repositories] + central = https://repo1.maven.org/maven2 diff --git a/examples/mlkit/.flowconfig b/examples/mlkit/.flowconfig new file mode 100644 index 0000000..9bded78 --- /dev/null +++ b/examples/mlkit/.flowconfig @@ -0,0 +1,70 @@ +[ignore] +; We fork some components by platform +.*/*[.]android.js + +; Ignore "BUCK" generated dirs +/\.buckd/ + +; Ignore unexpected extra "@providesModule" +.*/node_modules/.*/node_modules/fbjs/.* + +; Ignore duplicate module providers +; For RN Apps installed via npm, "Libraries" folder is inside +; "node_modules/react-native" but in the source repo it is in the root +.*/Libraries/react-native/React.js + +; Ignore polyfills +.*/Libraries/polyfills/.* + +; Ignore metro +.*/node_modules/metro/.* + +[include] + +[libs] +node_modules/react-native/Libraries/react-native/react-native-interface.js +node_modules/react-native/flow/ +node_modules/react-native/flow-github/ + +[options] +emoji=true + +esproposal.optional_chaining=enable +esproposal.nullish_coalescing=enable + +module.system=haste +module.system.haste.use_name_reducers=true +# get basename +module.system.haste.name_reducers='^.*/\([a-zA-Z0-9$_.-]+\.js\(\.flow\)?\)$' -> '\1' +# strip .js or .js.flow suffix +module.system.haste.name_reducers='^\(.*\)\.js\(\.flow\)?$' -> '\1' +# strip .ios suffix +module.system.haste.name_reducers='^\(.*\)\.ios$' -> '\1' +module.system.haste.name_reducers='^\(.*\)\.android$' -> '\1' +module.system.haste.name_reducers='^\(.*\)\.native$' -> '\1' +module.system.haste.paths.blacklist=.*/__tests__/.* +module.system.haste.paths.blacklist=.*/__mocks__/.* +module.system.haste.paths.blacklist=/node_modules/react-native/Libraries/Animated/src/polyfills/.* +module.system.haste.paths.whitelist=/node_modules/react-native/Libraries/.* + +munge_underscores=true + +module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub' + +module.file_ext=.js +module.file_ext=.jsx +module.file_ext=.json +module.file_ext=.native.js + +suppress_type=$FlowIssue +suppress_type=$FlowFixMe +suppress_type=$FlowFixMeProps +suppress_type=$FlowFixMeState + +suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) +suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ +suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy +suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError + +[version] +^0.86.0 diff --git a/examples/mlkit/.gitattributes b/examples/mlkit/.gitattributes new file mode 100644 index 0000000..d42ff18 --- /dev/null +++ b/examples/mlkit/.gitattributes @@ -0,0 +1 @@ +*.pbxproj -text diff --git a/examples/mlkit/.gitignore b/examples/mlkit/.gitignore new file mode 100644 index 0000000..2acba49 --- /dev/null +++ b/examples/mlkit/.gitignore @@ -0,0 +1,58 @@ +# OSX +# +.DS_Store + +# Xcode +# +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate +project.xcworkspace + +# Android/IntelliJ +# +build/ +.idea +.gradle +local.properties +*.iml + +# node.js +# +node_modules/ +npm-debug.log +yarn-error.log + +# BUCK +buck-out/ +\.buckd/ +*.keystore + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the +# screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/ + +*/fastlane/report.xml +*/fastlane/Preview.html +*/fastlane/screenshots + +# Bundle artifact +*.jsbundle + +examples/mlkit/ios/Pods diff --git a/examples/mlkit/.watchmanconfig b/examples/mlkit/.watchmanconfig new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/examples/mlkit/.watchmanconfig @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/examples/mlkit/App.js b/examples/mlkit/App.js new file mode 100644 index 0000000..3968c05 --- /dev/null +++ b/examples/mlkit/App.js @@ -0,0 +1,487 @@ +/* eslint-disable no-console */ +import React from 'react'; +import { StyleSheet, Text, View, TouchableOpacity, Slider } from 'react-native'; +// eslint-disable-next-line import/no-unresolved +import { RNCamera } from 'react-native-camera'; + +const flashModeOrder = { + off: 'on', + on: 'auto', + auto: 'torch', + torch: 'off', +}; + +const wbOrder = { + auto: 'sunny', + sunny: 'cloudy', + cloudy: 'shadow', + shadow: 'fluorescent', + fluorescent: 'incandescent', + incandescent: 'auto', +}; + +const landmarkSize = 2; + +export default class CameraScreen extends React.Component { + state = { + flash: 'off', + zoom: 0, + autoFocus: 'on', + depth: 0, + type: 'back', + whiteBalance: 'auto', + ratio: '16:9', + recordOptions: { + mute: false, + maxDuration: 5, + quality: RNCamera.Constants.VideoQuality['288p'], + }, + isRecording: false, + canDetectFaces: false, + canDetectText: false, + canDetectBarcode: false, + faces: [], + textBlocks: [], + barcodes: [], + }; + + toggleFacing() { + this.setState({ + type: this.state.type === 'back' ? 'front' : 'back', + }); + } + + toggleFlash() { + this.setState({ + flash: flashModeOrder[this.state.flash], + }); + } + + toggleWB() { + this.setState({ + whiteBalance: wbOrder[this.state.whiteBalance], + }); + } + + toggleFocus() { + this.setState({ + autoFocus: this.state.autoFocus === 'on' ? 'off' : 'on', + }); + } + + zoomOut() { + this.setState({ + zoom: this.state.zoom - 0.1 < 0 ? 0 : this.state.zoom - 0.1, + }); + } + + zoomIn() { + this.setState({ + zoom: this.state.zoom + 0.1 > 1 ? 1 : this.state.zoom + 0.1, + }); + } + + setFocusDepth(depth) { + this.setState({ + depth, + }); + } + + takePicture = async function() { + if (this.camera) { + const data = await this.camera.takePictureAsync(); + console.warn('takePicture ', data); + } + }; + + takeVideo = async function() { + if (this.camera) { + try { + const promise = this.camera.recordAsync(this.state.recordOptions); + + if (promise) { + this.setState({ isRecording: true }); + const data = await promise; + this.setState({ isRecording: false }); + console.warn('takeVideo', data); + } + } catch (e) { + console.error(e); + } + } + }; + + toggle = value => () => this.setState(prevState => ({ [value]: !prevState[value] })); + + facesDetected = ({ faces }) => this.setState({ faces }); + + renderFace = ({ bounds, faceID, rollAngle, yawAngle }) => ( + + ID: {faceID} + rollAngle: {rollAngle.toFixed(0)} + yawAngle: {yawAngle.toFixed(0)} + + ); + + renderLandmarksOfFace(face) { + const renderLandmark = position => + position && ( + + ); + return ( + + {renderLandmark(face.leftEyePosition)} + {renderLandmark(face.rightEyePosition)} + {renderLandmark(face.leftEarPosition)} + {renderLandmark(face.rightEarPosition)} + {renderLandmark(face.leftCheekPosition)} + {renderLandmark(face.rightCheekPosition)} + {renderLandmark(face.leftMouthPosition)} + {renderLandmark(face.mouthPosition)} + {renderLandmark(face.rightMouthPosition)} + {renderLandmark(face.noseBasePosition)} + {renderLandmark(face.bottomMouthPosition)} + + ); + } + + renderFaces = () => ( + + {this.state.faces.map(this.renderFace)} + + ); + + renderLandmarks = () => ( + + {this.state.faces.map(this.renderLandmarksOfFace)} + + ); + + renderTextBlocks = () => ( + + {this.state.textBlocks.map(this.renderTextBlock)} + + ); + + renderTextBlock = ({ bounds, value }) => ( + + + {value} + + + + ); + + textRecognized = object => { + const { textBlocks } = object; + this.setState({ textBlocks }); + }; + + barcodeRecognized = ({ barcodes }) => this.setState({ barcodes }); + + renderBarcodes = () => ( + + {this.state.barcodes.map(this.renderBarcode)} + + ); + + renderBarcode = ({ bounds, data, type }) => ( + + + {`${data} ${type}`} + + + ); + + renderCamera() { + const { canDetectFaces, canDetectText, canDetectBarcode } = this.state; + return ( + { + this.camera = ref; + }} + style={{ + flex: 1, + }} + type={this.state.type} + flashMode={this.state.flash} + autoFocus={this.state.autoFocus} + zoom={this.state.zoom} + whiteBalance={this.state.whiteBalance} + ratio={this.state.ratio} + focusDepth={this.state.depth} + trackingEnabled + androidCameraPermissionOptions={{ + title: 'Permission to use camera', + message: 'We need your permission to use your camera', + buttonPositive: 'Ok', + buttonNegative: 'Cancel', + }} + faceDetectionLandmarks={ + RNCamera.Constants.FaceDetection.Landmarks + ? RNCamera.Constants.FaceDetection.Landmarks.all + : undefined + } + faceDetectionClassifications={ + RNCamera.Constants.FaceDetection.Classifications + ? RNCamera.Constants.FaceDetection.Classifications.all + : undefined + } + onFacesDetected={canDetectFaces ? this.facesDetected : null} + onTextRecognized={canDetectText ? this.textRecognized : null} + onGoogleVisionBarcodesDetected={canDetectBarcode ? this.barcodeRecognized : null} + googleVisionBarcodeType={RNCamera.Constants.GoogleVisionBarcodeDetection.BarcodeType.ALL} + > + + + + FLIP + + + FLASH: {this.state.flash} + + + WB: {this.state.whiteBalance} + + + + + + {!canDetectFaces ? 'Detect Faces' : 'Detecting Faces'} + + + + + {!canDetectText ? 'Detect Text' : 'Detecting Text'} + + + + + {!canDetectBarcode ? 'Detect Barcode' : 'Detecting Barcode'} + + + + + + + + + {} : this.takeVideo.bind(this)} + > + {this.state.isRecording ? ( + ☕ + ) : ( + REC + )} + + + {this.state.zoom !== 0 && ( + Zoom: {this.state.zoom} + )} + + + + + + + - + + + AF : {this.state.autoFocus} + + + SNAP + + + {!!canDetectFaces && this.renderFaces()} + {!!canDetectFaces && this.renderLandmarks()} + {!!canDetectText && this.renderTextBlocks()} + {!!canDetectBarcode && this.renderBarcodes()} + + ); + } + + render() { + return {this.renderCamera()}; + } +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + paddingTop: 10, + backgroundColor: '#000', + }, + flipButton: { + flex: 0.3, + height: 40, + marginHorizontal: 2, + marginBottom: 10, + marginTop: 10, + borderRadius: 8, + borderColor: 'white', + borderWidth: 1, + padding: 5, + alignItems: 'center', + justifyContent: 'center', + }, + flipText: { + color: 'white', + fontSize: 15, + }, + zoomText: { + position: 'absolute', + bottom: 70, + zIndex: 2, + left: 2, + }, + picButton: { + backgroundColor: 'darkseagreen', + }, + facesContainer: { + position: 'absolute', + bottom: 0, + right: 0, + left: 0, + top: 0, + }, + face: { + padding: 10, + borderWidth: 2, + borderRadius: 2, + position: 'absolute', + borderColor: '#FFD700', + justifyContent: 'center', + backgroundColor: 'rgba(0, 0, 0, 0.5)', + }, + landmark: { + width: landmarkSize, + height: landmarkSize, + position: 'absolute', + backgroundColor: 'red', + }, + faceText: { + color: '#FFD700', + fontWeight: 'bold', + textAlign: 'center', + margin: 10, + backgroundColor: 'transparent', + }, + text: { + padding: 10, + borderWidth: 2, + borderRadius: 2, + position: 'absolute', + borderColor: '#F00', + justifyContent: 'center', + }, + textBlock: { + color: '#F00', + position: 'absolute', + textAlign: 'center', + backgroundColor: 'transparent', + }, +}); diff --git a/examples/mlkit/README.md b/examples/mlkit/README.md new file mode 100644 index 0000000..47f4175 --- /dev/null +++ b/examples/mlkit/README.md @@ -0,0 +1,32 @@ +# React Native Camera MLKit Example + +An example project demonstrating the use of MLKit-based Text and Face Recognition features of react-native-camera. + +### Features + +Features of Basic Example + Face and Text Recognition. + +Face Recognition: draws polygons around faces and red circles on top of face landmarks (ears, mouth, nose, etc.). + +Text Recognition: draws polygons around text blocks and recognized within them. + +### Setup + +1. Run `yarn install`. + +2. Create Firebase project, generate `google-services.json` and place it into `./android/app` folder, generate `GoogleService-Info.plist` and place it into `./ios/mlkit` folder. + +3. Build project (you will likely need to manage signing if you are building for ios device) + +### Contributing + +- Pull Requests are welcome, if you open a pull request we will do our best to get to it in a timely manner +- Pull Request Reviews and even more welcome! we need help testing, reviewing, and updating open PRs +- If you are interested in contributing more actively, please contact me (same username on Twitter, Facebook, etc.) Thanks! +- If you want to help us coding, join Expo slack https://slack.expo.io/, so we can chat over there. (#react-native-camera) + +### FAQ + +## Why is `react-native-camera` not listed as a dependency in `package.json`? + +`react-native` uses `metro` for dependency resolution. In order to not recursively install this example into the `node_modules` of this example we use `rn-cli.config.js` to resolve `react-native-camera`. This also allows a quicker iteration when developing (without having to `yarn install` after every single change in `react-native-camera`). diff --git a/examples/mlkit/__tests__/App.js b/examples/mlkit/__tests__/App.js new file mode 100644 index 0000000..a79ec3d --- /dev/null +++ b/examples/mlkit/__tests__/App.js @@ -0,0 +1,15 @@ +/** + * @format + * @lint-ignore-every XPLATJSCOPYRIGHT1 + */ + +import 'react-native'; +import React from 'react'; +import App from '../App'; + +// Note: test renderer must be required after react-native. +import renderer from 'react-test-renderer'; + +it('renders correctly', () => { + renderer.create(); +}); diff --git a/examples/mlkit/android/app/BUCK b/examples/mlkit/android/app/BUCK new file mode 100644 index 0000000..b00a6c1 --- /dev/null +++ b/examples/mlkit/android/app/BUCK @@ -0,0 +1,55 @@ +# To learn about Buck see [Docs](https://buckbuild.com/). +# To run your application with Buck: +# - install Buck +# - `npm start` - to start the packager +# - `cd android` +# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"` +# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck +# - `buck install -r android/app` - compile, install and run application +# + +load(":build_defs.bzl", "create_aar_targets", "create_jar_targets") + +lib_deps = [] + +create_aar_targets(glob(["libs/*.aar"])) + +create_jar_targets(glob(["libs/*.jar"])) + +android_library( + name = "all-libs", + exported_deps = lib_deps, +) + +android_library( + name = "app-code", + srcs = glob([ + "src/main/java/**/*.java", + ]), + deps = [ + ":all-libs", + ":build_config", + ":res", + ], +) + +android_build_config( + name = "build_config", + package = "com.mlkit", +) + +android_resource( + name = "res", + package = "com.mlkit", + res = "src/main/res", +) + +android_binary( + name = "app", + keystore = "//android/keystores:debug", + manifest = "src/main/AndroidManifest.xml", + package_type = "debug", + deps = [ + ":app-code", + ], +) diff --git a/examples/mlkit/android/app/build.gradle b/examples/mlkit/android/app/build.gradle new file mode 100644 index 0000000..8debf33 --- /dev/null +++ b/examples/mlkit/android/app/build.gradle @@ -0,0 +1,155 @@ +apply plugin: "com.android.application" + +import com.android.build.OutputFile + +/** + * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets + * and bundleReleaseJsAndAssets). + * These basically call `react-native bundle` with the correct arguments during the Android build + * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the + * bundle directly from the development server. Below you can see all the possible configurations + * and their defaults. If you decide to add a configuration block, make sure to add it before the + * `apply from: "../../node_modules/react-native/react.gradle"` line. + * + * project.ext.react = [ + * // the name of the generated asset file containing your JS bundle + * bundleAssetName: "index.android.bundle", + * + * // the entry file for bundle generation + * entryFile: "index.android.js", + * + * // whether to bundle JS and assets in debug mode + * bundleInDebug: false, + * + * // whether to bundle JS and assets in release mode + * bundleInRelease: true, + * + * // whether to bundle JS and assets in another build variant (if configured). + * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants + * // The configuration property can be in the following formats + * // 'bundleIn${productFlavor}${buildType}' + * // 'bundleIn${buildType}' + * // bundleInFreeDebug: true, + * // bundleInPaidRelease: true, + * // bundleInBeta: true, + * + * // whether to disable dev mode in custom build variants (by default only disabled in release) + * // for example: to disable dev mode in the staging build type (if configured) + * devDisabledInStaging: true, + * // The configuration property can be in the following formats + * // 'devDisabledIn${productFlavor}${buildType}' + * // 'devDisabledIn${buildType}' + * + * // the root of your project, i.e. where "package.json" lives + * root: "../../", + * + * // where to put the JS bundle asset in debug mode + * jsBundleDirDebug: "$buildDir/intermediates/assets/debug", + * + * // where to put the JS bundle asset in release mode + * jsBundleDirRelease: "$buildDir/intermediates/assets/release", + * + * // where to put drawable resources / React Native assets, e.g. the ones you use via + * // require('./image.png')), in debug mode + * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug", + * + * // where to put drawable resources / React Native assets, e.g. the ones you use via + * // require('./image.png')), in release mode + * resourcesDirRelease: "$buildDir/intermediates/res/merged/release", + * + * // by default the gradle tasks are skipped if none of the JS files or assets change; this means + * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to + * // date; if you have any other folders that you want to ignore for performance reasons (gradle + * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/ + * // for example, you might want to remove it from here. + * inputExcludes: ["android/**", "ios/**"], + * + * // override which node gets called and with what additional arguments + * nodeExecutableAndArgs: ["node"], + * + * // supply additional arguments to the packager + * extraPackagerArgs: [] + * ] + */ + +project.ext.react = [ + entryFile: "index.js" +] + +apply from: "../../node_modules/react-native/react.gradle" + +/** + * Set this to true to create two separate APKs instead of one: + * - An APK that only works on ARM devices + * - An APK that only works on x86 devices + * The advantage is the size of the APK is reduced by about 4MB. + * Upload all the APKs to the Play Store and people will download + * the correct one based on the CPU architecture of their device. + */ +def enableSeparateBuildPerCPUArchitecture = false + +/** + * Run Proguard to shrink the Java bytecode in release builds. + */ +def enableProguardInReleaseBuilds = false + +android { + compileSdkVersion rootProject.ext.compileSdkVersion + buildToolsVersion rootProject.ext.buildToolsVersion + + defaultConfig { + applicationId "com.mlkit" + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + missingDimensionStrategy 'react-native-camera', 'mlkit' + versionCode 1 + versionName "1.0" + } + splits { + abi { + reset() + enable enableSeparateBuildPerCPUArchitecture + universalApk false // If true, also generate a universal APK + include "armeabi-v7a", "x86", "arm64-v8a", "x86_64" + } + } + buildTypes { + release { + minifyEnabled enableProguardInReleaseBuilds + proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" + } + } + packagingOptions { + exclude 'META-INF/proguard/androidx-annotations.pro' + exclude 'META-INF/androidx.exifinterface_exifinterface.version' + } + // applicationVariants are e.g. debug, release + applicationVariants.all { variant -> + variant.outputs.each { output -> + // For each separate APK per architecture, set a unique version code as described here: + // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits + def versionCodes = ["armeabi-v7a":1, "x86":2, "arm64-v8a": 3, "x86_64": 4] + def abi = output.getFilter(OutputFile.ABI) + if (abi != null) { // null for the universal-debug, universal-release variants + output.versionCodeOverride = + versionCodes.get(abi) * 1048576 + defaultConfig.versionCode + } + } + } +} + +dependencies { + implementation project(':react-native-camera') + implementation fileTree(dir: "libs", include: ["*.jar"]) + implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}" + implementation "com.facebook.react:react-native:+" // From node_modules +} + +// Run this once to be able to run the application with BUCK +// puts all compile dependencies into folder libs for BUCK to use +task copyDownloadableDepsToLibs(type: Copy) { + from configurations.compile + into 'libs' +} + +apply plugin: 'com.google.gms.google-services' diff --git a/examples/mlkit/android/app/build_defs.bzl b/examples/mlkit/android/app/build_defs.bzl new file mode 100644 index 0000000..fff270f --- /dev/null +++ b/examples/mlkit/android/app/build_defs.bzl @@ -0,0 +1,19 @@ +"""Helper definitions to glob .aar and .jar targets""" + +def create_aar_targets(aarfiles): + for aarfile in aarfiles: + name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")] + lib_deps.append(":" + name) + android_prebuilt_aar( + name = name, + aar = aarfile, + ) + +def create_jar_targets(jarfiles): + for jarfile in jarfiles: + name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")] + lib_deps.append(":" + name) + prebuilt_jar( + name = name, + binary_jar = jarfile, + ) diff --git a/examples/mlkit/android/app/proguard-rules.pro b/examples/mlkit/android/app/proguard-rules.pro new file mode 100644 index 0000000..a92fa17 --- /dev/null +++ b/examples/mlkit/android/app/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/examples/mlkit/android/app/src/main/AndroidManifest.xml b/examples/mlkit/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..6b5bc8f --- /dev/null +++ b/examples/mlkit/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/examples/mlkit/android/app/src/main/java/com/mlkit/MainActivity.java b/examples/mlkit/android/app/src/main/java/com/mlkit/MainActivity.java new file mode 100644 index 0000000..7e5173c --- /dev/null +++ b/examples/mlkit/android/app/src/main/java/com/mlkit/MainActivity.java @@ -0,0 +1,15 @@ +package com.mlkit; + +import com.facebook.react.ReactActivity; + +public class MainActivity extends ReactActivity { + + /** + * Returns the name of the main component registered from JavaScript. + * This is used to schedule rendering of the component. + */ + @Override + protected String getMainComponentName() { + return "mlkit"; + } +} diff --git a/examples/mlkit/android/app/src/main/java/com/mlkit/MainApplication.java b/examples/mlkit/android/app/src/main/java/com/mlkit/MainApplication.java new file mode 100644 index 0000000..8268c31 --- /dev/null +++ b/examples/mlkit/android/app/src/main/java/com/mlkit/MainApplication.java @@ -0,0 +1,48 @@ +package com.mlkit; + +import android.app.Application; + +import org.reactnative.camera.RNCameraPackage; + +import com.facebook.react.ReactApplication; +import com.facebook.react.ReactNativeHost; +import com.facebook.react.ReactPackage; +import com.facebook.react.shell.MainReactPackage; +import com.facebook.soloader.SoLoader; + +import java.util.Arrays; +import java.util.List; + +public class MainApplication extends Application implements ReactApplication { + + private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { + @Override + public boolean getUseDeveloperSupport() { + return BuildConfig.DEBUG; + } + + @Override + protected List getPackages() { + return Arrays.asList( + new MainReactPackage(), + new RNCameraPackage() + ); + } + + @Override + protected String getJSMainModuleName() { + return "index"; + } + }; + + @Override + public ReactNativeHost getReactNativeHost() { + return mReactNativeHost; + } + + @Override + public void onCreate() { + super.onCreate(); + SoLoader.init(this, /* native exopackage */ false); + } +} diff --git a/examples/mlkit/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/examples/mlkit/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..a2f5908281d070150700378b64a84c7db1f97aa1 GIT binary patch literal 3056 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 axPAxe%7rDusX+w*00006jj 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⁣ zwiG+x#%j}{0gU~J8;<|!B1@-XaB@{KORFwrYg_8rOv({b0EO#DbeQRm;B6_9=mXGf z-x|VL{zd`)#@yN}HkCSJbjbNlE|zL3Wm9Q8HY`sV)}3%pgN>cL^67{Z;PPL(*wT8N zUjXU{@|*hvm}({wsAC=x0^ok0%UAz0;sogW{B!nDqk|JJ5x~4NfTDgP49^zeu`csl?5mY@JdQdISc zFs!E{^grmkLnUk9 zny~m)1vws@5BFI<-0Tuo2JWX(0v`W|t(wg;s--L47WTvTMz-8l#TL^=OJNRS2?_Qj z3AKT+gvbyBi#H*-tJ%tWD|>EV3wy|8qxfzS!5RW;Jpl5*zo&^UBU=fG#2}UvRyNkK zA06Dy9;K1ca@r2T>yThYgI!ont$(G{6q#2QT+00r_x0(b)gsE`lBB?2gr55gq^D3Fi&p%E(p9>U%bv zkg1Jco(RbyTX7FDHOnl7-O@ zI$AaIl?9NJKPm(WiBP`1-#CB1QzU>&hKm)fpa5DKE{2$X0hGz-0uZ?cyTk(YC!Y&| zL=1VrNERSA5NA2jq7FACfX4JfPyj5XXl1yv0>~s;eF7L2$>&oMqeTFT2m$y7FlkON z_yurD1yIOvA;5C6016pyxBznGUt0kJ&k5r#;&>Jow`r)sp9R~PmK~lz$3xH%LT*1U zJdOyABZ3!FvNoR*vN$5ykHS8f`jA4zV+|L}i1C4`B2c{R0;UdYxaU|H)2avz@ z=mEYc|2S<+(B2Tj+FkX+2D+yFI!k9lWMA61DJ{)e;lum$(;O87?vGJJe!KtK04+N_ zI*P~t@dUb>9Xh{dbyl{-ZQ(UMgz7$|QfL5XSPkskt^NgctYC#;4WcZB1@%@wy@2t3 z2z0DI7&%b$*Aw~abe?GxE`ez@+6hOh-6*8fHRV{1os$EL@}uUZeG4h1&Be`98q*7j z=3-v+lhIjfWVo12!<>%V^a6lTgW3+_#W6n|p*~==zOH7z$0{LSZk(Tpd7EaD04hnA zL;#fxS0aD{`5^&D`}>0Uq?byDD-l2=!wm_bLcUl4gc(% za1p|itVANvFF>hghAS07Im1;IK;|b*W)}VDyI;BIp2=K*yu2a)j?B|f<44NI$NbmJ z#dE0>jI$fMr&@>4kN8MLFb4&2O9fEKaQg%(QO$4_1rVQywG^CmBLh#}_7gKW3vd?| z2?1^&KWq8}8I^_S0|)MowU_pw$q@nl@Nkn$z>BQq_KA^9yaR`(R3u{{Ig;cwt z@AJ^{ODQCm^neroM9nKNUAXi9RCK`OsP_LuR0PUR(YZCCX5dNF6VzcoK&=b^r`W?ltt|*F zpkoae%ZT{C1h~EcFui~b7fF`vb<<~j_VquuUA$}QqIKYELPp#;{u?q8Dz}WAG-(3; zjrm$i%7UbyZMM(Y{>!uJ#vNB?R~B{6Htp=>e*<{fQQ5W7V(1coCWlOON!MzZxhum| ztZBQpGR z;~#ur^&PockKdV{Q6R>o`Pl{0x!DEbpZ7y9Y;*ZvE!*gU`V1W3znva{f=?WO5I&>B z&hw6}tjECtaghm5z|C#%M;Yf_*pI^};h}Vl=^r9EN=tVDj86D;C$jIJ?K7VP+00000NkvXXu0mjf D5i!M* literal 0 HcmV?d00001 diff --git a/examples/mlkit/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/examples/mlkit/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..459ca609d3ae0d3943ab44cdc27feef9256dc6d7 GIT binary patch literal 7098 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 literal 0 HcmV?d00001 diff --git a/examples/mlkit/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/examples/mlkit/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..8ca12fe024be86e868d14e91120a6902f8e88ac6 GIT binary patch literal 6464 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 B0*L?s literal 0 HcmV?d00001 diff --git a/examples/mlkit/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/examples/mlkit/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..8e19b410a1b15ff180f3dacac19395fe3046cdec GIT binary patch literal 10676 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 literal 0 HcmV?d00001 diff --git a/examples/mlkit/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/examples/mlkit/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..4c19a13c239cb67b8a2134ddd5f325db1d2d5bee GIT binary patch literal 15523 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 BIP(Ai literal 0 HcmV?d00001 diff --git a/examples/mlkit/android/app/src/main/res/values/strings.xml b/examples/mlkit/android/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..d0f81e3 --- /dev/null +++ b/examples/mlkit/android/app/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + mlkit + diff --git a/examples/mlkit/android/app/src/main/res/values/styles.xml b/examples/mlkit/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..319eb0c --- /dev/null +++ b/examples/mlkit/android/app/src/main/res/values/styles.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/examples/mlkit/android/build.gradle b/examples/mlkit/android/build.gradle new file mode 100644 index 0000000..b2bee9f --- /dev/null +++ b/examples/mlkit/android/build.gradle @@ -0,0 +1,34 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + ext { + buildToolsVersion = "28.0.3" + minSdkVersion = 16 + compileSdkVersion = 28 + targetSdkVersion = 28 + supportLibVersion = "28.0.0" + } + repositories { + google() + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:3.3.1' + classpath 'com.google.gms:google-services:4.0.1' + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + repositories { + mavenLocal() + google() + jcenter() + maven { + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm + url "$rootDir/../node_modules/react-native/android" + } + } +} diff --git a/examples/mlkit/android/gradle.properties b/examples/mlkit/android/gradle.properties new file mode 100644 index 0000000..30d0bbe --- /dev/null +++ b/examples/mlkit/android/gradle.properties @@ -0,0 +1,21 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +# Default value: -Xmx10248m -XX:MaxPermSize=256m +org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=1g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true + +android.useAndroidX=true +android.enableJetifier=true diff --git a/examples/mlkit/android/gradle/wrapper/gradle-wrapper.jar b/examples/mlkit/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..01b8bf6b1f99cad9213fc495b33ad5bbab8efd20 GIT binary patch literal 54329 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

      <5G2M1WZP5 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

    2. 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 d0mF$}y%w#e%S%4&DB_Sjvfj}TEh9$DdGDJXj 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 x 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 bpfWe-C4}#dx5ExB2;Y0;ecy4f-~Yb=ElGcm literal 0 HcmV?d00001 diff --git a/examples/advanced/advanced/android/app/src/main/assets/fonts/FontAwesome5_Solid.ttf b/examples/advanced/advanced/android/app/src/main/assets/fonts/FontAwesome5_Solid.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7ece3282a4f7824b249d9e568819d98bd2fa3da6 GIT binary patch literal 186228 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